The International Affiliation Network of YouTube Trends (ICWSM 2015)

In 2013 and 2014, I collaborated with Rahul Bhargava and Ethan Zuckerman to collect the top YouTube trending videos in different countries and analyze them as a social network. We 1. developed a new measure of similarity, 2. found that the similarities between countries were much stronger than the differences, and 3. observed that migration between two countries increased their similarity, but a high level of migration made countries less connected on average. Link.


ResourceListener: many endpoints, many requests

While building the new MediaMeter Dashboard tool, the team at the MIT Center for Civic Media faced an interesting design challenge: keeping track of multiple requests to each of multiple API endpoints and rendering views when the right data is ready. For more context, we designed the Dashboard as a front end for the Media Cloud API from Harvard's Berkman Center. We wanted users to be able to enter several searches and compare the results in many different ways (e.g. result count over time, word frequency, text snippets). What's more, we wanted the tool to be extensible, so it was easy to add new visualizations or accommodate new API endpoints. So we're creating a request for every search/endpoint combination, and each visualization could potentially depend on any combination of them. To make all these requests manageable, I augmented backbone.js's built-in events with a ResourceListener class.

ResourceListener is based on the EventAggregator pattern. A single object aggregates all events related to API requests. All of the different visualizations can then listen to that object for resource-related events, rather than listening to specific models and collections directly. To use the ResourceListener, you need to add a "resourceType" attribute when defining models or collections. Then, after creating the models, simply pass them to the ResourceListener's listen() method. Every time a request is made, the ResourceListener will fire a "request" event and pass the model or collection as a parameter. When the request completes, the ResourceListener will fire a "sync" event, again passing the model as an object. If your only interested in responses from a particular endpoint, you can instead listen to "sync:type" events, where "type" is the "resourceType" attribute of the model or collection. The ResourceListener also fires "resource:complete:type" events when all resources of a particular type are complete, and a "resource:allComplete" when all resources of all types have finished. By passing the ResourceListener object to your views, you can then listen for exactly the events you need, and render as soon as they're complete, without waiting for other requests.

ViewManager: Persistent Views in Single-Page Web Apps

JavaScript frameworks like backbone.js make it easy to create web app content based on the path using Router and View objects. But what if you want some views, and their state, to persist across certain routes? That can be tricky, so I created a simple ViewManager class to take care of the hard parts.

For a concrete example, consider an application that shows a search form (SearchView) and displays the results (ResultView) when it's submitted. You might want to keep displaying the search form along with the results, in case the user wants to modify their search (this is exactly the case that inspired ViewManager while I was working on MediaMeter Dashboard). Following best practices for single-page apps, you put the search results under a different path from the blank search form to allow links directly to the results. But now it gets complicated. If the user gets to the results from the search page, the SearchView already exists, but if the user is coming from a link, the SearchView needs to be created. Same route, different behavior based on the previous route. One approach would be to remove and destroy all views and create them anew every time the route changes. But on top of potentially hindering performance, creating a new view every time destroys useful View state, for instance: whether components of the view are expanded or collapsed.

ViewManager makes it easy to persist views across routes by providing a factory to create views when needed, and a method to automatically hide/show views (similar to the d3.js general update pattern). The getView() factory method takes a View constructor as an argument and either returns the existing view of that class, or creates a new one. The client code doesn't need to keep track of which views already exist, just always call getView() and you don't have to worry about creating duplicates.

The showViews() function is the other half of ViewManager. This function takes a list of views to display, hides any existing views not in the list, and adds any new views that aren't already displayed. If one of the views is already displayed, it won't be recreated and all of the DOM elements will maintain their state. This functionality is also really helpful if you want to add a fade or slide transition when a view is shown or hidden, but don't want to trigger it on route changes.

New Hackerspace Design Patterns

The wave of hackerspaces in the US over the last decade was triggered, in part, by the collection of the hackerspace design patterns, best practices that had been developed in European hackerspaces. This year at Chaos Communications Camp, Mitch Altman will be presenting an updated list of hackerspace design patterns and has asked the community for input. Here are my contributions based on several years of hackerspace administration.


Replacement Pattern

Problem: Volunteer roles require developing new skills and learning from the successes and failures of past volunteers.

Solution: Volunteers should start training their replacements as soon as they take on a role. Having more members with the necessary skills will make it easier to find a replacement when the time comes. Also, the more members who understand a particular volunteer role, the easier it will be for the volunteer in that role to communicate with the membership.

