Month: July 2017

One-letter abbreviations for days of the week in Romance languages

Society

After some ramblings over the superior usage of R over Th to represent Thursday, I asked myself, how do other languages abbreviate it? Specifically, Romance languages?

In English, a Germanic language, when we use the one-letter system to denote days of the week, standard practice is to use the following:

  • M – Monday
  • T – Tuesday
  • W – Wednesday
  • R – Thursday
  • F – Friday
  • S – Saturday
  • U – Sunday

Days of the week follow a pattern among the various Romance languages. I’ll use Spanish and French as examples.

  • L – Lunes – Lundi
  • M – Martes – Mardi
  • ??? – Miércoles – Mercredi
  • J – Jueves – Jeudi
  • V – Viernes – Vendredi
  • S – Sabado – Samedi
  • D – Domingo – Dimanche

There is an ambiguity with the one-letter abbreviation of Wednesday in Romance language systems, because the words for Tuesday and Wednesday both start with the letter “M”. Since Tuesday comes first, it gets “M”. In order to maintain uniformity among the various Romance languages, I propose the following system for Romance language day of the week abbreviations, because of the lack of my knowledge in how it actually works in areas where Romance languages are used. (If this is actually how it is then I’ll be so happy for a good guess!)

  • L – Monday
  • M – Tuesday
  • C – Wednesday
  • J – Thursday
  • V – Friday
  • S – Saturday
  • D – Sunday

Hackathons: are they really worth it?

Programming

I’ve now been to several hackathons over the course of the past two years. Each time, I return home extremely tired after finishing work on a project that I never touch again. Sure, I stay up all night (or at least try to sleep), I enjoy the snacks and meals served and events and t-shirts. But I am constantly kept up trying to code, so I never get more than 6 hours of sleep, and it’s never a comfortable sleeping experience. Furthermore, I’m the kind of person that needs time to work on something to make it really great. The idea of rushing a product from an idea to a working prototype in 24 hours seems completely contrary to everything that I’ve been taught. (Except for CollegeBoard’s notion that a well-polished rhetorical analysis can be written in 40-50 minutes by millions of students worldwide, but I don’t agree with that time limit; it’s too constricting.)

For example, I just went to a hackathon where the winners started work on their project halfway through the hackathon, pulled an all-nighter, presented last, and won. I don’t know if they’ll pick up on their project ever again. I mean sure, it was a good idea, and props to them for winning, but let’s be honest, the repetitive nature of hackathons means that a new idea needs to be made every single hackathon, so the ideas will get shoddy and the motivation behind getting these ideas finished decreases significantly. Meanwhile, I’m milking a lame business that took a year or two to finally start making money. This business may not be as innovative as hackathon ideas, but I find it interesting, so I continue to provide a driving force behind it. Meanwhile, many hackathon projects are ditched immediately after the hackathon ends, even if they win. The result is that people attend many hackathons, ditching their projects after they’re haphazardly made in the course of one day’s time, and they never come to fruition after the hackathon. Furthermore, there are so many ideas that are unknowingly reimplemented many times by hackathon teams worldwide.

And this might sound lame, but I lose a lot of sleep by going to a hackathon. I really don’t like working myself to death. But, if you think about it, there is no real work done if I work myself to death. I have several ideas for apps that I would like to implement at a hackathon, but I think they have real potential. That’s why I don’t want to go to a hackathon, create it, and ditch it. If I believe in a project, I want to invest a lot of time into building it and maintaining it. Hackathons give little real reasons as to why maintaining this project should occur. Many teams go to hackathons just for the fun of it. I think it’s a complete waste of time if you aren’t going to work on it any further. Why build something and never touch it again for the fun of a hackathon? Why not actually do something meaningful with it? Honestly, how many people do you know who have went to a hackathon, came out with a brilliant idea that was implemented first at a hackathon, and then continued to work on it afterwards? Not very many, and the winners of hackathons might not even go through with continuing to develop their product. Yet hackathons are supposed to be where radical new ideas are formed and incubated. I don’t think it’s doing its job very well.

In the future, if I want to do something meaningful, if I want to create something that has real potential to change the world, I will develop it from the comfort of my home. I don’t need to go to some fancy hackathon and develop it there with the aid of Red Bull. Instead, I’ll take it nice and easy, take as much time as I need to learn and develop it (SLEEP when I need to!!), polish it, and dedicate time to maintaining it. That is the only way to ensure this idea comes to fruition and can become a success. To be honest, hackathons are a good way to get a lot of work to be done in a short amount of time, but that’s about it; they are not good for new ideas because they take time to develop into something meaningful. I wish there were a hackathon that was solely for the purpose to encourage a large amount of work to be done on an existing viable project.

What I’ve learned from SwiftScore 2017

ProgrammingSchoolSociety

Although I did not take any AP exams this year (because I am taking college classes instead), the previous two years of AP score release were nerve-wracking and I could empathize with those who could not bear to wait a second further without spasming and relapsing into full-blown bleach chugging.

Okay, I’m kidding about the bleach. But the nervousness/anxiety is certainly relatable and I just couldn’t stand others being left in the dark due to their physical location.

So here is what I did. I used EarlyScores’ source code (written in PHP) and starting a “mirror” with a different name. This helps to reduce traffic on other score checkers (which is good, considering they get so overloaded), allowing everyone to check their scores as efficiently as possible.

