English | हिन्दी | 中文 | Mac
Jīnnián shǔjià wǒ yīdìng huì bǎ cóng qùnián shǔjià shèngxià de yī jiàn shì –– yuèdú "Hālì Bōtè yǔ Mófǎ Shí" –– wánchéng. Zài wǒ suǒyǒu de zhōngwén jīngyàn zhōng, zhèi kěndìng huì wǒ zuì zìháo de shìqing. duì yī ge wàiyǔ xuésheng láishuō, yǒu sì ge zhòngyào fāngmiàn (gēnjù qí zhòngyàoxìng páiliè): tīng, shuō, dú hé xiě; dāng zuòjiā xiě wénzhāng hé xiǎoshuō jiù bùyòng shuō le, yīnwèi nàxiē shì zhuānmén duì nàxiē yǒuyì de rén lái chǔlǐ de. Dànshì qiánmian de sān gè fāngmiàn shì měirén dōu děi hǎohǎo zhǎngwò de. Hé qítā wàiyǔ xuésheng bùtóng de shì: suǒyǒu de bǎ zhōngwén dàngzuò tāmen mǔyǔ de rén dōu yòng zhèxie suīrán guīlìduōzī dànshì yìcháng nánxué de wénzì. Suǒyǐ, xuéxí dú zì shì ge hěn fèilì de shì. Cóng wǒ kāishǐ xué zhōngwén de shíhou suīrán yǐjīng guò le liǎng nián, wǒ hái zhǐ xuédào le dàgài sān qiān gè zì.

Dāngrán duì zhèyàng huǎnmàn de jìnzhǎn wǒ dà gǎn bùmǎn, suǒyǐ hěn gāoxìng zhègè dúwán Hālì Bōtè de shì huì jiāo wǒ hěn duō xīn zì, cí hé tāmen de yòngfǎ. Qùnián zhěnggè shǔjià wǒ mànmàntūntūn de dú le dàgài jǐ yè zhèi běn shū, kěshì jīnnián shǔjià wǒ yǐjīng dúdào le dì-141 yè –– bùjǐn shì zhīdào de zì bǐ qùnián duō de duō, bìngqiě hěn zhòngyào de shì yuèdú sùdù bǐ qùnián kuài de duō. Wǒ gūjì zài bùjiǔ de wèilái huì dúwán, yě huì kāishǐ dú dì-èr bù (érqiě shì yòng Fántǐzì de dì-èr bù) - "Hālì Bōtè yǔ Mìshì".

今年暑假我一定会把从去年暑假剩下的一件事——阅读《哈利波特与魔法石》——完成。在我所有的中文经验中,这肯定会我最自豪的事情。对一个外语学生来说,有四个重要方面根据其重要性排列:听、说、读和写;当作家写文章和小说就不用说了,因为那些是专门对那些有意的人来处理的。但是前面的三个方面是每人都得好好掌握的。和其他外语学生不同的是:所有的把中文当作他们母语的人都用这些虽然瑰丽多姿但是异常难学的文字。所以,学习读字是个很费力的事。从我开始学中文的时候虽然已经过了两年,我还只学到了大概三千个字。

当然对这样缓慢的进展我大感不满,所以很高兴这个读完哈利波特的事会教我很多新字、词和它们的用法。去年整个暑假我慢慢吞吞地读了大概几页这本书,可是今年暑假我已经读到了第一百四十一页——不仅是知道的字比去年多得多,并且很重要的是阅读速度比去年快得多。我估计在不久的未来会读完,也会开始读第二部(而且是用繁体字的第二部)—《哈利波特与密室》。

Labels: , ,

NSWindow, it seems, was never designed with the aim of supporting animation, which becomes slightly problematic when that's precisely what you're trying to do. This is the result of all the research I've done on NSWindow in the past few days because I was trying to do some animations with it, which proved to be a nigh impossible task.

So, what can you do in terms of animation with NSWindow? NSWindow supports a few basic animations - opacity, frame size, frame origin and frame rotation. If you want to change any of those and have the window animate the action, it will gladly do so. You can do those either using NSViewAnimation, through the setFrame:display:animate: method and perhaps even through the animator proxy. Try this Quickie to help you get started with simple window animations.