Principles Pattern

Problem: Members in a large group have different values, making it difficult to make decisions.

Solution: Early on, create a list of "common principles" or "points of unity" that describe the ideals that were important to the early members. These ideals should be explained to all new members. Debates should be framed in these common principles. Principles can be revised, added, or deleted, but only if there is consensus.

Mentor Pattern

Problem: On-boarding new members is difficult. New members can have trouble finding the resources they need and learning their responsibilities as members.

Solution: Every new member is assigned an experienced member as a mentor. When the member has a question, they can go to the mentor to find the answer. If the member is acting out of line with the group's principles, the mentor can talk to them.

Caretaker Pattern

Problem: There are a lot of space usage decisions to make, but most are irrelevant to any particular person.

Solution: Appoint a caretaker for each zone in the space (machine shop, craft room, etc.) The caretaker's contact info is posted publicly in that zone. If a member has a question or a problem in that zone, they can contact the caretaker to fix it. The caretaker gets final say on space usage decisions.

Outreach Pattern

Problem: Your space is almost entirely young, middle-class, white men and anyone else feels less comfortable using the space.

Solution: Actively increase your group's visibility in communities with higher percentages of women and underrepresented minorities. Place more flyers, advertise on mailing lists, and give these groups advance notice of classes and workshops before announcing them to current members and their friends.

Pot-Lock Pattern

Problem: Maintenance and cleaning is boring and no one wants to do it.

Solution: Hold a combination pot luck and lock-in. Everyone works on maintenance and cleaning and takes a break to share home-cooked meals with each other. No one leaves until time is up.

Conflict Resolution

Signage Pattern

Problem: Members aren't doing something they should.

Solution: Put a signs explaining correct procedure as close to the problem as possible, e.g. stencil "Clear off before you leave" on flat surfaces.

Physics Pattern

Problem: The group makes a lot of rules, but they are often ignored.

Solution: Instead of creating rules, make it physically impossible to do the wrong thing, e.g. instead of saying "turn the lights out when you're done," put the lights on an automatic timer.

API Pattern

Problem: Hackers don't like unnecessary rules, and rules are often unenforceable.

Solution: Instead of rules, create procedures for solving problems. For example, create a "parking ticket" that members can place on abandoned projects in their way, and a standard way to notify the group about the ticket. Allow anyone to dispose of an abandoned project a certain amount of time after a parking ticket has been issued.

Anti-Popularity Pattern

Problem: Conduct complaints turn into popularity contests.

Solution: When discussing conduct complaints, judge actions instead of character. Be clear about which specific actions were inappropriate and why. This has the benefit of reinforcing behavioral norms for other members.

Dossier Pattern

Problem: The board has received a complaint about a member, but the member says they didn't understand the rules. The board members are new and have no way to know whether the member has been a problem before.

Solution: Keep records of all member complaints in a system that is confidential and searchable. Even if someone doesn't want to make a formal complaint, leaving a note can help establish whether there is a pattern of misbehavior and help future boards follow up.

Anti-Kibitzer Pattern

Problem: Everyone has an opinion on how a task should be done, but no one shows up to do it.

Solution: Make it so that members have to put some effort in before they get to have input. Have discussions in committee meetings outside of general meetings, and require homework (e.g. email in proposals beforehand). If someone doesn't show up regularly, or doesn't do constructive work, stop inviting them to the meetings.


A graceful end to Seltzer development

The Kickstarter I’ve been running for Seltzer (a tool for managing cooperatives) finished last night, at just shy of 1/3 of the funding goal. While the project wasn’t successfully funded, the crowdfunding campaign was far from a failure.

Over the past few weeks, I’ve learned an incredible amount about who is actually interested in Seltzer, and how much they’re able to participate. I received dozens of encouraging messages from organizers and administrators telling me how much they needed software like Seltzer. And I'm incredibly grateful to everyone who did pledge money to the project. I know many people stretched themselves to give generously. But, in the end, it wasn't enough to fund the project. Several people have told me I should have done an Indiegogo so I’d still get the money that was pledged, but here’s the secret: the campaign was as much about gauging interest as it was about raising money. The main goal of Seltzer has never been to create an application with a specific set of features, but to cultivate an open source community that could work together on an application that meets their common needs. No amount of money can buy that. Now I know that the time isn’t right, and I can apply myself more effectively elsewhere.