On the days preceding AP Score Release 2017, I spinned up a 512MB DigitalOcean droplet and used a $15 credit I found online to reduce the costs down to nothing. The cost was only $0.007/hr, so I ended up spending less than $1.50 for a server than ran for like a week or less. I figured this would be fine. Then, I posted the details on Twitter and asked people to share. Retweets did occur before the day of score release, but there were especially a lot on score release day. A good chunk of traffic came from Twitter, followed by Reddit (advertising on r/APStudents). Direct sources were word-of-mouth spreading, which was surprisingly popular. I talked with someone from China, who said they were referred by their WeChat group.

All was ready.

On the morning of, I woke up at 6am CDT (all times from here on out will be in Central Daylight Time) to see if CollegeBoard had released the scores early. Nope. I was getting worried that they had blacklisted our IP addresses. Thankfully, that was not the case. Even though I had no news to expect, I was hoping for the best. Hopefully this would work.

Around 8am, the floodgates were opened by CollegeBoard and score checking began.

Our website immediately began timing out. For an hour, I was frantically scrambling around, trying to get it to work. The website kept timing out. I thought perhaps the code got screwed up somehow? No, that wasn’t the issue.

 

Around 9am (too late unfortunately), I deployed a secondary server and that helped get people flowing. Next time, I will be sure to deploy several servers, or better yet, use a Node.js-based solution instead to handle traffic much better and so we can have a message queue system instead of a everybody-try-at-once-and-everyone-fail-at-once system.

At 11am, I deleted the secondary server and reverted back to the first server.

Believe it or not, traffic actually peaked around 11am that day; the server had began to operate very smoothly beginning around 9:30am. This means that the primary issue with scalability does not lie in people accessing SwiftScore, but rather SwiftScore accessing CollegeBoard’s AP score checking website. Since the same server handling people’s requests also handled the score checking, this didn’t go too well in the beginning. However, as overall CollegeBoard AP score demands slowed down, SwiftScore began to function better. Hence, Node.js would’ve been better. Note that there is not much we can do about the CollegeBoard website crashing; at the end of the day, score retrieval uses a scraper and there’s simply no more efficient way to gather data.


A major issue with EarlyScores’ underlying scraping mechanism is that it doesn’t support “Can’t find your AP scores” issues, “Fill out your AP Profile” prompts, and “Accept the CollegeBoard Terms and Conditions” dialogs, the latter being the most common reason someone emailed me asking for manual score checking. I ended up implementing a T&C acceptance dialog in SwiftScore’s codebase and committed the code to EarlyScores’ codebase out of courtesy and gratitude.

Oh yes, and nobody cared about SwiftScore until actual score checking day. But this image below might change your mind.
Ah yes, that’s money. Holy crap, this earned a bunch of profits. I innocently ran an AdSense ad on the website, hoping for it to earn a few bucks. I didn’t imagine it’d actually generate this much money. And I didn’t spend a cent on server costs. And yes, I used the cheapest possible DigitalOcean droplet there is.

This has taught me an important lesson: monetizing the first hour requires a much more complex system (cough cough Node.js and message queuing), but after that, such a small-scale system is actually enough to process 50,000 requests spread out over a few days.

Out of gratitude for the amount of support shown to me by people from my former high school, I am pledging most of this AdSense payout to worthy causes in my former high school (except for the Living Roof Project—I’m sorry but this would only be a drop in a bucket), so if you’re from Boyd (GO BRONCOS!!!) and you have a good reason to use $50, and $50 would be significant, I’m donating this money to you. The rest is reserved for future SwiftScore costs of operation, including possible ad-free servers.

And a thank you to EarlyScores.com and my friends who have supported my efforts. I hope to help again next year!

 

SwiftScore 2017

SchoolSociety

Every year, around the beginning of July, CollegeBoard releases millions of students’ AP scores. Since there are so many scores to process, they have no choice but to segment the country into pieces and allow certain parts of the country to check scores before others. On odd-numbered years, it starts in the Northeast and ends in the Pacific states. On even-numbered years, this pattern is reversed. However, this becomes a huge annoyance and burden for those who want to check their scores as soon as possible.

During freshman year, I used a VPN. In sophomore year, I had a server hosted in California, so I just established an SSH tunnel to there and I could see my scores. Last year, I found EarlyScores.com, which was a service that allowed users to check their scores early. Since it was open source, I quickly set up another version on my California server and voilà, it worked as well. This was a great way to allow others who didn’t want to divulge their AP password but wanted to know their AP scores quickly.

However, these services can become quite inundated very quickly, preventing effective usage of them. That’s why this year, I’ve set up SwiftScore, which is free to use. Basically, I use a cloud hosting service that charges by the hour, so I only needed to set this up a couple of days in advance and I’ll cancel it immediately after everybody can start seeing their 2017 AP scores. This allows costs to be very low; so low that I’ll absorb them and provide these services for free. So far, I’ve set up one SwiftScore instance; I cannot publicly divulge its hosting information at this time.

SwiftScore is ready to be expanded and should be very versatile to replicate if needed. If demand necessitates more servers, I will create them on the fly and they will be available when needed. In fact, we will also have manual score-checking services that check scores upon release (like literally at 7am) and send them to users, all for free. VIPs will also be able to access a special, congestion-free server if needed. In case CollegeBoard blacklists our server’s IP addresses (since this service uses a web scraper to retrieve scores), we will either make new servers or switch providers to avoid any IP range blacklisting. The entire SwiftScore system is designed to be resilient, secure, and reliable.