Beyond that short list, the next best thing you can do is to create the impression that you are animating the window. This allows your animations to be more flexible but not as smooth and well-blended as they would be were they being performed on the window itself. One way to animate things is using the Core Animation API that was introduced with Leopard. What you need to do to get things started though is a bunch of CALayers which Core Animation can animate. Now, these layers need to be inside something and, generally speaking, anything that you want to show on the screen needs to be inside a window. So, the solution is to create a transparent window the size of the entire screen and use that as your canvas, set that window's contentView to have a backing Core Animation layer and then add images of your windows (but not the windows themselves of course) as CALayers to this big transparent layer as sublayers. Here's some code that demonstrates that:

- (void)awakeFromNib {
    /* screenWindow is an IBOutlet hooked up to a borderless
       NSWindow window and this stuff should ideally be done
       by subclassing NSWindow and making a TransparentWindow
       subclass and putting this code in its -awakeFromNib */
    [screenWindow setBackgroundColor:[NSColor clearColor]];
    [screenWindow setHasShadow:NO];
    [screenWindow setOpaque:NO];
    [screenWindow setFrame:[[NSScreen mainScreen] frame] display:YES];
    [[screenWindow contentView] setWantsLayer:YES];

    /* Get the layer from this empty window */
    NSView *rootView = [screenWindow contentView];
    CALayer *rootLayer = [rootView layer];
    
    /* Create the layer that will animate */
    CALayer *fakeWindowLayer = [CALayer layer];    

    /* Get the window's (another IBOutlet) contents */
    NSBitmapImageRep *imageRep;
    [rootView lockFocus];
    imageRep = [[NSBitmapImageRep alloc] initWithFocusedViewRect:[rootView frame]];
    [rootView unlockFocus];

    /* Now set the layer's contents and add it to the layer tree */
    fakeWindowLayer.contents = (id)[imageRep CGImage];
    [rootLayer addSublayer:fakeWindowLayer];

    /* ... Now do some animation with this layer ... */
}

I don't know whether you picked up on it or not but I never autoreleased or released the NSBitmapImageRep, which was for a reason. The reason is that the CGImageRef we get back from the NSBitmapImageRep is actually half-hearted and is directly dependent on the NSBitmapImageRep, so much so that if the NSBitmapImageRep goes away and you try to access the data in the CGImageRef, your program crashes or you get junk on your screen. I'm currently working on it and trying to find a solution to this, but, for the time being, a memory leak it shall remain!

Anyway, at the end of that code segment, you have a CALayer that looks exactly like the NSWindow (minus the shadow) and can be animated at will. All you have to do now is to hide the actual NSWindow, animate your fake window, and, at the end of the animation, unhide the actual window and make sure it's where the fake window was last seen. Complicated, but so far the only way I've found to "animate" NSWindows.

Labels: ,

Qù kànkan ba! (Lonely Planet)

Labels: ,

Xiàtiān de shíhou shì wǒ de lǎo àihào dōu chóngxīn méngyá qǐlai de shíhou. Jīnnián xiàtiān kāishǐ yǐqián wǒ dǎsuàn zuò hěn duō dà shì –– bǐrú, xué yīxiē Rìwén ā, Guǎngdōnghuà ā, Hànyǔ ā, děngděng. Bùguò, yīnwèi gōngzuò hěn máng, wǒ méi tài duō de shíjiān zuò bié de shì la. Kěshì wǒ duì zhè xiē shì zhēn yǒu xìngqù – bùkě xiāomiè de xìngqu – suǒyǐ yīzhí zài shèfǎ zhǎo shíjiān lái dú qùnián mǎi huí lái de "Hālì Bōtè" xiǎoshuō, shōutīng Guǎngdōnghuà hé Rìyǔ bōkè…… Ā duì le, Guǎngdōnghuà bōkè shì fēicháng nán zhǎodào de, qíshí shì hǎo de Guǎngdōnghuà bōkè. Gēn chinesepod.com bǐqǐlái jiù méiyǒu yīgè bōkè gènghǎo, kěshì wǒ zhōngyú zhǎodào le yīgè "Chìluǒluǒ de Guǎngdōnghuà".