So what specifically did I learn? I had expected most of the support to come from people and organizations that were already using Seltzer or at least knew what it was, but I found just the opposite, which might mean that the existing version is actually good enough for everyone using it. I’d also expected many more small-dollar donations but was surprised to see that I got more $40 donations than $10 or $20. Data management isn’t sexy, so I realize now that those small dollar donations needed a more exciting reward to overcome the "sign into Kickstarter" activation energy.

I’d also expected more support from existing hackerspaces, both in the form of larger pledges and encouraging members to make smaller pledges. Members of a few spaces did take this on, but not as many as I’d planned on. The biggest challenge was establishing and maintaining contact. If I could do it again, I’d have started reaching out to hackerspaces months earlier and held regular calls to keep the momentum going. Volunteer organizations move slowly, and are easily distracted.

I’m a little sad that the campaign didn’t get funded, but it’s important to know when to end a project gracefully. So what does this mean for the future of Seltzer? Well, I won’t be developing a new version any time soon. Instead I’ll continue answering questions and reviewing bug-fixes, but no new features, on the existing version. Edit: And don't forget, you can still write your own modules to integrate with the existing code! I’ll also continue organizing people around cooperative software and linked data. If you want to be involved, join the cooperative software mailing list. I’ll also keep following exciting tech developments like JSON-LD. Who knows, maybe there will be a resurgence in interest for Seltzer later on, and I'd certainly consider another crowdfunding campaign, maybe over summer in some future year. In the meantime, it looks like I'll have four-day weekends for the rest of the this summer, so I should be able to relax a bit and catch up on reading and other side-projects.

Art, Code, and Asking

As a programmer, I know that code can be beautiful. As an artist, I know that code is not art. I don’t mean to say that code is in any way less, just different. And the difference is important, particularly when it comes to asking for support.

It’s a very exciting time for artists, as many turn to crowdfunding to support themselves. Either through single-shot funding campaigns, or ongoing patronage, artists are asking their fans for direct financial support, and fans are happy to give. The Boston-based musician Amanda Palmer has led the way, raising over a million dollars on Kickstarter to produce her most recent album. She reflects on the campaign in her book, The Art of Asking. In a passage that hit particularly close to home for me, she recounts a conversation with her mother, a programmer. As a teenager, Amanda had accused her mother of not being a “real artist” and years later, her mother told her:

You know, Amanda, it always bothered me. You can’t see my art, but… I’m one of the best artists I know. It’s just… nobody could ever see the beautiful things I made. Because you couldn’t hang them in a gallery.

Amanda came to recognize the unappreciated beauty of her mother’s work, and I have no doubt it was beautiful. But art is not just about beauty.

A few years ago, I was sitting in a client’s office in San Francisco, at a tiny desk overlooking the Highway 101 onramp, listening to music and writing code. The music was beautiful, but more than that, it showed me an entirely new perspective, that somehow felt deeply familiar. And in that moment, I felt a little more connected to humanity, and a little less alone. But I was sad to realize that my work would never help anyone else feel that way. I remembered a quote from Maya Angelou:

I've learned that people will forget what you said, people will forget what you did, but people will never forget how you made them feel.

Art catches and holds people’s attention by helping them feel new things. My work as a programmer, on the other hand, was forgettable. In fact, there’s a thing in software called the principle of least surprise: the better your code is, the less people even notice it exists. For a while, the thought of being unnoticed and forgettable left me with a sense of loss.

Relief came when I realized that although my code might never touch someone directly, it can (and has) helped artists who do. Just as the artist inspires the cancer researcher, the programmer empowers the artist. While the thought put an end to my mini existential crisis, some consequences remain, and that brings us back to asking for support.

Fans like Amanda Palmer’s give because they want to. They’re grateful for the gift of art, and they want to reciprocate. Emotion is a great motivator. But what about code? Software is complex, and beautiful, and important, but it doesn’t inspire the same emotion or generosity, because you never see the beauty. You can describe the types of things software will make possible, but that can seem overly abstract. I would like to think that crowdfunding can work for software as well as art. In fact, I’m currently running a campaign for software to manage makerspaces and other cooperatives. But how can programmers create the same connection with their users that artists create with their fans?


Data Sculpture: Media Perspective

