User Driven Services: 4. Data Portability

4. Data Portability

User Driven Services let people take their data wherever they go.

Mouse and SuitcaseTo exercise choice, we need to be able to move our stuff when we leave, taking it from one provider to another. Users must have the ability to easily move data into and out of the system, on their own terms. Data should be accessible using standard data formats and standard interface protocols. All of the data related to users should be available for download and the ownership rights of all user-specific data must reside with the user or be transferable to the user upon export.

Examples

Plaxo allows seamless integration with Outlook for constant maintenance of contact information. Wesabe and Mint automatically extract financial information from financial services as authorized by users. Third party Twitter clients such as Twhirl and Tweetdeck access Twitter under user authority in order to download activities and upload updates and messages. OpenSocial and Facebook Connect allow third party services access to your social data.

Questions

  • Can users import and export their data in usable formats?
  • Can users export or import on demand, at any time?
  • Can users provision (and de-provision) third parties to access their data under explicit user selected terms?
  • Can users get all of the data and related meta-data out of the system in sufficient detail to work with it elsewhere?

This article is part of a series. It is the fourth of ten characteristics of User Driven Services

:

  1. Checklist with Silver UserImpulse from the User
  2. Control
  3. Transparency
  4. Data Portability
  5. Service Endpoint Portability
  6. Self Hosting
  7. User Generativity
  8. Improvability
  9. Self-managed Identity
  10. Duty of Care

More soon…

This material is based upon work supported by the National Science Foundation under Award Number IIP-08488990. Any opinions, findings, and conclusions or recommendations expressed in this publication are those of the author and do not necessarily reflect teh views of the National Science Foundation.
Posted in User Driven Services | Tagged , , , , , , | 1 Comment

User Driven Services: 3. Transparency

3. Transparency

User Driven Services are transparent.

transparent machine

If we don’t know what’s going on, we can’t make good decisions. Users need simple, obvious, and understandable access to all of the information required to direct each service as desired. We must clearly understand the policies of service providers and must be able to view any and all data retained by service providers, whether about us or about our use of the service.

All communication channels that may be used by the service or associated third parties, and the nature of those communications, should be clearly communicated to users. This is especially true when services may override user directives because of legal action or extraordinary circumstances, such as death or failure in the primary communications channels.

Examples

Creative Commons licenses explain the rights and responsibility for reusing online content in clear, simple manner. Privacy policies are explained before services request private information. Terms of Service are shown prior to beginning transactions. Shipping and handling and other fees are disclosed before consummating online purchases. Users can view their history of online transactions, both at the merchant and the payment service.

Questions

  • Do users understand all of the potential policies, usage, and risks of the service??
  • Does the service have an explicit risk assessment statement available for review before joining the service?
  • Do users understand the services policies for data usage, retention, security, survivability, and propagation?
  • Do users understand how to—and can they—view all data stored about or on behalf of the user (within legal, technical, and security limits)?
  • Is there a clear and verifiable audit trail documenting compliance to user terms?
  • Is disclosure clear, concrete, and evident enough that users actually read and understand?
  • Are users able to view and be alerted when relevant information about them is modified? Is there a coherent revision history of such modifications?

This article is part of a series. It is the third of ten characteristics of User Driven Services:

  1. Checklist with Silver UserImpulse from the User
  2. Control
  3. Transparency
  4. Data Portability
  5. Service Endpoint Portability
  6. Self Hosting
  7. User Generativity
  8. Improvability
  9. Self-managed Identity
  10. Duty of Care
This material is based upon work supported by the National Science Foundation under Award Number IIP-08488990. Any opinions, findings, and conclusions or recommendations expressed in this publication are those of the author and do not necessarily reflect teh views of the National Science Foundation.
Posted in User Driven Services | Tagged , | Comments Off on User Driven Services: 3. Transparency

User Driven Services: 2. Control

2. Control

Users control User Driven Services.delivery control

Once we start a service, we’d appreciate it continuing to respond to our directives, both during interactions and afterwards. User Driven Services give users direct control over both the flow of user experience and the use and propagation of all data associated with the user.

No junk mailUsers control the means and timing of any outbound or distracting communications such as email, telephone calls, and postal mail. Users should be able to opt-in to messaging as desired without requiring any particular intrusion, except as required by law or in otherwise exceptional situations where established, approved means failed to reach the user for vital notifications. Pop-up and pop-under windows should not intrude on users’ web experiences. Junk mail should not arrive unsolicited, either electronically or through the post.

