Hao Lian

Role Provider
Login name shadytrees logged in 2 hours ago.
User picture
Tags python, perl, matlab, java, html, xhtml, javascript, JS, css, php

Skills

  • Web programming, all sorts and manners, all bugs and problems will be solved
  • Python
  • Perl, Perl bioinformatics
  • PHP, reluctantly: also, WordPress and Drupal administration and extension
  • Matlab
  • Java
  • SAS, novice
  • C++, novice

Sexy CV, on request.

Availability and additional details

Availability 0 hours per week
Home page http://www.linkedin.com/in/haolian
Time zone -05:00 Eastern Time (US & Canada)
Country USA

Events in public spaces

Jan 0904:20Ico-changesetcommitted #379b366ca5: Goodbye faults, hello Jinja.
 04:20Ico-changesetcommitted #dc8fd1571f: Check for empty row in tests/functional.py.
 04:20Ico-changesetcommitted #0554376c20: User.coach dependency from User.school.
 04:20Ico-changesetcommitted #eb57c8f5f9: One slipped nonce. (#8)
 04:20Ico-changesetcommitted #d3ac96a939: Functional test: registration.
 04:20Ico-changesetcommitted #d62e50bf4a: New Nonce API.
 04:20Ico-changesetcommitted #01e98ca4e8: Updating for the new application API.
Jan 0803:08Ico-changesetcommitted #74a793d1a4: |escapes on edit.html.
 03:08Ico-changesetcommitted #cc04695a84: Validation!
 03:08Ico-changesetcommitted #f60035d7a6: /user/$(exact username) searches.
 03:08Ico-changesetcommitted #a7d5c60045: ValueError from int() intercepted.
Jan 0715:01Ico-changesetcommitted #ad6a1da8fe: Search now finds exact hits.
Jan 0401:08Ico-changesetcommitted #8611e915ec: Searching.
Jan 0222:16Ico-changesetcommitted #47ffc8433b: current_tab, 1-indexed.
 22:09Ico-changesetcommitted #2b019ab18a: current_tab
 21:12Ico-changesetcommitted #b7e942a57e: More Unicode.
 21:10Ico-changesetcommitted #473d2fcc60: More Unicode.
 21:03Ico-changesetcommitted #bba88cced6: OK, strings are hard.
 21:01Ico-changesetcommitted #0cab7ee036: Merging 942a and b284.
 21:01Ico-changesetcommitted #b284db8ab7: JSON ?bare.
 02:02Ico-changesetcommitted #cbb92fa94c: Links in TDs broke search script.
 01:57Ico-changesetcommitted #8d2253708d: index.yaml
 01:52Ico-changesetcommitted #d45abec5be: [NEW] Weeks!
 01:52Ico-changesetcommitted #5c28fb5acc: Unicode time!
 01:52Ico-changesetcommitted #c831bdc90f: Striping now accounts for odd number of rows.
 00:51Ico-changesetcommitted #4f3a3f48eb: All Unicode, all the time.
 00:51Ico-changesetcommitted #277cef5997: Scores, actual scores.
Jan 0114:24Ico-changesetcommitted #f29af86f52: Django humanize.
 14:24Ico-changesetcommitted #7e5a22f364: Checking in email.html.
 05:43Ico-changesetcommitted #c84a2db5e1: Unique names, let us try again.
 05:32Ico-changesetcommitted #f1c5152155: Unique names.
 05:15Ico-changesetcommitted #0c1685b3ce: send_score checkbox hookup on the profile editor.
 01:08Ico-changesetcommitted #6a938264c1: Merge of 1f7d and 00b8.
 01:08Ico-changesetcommitted #00b8cf7c5c: Guess what doesn't go first? It's not just women in computer science.
 00:21Ico-changesetcommitted #5f397882f4: Booleans are hard.
