January 14, 2017
2 min read
Last month, I started reading A Pattern Language: Towns, Buildings, Construction. It’s a book about architecture that contains 253 rules for building everything from metropolitan areas (2. The Distribution of Towns) to houses (221. Natural Doors and Windows).
There’s so much to talk about from this book, but one pattern in particular caught my attention: 20. Minibuses. Here’s a quote from the passage:
Buses and trains, which run along lines, are too far from most origins and destinations to be useful. Taxis, which can go from point to point, are too expensive.
To solve the problem, it is necessary to have a kind of vehicle which is half way between the two—half like a bus, half like a taxi—a small bus which can pick up people at any point and take them to any other point, but which may also pick up other passengers on the way, to make the trip less costly than a taxi fare.
The system hinges, to a certain extent, on the development of sophisticated new computer programs. As calls come in, the computer examines the present movements of all the various mini-buses, each with its particular load of passengers, and decides which bus can best afford to pick up the new passenger, with the least detour.
Replace “mini-buses” with “uber cars” and that quote reads like a convincing pitch for uberPool.
I don’t think that anyone could have reasonably predicted when the book was published in 1977 that, while mini-buses would not become widespread, just give the idea a couple of decades until the internet takes hold and Moore’s Law makes it possible to build an iPhone, and then the concept of a mini-bus would be possible.
I think there are two takeaways here:
A Pattern Language: Towns, Buildings, Construction stands the test of time. Mini-buses didn’t take hold, but the idea was clearly in the right direction. There’s a lot of “I never thought about it that way” moments in this book.
Human ingenuity is a very strong force. I’m generally not overly optimistic on any one specific technology (e.g. A.I., genetic sequencing, renewable energy). But on the whole, I am optimistic that things will be better in a decade than they are today—and I do mean that in the broadest sense. Who knew 40 years ago that mini-buses would become uberPool. I don’t know what’s coming tomorrow. Whatever it is, though, it will probably be better than what we have today.
July 31, 2016
4 min read
Note: This op-ed was originally published on page six of the January 21, 2016 print issue of the Middleton Times-Tribune. This 750-word piece is the distillation of a much longer research paper I wrote for my college freshman writing seminar, Property, Wealth, and Equality.
As a kid, I loved sledding down the front yard on wintry Wisconsin afternoons. I remember that one winter a while back, my older brother got a neon-green SnowSlider. This sled, to use tech parlance, disrupted my family’s sledding ecosystem. My chintzy plastic sled (the kind that is built like a miniaturized kiddie pool) was obsoleted by the svelte SnowSlider with its slick and speedy coating.
But as much as I wanted to try my brother’s speedy new ride, he had no intentions of sharing. Even when I went out sledding by myself, I was never allowed to the use his sled.
Of course, we all have stories like this. Whether it’s between siblings or coworkers or friends, everybody has a story about being on the wrong end of greed and selfishness.
And recently, we all have witnessed this same phenomenon develop in the tech industry. Instead of claiming exclusive sledding rights, tech companies are fighting over intellectual property rights—think patents and copyrights. They are making expansive intellectual property claims that threaten to stifle future improvements and innovations.
The solution to this problem is clear: intellectual property law must promote, not prohibit, technological innovation by limiting the scope of property claims. Without making these changes, we might never see the Amazons, Facebooks, and Ubers of tomorrow because the moat of intellectual property will have blocked their entrance.
In fact, news came out recently that Google plans to re-architect its implementation of the Java APIs in the next major version of Android. Because Java APIs are like the foundation of the house, replacing them is not trivial. Even though the courts have already found that Google’s codebase is original and unique, an ongoing appeal forced Google to dedicate considerable efforts to what essentially amounts to treading water.
If not for Oracle’s lawsuit, Google could instead spend these man-hours improving its software in tangible ways. It’s hard to quantify and report the loss of future innovation. But these losses are real, and we are starting to feel the treacherous side-effects today.
I recognize, though, that changing the law is no easy task (and rightly so). But there is precedent that can be considered when thinking about intellectual property in technology: water rights in the 19th century West. While 21st century technologists and 19th century settlers have little in common beyond entrepreneurial spirit, lessons learned from the West are still applicable today.
In the West at this time, the first settlers had many advantages. Processing precious ore required building mills along rivers. And as the first to arrive, these settlers had their choice of the best land and water sources. Plus, cordoning off a large swath of waterway had the knock on effect of limiting others’ mining potential.
When legislation finally caught up to the miners, the rules changed. A use principle was enacted, which simply stated that you had a right to water only if you made use of it. Rampant speculation and exorbitant claims, like my brother’s exclusive right to the SnowSlider, were no longer valid.
We can apply this principle to software, too. One function—one idea—can have a myriad of uses. You can use a dynamic pricing algorithm to sell stadium tickets (SeatGeek), taxi rides (Uber), or diapers (Amazon). Under the use principle, because each company uses the pricing algorithm for specific applications with unique codebases, all of them have the right to innovate, but none of them can claim ownership over the bigger idea.
However, some say that weakening intellectual property protection will actually discourage innovation by lowering financial incentives. While this is a valid concern, the reality of the legal landscape suggests a more pressing issue. According to Unified Patents, an industry organization dedicated to reforming patent law with members including Google and Adobe, patent trolls accounted for 92% of all patent lawsuits in technology in 2015. These patent trolls take hundreds of companies, big and small, to court at once, relying on the current intellectual property law to exact money from legitimate companies.
Instead of giving out broad intellectual property to the first creators of technology, we must reform intellectual property along the use principle to allow future companies to continue to innovate. Amazon didn’t create the first online marketplace, Google wasn’t the first to make a search engine, and Apple’s iPhone wasn’t the first phone. Let’s make sure they’re not the last.
July 30, 2016
1 min read
Unsurprisingly, MATLAB’s timer object is great for scheduling code to run at specified time intervals.
However, consider the following test case:
function  = timerTest
% initialize a timer
t = timer('TimerFcn',@counter,'Period',1,'TasksToExecute',5,'ExecutionMode','fixedRate');
% keep track of how many times the timer has run
count = 0;
% start timer
% code that is executed on every timer cycle
count = count + 1;
% display how many times the timer has run
I expected that the Command Window would display 5. But it actually displays 1.
Why? It turns out that timers don’t automatically block the main thread. After the timer is started, MATLAB continues to execute more code, while keeping track of the timer on the side. When the timer needs execute again, MATLAB stops, executes the timer callback function, and then continues on its way.
But I wanted to process a matrix that the timer first had to populate, meaning that I needed the program to wait until the timer finished until continuing executing more code.
Turn out, it’s just this simple:
wait(), and MATLAB will not continue executing code until the timer has finished.
April 30, 2016
6 min read
Out of curiosity, recently I’ve been reading through some of the reports included in Princeton University’s strategic planning framework, which “identifies key goals and major priorities for the University and that will serve as a guide for allocating University resources and prioritizing new initiatives.”
Alas, there is nothing of exceptional note to be found in these reports. They contain guidance and suggestions that, at least to someone engrossed in that bubble of higher-education right now, are exactly what you would expect an elite university would be planning to do in the next 5 to 10 years. There are recommendations to bolster study abroad efforts, to create a new interdisciplinary environmental institute, and to establish a statistics and machine learning department.
While I was somewhat disappointed that there were no juicy details to be discovered, I suppose that because universities are institutions that hope to exist in perpetuity, that necessarily demands a certain level of patience, deliberateness, and boringness in the overall decision-making process.
Points of interest
That being said, there were a couple of nuggets that I picked out that are of passing interest—mostly in the “Wow, this is how bureaucracy works” sort of way.
From the report submitted by the Task Force on the Residential College Model
Encourage Community – During “study breaks,” place board games around in order to encourage students to engage socially beyond merely grabbing food and departing.
First of all, “study break” is in quotes because it is a blatant misnomer. The correct phrase to use would be: university-sponsored-free-food-event. Something in this quote is just odd about how the university is so explicit in social-engineering. Of course, I recognize that everything the university sets up in its undergraduate education—even just the very idea of a centralized campus where people live and learn together—is to some degree in the name of socially engineering certain desirable outcomes and results. But is it necessary to go into such minutiae as to officially recommend placing out board games during a study break?
More from that same report:
Nomenclature: Encourage professional staff and students to refer to what is currently considered “upperclass housing” to “non-affiliated housing” to breakdown the bifurcated experience students feel as their “childhood” being in the colleges” and “adulthood” being outside of the colleges.
“Childhood” and “adulthood”? I’ve been at the university for less than a year, but I’ve never once heard anyone at Princeton classify their experience with this dichotomy. If “childhood” is living in the residential college and having a university-sponsored meal plan. Then is we “adulthood” really moving into a different university dorm and joining an eating club? There are many ways in which the experiences of freshmen and sophomores differ from juniors and seniors, but moving to a new on-campus dorm and paying upwards of $9,300 for board doesn’t strike me as “adulthood.”
From the report submitted by the Committee on the Future of Sponsored Research:
New internal support for research will strengthen the proposals of Princeton faculty, increasing the likelihood of positive funding decisions, with the overall outcome of a virtuous cycle of more funds for research, enhanced research activity, and improved prospects for acquiring additional funding.
There is a real possibility that this could place Princeton at a considerable competitive advantage vis-à-vis its peers. Now is not the time to retrench. There has hardly been a more exciting time in the life sciences.
There has been much discussion recently about the flatlining of government research dollars flowing into universities. From the committee’s report, it appears that Princeton has been relatively resilient against these stresses, but the committee recommends that the university create robust mechanisms for internal research funding to foster bold research, and to better position Princeton researchers to obtain the limited government funds still available.
This plan for increased internal funding does seem quite sensible: Princeton should use its current competitive advantage to position itself for future success. That’s the general formula to creating an institution in perpetuity. However, the scale of the endeavor cannot be underestimated. In the spring of 2014, the university had 495 professors, 80 associate professors, and 180 assistant professors. Under the proposal from the committee, four internal funds geared toward both early-career and mic-career professors would fund $7.4 million to 60 faculty members per year, partially funding approximately 8% of the faculty. And I say partially because in 2013 the average chemistry professor received $596,200 in new awards, the average physics professor received $363,800, and the average molecular biology professor received $688,400. Arguably, if government funding were to hold at current levels or even decrease by 10%, Princeton would have to do more than what is proposed here to meaningfully offset those effects. Of course, the good news is that $7.4 million per year can be sustained by a $148 endowment, and $148 million is only 0.63% of Princeton’s actual $22.3 billion endowment.
This is all to say that while it’s possible for the university to become more self-reliant in research funding, it’s inconceivable in the foreseeable future that Princeton, and other universities, will not be primarily dependent on government dollars for research.
That’s all of the thoughts I have for now about these reports, but I’ll probably come back to more of the strategic planning reports in the future. I’m starting to find that these sorts of primary source documents are much more interesting to read than the news releases that surround them. There is some level of exposure to the inner thought process of the authors of the reports that you can only understand from reading the reports yourself. So wherever your interests are, I would suggest that you do the same: find the relevant primary source documents and dig in. You don’t always need a journalist to stand between you and the information. If you want to be a journalist, read journalism. If you want to be a business executive, technologist, or anything else, read what the people in the industry are writing themselves.
January 25, 2016
3 min read
Here is how to subscribe to a bulletin board type mailing list, high-volume and low importance, while maintaining your email sanity.
1. Bundle It Away
On a high-volume email list like this, most of the emails are totally irrelevant to me. While I want to be able to scan through and catch any interesting upcoming events, I don’t want them cluttering up my inbox. So I hide them away.
This is a typical email.
For this, I use Google Inbox’s bundling feature. I filter out all emails from this email list and show the bundle once per day. Every morning, this bundle will show up in my inbox, and I can quickly scan the subjects and see if anything is of interest. It’s a nice daily briefing of interesting events happening around campus.
It’s important to make sure that these emails don’t reach my viewable inbox as they arrive. It’s too easy to check for new emails every 15 minutes, even though they are of minimal importance.
Here are my bundle settings.
2. Automatically Delete It
This is the critical step. After a month on a real bulletin board, flyers are torn-off, covered up, or rained away. And because people treat these mailing lists like bulletin boards, it makes sense to treat these emails the same. I don’t want all of this cruft sitting around in my email. It makes searching more cumbersome and takes up storage space in my inbox.
If Google stores your email, then you can do this by running a script on Google App Engine. I’m using a script from John Day, and I’ve set the automatic delete time to be 5 days.
Public bulletin boards are a staple on college campuses.
But more and more, information about campus happenings are advertised online through a combination of mostly Facebook and Email.
Hearing about events through Facebook is great. Things come and go on the timeline. I can scroll through events, keeping note of the interesting ones. There is a very low mental burden of having all these events on my timeline. They just come and go without any hassle.
But using email as a bulletin board is a little more problematic. Fundamentally, email is more like a physical mailbox than a public bulletin board. Ideally, I would like to keep the ratio of information-to-junk as high as possible, which is why I don’t subscribe to many promotional mailing lists. I have a higher standard of quality for emails than I do something on Facebook. Keeping the information density as high as possible means that the important emails aren’t loss through the fluff.
Plus, coming through a high-volume email list can start to feel like work. Once every two weeks there is an interesting email, but every other email puts an administrative and mental burden on you—forcing me to read, skim, and delete it.
This solution takes that burden away. It coalesces what could be 10s of context switches during the day into one nice morning roundup. And you never have to worry about managing any of it.
Inbox zero. 😊