SignatureService providers should verifiably commit to respecting user directives regarding the use and transmittal of user data. The essential terms of that commitment should be presented and understood by all users in clear, concrete, and obvious communications. Users should be able to moderate the scope of data acquired, the tenure of its lifetime with the service provider, the timing and nature of release of that data to third parties, the terms under which such data is released, and most importantly, to whom it is released. Service providers may not be able to provide all potential services if users restrict access to certain data, but that option—fewer or lower quality services based on limited data—should be available to users.

Examples

Software applications can be turned off or uninstalled. Email list services allow users to opt-in, opt-out, hide their subscription, and receive messages immediately or via digest mode. Online communities and chat services allow users to manage their presentation in online worlds: their display name, their avatar, and their presence online. Social networks allow users to accept, cancel, request, and block links with other users. Mashup and widget enabled services allow users to enable or disable functionality at will. Users are queried before divulging profile information to others on Facebook, MySpace, and LinkedIn.

Questions

  • Can users direct the means, frequency, and categories of communications directed to them by the service?
  • Is the user given clear and unambiguous control over how their data is collected, used, and propagated?
  • Can users select the regime under which data is, and is not, shared with third parties?
  • Does the service provider use standard, human/machine/legal readable means for documenting user control of their data and their experience?

This article is part of a series. It is the second of ten characteristics of User Driven Services:

  1. Checklist with Silver UserImpulse from the User
  2. Control
  3. Transparency
  4. Data Portability
  5. Service Endpoint Portability
  6. Self Hosting
  7. User Generativity
  8. Improvability
  9. Self-managed Identity
  10. Duty of Care
This material is based upon work supported by the National Science Foundation under Award Number IIP-08488990. Any opinions, findings, and conclusions or recommendations expressed in this publication are those of the author and do not necessarily reflect teh views of the National Science Foundation.
Posted in User Driven, User Driven Services | Tagged , , , , , , | 1 Comment

User Driven Services: 1. Impulse from the User

1. Impulse from the User

User Driven Services start with the user.

blue impulsePeople engage the world to satisfy needs and fulfill desires. That engagement marks our intent as we try to bend the universe to our will. User Driven Services begin with that essential act, responding to each user’s expressed intent to initiate and drive every experience.

Money HeadIndustrial era corporate systems put the factory and factory owners at the helm, driving demand and shaping customer behavior by segmenting, targeting, and bombarding potential consumers with stimuli designed to increase sales. This intrusive, wasteful behavior exploited opportunities to invade people’s attention in hopes that they might trigger a purchase or lay the groundwork for a future purchase.

In contrast, User Driven Services start with a user’s expressed intention, to buy, to learn more, or to create value in some way, then, they simplify, automate, and speed the path to satisfying that intention.

Examples

Web Browsers navigate to user selected hyperlinks and URLs, not to pre-programmed schedules of shows constructed to be passively viewed. Search engines present results based on keyword queries, not based on demographics or gender.  Emails are sent when you hit send, not before. Cell phones initiate outbound calls only upon users’ direction. Products are shipped when purchased. Credit card information is not requested by vendors until the user has indicated they are ready to make a purchase and credit cards are charged only after explicit confirmation.

Questions

  • Do users initiate and motivate the key interactions with the service?
  • Are service interactions always initiated by expressed user intent?
  • Are users free from invasive, unsolicited “push” approaches such as direct mail, SPAM, and telemarketing?
  • Does the service avoid attention invasion? Or does it exploit user attention to present unrequested messages at inconvenient times about potentially undesired opportunities?

This article is part of a series. It is the first of ten characteristics of User Driven Services:

  1. Checklist with Silver UserImpulse from the User
  2. Control
  3. Transparency
  4. Data Portability
  5. Service Endpoint Portability
  6. Self Hosting
  7. User Generativity
  8. Improvability
  9. Self-managed Identity
  10. Duty of Care

More soon…

This material is based upon work supported by the National Science Foundation under Award Number IIP-08488990. Any opinions, findings, and conclusions or recommendations expressed in this publication are those of the author and do not necessarily reflect teh views of the National Science Foundation.

Posted in Intention Economy, User Driven Services | Tagged , , , , | Comments Off on User Driven Services: 1. Impulse from the User