Zhègè bōkè wǒ juéde hái guòdeqù, bùguò yǒu hěnduō ruòdiǎn. Dìyī shì zhǔchírén méiyǒu shénme hǎo de jiégòu huòzhě jìhuà lái jiāo Guǎngdōnghuà, suǒyǐ xuésheng měicì tīngdào de cíyǔ dōu shì fēicháng suíbiàn de –– yītiān xuédào "tàiyáng yǎnjìng" hé "jīwěijiǔ" zhīlèi de… shìshíshàng duì wǒ láishuō bù tài yǒuyòng de cíyǔ. Dì'èr shì zuì dǎjiǎo wǒ de, nà jiùshì fāyīn hé shēngdiào de wèntí –– suīrán lǎoshī bǎ shēngdiào shuō chūlái de hěn qīngchǔ, dànshì jiāo de shíhou gēnběn bù zhòngshì zhè fāngmiàn. Tā bùguāng bù gǎi tā xuésheng shuō chūlái de hěnduō cuò shēngdiào, érqiě yě bù gēn dàjiā jiěshì Guǎngdōnghuà dàodǐ yǒu nǎ xiē shēngdiào, yīgè zì yòng cuò shēngdiào biànchéng shénme zì, yě yǒu méiyǒu shénme qiàomén kěyǐ ràng xuéshengmen fēnbiàn zhè xiē shēngdiào. Dìsān shì lǎoshī bù zhòngshì fēnxī tā jiāo de xīn cí, suǒyǐ xuésheng bù zhīdào yīgè yǒu sān gè zì de cí shì zěnme zǔchéng de. Dìsì shì liǎng wèi zhǔchírén chángcháng líkāi huàtí, yě chángcháng gēn dāngtiān de kè yīdiǎn dōu méiyǒu guānxì.

Wǒ zhēn xīwàng tāmen huì gěi zhègè hěn yǒu qiántú de bōkè dàilái hǎozhuǎn, yīnwèi guǎngdōnghuà zhíde qúan shìjiè de rén xuéxí tā.

夏天的时候是我的老爱好都重新萌芽起来的时候。今年夏天开始以前我打算做很多大事——比如,学一些日文啊、广东话啊、汉语啊、等等。不过,因为工作很忙,我没太多的时间做别的事啦。可是我对这些事真有兴趣—不可消灭的兴趣—所以一直在设法找时间来读去年买回来的《哈利波特》小说、收听广东话和日语播客……啊对了,广东话播客是非常难找到的,其实是的广东话播客。跟CHINESEPOD.COM比起来就没有一个播客更好,可是我终于找到了一个《赤裸裸的广东话》。

这个播客我觉得还过得去,不过有很多弱点。第一是主持人没有什么好的结构或者计划来教广东话,所以学生每次听到的词语都是非常随便的——一天学到『太阳眼镜』和『鸡尾酒』之类的…事实上对我来说不太有用的词语。第二是最打搅我的,那就是发音和声调的问题——虽然老师把声调说出来的很清楚,但是教的时候根本不重视这方面。她不光不改她学生说出来的很多错声调,而且也不跟大家解释广东话到底有哪些声调,一个字用错声调变成什么字,也有没有什么窍门可以让学生们分辨这些声调。第三是老师不重视分析她教的新词,所以学生不知道一个有三个字的词是怎么组成的。第四是两位主持人常常离开话题,也常常跟当天的课一点都没有关系。

我真希望她们会给这个很有前途的播客带来好转,因为广东话值得全世界的人学习它。

Labels: , ,

It's difficult, it really is. Being vegetarian in the States is so much different from being vegetarian in India. In India, it's well accepted, not necessarily as the "right" thing to do, but as a status quo that doesn't really get challenged because it's based on religion (or was) and people, whose fathers and forefathers have never touched meat, sometimes continue to do so themselves. I also belong to that group. What this really means is that I, unfortunately, cannot count myself amongst those who became vegetarians to protest against eating meat on a scientific or moral basis; of course, being vegetarian already, I am ideally situated to be sympathetic towards the way they think, and I am, but it's besides the point.

Given the fact that I'm vegetarian though, for one reason or another… God is it hard to find good food here! Barring Indian (and possibly Mexican) places, pretty much no other kind of restaurant consistently offers good - or even passable - options for vegetarians. The worst of it is that (a) I'm currently in a country that simply adores meat and (b) I decided to invest my time and energy in learning a language whose native speakers eat any kind of meat they can lay their hands upon with great ferocity.

