Tuesday, July 29, 2008
A bit of improvement
Also there is a firewall/proxy which means no IM sites or IM protocols are allowed. This does kind of suck, but it is better than nothing. And this is only till December ( or so I hope ). Cheers, I'll update this tomorrow.
PS. No CD drives on any computer, how do I install Arch? Probably go home and do it
Monday, July 28, 2008
Still no computer
Other than that its been pretty good, playing football and table tennis. But a bit tiring too. Its been raining a lot today, which means there isn't much to do. We had the first couple of lectures today, but nothing new was taught.
This is boring, but the situation is likely to improve in a few days.
Friday, July 25, 2008
In DA-IICT
Well, I'm here, or I've been here for 5 days now. Since we haven't got ID cards yet, there is no computer access, so I'm writing this from a cyber cafe. The last few days have been a bit boring. With no studies, playing and reading seem to be the only things you can do in 24 HOURS!.
I haven't written any code in days, but I have managed to read Hutton's Haskell book, which is really good. This place's library is awesome for all the computer science/programming related books they have, now I just hope I'll have linux access in the labs. For atleast four more months personal computers are not allowed in the rooms. So it might be next year (read Jan 2009) before I actually have my own computer again. Till then I'll just hang on to the external harddisk.
Thursday, July 17, 2008
Graffiti: disaster
git rm graffiti -rf
BOOM! Graffiti is gone.
Except for the basic style parser which I was writing at that time, which was saved by Kate.
I'm not blaming Git, just my stupidity.
I usually don't version control as soon as I begin a project, since I like to get the structure right, without having really bad log comments. From next time, versioning first.
In retrospect this is a really bad week. Experience isn't the most fun teacher.
Programming: The invisible wall
The first few years of programming are spent coding projects pretty minor on the algorithms/data structures side.
But when you finally start growing out of it and when 'cool' projects for you start to become more complex, a seemingly invisible wall smacks you. The wall seperates amatuer and scientist. And unless you are/I am prepared to study, that wall isn't gonna give way.
Crossing the wall is going to require some serious studying, where I actually try to solve the exercises at the back of Algorithms rather than just read the book. At college I'll probably be able to get my hands on a hard copy.
And once this wall is broken, there will be more walls to break.
A failure in the codejam or how I blew up my brain
Then I tried hacking away at the other 2 problems for a total of 1.75 hours. Again failed.
Result: A total brain burnout
Feeling: Really down for my not so leet algorithmic skills.
Lesson learned: I seriously need 4 years of formal computer science education.
Monday, July 14, 2008
Graffiti and more
Maybe later ( read quite a few months ) I'll write a nice SAC compliant CSS parser and hook it into Graffiti.
Whatever I want to do, things aren't going to be moving fast. On Sunday I'm leaving for university ( DA-IICT ) and that involves a lot of pre-leaving things to do. And the week after that will go in getting settled there and taking a look at the computing facilities. I'll probably be taking a external HDD with all my files and I might just do a blind copy of this hard disk itself so I can boot Arch their if it is allowed.
Saturday, July 12, 2008
Thursday, July 10, 2008
Always Turn Left
SPOILER WARNING: DISCUSSION ON THE SOLUTION BELOW
This problem initially seemed vexing. After a little bit of thought about using bit twiddling to represent directions, generating the right codes was easy.
If you have any experience with hexadecimal numbers, it should strike you that the direction table with 4 directions each of which can be yes or no, is a big hint that bit twiddles are exactly what is needed. Which means powers of two
N, S, W, E = 1, 2, 4, 8
Now I'm not going to show how you combine them, but here is how you get the code directly in Python ( somewhat similar in C ):
def code(dirs):
return '%x'%dirs
After this I scribbled a lot on paper, mapping the small input to the maze. It was easy to figure out that the problem could easily be solved by going both ways because always turn left means that you will visit every part of the maze if you go both ways. I wasted a lot of time thinking how to orient the grid, until I read the specification that the entrace is always at the north.
But there was another problem, how to generate a perfect size grid for a dynamic problem like that. I didn't want a 10000*10000 grid all the time, that would be very inelegant. First I tried using links for each Cell, but the problem is resolving W-E or N-S relationships would involve backtracking to find the adjacent Cell. This flummoxed me for a LONG time. Then I read João's idea [perfect maze size] and it hit me like a rock. This problem really requires you to break some preconceived notions, like a multidimensional array being the best representation for a Grid. A dictionary with coordinates as keys turned out to be perfect for this problem. After this the solution was dead simple, walk forward, preserving the right coordinates, then turn around and walk back, overlaying existing directions with new ones you find.
Write a simple comparator function for coordinates, and use it to sort the grid and print it, and you have the solution in Python
In general the practice problems are creative, all they require a bit of common sense, some unconventional thinking and perhaps a few years of experience. Mainly it's about how elegant your code can be. I'm just hoping the real ones will be easy too.
Saturday, July 05, 2008
Book Review: The Curious Incident of the Dog in the Night-time
This book was actually released in 2003 so I'm a bit late for the review, but I just stumbled upon it a few days ago at a friend's place. And the bright colour and really long rambling title really intrigued me.
So, meet Cristopher Boone, who wants to be an astronaut, loves animals more than humans, has a photographic memory and brilliant logic but can't tell what other people feel and has no notion of metaphors and cultural references. Unlike many of us he cannot follow the 'I am thinking about what you are thinking about what I'm thinking' process that often happens. The only concept of emotion he has is a list of emoticons expressing common faces.
Haddon does not try to invoke pity, Christopher is in no way purposely projected as someone worse than us. He lives with his Father and thinks his Mother is dead. When his neighbour's dog is killed he sets off to find the killer in an independent manner, in the process escapes to London and comes to reality with the fate of his Mother.
Since the story is told from his view, and his lack of emotion and future projection means that he has no reason to lie leads to a very truthful story, even to the point of making normal readers squeamish. He writes about poo, and sex and swear words with no change in tone than if he was talking about the weather. He doesn't feel death when he narrowly misses it and when he gets an A grade in his Math A-levels the only thing he feels is
At 134 pages the book is a quick read and there is no actual crime-solving but Christopher's need to fit into the world is very well written and a window into the mind of autistic people. At the same time it lets us marvel at the beauty of our brain to reject so much information and yet generate so much of its own with no bindings to any law.
Along the way the book has a sprinkling of math, including naming all chapters with prime numbers. Christopher almost always goes on cubing natural numbers or mentally calculating powers of 2 just to overcome nausea.
I doubled 2's in my head because it made me feel calmer. I got to 33554432, which is 225, which was not very much because I've got to 243 before, but my brain wasn't working very well.
-- Christopher Boone
But at the core the book is humourous with Christopher's long rambling sentences and attention to details leaving you chuckling. Mark Haddon has done an excellent job.
Friday, July 04, 2008
He stole the words out of my mouth :)
I'd also add Creative Nero, Adobe PDF Reader and Falcon.
Half of "Windows Pain" comes from the crummy applications sitting on top of it.
Wednesday, July 02, 2008
Graffiti first view
So here is the client code it took
import sys
import pygame
from pygame.locals import *
import graffiti as g # Line 1
pygame.init()
g.init() # Line 2s = g.spraybuilder.parse_string(
"""
<body>
<p>
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean id diam. Curabitur lectus. Nullam ultricies ultrices tellus. Praesent id turpis vitae lorem varius posuere. Donec id diam. Nam risus sem, aliquet ac, dignissim eget, aliquam ac, dolor. Aenean lacus metus, eleifend eu, elementum ut, lacinia non, nisi. Morbi odio. Aenean id massa. Ut arcu urna, elementum et, iaculis ac, lacinia eget, dolor. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Maecenas eleifend facilisis dolor. Quisque eget nulla. Sed ut eros. Maecenas ut diam. Nullam tellus urna, sodales ac, cursus nec, tempus ac, purus.
Aenean malesuada est quis velit. Nulla vitae nunc. Integer gravida. Curabitur purus velit, egestas quis, aliquet quis, mattis ac, orci. Aliquam ac lectus. Mauris congue orci faucibus est. In orci odio, sodales at, pretium nec, dignissim et, neque. Suspendisse potenti. Fusce eget ante. Etiam purus ligula, placerat tempor, pellentesque quis, tincidunt accumsan, turpis.
</p>) # Line 3
</body>
"""
surf = g.spray.SprayRenderer(s.sprays[0]).render() # Line 4
pygame.display.set_mode((800, 600))
pygame.display.set_caption('Spray Rendering')
screen = pygame.display.get_surface()
pygame.mouse.set_visible(1)
while True:
for event in pygame.event.get():
if event.type == QUIT or (event.type == KEYDOWN and event.key == K_ESCAPE):
pygame.quit()
sys.exit()
screen.blit(surf, (50, 50, 800, 600)) # Line 5
pygame.display.flip()
to generate this
I'm doing a bit of internal access in Line 4 right now, but that will be fixed.
If the design remains good, it should remain that easy ( just 5 lines! ) to use for all time