Introducing User Driven Services

Our world is continually becoming more and more user driven.

world UIFrom cable TV to YouTube, from newspapers to blogs, from Wal-Mart to eBay, from Ma Bell to the Internet, the shift from centralized, structured systems of authority to emergent, collaborations between individuals has been reshaping our political, social, and economic world for generations. This is a trend that has driven—and been driven by—the massive success of the Internet, email, the World Wide Web, eBay, Google, RSS, FaceBook, YouTube, and Twitter. Each of these examples took an existing model and made it more user driven: networking, messaging, electronic publishing, buying & selling, content discovery & advertising, news aggregation/syndication, online video, status updates.

The conclusion: companies which find ways to be more user driven are more valuable, more profitable, and more successful.

User KingWhat does it mean to be “user driven”? At its most basic, it means putting the user in charge, in some way. Fully realized, it means putting the user at the center of the system, as a point of integration, origination, and control. We call these fully realized systems “User Driven Services”.

User Driven Services put users in charge. Users start each interaction, manage the flow of the experience, and control what and how data is captured, used and propagated.  Users are the cause and the controller, working with service providers to co-create collaborations that create value for all parties.

From self-serve gas stations and soda fountains to ATMs and self-checkout grocery stores, companies have been putting users in charge of different aspects of their services for years. With GetSatisfaction—which allows users to self-organize for cooperative customer support—and Facebook—which provides social context for user-generated content—users are not just self-servicing, they provide the core content behind the user experience. Now, through user-centric Identity and API access to most popular online services (Flickr, Twitter, Facebook, etc.), users can direct which parts of their experience are serviced by which providers, allowing unprecedented realtime flexibility in service creation.

Two Users CollaboratingUser Driven Services are redefining how we interact, how we manage our businesses, and how we engage in both public and personal conversations. Businesses and organizations that want to thrive in this new reality would do well to help co-create a new mutually beneficial marketplace for products, services, and ideas. Individuals, participating in this rising tide of personal power, have an opportunity to coordinate with each other and with service providers to craft a future that meets all of our needs, as individuals, entrepreneurs and business people.

Terminology

A few key terms:

System: a group of independent but interrelated elements engineered to operate as a unified whole.

(The systems to which we refer are not natural or conceptual systems, but rather, operating mechanisms designed and implemented to perform intended functions.)

User
: any individual interacting with a system.

Service: a value generating experience available to users through interactions with a system; also the system providing such experiences.

User Driven Services: services that maximize value creation by maximizing user control and authority.

Characteristics

User Driven Services have the following characteristics:

  1. Checklist with Silver UserImpulse from the User
  2. Control
  3. Transparency
  4. Data Portability
  5. Service Endpoint Portability
  6. Self Hosting
  7. User Generativity
  8. Improvability
  9. Self-managed Identity
  10. Duty of Care

We will explore each of these characteristics in a series of articles over the next few weeks.

This material is based upon work supported by the National Science Foundation under Award Number II+-08488990. Any opinions, findings, and conclusions or recommendations expressed in this publication are those of the author and do not necessarily reflect teh views of the National Science Foundation.

Posted in Intention Economy, User Driven Services, Vendor Relationship Management | Tagged , , , , , | 6 Comments

The Great Reconfiguration

The Internet  is undergoing a major reconfiguration.

Digital ChildNo longer is it sufficient for companies to package a value proposition on their website and then drive traffic to it through ads, search engine optimization, and reciprocal links. Today companies must find ways to provide a value proposition wherever the user might be: on Facebook and Twitter, on their iPhones, and even through 3rd party applications accessing deep into the company’s datasphere through APIs and webhooks.

The Internet is reconfiguring around the user, wherever people happen to be.

I’ve been talking with folks in the VRM community about this topic over the last few years. VRM is, at its core, about starting with the user, re-engineering systems to maximize user freedom and control, and placing the user at the point of integration.  Or, as Doc Searls puts it, creating tools for “both independence and engagement”.

For example, I’ve led several discussions at various VRM workshops on what I call “user driven search“: what would happen if the user were truly in control of all the data related to their search and could engage any Search provider they like with the full scope of that information and under the user’s terms?

In the last several months, I have been advocating a new term has that captures the core direction of both VRM and User Driven Search: “User Driven Services”.

