magice's blog

Conclusion of the Conpetition

It's over. As an old proverb goes, "fun time passes damned fast," the competition is over (I hope we still have some food left for my lunch tomorrow). Now, let's me recount how it is, from my stupid perspective.

The competition was really fun. If we take away the absence of Rohit (ironically, our team won at the very area of Rohit), everything for the team is near perfect. We have a fun time screaming on the database, and a hard time answering questions. Screaming is fun, and hard time is fun. Designing is also fun. Trying to market F# to a Microsoft guy is also fun (aka. stupid fun). Gosh, when I think about it, the very moment I threw F# out there, he should have given me the MS' special prize. Come on, I am like the only one who seemed to care about the existence of such language! He should feel honor that I did not rant about F# (I targeted ML instead, oh gosh).

Secondly, the organization can be done better. aka I should have done more. I got lazy to go home late, so I did not help out as much as I should, which makes me feel as guilty as hell now :(. However, as I said earlier, there should have be more stuffs going on as the event approaches, not less. Anyway, well, I did not help, so I have no rights to complains.

Thirdly, it is not a good idea to have 5 languages in one application, after all. Hm, I will have to review this point carefully. In my view, an application, except in the case where it can be written entirely in LISP/Scheme, where I can write sub-languages easily, should be written in multiple languages, just because, well, NO ONE WRITES AI IN JAVA FOR A DAMNED REASON. I am so pissed that the fact of 5 languages is not appreciated. It took me forever to jam that into the design. *sign*. It turns out as always: what I deliberately do fails, and what I do out of necessary wins. Laziness trumps.

Fourthly, I think the idea of mix high-level and low-level students next time would be TERRIFIC. Just imagine 2 competition on one day, one for design, and one for coding. The coding teams will have chance to look at how the designers solve the problem at high level, while they will realize parts of the solution. Gosh, HOW BEAUTIFUL THAT IS.

Fifthly, I want to send many many many etc. Okay, let me rewrite that. I want to send (many)^n where n > 100 thanks to Abby, Carl, Carl, Kris, Hannah, and other ACM fellow members for this event. It was so fun. Let's do it again next year!

Sixthly, I am pleased to see the next generation of ACM monkeys. Um, okay, they are not quite "monkey," but close enough. People who can do USACO is definitely monkeys. I mean, not monkey. Gosh, I don't know what I am saying any more T_T. Anyway, next generation of ACM members will be FUN. This warms my heart. Let's see what I can spoil them :P (how about this: go to class knowing everything, then try to make a hell out of your professor).

Lastly, many thanks to mentors and professors. Your help is greatly greatly appreciated. Hope to see you again, soon enough.

End of the competition. You can go to my personal blog to read more rants :D.

D-Day!

Here it is, people, the presentation day! It is a beautiful, but cloudy, end-of-winter day. The weather is great for outdoor activities, so if you are planning to give up, you are welcome to do so.

Otherwise, it's the SDC day! Are you excited? I freaking am.

My part, the overall architecture, is finished and sent in. I am pretty confident about it, although if I can finish it in 15 minutes is another story. I have heard from Stefan that the UI is also finished. The only problem left is Rohit and his database design. However, let's face it, he is a senior, the eldest among us. He should be fine ^_^.

I have had a great morning today, which is a good sign. I drove to campus with no problem (both times I drove to ICPC, the road was blocked and I got lost. Twice.), so this bodes really nicely. Let's see what we can do today!

Good luck to myself and everyone!

Major Milestone

*whew*

After a day of intensive writing (I almost wrote "Intensive Coding". Okay, I will stop whining), I have finally finished the first, and arguably the most important, part of the design: the architecture.

I have faithfully followed my principles, and came up with something from nowhere. Yes, some UML is used, but, you know, just to make the thing looks less crazy. Everything else IS crazy. I have even invented a small notation for my design :D (only to realize later that UMN can do something similar T_T).

The only part left for this is a readable PowerPoint. Seriously, the best way to waste productivity is through PowerPoint (and the likes), but, well, what can I do? I have 15 minutes, and I really need something to be the bone of my presentation. Thus, a PowerPoint. Sad, eh? I was thinking about hand drawing, but that would take more than 15 minutes (if I had like 30 minutes, I will).

I am looking forward tomorrow.

P/S: now that my team has taken up two new brilliant members, we will rock!

Reduction of team number

Hm, I have just check out the judging schedule. Apparently, the number of team has fallen from 6 down to 6. This is bad. 6 is a perfect number, while 5 is not. Granted, it is a popular prime, but it is still not as perfect as 6. *sign*. Actually, the most perfect number is, surprised!, 4. Why? We have 4 prizes, remember? If we have 4 teams, we can just share the prize :D.

Anyway, I feel a bit lonely that there are only 5 teams. I hoped we would have like 7 to 10 teams, then there will be real competition. This is not as fun :(. Frankly, ALL ICPC teams should be enrolled, and we can have a sub-ICPC contest, where the best algorithm(s) for the problem wins!

Myself, I am working on the interface. Frankly, the interface is THE most important part (I hate to say that, Gaurav, but you are damned right about that). Database is for storing data, no more no less. It should not be the center of the thing. About logic part, well, if you are talking about a complex task, where algorithms and how to solve the problem are important, then logic part is the center. However, the task is rather simple, so logic just loses its crown.

What's left is, of course, the interface. It should drive the whole thing. I decide to use UML for interface (how brilliant I am :D). Oh, just found out that DIA is a pretty good diagram editor for GNU/Linux (for GNOME, that is). Well, I don't use GNOME, because, as always, Enlightenment ROCKS.

Charting the Way

Okay, to conform with the requirement of the Competition, I will sketch here a very very very very bird view of my plan (for tomorrow and Friday).

Here are some assumptions:

- The chance that the design will be used is next to nil. Ehem, my bad. It is nil. Thus, no need to be super-realistic

- The main point of this competition is fun. Well, in my philosophy, the main point of life is fun, so this is no surprise to me. However, for the most part, I don't think the sponsor will ever actually use whatever presented. First, because the problem is super-trivial, as I said before. Thus, well, it takes them like a day or so to have a professional person (or group of people) to come up with something 10 times better than what I or anyone in this competition can come up with. Second, well, this is not MIT, but U of MN. Let's be realistic, eh?

- Fun = creativity. I would say that creativity is the most important point. We won't have time to explain a whole new cryto-techniques for the solution (if we do have something like that). Thus, to stand out, creativity is the only way. I would say that if the problem was, let's see, design a plan to defense against Bin Laden, then the quality counts. Here, it is easy, so the most creative and unique solution should stand out the most. Plus, standing out is fun :D.

So, here are some specified goals:

  • Break from tradition. This is the first and most deliberate goal. I will break out of the common way of doing things. Not necessary better (again, you can gather wizards to come up with something 10 times better than my plan in half a day), but more fun.
  • Application of theory. Since we don't have much chance to hear experts talking about our stuffs, this is the time to test out ideas. Among other self-imposed criteria, high theory will be emphasized in my solution. I will also seek to put into practice some of my own conjectures about how software can be constructed
  • Use cases/scenarios emphasizes. This should be the only specific part. After all, we all need our customers. It has been pointed out, again and again, that the best point to avoid bugs is not to give users chance to touch them. Simplicity will be emphasized. I am thinking of client-very-thin and no space for crackers.
  • High abstraction. Computer Scientists pride themselves for ability to play with abstraction, and I pride myself more as a computer scientist than as a software engineer. Thus, showing off is necessary.
  • Absence of code monkeys. I don't want to be one, and no programmers do. Thus, I am planning to leave plenty of choices to the programmers to make. This is also combined with the above point to have a very general and abstract solution. The solution, being general, will have good scalability, modular, etc.
  • Simple. I value simplicity highly. It is easier to implement, test, and maintain. It works well with others. Complexity is bad. Thus, the design should be as simple and clean as possible.
  • Practical. Granted, it will never be carried to practice. However, if it is, it should be doable. A grand theory is fine, except no one knows how to implement it. My solution should be doable, and doable in a short amount of time. This is a simple challenge, so the answer should be easy.
  • 45 minute presentable. Okay, I can go on days and days to boast about the solution, but I have only 45 minutes (15 for interface; 15 for database; 15 for general design). It's harsh, but it will be fun.
  • Non-competitive. I desire of no prize. Okay, I wish I do have some, but I am prepared myself to get none. As stated above, the main issue is to be criticized and commented on, not winning. Trying too hard only hurt my gentle soul and wastes my time (Okay, I am not that gentle, but I do value time).

Long list, eh? Actually, there is one more criterion: lame jokes. I don't why I keep saying it (again, another irrational habit), but, well, at least it makes me believe that I have a sense of humor (no, you don't have to believe). Anyway, upto now, there are a couple of issues:

- limit of abstraction/specific-level. I don't know where to stop :(
- database layout. Let me be frank: I have never looked at database seriously (except for being a big big table to contains stuffs). Let's hope my layout work
- silence. The site seems dead :(. There's only ONE blog except mine. This is bad. I hope the competition is not actually dead, just seems so.
- green. I mean, the T-shirt is green (top secret :D). My sister is a green-lover, so I have had enough greenness. More green? Please! Well, it's not that bad. I will steal some for my sister to wear :D

Hm, this is a long blog. Too long, I would say. Good night for now. More update tomorrow, when I receive replies from people whom I am asking for help.

Thinking on the problem

First look at the problem kind of disappoints me. It is, you know, kind of easy. Frankly, I believe that a capable coder can build something usable (even relatively reliable) in about 2 days of intensive coding, or even 2 days of code-and-Age-Of-Empire-II (why Empire II? Because ACM has just cleaned up the server room, and a copy of oh-so-old Empire II was in there! Gosh, it brings back so many sweet memories).

Thus, any person with some understandings of programming should be able to design something, let's see, functional (aka. run and sort of do what expected, not non-side-effect functional). Thus, I would say that the contest is no longer about fulfill the expectation (which is kind of trivial), but about exceeding it. And a good suit for demonstration (and, of course, a comprehensible demonstration).

Why am I writing those here? First, because I don't want to waste a couple of bytes on my HD to store those things; neither do I want to kill the trees to write them down (programmers take this kind of note should be executed for harming the environment). So, I want to waste some of the server's disk space to store this note here :D. Secondly, let's hope everyone else will do something similar, and have a healthy competition going on, with even some pre-scoring debates if possible.

Anyway, for myself, my own guideline for the design would include:

  • abstraction: how far away can I make logic code from dirty code? I would love to write logic code in, let's see, Ocaml or F# or, grasp, Scheme :D. Okay, granted, you don't need Scheme to write this. Elegance and power is for real challenge, eh?
  • reusability: I would assume that this is a part of a grander scheme (small s) of things, so I want to have a design that can be extend naturally to other parts
  • creativity: I hate UML for some reason that I myself don't know (as someone says, irrational hatred). Thus, I am considering employing some other scheme of presentation. Something powerful enough to express the whole procession (plus possible use cases) in one slide, but simple enough to be explained in 3 minutes (2 minutes for explaining the slide, and 10 minutes for lame jokes. I am preparing a huge list of lame jokes for the demonstration).
  • Size: Okay, it is easy to write 10K lines of code to do this. Let's figure out how to solve it in 500 lines of code. Granted, this isn't LISP, so 500-line is kind of impossible. But, as short as possible
  • Stupidity: It's everywhere, admittedly. Let's put some into the design, so that the judges will have things to ask about, and I have some chances to throw out even more lame jokes (Agreed, I have put too many of them in this blog already).

Long list. Let's see what I can get before midnight tonight. Hm, no homework, no test, nothing tomorrow, let's pull an all-night nethack. I mean, all-night design (and possibly nethack and/or Empire II. Hm, I think there must be a copy of Age of Mythology lying around in ACM room, can someone try to find that for me? I want to replay that game!!!!).