Dec 3123:48Ico-changesetcommitted #5e4d81be3c: Error page.
 23:33Ico-changesetcommitted #f2feff8508: Merging 2cf2 and cc91.
 23:33Ico-changesetcommitted #2cf214120b: Score limit, strict screenshot requirements.
 07:16Ico-changesetcommitted #3ec5b11b16: More readable FindSpaces.
 07:15Ico-changesetcommitted #e2211103b2: Smarter //.
 07:15Ico-changesetcommitted #0cb132463a: Smarter Quirk.Message(), no more StopPresses.
 06:24Ico-changesetcommitted #39a303a4fd: 2 spaces from 3.
 05:26Ico-changesetcommitted #9ac185e7c3: .NET 3.5 required officially due to string extension methods
 05:26Ico-changesetcommitted #2f3b1a0a4e: Object initializers and clarity
 05:26Ico-changesetcommitted #4af0c69aac: StringEx now uses C# 3.0 extension methods
 05:26Ico-changesetcommitted #86928ad92e: lambdas
 05:26Ico-changesetcommitted #386b48a688: Visual C# Express 2008; Bufferlings
 05:26Ico-changesetcommitted #a450e603b3: Ideas gains write ability
 05:26Ico-changesetcommitted #796d5a3ea8: Renames; Users fix in Tests.Names.cs
 05:26Ico-changesetcommitted #825e484df2: Renames
 05:26Ico-changesetcommitted #4ebe0884d6: * OK, Broadcasting quit messages only to channels with the quitting user.* GetRoom in Buffer, called from Users* broadcastHelper takes a BufferData now* broadcastId instead of a boolean* quit.[user] semantics* app.Buffer.Broadcast event hook in NamesFilter? Not the best place.* Coming in as a filter for now. * Buffer takes a Quirk: cutting off app.CurrentConnection shit
 05:26Ico-changesetcommitted #025838377f: TabKey -> Room rename
 05:26Ico-changesetcommitted #91b742a149: some legwork for upcoming users file thingy
 05:26Ico-changesetcommitted #7884b65342: now using `is` instead of typeof&GetType; Invoke -> BeginInvoke in WhoFilter; implementing MockApp#BeginInvoke// part, self, a reason
 05:26Ico-changesetcommitted #8d41379695: * TabId -> cooler TabKey; comment change in App.cs regarding SetUpForm.cs, damn you fragile file xrefs!
 05:26Ico-changesetcommitted #1ff3f1db61: * Lists Values, Keys are new properties
 05:26Ico-changesetcommitted #9981808fe0: * No more `fforde` or `suppressNewTab` junk in JPQFilter: we just throw it to the null (server) tab.* In fact, BufferData#NeedsNewTab is gone! That's right! Gone! * No more logBoxes hashtable or TabIdShells! Fancy GetHashCode, Equals, and proust magic fixes this. * BufferData#Broadcast allows messages to seed its way to all channels (part and quit for now).* This is a first stab at Issue 11.
 05:26Ico-changesetcommitted #acebd51003: No more DesiresJoinPartQuitAttribute
 05:26Ico-changesetcommitted #71e2a4aeaa: * Buffer.NewChannel event for NamesFilter* BufferData.Ignore for NamesFilter * Attribute condensation * tabber.Init() -> tabber.Add('server') * Compiling NamesFilter nowadays
 05:26Ico-changesetcommitted #38dc574ec5: * Using the new MockApp.PokeBuffer static method in my tests now* Fully tests out the Buffer chain of restaurants. * MockApp condensation * MockApp.ArrayEquality<T> static method * NamesFilter test added
 05:26Ico-changesetcommitted #02df185a2a: * No more App.Space* Begats WhoFilter change * Documenting tricky part logic in JPQ* Reducing all that state into one JazzNotes struct. * NamesFilter! NamesFilter!
 05:26Ico-changesetcommitted #272a580083: InvokeRequired edge case handled
 05:26Ico-changesetcommitted #cbccc0f58e: * No more Tabber.Init() [manual 'server' addition now]
 05:26Ico-changesetcommitted #3a49c5daaf: * Tabber#Add(null label) handling << r111
 05:26Ico-changesetcommitted #09e1eb16b5: * SwitchLogBox handles LogBox, not Control (necessary for IAppControls#LogBox)* Oops, now updating #LogBox * Buffer#AddChannel handles no-parameter case -> do not rely on other parts for the "(new)" string * TabIdShell added for logBoxes dictionary; logBox redundant in TabId {hashCode else doesn't work}* logBoxes: TabId -> LogBox changed to logBoxes: TabIdShell -> LogBox* handleNewTab handles shells now * logBoxes cleaned up in Remove() method * Fixing issue #8* Solving many nitty gritty hashCode issues * Buffer interfaces.cs for cleanliness
 05:26Ico-changesetcommitted #44d1503374: * Assembly.cs for Theminds (refactor) and Structures (new) * Who event in InputBoxFilters moved to WhoFilter in light of IAppControls awesomeness * Rewrote serverPrefix and cleaned up LogBoxFilters a bit * Factored out data.Color in JPQF * all.server and all.server.test out, server.prefix in * Removed Test* in Ideas.cs * Check for null in StringEx.IsChannel
 05:26Ico-changesetcommitted #834d74d587: Remnants left from our Structures move
 05:26Ico-changesetcommitted #7cc1ec1503: Welcome to Structures, our new home for many exciting new things
 05:26Ico-changesetcommitted #4a6ad193cd: Handle when Message() in Dispose() throws an IOException! Cleanup some junk, spacing
 05:26Ico-changesetcommitted #2b618e4f02: AppStart's Test() inline'd; StringEx, 2WayDict, and Ideas moved out to Structures; supppresNewTab(forParts) moved from Buffer to JPQF
 05:25Ico-changesetcommitted #2a8fecf04c: * Bumping version to 1.3. Oops.
 05:25Ico-changesetcommitted #85f5c041e2: * Bumping version to 1.3. Oops. * StringEx.IsChannel * Part on tab close* Suppress new tabs temporarily for the part message* Involves new method Buffer#suppressNewTabForPart* PostLine -> LineDel, moved up a bit to *before* handleNewTabs * Color.DarkRed goodness for SelfLine moved to event handler * Quirk#GetHashCode and Quirk#Equals because it's used in Buffer in a Dictionary a lot,and I don't trust Object to do things right
 05:25Ico-changesetcommitted #f60fb05789: DesiresTestingWithMockAppAttribute; quit.self is de-reason-ified; testFilters -> tests; channels moved to member variables; revision 100!
 05:25Ico-changesetcommitted #8d38365536: StringEx is now a public static class; JPQF now just stores all its state as member vairiables
 05:25Ico-changesetcommitted #456c723d67: part&quit in lion.txt broken up to .reason and .total; new unit testing: JoinPartQuitFilter -> full rewrite of said filter; Sx = Theminds.StringEx, our new static String extensions class just yearning for C# 3, StringExcerpt -> Tween (not really Between because we don't include the last letter ;)
 05:25Ico-changesetcommitted #6bd5f1282a: More documentation for JPQF.filter; Color.Green for PF
 05:25Ico-changesetcommitted #9468e30d7b: Complete rewrite of PrivmsgFilter; added new testcases that PF should ignore
 05:25Ico-changesetcommitted #867d734033: * Catching and handling TargetInvocationException in LoadAttributeLovers now * Adding TwoWayDictionary.Count * PrivmsgFilter#filter is now protected, not private* Allowing us to add PrivmsgFilter to our fine selection of Tests* But first, we create a MockApp.cs to take out the network dependency in Quirk * Buffer now refuses to remove a tab if there's only one left* I could swear I used to handle this somewhere else...
 05:25Ico-changesetcommitted #d6ad536b65: Now alerts you if you try to privmsg a server window
 05:25Ico-changesetcommitted #3abc92c7af: Formatting self-talk now; oops, MoveToTab in Buffer.cs should change CurrentChannel; doing default: on InputBoxFilters was a huge mistake; and oh my god we have a /query command?
 05:25Ico-changesetcommitted #c9cfd6ec7b: Oops, we should do inputBox.Select() now that logBox.TabStop = true; newIntimateFriend now handles the special special case where you query yourself!
 05:25Ico-changesetcommitted #cf7d5caf79: Oh yeah, I also added form border padding (5 pixels, the doctor prescribes)
 05:25Ico-changesetcommitted #721995a5dd: Removing redundant Windows Forms setup code; better splitter names; more tabIndices (grouped together moreso than ever before); Aspiration.Tab has a TabStop = false value (prevents linear increase in tabbing problem)
 05:25Ico-changesetcommitted #0fff4f8d32: We now handle the // command, necessitating the InputBoxFilters#PrivmsgCurrentChannel refactoring
 05:25Ico-changesetcommitted #5dded635f1: Changing //TODO comments to filed issues so I can better ignore them.
 05:25Ico-changesetcommitted #c2432cd1e3: * New method: Tabber.removeHelperForCounters: to reduce Remove complexity (length, heh). * Buffer.moveTab is now public (MoveToTab) * Ctrl+T goes through Buffer now, not just Tabber * Haha, didn't really need the tabs Dictionary in Buffer, now did I? * TwoWayDictionary simplifies Buffer a lot! * Buffer now actually removes tabs once you close them. Oops. * AddTab is back to AddChanel. Oops.
 05:25Ico-changesetcommitted #d04c8d05e8: Better comments in Remove() detailing how cleanup works because, hey, it's complex baby; changing foreach loops to List.ForEach calls for MAXIMUM PERFORMANCE =======----___--___-_----^^^^^
 05:25Ico-changesetcommitted #eaa56df96e: Scrolling while in InputBox now activates scrolling in LogBox (friendly focus shift); Buffer.addChannelTab & moveChannelTab -> AddTab (public) and moveTab
 05:25Ico-changesetcommitted #67025e4c2b: Refactoring Ideas.cs into delegate-fun. Changed Line -> PreLine in hostName, fixing JPQFilter bug.
 05:25Ico-changesetcommitted #9f93851886: I LOVE QUERIES THEY KEEP THE RABIES AWAY* Buffer.Add -> Buffer.AddLine * New: /query a la X-Chat* lion.txt: query.intro, query.intro.nonce* QueryFilter.cs * New: Buffer.PreLine for hostName and serverPrefix to use* JPQFilter: check for [server] now
 05:25Ico-changesetcommitted #e3be08e6f4: RENAMES ARE FUN SO IS LION* App#connection -> App#quirk * Screw FxCop. QuirkStart is now clean of gunk.* And: UpperCamelCase instance members now. * writer.AutoFlush = true is back. Turns out I do need constant flushing. * nickFinder & msgFinder are new. Welcome them, newIntimateFriend and newPrivmsg. * PrivmsgFilter has been lionized -> speechAll, actionAll instance members.* lion.txt: speech.all, action.all
 05:25Ico-changesetcommitted #8011292aee: JPQFilter has instance rather than static members, a change overlooked in the [DesiresAppControls] attribute changeset. I surgically removed Buffer.CurrentChannel, archaic.
 05:25Ico-changesetcommitted #2311d98953: Big changes: connect() refactors into it, pump(), and handleException. abortConnect redundant with disposed, so it is removed. (writer/reader).Close() redundant with (writer/reader).Dispose(), so they are removed. SocketException will throw null reference with .hostName, so it is removed. writer.AutoFlush stupid; manual Flush in pump() for big performance wins, big big big. No more joins!!!! -> big wins, really fast now, I loves it, it is like America.
 05:25Ico-changesetcommitted #d316ada330: Now handles NeedsNewTab. i.e. commands that don't necessarily need a new Tab for one reason or another (e.g. PRIVMSG).
 05:25Ico-changesetcommitted #6b9f65d4a1: WhoFilter.whoMessageFilter puts WHO messages in the CurrentChannel.
 05:25Ico-changesetcommitted #f1f5c68f2b: AddChannel no longer used, and all its logic is now in handleNewChannel. Filters now can simply assign a channel and not worry about creating it. This fixes the recurring privmsg new tab bug. In addition, a change to PrivmsgFilter's test for `fromSelf`: We're removing the colon, so it can now detect privmsgs to people in addition to channels. The channel helper method fix simplifies Privmsg and JoinPartQuitFilter. Syntactical change: We are now initializing delegates at their declaration, not within the constructor. Capishe?
 05:25Ico-changesetcommitted #394b7d26df: DesiresAppControlsAttribute moving to Attributes.cs; new attribute: DesiresTesting for all my tests instead of manually initalizing them; App#loadFilters is now a static method that takes a type and params object[] args (App.LoadAttributeLovers)
 05:25Ico-changesetcommitted #ec01457d67: Using DesiresAppControlsAttribute (new file, new type) instead of manual Inits() in App#constructor; Disabling call to ServerPrefix in WhoFilter for now; all those static filters are now real classes; Construct and override.cs -> App.cs thanks to our new refactorings; JoinPartQuitFilter finally takes an IAppControls; deductTemplate -> deduceTemplate (JPQ) *blush*
 05:25Ico-changesetcommitted #14e4f0c056: AN EXAMINATION ON WHY WE PRIVATELY MESSAGE EACH OTHER A THREE-PART PATCH THAT LOOKS LIKE IT ONLY HAS ONE PART I LOVE YOU, ZONZE* Moving LogboxFilters.privmsg to PrivmsgFilter* Viv newIntimateFriend, it's now using the new Buffer#Invoke command.* Race conditions are fun.* Off-by-one bugs in newIntimateFriend.* Introducing ... the lock. That's right folks. Thread synchronization. * NewChannel is now a Buffer event. Duh. * Removing my annoying if-return-implicit elses. * Now using one-line if clauses. Screw defensive programming.
 05:25Ico-changesetcommitted #97e8fe5659: * LogBoxFilters takes an IAppControls now. * Buffer.Line and .SelfLine passes a newly minted BufferData struct now.* dc remains as a "DataCenter" abbreviation. I should fix this. * LogBoxFilters now handles private messages, sort of (`newIntimateFriend`).* TODO: Make replying work. * TODO: refactor privmsg in LogBoxFilters. * Sexy MethodInvoker using-alias in LogBoxFilters.cs * StringDictionary instead of Dictionary<string, string> in Ideas.cs
 05:25Ico-changesetcommitted #3622aa3527: * More tabs -> spaces changes. * App.SetUp() -> App.SetUpForm() * InputBoxFilters refactoring: combining inputBox.Commands into one delegate with a switch.* Passing an IAppControl instead of many controls. * SeedUserList is now: custom UserList << ListBox control + WhoFilter.cs. * Cleaning up variable names in LogBoxFilters.privmsg
 05:24Ico-changesetcommitted #7c29cb5f20: Ideas.cs is moving back to Theminds; typo in Buffer.cs
 05:24Ico-changesetcommitted #d166d4f6cd: Ideas.cs is moving back to Theminds
 05:24Ico-changesetcommitted #d7840830f3: Buffering -> Buffer; TabsController -> Tabber
 05:24Ico-changesetcommitted #3f6ecdfc02: Buffer is now its own class. I needed to create IAppControls to do this, which App of course implements. I hate C# properties.
 05:24Ico-changesetcommitted #6b5d3e3f3a: A lot of file renaming << ControlFreak and Page->App move.
 05:24Ico-changesetcommitted #68363154bc: Page -> App class name change.
 05:24Ico-changesetcommitted #a01f1b53f1: Huge structural change: Ideas, LogBox, and InputBox are moving to new project ControlFreak; had to change some class accessibility levels to public. NativeMethods moved as well; I might have to rename that in the future.
 05:24Ico-changesetcommitted #37d964a4e0: Removing useless Debug.WriteLines
 05:24Ico-changesetcommitted #f8c98d38f8: * "ITabs and ITabsParent.cs" -> "ITab and ITabsParent.cs" * Removing useless ITab methods, thanks to our BecomeOld/New changes. * Quirk#Start() checks this.Started, not connection == null. * Using a TabId struct (Quirk + channel name) instead of string "server1.mess" as the key or value for all our Dictionaries.* This affects Page.cs and Page.Buffering.cs, as you might expect.* Two constructors: (Quirk, string) and (Quirk, "")* This resides in Page.Buffering.Cs * channelNames is now <ITab, TabId>, not <int, string>
 05:24Ico-changesetcommitted #d94cf4f2f0: Button's active state is now a depressed look (all the rage in Paris). The check for whether the switch to current tab is moved to switchLogBox because the old one in TabsController.Moved interfered with closing tabs, which wouldn't fire BecomeNew().
 05:24Ico-changesetcommitted #43330ca5d0: Now ignoring *.suo files
 05:24Ico-changesetcommitted #6c259d232a: * More tabs -> spaces changes. * Added switchLogBox; replacing code in moveChannelTab and addChannelTab (newly lowercased).* Has suspend & resume layout code, although useless AFICT. * Using foreach instead of for-loop in Remove(int) now. * Moved Tab_Click to Page.tab_Click.* Which necessitated Remove(ITab) {-> Remove(int)} * Some sweet UpperCamelCase to lowerCamelCase conversions for private methods * Using ITab.BecomeOld and ITab.BecomeNew instead of hardcoded font changes* This changes Add(string) and c(ChangeCurrentDel)* ChangeCurrentDelegate -> ChangeCurrentDel * Page.CreateTab (<< ITab) now uses AddTab instead of ad hoc delegate
 05:24Ico-changesetcommitted #5c990a98c2: * Setting Tab.AutoSize true permanently. Doesn't seem to cause any problems [rigorous, I know]. * TabsController construct parameter `s` -> `label.` Deal with it. * Removing commented out, archaic constant ping code form Quirk. * Changing nextId's comment to "default(int) = 0." * Everybody's version is now 1.1! * Added Quirk.Started flag now that ENABLE_CONNECT is gone (removed from App.cs). * Fixed userList and Tab fonts (SystemFonts.MessageboxFont, random choice).
 05:24Ico-changesetcommitted #0f033d97e6: Fixing weird tabbing issues
 05:24Ico-changesetcommitted #3009b68fff: New csproj and sln for all! Yay, junk removal!
 05:24Ico-changesetcommitted #577d355657: Leftover VSC# Express file save updates. Pay no attention to the man behind the Venetian blinds.
 05:24Ico-changesetcommitted #046f7079b3: lion.txt has format as an entry, not comment, now for better or worse.
 05:24Ico-changesetcommitted #527ff6eb9a: * Sending Theminds.suo upstream * Quirk.cs has its Conditional ENABLE_CONNECT removed since it's no longer in the same namespace and things were getting weird
 05:24Ico-changesetcommitted #28e998e161: * Oops, missed a SuppressKeyPress in InputBox for Keys.Enter. * Broke up JoinPartQuitFilter.filter (now called `OnLine`)* New methods: findNickAndIp, formLine, findReason [very Descartes, I know]* Those are in addition to the already existing deductTemplate* These are now ready to be unit tested. Fun, like "Pocahontas." * lion.txt's part.you now has {1} for reason! * Page.Main.cs -> App.cs * Cut down line breaks in Ideas.cs
 05:24Ico-changesetcommitted #58342fa56e: De-retardifying filter filenames. I spend more time wrangling with SVN than coding.
 05:24Ico-changesetcommitted #e9b3bdabf3: De-retardifying filter filenames.
 05:24Ico-changesetcommitted #515ab94ee0: De-retardifying filter file names
 05:24Ico-changesetcommitted #d40d692001: * static void Main() moved to App in prepartion for unit cases. * Tests: InputBox.ParseText() [new-function smell]* Folder: Theminds\Tests* File: InputBoxTest.cs* Using inheritance & protected methods to blow your mind.
 05:24Ico-changesetcommitted #37e18ce1b0: SuppressKeyPress now not used so retardedly.
 05:24Ico-changesetcommitted #45b1f47451: ZE BEEPING HAS STOPPED!
 05:24Ico-changesetcommitted #a95a18fa2c: Lion.cs -> Ideas.cs; Ideas.TestContains(string, string[]) added and used in JPQ filters; post-build event to copy lion.txt added; TODOs added to Page.cs
 05:24Ico-changesetcommitted #2958cdd783: Quirk now uses the Aspiration namespace. Muahahaha.
 05:24Ico-changesetcommitted #0469a194d3: * JoinPartQuit filter is now in its own class.* Stores Page.Lion in a private static `lion` variable.* privmsg comment is now 50% less stupid * We forego JPQT[] and now use the new `lion` (<< Ideas).* Get(string), Get(string*2), TestContains(), parseLine, constructor* New file: lion.txt * Removing stupid comments from Page.cs * Moving Buffer help in Page constructor to InitBuffering() * Plainclothes (non-code) and Filter folders created
 05:24Ico-changesetcommitted #66b16b45d6: Now adding on the layer of delicious svn:ignore goodness, correcting obj\ ignore
 05:24Ico-changesetcommitted #0a50a6d9fb: Now adding on the layer of delicious svn:ignore goodness
 05:24Ico-changesetcommitted #78880e9ca0: All right. Let's see if we can remove the obj directories from SVN's little mind.
 05:24Ico-changesetcommitted #63ca96745e: * NEW HASH, BABY! Dictionary<int, string> channelNames maps hashCodes to string names (protocol!) Yes! * MoveChannelTab, handling tabber.Moved event, handles all your channel tab switching needs! * TabsController.MoveToNext() and its hot sister TabsController.MoveToPrev() now fire Moved events like they just don't care! * New svn:ignore love. Trying to get SVN to ignore exe files: no avail. Good thing .NET binaries are small.
 05:24Ico-changesetcommitted #aec0d4199b: * currentChannel (not CurrentChannel) is now private (oops). * LogBox class is now public. * Added CurrentLogBox member to IBuffer and implemented it. * Implementing buffers. ** Two dictionaries: logBoxes and tabs. ** Key protocol: "server-name." + [optional channel] ** Page.AddChannelTab() method for new static LogBoxFilters.NewChannel event. ** logBox added to logBoxPanel (new). Separating logBox attribute settings in Page.SetUp() to its constructor. ** Not finished yet. * Removed Quirk's finalizer trick because of possible performance decrease I read in an article somewhere.. * No longer relying on dnsResolved to check for certain Dispose actions; now relying on null checks on variables. ** Make better?
 05:24Ico-changesetcommitted #566bed9cb9: End test for svn:mime-type
 05:24Ico-changesetcommitted #f3834872d2: Testing svn:mime-type
 05:24Ico-changesetcommitted #f05cb7107c: * Quirk.started will always be false if Quirk.dnsResolved is false. Removing this unnecessary variable * Suppress Quirk's finalizer and throw exception if it is called (only occurs if the developer forgets to dispose Quirk). * Added Application.EnableVisualStyles() call to Main() to enable Windows XP-goodness.
 05:24Ico-changesetcommitted #5f9910fbbc: (shadytrees) TabsController now handles closing the last tab sanely. Moving QuirkStart to its own file for FxCop Object virtual stuff. c(del) no longer needs to handle count=0. Renaming randomAddressIndex to rndAddressIndex.
 05:24Ico-changesetcommitted #8cceed93c3: (shadytrees) Moved AddLine logic to Page.Buffering. Added comment documentation to Page.Buffering, Quirk, and LogBox. Moved LogBox.LineDel (not Quirk.LineDel) out to Theminds namespace scope. Tested: everything seems to work. Created IBuffer interface for LogBoxFilters.static. Added static nextID to Quirk. LogBox.addLineHelper (private) is now LogBox.AddLine (public) thanks to our buffering refactoring.
 05:23Ico-changesetcommitted #8833a663f8: PONG now comes after PING; New event: LogBox.PostLine
 05:23Ico-changesetcommitted #3f955b9bd7: No more pingThread; added colors per Bug 1
 05:23Ico-changesetcommitted #274899a337: Now we add it back. Sigh.
 05:23Ico-changesetcommitted #59f7457753: Testing SVN perf per http://groups.google.com/group/google-code-hosting/browse_thread/thread/70992aaf74dd90ee
 05:23Ico-changesetcommitted #098428dece: Add back the obj directories. This should take 10 minutes thanks to Google.
 05:23Ico-changesetcommitted #a2fb45a304: Removing obj directories from SVN for sanity; csproj updates: putting obj/out stuff in /bin (no more dll, pdb, &c cruft)
 05:23Ico-changeset