When you configure your services around the user as the primary point of origination, integration, and control, you are building User Driven Services.

Over the next few weeks, I’ll dive into what we mean by User Driven Services; consider it a warm up for both the VRM West Coast Workshop 2009 and the Internet Identity Workshop.

More

Posted in ProjectVRM, Search, User Driven Search, User Driven Services, Vendor Relationship Management | Tagged , , , , , , , , , | Comments Off on The Great Reconfiguration

Facebook democratizing TOS? Sort of.

Over the last few months I’ve spent a lot of time talking within the VRM community about the need for a Standard Agreement covering the use of user-provided information in online services. Something that could eventually replace the confusing, complicated, overwhelmingly ignored, and legally questionable Terms of Service (TOS) at so many websites.

Voting

The idea is that we should coordinate a global conversation to develop a Standard Agreement that credibly represents the voice of the user. We’d start by clarifying the data rights for user contributions and eventually cover the entire TOS in a framework addressing the standard kinds of transactions most users do every day online. The immediate benefit for users: ridding the web of nearly all the annoying checkboxes we are currently forced to check, indicating agreement to legal contracts we never actually read.

Facebook has seen the same writing on the wall: users are already in charge. After the fiasco of trying to update their TOS last month, they have turned to a vote of their membership to select the new Facebook TOS to use.

Of course, members can only vote for a slate already approved by Facebook, but it’s a start.

Posted in ProjectVRM, User Driven | Tagged , , , | 2 Comments

TechCrunch blasts Digg for bad digital citizenry

board room attackDigg‘s DiggBar and VideoEgg‘s new Twig are clobbering each other in the ongoing battle of web augmentation services, a class of user driven services.

In Attack of The Frames: VideoEgg Introduces The Twig Ad Bar, Erick Schonfeld blasts the new Twig Ad Bar and DiggBar for not playing well together.  And well he should.

TechCrunch authors Mike Arrington andMG Seigler also got in on the DiggBar discussion:

The DiggBar, Digg’s browser-based toolbar for digging and sharing content, has seen a tidal wave of controversy since its release last week.
by MG Siegler on April 15, 2009, 40 Comments
In the debate over whether or not URL shorteners are evil, one service in particular has been singled out: Digg’s new Diggbar. The Diggbar is more than just a URL shortener, but that is one of its main features.
by Erick Schonfeld on April 9, 2009, 92 Comments
DiggBar, the new shortURL and toolbar service from Digg, is certainly useful. I expect it to become my default short URL service on Twitter since it is so easy to create a short URL by simply adding Digg.com/ in front of any URL. It will redirect to a short Digg URL like digg.
by Michael Arrington on April 2, 2009, 160 Comments

There are reasons to like the VideoEgg approach–it is essentially an easy way for websites to do a site-wide video bar that is slim and unintrusive. As such, it does exist just at the hosting website, in contrast to DiggBar whish uses frames to flow traffic through their webserver before it reaches your browser… allowing them to bypass most frame escape mechanisms used by websites that don’t want to be enframed elsewhere. Arguably this is an invasion of privacy and misleading to users.

data and globeThese are real problems. But in my book, the cardinal sin of DiggBar is that it cannot work at Internet Scale.

When other websites try similar approaches, it fails. Just as it does when Twig and DiggBar compete for functionality on the same website.

So, again, please, be good Netizen Developers when you build your webservices. Design and implement them so that they work when everybody does it. Because if you innovate well, everyone will.

Posted in User Driven, Web Augmentation | Tagged , , , , , , , , , , | 1 Comment

The Identity Quartet

A functional model for best practice Identity implementations.

The Identity Quartet is a framework for online services that allows users to express their Identity on their own terms. When I use the term “Identity”, I refer to the set of identifiers used in reference to users in online services.

At the December 2008 Internet Identity Workshop, Randy Farmer introduced what he called the “Tripartite Model of Identity.” He presented a pattern distilled from years of groundbreaking work building virtual communities.  This article is a write up of a four component model based on Randy’s initial concept. I also build on the ideas discussed at the IIW session on Non-correlatable IDs with OpenID.

The Quartet

four sheepIn online systems, we use Identity in four roles, using four potentially distinct identifiers. Each of those four will be present in any system that allows users to login, present themselves online, and receive incoming services. Often, systems use the same identifier to fulfill multiple roles. However, there are good reasons that these identifiers should be managed separately, especially across organizational boundaries.