For those of us who work with data, we get used to visualizing in our mind and develop an intuition for it. For everyone else, data visualization usually takes the form of a diagram on a small, two-dimensional screen. Standard data plots can take an exciting idea and turn it into something boring, or even worse, drudge up memories of panicked high school math exams. This experimental data sculpture attempts to draw the viewer into the visualization and connect them with the data on an intuitive, physical level. The sculpture shows the amount of coverage the U.S. mainstream media gave to Net Neutrality between January 2014 and April 2015, while the FCC was creating revised Net Neutrality rules. Each of the 33 panes of clear acrylic represents a two-week time slice, with the size of an etched circle corresponding to the amount of coverage. The top row shows total Net Neutrality coverage, with the other three rows representing coverage of "innovation," "discrimination," and "regulation," in reference to Net Neutrality.

Attention peaks four times: when the FCC announces its proposal, at the end of the public comment period, after President Obama announces support for reclassifying broadband, and finally when the FCC releases its new regulations. Coverage is notably low during the public comment period, the primary time individual citizens had a chance to influence the policy. The visualization also shows that "discrimination," language used in earlier technical and legal discussion of Net Neutrality disappeared from mainstream media coverage, giving way to the more idealogical and economic terms "innovation" and "regulation." The viewer can explore these data by walking around the sculpture, standing back, or standing close, making it easy to engage without a digital interface or specialized knowledge.

Cross-posted to MIT Center for Civic Media

Advice for First Generation College Students

Some students entering college this fall have prepared their entire lives. But first-generation students, the first in their family to attend college, will leave their known world behind, with little idea of what to expect.

About a decade ago, I was one of these students. Neither of my parents went to college, and my father (despite being one of the smartest people I know) never finished high school. I stumbled my way through four years at MIT, figuring things out as I went, usually by making mistakes. Now I’m back at MIT as a staff researcher, and last year I had the opportunity to serve as an alumni mentor for MIT’s First Generation Project. I was delighted to find that I was able to help some bright young students by sharing my hard-learned lessons. I was also surprised at how common many of the experiences I had were. So I’d like to share those experiences and lessons here in the hopes that they’ll help current first-gen students, and help everyone understand us a little better.

Navigating the College Environment

College culture is very different from the environments–often minority, working-class, and/or immigrant–that first-gen students are used to. The most common adjustment for first-gen students is learning to ask for help! That can be difficult to do when you’re not used to there being anyone to go to. When I was growing up, I learned that asking for help made people do whatever they could to get me to go away. They had their own problems, they didn’t need to deal with mine too. In college, it was a huge revelation that people would not only help me, but be happy to do it (with occasional exceptions). Colleges want their students to succeed! Getting help means talking to peers and professors, studying in groups, going to office hours, asking questions in class, and seeking out resources for counseling or student life issues when needed. Another revelation was that I didn’t need a specific ask. I could go to someone with a problem, and they would help me figure out how to solve it–probably better than I could have on my own. Just as important as asking, is learning not to feel guilty for needing help, instead feeling and expressing gratitude.

Mentorship is one of the most powerful types of help you can seek. The realities of college life can be very different from official policies. Trying to navigate college life by-the-book is often an exercise in frustration, bureaucracy, and confusion unless you’ve learned to read between the lines. A good mentor can help. Mentors are also key for learning what you don’t know you don’t know. An ideal mentor is someone who looks like the kind of person you’d like to grow into. They’ve no doubt learned a lot along the way. They can help you avoid obstacles and direct you towards resources you never knew existed. Finding good mentors can be easier said than done, but the first step is learning to reach out to more experienced people who share your interests and passions.

First-gen students also face a sense of isolation. When you’re a part of two very different worlds, you never quite fit in anywhere. The good news is: that’s OK. It’s more important to become comfortable with yourself than it is to try to fit a mold. A mostly-empty dorm can feel particularly lonely when it seems like everyone has flown home for a long weekend, but you couldn’t afford to. But you’re often not as alone as it seems, and it’s important to find people you can relate to, who you feel comfortable around. For me, this was living in the beautifully dilapidated, graffiti-covered Bexley Hall. And with many colleges now offering first-gen programs, it’s increasingly easier to meet students with similar expereinces. On the flipside, it’s important to venture out of your comfort zone, to fully take advantage everything your new environment has to offer. One thing that helps is to remember that even when you feel like an outsider, it doesn’t necessarily mean others see you that way. You probably have a unique perspective to offer, and if they’re wise, they’ll appreciate that. Similarly, it can be tough to find yourself judged against people who have had more opportunities than you, but instead of resenting it, it’s wise to learn from the unique perspective that they have.