So, the basic scenario is something like this: On a casual Friday evening, a bunch of friends want to go out for dinner. They throw around choices until they decide that, oh, a sushi place would be a rather nice place at which to eat dinner that night, and, luckily enough, there happens to be this excellent sushi place nearby. How could this possibly go wrong? Well, here's the thing. I could go along with these friends with whom I love to hang out, eat the lousiest excuse for food I've ever tasted in my life (for sushi places are known to, uh, specialize in rather non-leafy kinds of sea creatures) and, on top of that, pay a large sum of money for it all (for sushi places are known to be, well, rather expensive). Of course, I could try to convince my friends to go to another place (perhaps an Indian or Mexican place, or maybe even a Chinese place which I know to have good vegetarian options), but how many times could I do that without being the jerk who just wants everything his way? Lastly, I could just not go with them and miss out on all the fun, frolic and extremely bad food (or, in some cases (such as steak houses), no food at all).

So, basically, all I have in the end is a lose-lose-lose situation. Of course, you could argue the point that if my friends knew I was vegetarian, then they should have themselves been considerate enough to avoid places which don't have good non-meat stuff; but, do I honestly want them to do that considering that every time we go out to eat, I'll end up feeling guilty because eleven other people are now eating what they consider to be non-ideal food, all for the sake of one person, who, for some reason they don't really understand, doesn't eat meat. No, I'd rather suffer my fate alone, thank you very much. No, no sushi for me.