The  four identifiers are:

  1. Authentication IDs
  2. Presentation IDs
  3. Reference IDs
  4. Internal IDs

Authentication IDs

presenting IDTo access privileged services, users must present an identifier to claim their right to that service. Common identifiers include session IDs, cryptographic tokens, and usernames. Usernames are probably the most common identifier for logging into services. Paired with a password for authentication, this is a cornerstone of how we use identity to gain access to privileged services. That access authorization typically persists without logging in again through the use of a session ID. In a user-centric context we can separate the authentication ID used at a Relying Party with that used at the Identity Provider, allowing for directed identity as described by Kim Cameron in his Seven Laws of Identity.  In a capability-based authentication regime, the identifier itself could contain a cryptographically signed delegation of authority for a particular privilege, but, in general authentication IDs don’t need to be that fancy.

Presentation IDs

Old Man In Viking HelmentHandles, nicknames, and character names are used to label content for display to others in the system. Often these presentation identifiers are humorous or obviously fictional, such as “HappyCamper” in an online chat or “Thor the Destroyer” in World of Warcraft. They need not relate to actual user characteristics, nor do they need to be unique. Their only role is to present a label as the author, owner, or embodiment of a post, comment, rating, or character. Just as there are multiple “John Smiths” in the New York white pages, there’s no reason there can’t be multiple accounts with the same presentation ID in an online community, as evidenced by the vast number of users with the handle “Jesus Jesus Jesus” on Facebook. In reciprocal multiplicity, online games like World of Warcraft often allow each user to create and simultaneously maintain multiple characters, with different names, avatars, descriptions, characteristics and property.

Since presentation IDs are intended to be shown to a wider audience and because their uniqueness is not technically required, it is prudent to separate presentation identifiers from authentication. There is no need to advertise authentication identifiers widely, as that simply increases security risk by giving away a critical—and preferably secret—component required for accessing privileged services.

Reference IDs

Open MailboxService requests need a way to refer to intended parties. The most prevalent reference identifier is the local-part in an email address, the part before the @ sign, e.g., “joe” in “joe@example.com”.  This identifier allows users to contact one another, without referring to anything else (such as a blog post or a job listing). It should be unique for each intended incoming role (e.g., admin@example.com or joe@example.com), but there is no technical reason that any given user can’t have more than one reference identifier, as is commonly seen when multiple email addresses auto-forward to the same individual. Also, often for a given role, it makes sense for a reference identifier to forward messages to several individuals, e.g., admin@example.com could forward the email to three different users to improve the response time for handling the issue.

Since this reference ID is intended to be used by users other than the recipient (that should be obvious!), it makes sense to distinguish it from authentication IDs used to access the system. Distinguishing the reference ID from the presentation ID allows users to receive directed incoming services (such as email) while displaying handles that are common to multiple users. Combined with an appropriate service endpoint, reference IDs allow for any number of incoming services to be provided in reference to that ID.

Internal IDs

binary womanEvery system needs to keep track of which identifiers relate to each other and to specific privileges. For example, what email messages should be shown to the user with a particular authentication ID?  And which users should be able to post to a bulletin board? Internal IDs link together the authentication, presentation, and reference identifiers in the system, allowing users who are logged in to a system to see the appropriate service interfaces and have particular services performed as directed, including the proper presentation of their Identity to fellow users. The internal identifier is typically the primary key in a database table managing the list of users, and may also be used in a permissions table to keep track of service privileges. Because it is an internal identifier, it need never be revealed to the outside world and, to minimize hacking, it shouldn’t be. Because it is completely internal, it can also enable anonymous access to services through appropriate anonymized mechanisms for authentication IDs.

Separation of identifiers improves Identity

Many systems use the same identifier for multiple roles, such as using your email address as your login username for a system, such as AOL once required (and might still). However, systems can be more robust, more flexible, and more secure if they explicitly delineate the four identifiers to help avoid unintended correlation and attack vectors. This is especially true across trust boundaries. Using your AOL login as the AOL email service endpoint simplifies the mental model for users new to online services at some minor cost to security by exposing the login id to everyone a user gives their email address to. Using your AOL username as a login to other services is asking for both a loss of privacy from cross-site correlation of your identity and attacks on your account login.

Fortunately, the latest technology can avoid this—if we use it correctly.