If you’re the first in your family to go to college, chances are you’re paying your tuition with debt, and you won’t have much pocket change. There isn’t much you can do about that, but a few practical tips can make the financial squeeze a little more bearable. Student discounts are everywhere, especially in college towns, so always make sure to ask. Similarly, the Student Advantage card or a AAA membership can easily pay for themselves with discounts on travel and other purchases.

You’ll start getting credit card offers. The only cards you should consider are ones with no fee that offer cash back rewards (usually from 1-5%). If you do get one, never carry a balance. Never put more on it than you have in your checking account, and set a reminder for yourself to pay it off twice per month.

Textbooks are expensive. My textbook collection is still the most costly thing I own, and I’ve gotten rid of most of them! If you can, borrow your books from friends who have taken the class. Otherwise, rent or buy used books, and sell them as soon as you’re done with the class– the resale value drops quickly, especially if a new edition comes out.

Saving money is important, but one of the hardest things for a cash-strapped first-gen student to learn is that sometimes it’s better to spend it. A good rule of thumb is to spend extra money on things that will last a long time, and that will improve your life on a daily basis. That could be anything from a comfortable mattress, to bonding with a group of friends over dinner.

Family Obligations

The purpose of college is self-improvement, which requires a certain amount of self-centeredness. That can put first-gen students in a bind. Less privileged families are disproportionately affected by things like unemployment, physical and mental health issues, and incarceration. First-gen students can face an incredible amount of guilt for focusing on their studies while their families struggle. Trying to help your family and succeed in college can feel like you’re simultaneously playing two games with different rules, and you need to make the right moves to win both. The difficult truth is that, in most cases, focusing on your studies is better in the long run than letting them take the back seat while you help your family. As the cliché goes, you have to put on your own oxygen mask before you try to help anyone else.

I’ve personally struggled to find a balance obligations to myself and to my family, and over many years, I’ve settled on some guidelines that I’ve found helpful. For college students, earning potential is low and money is often more limited than time, so financial help is usually not the most efficient form. If you do need to help your family financially, make gifts, not loans. Counting on getting money back can set you up for catastrophes that are both financially and emotionally costly.

As an alternative to money, emotional support can be incredibly powerful, and the positive, thriving atmosphere of college can put you in a great position to offer it. Colleges usually offer great support and counseling for students, and by leveraging that to take better care of yourself, you can help provide a sense of stability and security to your family. You can also help your family in other non-monetary ways. For instance, if they need a new car, you could see whether anyone in your college network knows someone selling one for a good price.

Unfortunately, well-intentioned help can become unbalanced and unhealthy, so it’s important to develop strong boundaries. One rule of thumb is that if someone is capable of doing something themselves, doing it with them is ok, but doing it for them is not. Another good guideline is not to assume the consequences of anyone else’s decisions or actions. It can be incredibly hard to stick to these boundaries when people you love need help. Offering empathy and emotional support is often a good alternative. As a final thought, sometimes there just isn’t anything you can do to help. When that’s the case, remember that someday, you’ll be in a better position, and even though you can’t go back in time, you’ll be able to pay it forward and offer that help to your own friends, children, and mentees.


Abuse Is Not a Choice, Empathy Is

When we label someone an "abuser," we let them off too easily and invite future abuse into our communities.

Willow Brugh recently wrote a thoughtful post about how communities respond to abusive behavior. She writes, "If we simply kick out anyone who messes up, we end up with empty communities, and that’s not a new future." She calls for alternatives. The post sparked a lively twitter debate, with many arguing that abusers are aware of what they're doing and that placing the onus of "reforming" them on a community is overly burdensome. But, the rare sociopath aside, the very idea of an "abuser" is an anti-bogeyman that prevents us from dealing with the realities of abusive behavior in our communities, and importantly, in ourselves.

At this point, I should note that I'm no stranger to abuse. As a hackerspace director for many years, I was often in the position of responding when someone posed a threat to the safety and comfort of other members, and proudly, often the first person those members turned to for help. I've seen friends and family affected by abuse from strangers, relatives, police, lovers, and spouses. And, I've experienced abuse myself. I know the sting of betrayal, and the long-lingering doubt that comes from being mistreated by someone you trusted. I also know how difficult it is to recognize when your actions are hurting someone you care about, and how much work, dedication, and time it takes to change the thinking and habits behind those behaviors.