Labels:

  • Yup, it sucks being a vegetarian in these countries.

    "You're vegetarian? How do you survive on just salad?"
  • There's a very simple solution to your problem...
  • Its interesting to hear this.

    I remember ordering Pizza in Virginia(don't remember where) and discovering a piece of bacon on a vegetarian Pizza.

    While complaining to the manager, he aplogized while informing us that one of the ingredients of the sauce used on the Pizza(Vegetarian or not) was bacon and that's what gave it the unique taste.

    That incident was shocking and we made sure we never ordered from that place when we were there.
  • Hi Karan keep it up if you like, I survived 10 years in UK -it si will nad determination that will keep you going and will make be strong! take care
    Dr Subash Gautam
  • Can't agree more. Keep up with your determination.
  • oh but you're in california! it is so much worse in other places of this country!

Post a Comment

NSArray being one of the most frequently used Cocoa classes and being out of bounds being one of the most common errors one would get with an array, I'd have thought that the NSRangeException which NSArray promises to throw if an out of bounds error occurs would trigger the debugger (or, alternatively, the application to crash in non-debugging mode). However, it does not do so. All that happens is that you get this in your Run Log and your stack unwinds:
*** -[NSCFArray objectAtIndex:]: index (2) beyond bounds (2)
The fact that such a basic but critical error (who knows in how many devious ways an application could mess with your data once it has a bad state that made it go out of bounds?!) defaults to being silently acknowledged and subsequently ignored unnerves me, and frankly, it annoys me, because, just like any other developer trying to make a half decent program, what you want to do at that point is to jump to the stack trace and see what went wrong. Now, since we're very unlikely to convince Apple to change basic functionality it hasn't touched in about eight years, it's time for workarounds.

The first question that should come to mind is, "What the hell is actually going on? Is the promised NSRangeException being raised at all or is the documentation just lying? Giving the documentation the benefit of the doubt and assuming that it is being raised, what in the world is happening to it before it reaches us?" This kind of reasoning led me to search for ways to catch exceptions in the debugger. Some Google searching revealed that setting a symbolic breakpoint at -[NSException raise] might do the trick. So, I did. And it didn't. Cleanly flew by that breakpoint as if it was a man raising his kilt to hitch a ride.

What next? Look for an even more basic call to catch exceptions. Going by the fact that most fundamental Objective-C runtime methods eventually go into C functions and going by the example of objc_msg_send, I discovered objc_exception_throw and set a breakpoint on it. Worked like a charm! And now I have that breakpoint always set because I, like any sane developer, wants to catch his exceptions before they reach the end-user.

Incidentally, why the exception was not being caught by setting a breakpoint at -[NSException raise] now came to me with breathtaking obviosity ("obviousness" just isn't cool enough). I looked into the documentation for NSException once more and looked at the stack trace once more (the stack trace that now appeared thanks to my breakpoint). NSException, as it turns out, has three methods which can be called to raise exceptions, and, apparently the other two (+raise:format: and +raise:format:arguments:) do not all eventually call into -raise. Now here's the most ludicrous thing about this affair; read this bit from the documentation for -raise:
All other methods that raise an exception invoke this method, so set a breakpoint here if you are debugging exceptions.
Wow, just outright lying. Very spiffy, Apple, very spiffy indeed. Undocumented exceptions about exceptions. Is this supposed to be some sort of geek humor? हे भगवान!

Labels: ,

I was just listening to कभी कभी मेरे दिल में ख़याल आता है and got the sudden urge to transcribe the lyrics (as I am sure anyone would in a similar situation). What surprised me was the amount of duplication in the lines. Below is the song "as is", i.e., every line that was sung, and you can easily see that almost all the lines are said at least twice one after the other.

कभी कभी मेरे दिल में ख़याल आता है
कभी कभी मेरे दिल में ख़याल आता है
कि जैसे तुझको बनाया गया है मेरे लिए
कि जैसे तुझको बनाया गया है मेरे लिए
तू अबसे पहले सितारों में बस रही थी कहीं
तुझे ज़मीन पे बुलाया गया है मेरे लिए
कभी कभी मेरे दिल में ख़याल आता है
की ये बदन ये निगाहें मेरी अमानत हैं
की ये बदन ये निगाहें मेरी अमानत हैं
ये गेसुओं की घनी छाओं हैं मेरी खातिर
ये होंट और ये बाहें मेरी अमानत हैं
ये होंट और ये बाहें मेरी अमानत हैं
कभी कभी मेरे दिल में ख़याल आता है
कि जैसे बजती हैं शह्नायिआं सी राहों में
कि जैसे बजती हैं शह्नायिआं सी राहों में
सुहागरात है घूंघट उठा रहा हूँ मैं
सुहागरात है घूंघट उठा रहा हूँ मैं
सिमट रही है तू शर्मा के अपनी बाहों में
सिमट रही है तू शर्मा के अपनी बाहों में
कभी कभी मेरे दिल में ख़याल आता है
की जैसे तू मुझे चाहेगी उम्रभर यूँ ही
उठेगी मेरी तरफ़ प्यार की नज़र यूँ ही
मैं जानता हूँ की तू ग़ैर है मगर यूँ ही
मैं जानता हूँ की तू ग़ैर है मगर यूँ ही
कभी कभी मेरे दिल में ख़याल आता है
कभी कभी मेरे दिल में ख़याल आता है

Labels:


Below are all the words I learned from this one (really awesome) song. And they really are a testament to the kind of words you kind of need to know but will almost never pick up on casually, since they actually don't come up all that many times during a person's life. I'm pretty sure I can count all references to "bald eagle" and "dragonfly" in all the twenty one years (it's been so many already?) of my existence on a single hand.

鸽子[鴿-] gēzi n. pigeon; dove M:ge/zhī
象征[-徵] xiàngzhēng* v. symbolize; signify; stand for ◆n. symbol; emblem; token ◆attr. symbolic
秃鹰[禿鷹] tūyīng n. bald eagle
押/压韵[-/壓韻] ¹yāyùn* v.o. rhyme
掠/略夺[-/-奪] lüèduó v. plunder; rob; pillage
遮蔽 zhēbì* v. ①hide from view ②obstruct; block ③〈mil.〉 defilade
回音 huíyīn* n. ①echo ②reply
葬礼[-禮] zànglǐ* n. funeral rites; funeral
漫天 màntiān v.p. ①filling the whole sky; all over the sky ②boundless; limitless
飞行[飛-] fēixíng v. fly ◆n. flying; flight
凋零 diāolíng* v.p. ①wither, fall, and scatter about ②decline; be on the wane ③die; pass away
乌鸦[烏鴉] wūyā* n. crow M:zhī
诡异[詭異] guǐyì* s.v. strange; odd; abnormal
日渐[-漸] rìjiàn adv. gradually
冰冷 bīnglěng* s.v. ①ice-cold ②cold or frosty (of expressions/etc.)
弥漫[彌-] mímàn* v. fill the air; spread everywhere
雾气[霧氣] wùqì n. fog; mist
空旷[-曠] kōngkuàng s.v. open; spacious; expansive
墓地 mùdì p.w. burial ground; cemetery M:kuài
幽冥 ¹yōumíng v.p. gloomy; somber ◆n. 〈Budd.〉 netherworld
隐姓埋名[隱---] yǐnxìngmáimíng f.e. live incognito
感应[-應] gǎnyìng n. ①〈phil.〉 response; reaction; interaction ②〈bio.〉 irritability ③〈elec.〉 induction ④〈rel.〉 the prayers being listened to
温热[溫熱] wēnrè attr. tepid
亲近[親-] qīnjìn* v. be close to; be on intimate terms with
怀念[懷-] huáiniàn v. cherish the memory of; think of
鲜红[鮮紅] xiānhóng n. bright red; scarlet
蜻蜓 qīngtíng n. dragonfly M:zhī
混/溷浊[-/-濁] hùnzhuó* s.v. muddy; turbid
阴影[陰-] yīnyǐng* n. shadow
青苔 qīngtái* n. moss M:kuài
嘲笑 cháoxiào v. ridicule; deride; laugh at
凄 qī b.f. ①chilly ②sad
后悔莫及[後---] hòuhuǐmòjí f.e. be too late to regret

Labels:

यह हो गया इस नए ब्लॉल पर दो सौ एकवां लेख (जनवरी २००६ से), और इसके साथ आते हैं इक्के दुक्के छोटे मोटे बदलाव। सबसे आसानी से दिख जाने वाला है मैं जिन तीन भाषाओं में लेख लिखता हूँ, उन भाषाओं के चुनाव की सुविधा, क्योंकि मेरे ज़्यादातर दोस्त या तो हिन्दी या चीनी के लेखों की ओर बिलकुल भी श्रद्धा नहीं रखते हैं। दूसरी आसानी से दिख जाने वाली चीज़ यह हुई कि इस ब्लॉग का विश्वजालीय इंटरनेट पता बदल गया है। क्यों? ऐंवई।

Labels:

For the two hundredth post on this new journal, I bring old memories and a new address. The new address comes as part of a shift I want to make to consolidate all my web logging experiences in one place and a want to redesign, not the journal itself (since I still like this simplistic self-designed template very much) but the rest of my website to match the journal. So, that will be coming in a few days. Until then, let me look back at the past year and dig out some of my most cherished memories.

Although it might not be the first chronologically, the first really grand thing that jumps to my mind about last summer - almost exactly a year ago - was reading Harry Potter and the Deathly Hallows. What a delight to read that wonderful book was, and still was yet again this summer and I just finished re-listening to it on audio only to move on to Book Six. Perhaps, I can go through them in reverse order this summer. I really enjoyed reading the aforelinked entry because it's just brimming with my excitement and enthusiasm about Harry Potter - a sentiment hard to mask even behind the stillness of written text.

Possibly because my internship was so boring did I get so much work towards personal projects done last year. This year, since my internship keeps me glued so, I barely get that kind of time, not to mention that last year I was friendless in an alien suburb, which gave me more free time than I'd ever imagined having. It got a bit boring, but I feel I made the best of it. And here's something I spent the beginning of last summer working on - the then redesigned Journal, which, as of this writing, is the current design.

Ah, yes and my Chinese adventures continued in full force last year after having studied it for a year at Stanford and having found it to be a supremely interesting language to study, which, if it were not for the characters, would also be counted as one of the easiest to learn languages of the world. And along those lines, I published what I believe is my first post completely in Chinese. And now that I come to read it after a year, I have to really restrain myself from clicking on the little pencil icon and fixing all the numerous errors I'd made back then, which sound disturbingly wrong to my ears now, after another year of having studied the venerable subject.

Toyon, of course! Wow, looking back at the memorable year this has been, living with about ten score sophomores. And these two posts recount the beginning of that adventure, one that would be filled to the brim with endless fun, friends and anime. It was an amazing experience being staff on a dorm and I recommend it to anyone who's considering it. I found out after having staffing that the key point which makes it so much more fun staffing than being a regular person in the dorm is that when you are a staff member, people feel less guilty in bothering you, which gets you, assuming you're someone who likes company, more people to talk to and become friends with than you ever imagined. And afterwards I reminisce over it in Hinglish.

When I discovered Simpu Singh and Indians speaking Cantonese.

When I met Chinese people in New Delhi over winter break. (Hindi)

When I had my best academic quarter ever! God, that made me happy.

When I wrote the first piece of software that made me feel a sense of accomplishment. (Liànxí)

When I finally got a free ticket to WWDC.

And found an internship I really liked.

Labels:

  • Of course you had a great year at Toyon! You were living next door to me; how could it have been a bad year?
  • Good use of the semicolon.

Post a Comment