It isn’t just enough to enable OpenID, SAML, or Information Cards on our systems. For truly user-driven Identity we need to explicitly delineate the identifiers used for authentication, presentation, and reference from each other and internal identifiers, both within and between organizations. We should also enable users to choose their own identifiers for the first three… and keep the internal identifier completely secret.

Examples

Traditional System (with distinct identifiers)

1. Authentication ID jandrieu
2. Presentation ID Joe Andrieu
3. Reference ID joe@example.com
4. Internal ID 10485

OpenID 2.0 (in non-correlation mode, with distinct identifiers)

Relying Party Identity Provider
1. Authentication ID http://joe.example.com
2. Authentication ID2 RP-specific  Token from IDP
3. Presentation ID Happy Camper via Attribute Exchange
4. Reference ID joe@example.com available via Service Discovery
5. Internal ID 10485 987656

Rocket ScienceThere’s no reason users can’t select their own authentication ID in each of the above situations, although in practice, the RP-specific token is usually dynamically generated on behalf of users. Similarly, Presentation IDs can easily be specified by users in either system, leveraging OpenID’s Attribute Exchange Extension when appropriate. The reference IDs can also be user defined in either of the above approaches, with OpenID allowing fourth parties to discover a user’s service endpoint and endpoint-specific reference ID  for any service authorized by the user for that party. And clearly, the internal identifiers in all three situations have no innate need to be correlated with any of the others except through the secret internal ID. This allows for the maximum possible user choice and, potentially, maximum anonymity.

The Identity Quartet pattern isn’t rocket science. In fact, it makes things simpler when it comes to security, maintenance, and user control. The Quartet makes systems more flexible and more secure while giving users more freedom to manage how they interact and present themselves online. It is one way to turn user-centric Identity services of OpenID and Information Cards into truly user-driven Identity.

[Update: 4/17/2009 Revised “routing ID” to “reference ID”.]

Posted in Identity, User Driven, User Driven Services | Tagged , , , , , , , , , , , , , | 2 Comments

Amazing social media customer support from Zemanta

Unedited, here’s a twitter exchange with the gents at Zemanta, triggered when I used Twhirl to shout out for customer support. I had no idea if they were listening, but I thought they might be. And since they just crashed my browser, Twhirl was the app of the moment, just ready to serve my frustration to the masses.

JoeAndrieu: @zemanta just crashed my browser. WP server side install, with FCK editor. Crashed latest Firefox while drag & dropping image.

JoeAndrieu: actually, I must say I was impressed with @zemanta, and the crash may not be their fault.

andraz @JoeAndrieu there is no way for us to crush firefox, except if there is a bug in firefox itself (we only use standard javascript)

JoeAndrieu:  @andraz just confirmed that it is repeatable: 1. Insert image. 2. Move image into a bulleted list. This did not crash with other images.

JoeAndrieu:  @andraz should I submit a formal bug report or do you have it under control?

friedcell: @JoeAndrieuwe’ll look into the drag and drop issue tomorrow morning CET. did you publish the post that crashed firefox?

JoeAndrieu: @friedcell still working on it. It crashed during editing, as I was adding images.

friedcell: @JoeAndrieutweet the url @ me when you’re done and if possible indicate the drop point so we can reproduce it, file a bug and fix it asapabout 3 hours ago from TweetDeck in reply to JoeAndrieu

JoeAndrieu: @friedcell if you like, I’ll send you the draft. Just promise not to publish or redistribute.

andraz: @JoeAndrieu This is a bug report to be filled against Firefox… 🙂 however we’d be interested to have a skype chat – support@zemanta.com

JoeAndrieu: @friedcell as requested here’s the blog post http://is.gd/llXg

friedcell: @JoeAndrieu great, thanks. as @andraz already pointed out firefox should catch such event loops, but i hope we can do that for it

JoeAndrieu: @friedcell it surprised me that it only happened with Zemanta images. Those from my own gallery worked fine.

Great responsiveness by Zemanta. I’m truly impressed. Especially as all this happened on a lazy Sunday morning. I’ll report how the bug resolves itself.

Btw… anyone know any tools that make creating this kind of thread easier? I’d love to have the timestamps for those tweets and the cut & paste and editing was tediously unnecessary.

Posted in Uncategorized | Tagged , , , , , | 1 Comment