Entries Tagged as 'Computer Science'

Monday, June 9th, 2008

5 Rules I Had to Break to Create a Senior Project that Rules

After spending eight months on GNOME Do, I gave a brief presentation (followed by a great, not-so-brief Q&A session) to an auditorium full of Computer Science students and faculty. In the presentation, I discuss five “rules” explicitly and implicitly imposed in undergraduate Computer Science coursework that I had to break in order to create GNOME [...]

Friday, April 18th, 2008

GNOME Do White Paper

Abstract
The typical computer user interacts with a number of different resources on her computer. These resources are accessed via many interfaces, including menus, location bars, icons, file browsers, and shortcut keys. We plan to consolidate these interfaces by creating an application that indexes items found in the user’s desktop environment (e.g. documents, contacts, applications, multimedia) [...]

Monday, March 3rd, 2008

Computing Machinery and Creativity

In an article entitled Computing Machinery and Intelligence, Alan Turing describes the Turing test, his famous criterion for machine intelligence: a computer can be considered a thinking machine if a human interlocutor, after asking the computer a series of questions, cannot tell whether he is conversing with a machine or with another human. After describing [...]

Saturday, January 26th, 2008

She Blinded Me with Haskell

I’m really fortunate to be taking some amazing courses from some awesome professors in my last semester as an undergrad at Penn; I’m taking a course on technology and policy from Matt Blaze, and another course on functional programming from Benjamin Pierce. After only a couple lectures from Matt Blaze on technology and privacy, I’ve [...]

Monday, February 5th, 2007

Merge k sorted lists in O(nlogk) time

Here’s a neat little algorithm written in python to merge k sorted lists in O(nlogk) time using a k-element min-heap:
# Lists is an array of sorted lists (arrays):
#   [ [...], [...], … ]
def ListMerge(Lists):
  # The number of elements awaiting merge in each list.
  sizes = [len(L) for L in Lists]
  # Create a heap with a slot [...]

Thursday, January 18th, 2007

Dynamic Stack Allocation

Wanting to re-familiarize myself with Objective-C, I wrote a mergesort method in an NSArray category:
- (NSArray*)mergeSortArrayUsingSelector:(SEL)comparator
{
  id buf[[self count]];
  [self getObjects:buf];
  mergesort_(buf, [self count], comparator);
  return [NSArray arrayWithObjects:buf count:[self count]];
}