Discussions of abuse often insist it's a conscious choice. When asked about dealing with mean people, the terrific advice columnist Captain Awkward wrote:

I vote that you believe hard in the Mean Guy and view the rest of his personality through that lens. Because Sexy Guy is mean. And Sad Guy is mean. And I get it, because when you hate yourself and feel terrible, it makes it more likely that terrible things will escape your mouth. But at the end of the day, being depressed does not excuse being mean. Mean is a choice.

Yes, abuse is inexcusable, but the belief that it's a choice is both incorrect and harmful.

Consider the way a typical two-year-old treats others. They hit, lie, steal, threaten, scream, and any number of other behaviors that, if committed by an adult, would be undeniably abusive. But those children are not evil, they have not made a calculated decision to harm others. Their behavior stems from the inability to look past their own needs and consider the needs of others: in short, an underdeveloped sense of empathy. When I've worked to resolve conflicts in the hackerspace community, the abusive behavior I've seen has always stemmed from the exact same thing. If the offenders had been able to look past their own needs and emotions, they would have had to be either stupid or evil to act as they did (apologies to the Daily Show) but they couldn't.

Crucially, if someone believes abusive behavior is the result of a conscious choice, and they never made such a choice, they conclude that there is nothing wrong with their behavior. They then believe the problem must lie entirely with someone else. In other words, abuse is not a conscious choice, it is a lack of the conscious choice to empathize. Similarly, the false binary of "abuser" and "non-abuser" allows victims of abuse to assume that they could never become abusers themselves, when in fact, victims of abuse are the ones most likely become abusive (see Breaking the Cycle of Abuse: How to Move Beyond Your Past to Create an Abuse-Free Future). This is absolutely not an excuse for abusive behavior, but it suggests a completely different approach to understanding and responding to it. Have you ever looked critically at your own behavior towards others and considered that it might be abusive? If not, there's a good chance that, at times, it has been.

So how should we respond to abusive behavior within a community? I think Willow is right that we need something better than vilification and ostracization. When we say "we're kicking that person out because they're bad" we lose a crucial opportunity for the community to have a dialog about which behaviors are appropriate, and why. Also, no one sees themselves as "bad," so in such a system, they have no incentive to reflect on their own actions. In a wonderful video about how to tell someone they sound racist, Jay Smooth favors the "what you did" conversation over the "who you are" conversation, saying:

That conversation takes us away from the facts of what they did, into speculation about their motives and intention. And those are things you can only guess at, you can't ever prove, and that makes it way to easy for them to derail your whole argument.

What's more, when we label someone an "abuser" we fail to see them as people, modeling the very lack of empathy that causes abuse in the first place, furthering a vicious cycle. Should the recipient of abuse be forced to empathize with their abuser? No, of course not. But the response of the community, if it is to remain healthy, must be based in empathy. In practice, this means first and foremost, supporting and protecting the safety of anyone who was abused, and if at all possible, providing clear expectations to the perpetrator, along with an opportunity to meet them, and the consequences for not doing so. Some people will choose to continue harmful behaviors, and in doing so, choose to remove themselves from the community, but those who remain learn not to place blame, but rather to empathize and take responsibility for their own actions. People aren't problems. Problems are problems and people are people.

Comments of Members of the MIT Media Lab in the Matter of FCC NPRM 14-28 “In the Matter of Promoting the Open Internet”

When the FCC released it's 2014 Open Internet proposal, the MIT Media Lab formed a working group to make an official statement. I was one of the contributors, and I think we produced an insightful document on the importance of Net Neutrality.

This document is the response of members of the MIT Media Lab to NPRM 14-28, “In the Matter of Promoting the Open Internet.” We recognize that the Internet has become the platform for a great many innovations that have changed the face of society and industry. It has provided opportunity for people throughout the world to gain from unfettered access to information and, most important, to create a universal platform upon which advances in computing can propagate and impact the well-being of people everywhere. We therefore feel it is imperative to secure a future where the Internet remains open, without the constraints or restrictions that benefit some economic entities at the expense of the population at large, both in the United States and throughout the world...

Read the full comment.