Blogs

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.

Team Mindfreak Wenesday Update

So, ya we're doing allright so far.. Still figurin' out what we gonna do next and... probably some UML diagrams.. And I just stupidly realize that this is not a coding competition and.. stupidly ask myself why I joined this competition.. LOL.. Well, good luck for all of us then!

Note: I hate UML.. Perhaps all of you think so.. LOL

Status Report

Team Outbreak is doing alright...

We are currently focusing on the database design, since the entire system revolves around. For this, we have most of our tables and relationships laid out. Once we generate some documentation for that... we will move on to architecture and finally design.

Problems
1. Who is our mentor?
2. Where and what time on Saturday is stuff happening?

The answer is 42...

Dont Panic

This post outlines the progress my group ':(){ :|:& };:' (dangerous smileys, don't try them at home ;) has made in developing a design for the system.

Progress

  1. We have made some progress in coming up with a high level system design. We had quite a busy week, and were swamped with work. We have scheduled work for this project to commence on Thursday.
  2. We have a basic block diagram of main components in the system. A high level view is as follows

Click here to see the block diagram

Description of the blocks:

  1. Message Receiver: This block handles receipt of messages from different sources, say SMS, email, voice (if need be...), etc. The message received is logged (for tracing), as sent to the Action Generator.
  2. Web Service: This module handles handles web-based requests. These requests may be from the web-site, or third party sources, like industry-partners.
  3. Action Generator: Given a message, the action generator tries to impose certain grammar on this message. This block will also weed out faulty and erroneous requests based on syntax. This block deals with the syntax, and not semantics of the messages. The output of this block will be a string/structure that is of well known grammar.
  4. Business Logic: Given a sentence of particular grammar, it checks if all the constraints are satisfied. These constraints are imposed by the creator of the sweepstakes, prizes, and govern which user can participate in what events, and so on. The business logic will either log the outcome of the command/sentence it received, or make changes to other blocks, such as sweepstakes, users, etc and will generate notifications. These notifications will be sent out to the user, and is generally a response to the request sent by the user.
  5. Notification Engine: Given a command (a sentence of particular grammar), it will generate notifications. This will map certain actions to messages that are sent to the user. We would like to keep the messages the user will see separate from the business logic, and this module maps the action to a message the user sees. This message will be dispatched to the user via the Message Sender, or Web Response module. The notification engine might also pull ads from the ad manager
  6. Message Sender: Send the message via sms/carrier pigeons/dont care. Handles the sending abstraction. This module will decide how the user sees the ads (it may ignore the ads as well)
  7. Web Response: This is a response to a web-based request. Again, this module as well as the client will decide how to render the message and ads. This is just a data source, and has no presentation data.
  8. Ads Module : Ads Generator and Ads Database – The Ad generator will generate suitable context-specific ads. The ads will be populated from the ad database. The Ad generator is in charge of the life cycle of each ad, how frequently must it appear, and so on.
  9. User Manger: Manages each user object. Constraints that deal with users and their participation are here.
  10. Sweepstakes manager: Manages running sweepstakes. On the completion of a sweepstakes, this module will insert a message to notify the winners. This message will follow the normal flow (action generator – business logic – notification engine, etc) as described above. The sweepstakes manager will also map the users and the prizes. The constraint of users being allowed to participate in certain sweepstakes is checked when the user tries to enter the sweepstakes, and hence no constraint checking needs to be done. There will not be any error generated during this step.
  11. Logger: Self explanatory. Log the incoming and outgoing messages. Log the change in state of the internal system as well.
  12. Dashboard: One manager to govern them all... The ultimate tool to make changes to the sweepstakes, prizes, etc via the back-door....

Note that the Message Receiver and the Message sender will have logic that will handle splitting of text across multiple sms's and reading the same message from multiple incoming sms's

Challenges faced:

  1. Finding who the mentor is, and getting the email id :)
  2. Security of the system. All details about syntax of a message is present in the Action generator. The semantics are handled by the business logic. There is no way of detecting a message that is syntactically correct, but semantically incorrect, before it passes through the business logic.
  3. Really missing the wiki style of formatting. Putting li ol blah blah is quite painful

return 1;

STATUS

I have been so busy w/CSCI 1901 that I have only laid out the project & its parameters , and have not yet begun to explore it in depth.
I spent $80 on several books yesterday;

LINUX for dummies
Long compelled/intimidated by this OS, I will now engage/explore it w/a comprehensive guide (:

JAVA for dummies
in-depth resource on j a v a

BEGINNING COMPUTER PROGRAMMING for dummies
overview of fundamentals and exploration of most common languages

CREATING WEBPAGES for dummies
covers everything at a good depth ; ranging from: servers - java - xml - security/encryption - html - webstores/credit card proccessing - online databasing

SIMPLICITY by John Maeda , CSCI faculty @ MIT
resource on computer science and aesthetics , relating primarily to GUI's tho extremely applicable/relevant to system-architecture and code.

KANJI FINDER - special resource dictionary for looking up japanese characters
(:

have been thinking about the concept of 'SWEEPSTAKES' , so funny ! omoshiroi !

I plan on spending thursday afternoon and friday afternoon/evening exploring this project and developing some form of presentation.
school work takes immediate precedence ovcors, so we will see what happens

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!!!!).