Chapter 5. Here We Are Now

It’s impossible to move, to live, to operate at any level without leaving traces, bits, seemingly meaningless fragments of personal information.

WILLIAM GIBSON

HOW DO YOU KNOW SOMEONE IS PRESENT? In class, they used to call roll and each person would respond with “here” or “yo” (coincidentally a hot “phatic” presence app from the past year) or sometimes just “present.” (Phatic communication is used purely as a social lubricant and without much semantic content, such as “how do you do?” or, in German, the ubiquitous bitte). Usually you can just look around. But, how about when someone is standing behind you and he clears his throat, not because he’s feeling hoarse but as a way of letting you know he’s standing there, so he won’t startle you?

In the real world, we are tuned to all sorts of indications of who is present (either in the immediate moment or the recent stretch of time) and who is absent. If you see an unmown lawn, it might mean no one’s been home for a while, or it could mean that the homeowner is an iconoclast at war with the neighborhood association, but if you notice a pile of uncollected newspapers on the stoop, that’s a pretty good sign of absence. Likewise, if the curtains are open and they were closed earlier or a light is on that was dark before, that’s another sign that someone’s there.

Graffiti showing a nose peeking above a wall with the legend “Kilroy was here” can also imply that someone has been by, perhaps recently. In his fantastic anthropology weblog, CultureBy (http://cultureby.com/2007/12/status-casting.html), Grant McCracken has written about statuscasting (broadcasting your status; we’ll get to that soon) as “phatic” communication:

When we status-cast, we’re a little like animals. As I argued in my post on the “puzzle of exhaust data” I suggested that one way to think about exhaust data was to treat it as phatic communication. (In humans and other animals, phatic communication consists of non-verbal gestures and small, sub-linguistic noises. Murmurs, shouts, groans, all of these are phatic.) We can say that tiny posts on Twitter are phatic, too. You may not care that I am “feeding my cat.” But knowing this tells you I exist, my location, my condition, my, er, status. Twitter data are not “exhaust data” precisely because they serve this locational purpose.

In an earlier blog post, he discusses how static messages “stack nicely”:

The phatic messages “stack” nicely, each message presupposing and building on its predecessor. These messages are: 1. I exist. 2. I’m ok. 3. You exist. 4. You’re ok. 5. The channel is open. 6. The network exists. 7. The network is active. 8. The network is flowing. When I use Twitter or Facebook to say that I am entertaining my cat, no one, I’m pretty, sure gives a good God damn that I am entertaining my cat. But they are reminded that they have someone called Grant McCracken who exists in their network. This is not nothing. Facebook sustains social knowledge and networks that begin in conferences and then fade almost immediately until a couple of months later we have a hard time attaching a face to that business card still banging around in our briefcase. A “newsflash” about my cat helps keep the network node called Grant McCracken from blinking out.

So, although we might not be able to be fully present across all sensory channels when we’re physically remote (hence, the concept of telepresence or online presence), we do have a growing set of tools and traditions for simulating or modeling presence in the online world, as illustrated in Figure 5-1. For many of us, the first encounter with these sorts of presence indicators occurs in instant message or other real-time communication applications.

What are the tools that make remote or partial presence possible (not just indicators of availability but mindfulness, attention, and responsiveness)?
Figure 5-1. What are the tools that make remote or partial presence possible (not just indicators of availability but mindfulness, attention, and responsiveness)?

Taken together, these various modes of remote presence contribute to what is now often called the real-time web (or the living web, or the live web): the aspect of online social behavior that is updated constantly as each individual takes an action and a record of it is shared with some public listening in (or found soon thereafter via social search).

A Brief History of Online Presence

Talking about presence online can be confusing because the term has been applied to a spectrum of meanings, including at least the following three:

  • There’s the old concept of a presence as a persistent “place” online where a business or project can be found—a sort of euphemism for a website (e.g., “We need an online presence,” “We need to improve our online presence”). This was often said in a keeping-up-with-the-Joneses sense at the turn of the millennium. (This sense is largely handled by the identity patterns discussed in Chapter 3.)

  • The human equivalent of this is the interesting bit, because it relates to the sense in which a blog, for instance, or even a series of posts to a social product such as Facebook, can create an ongoing sense of a person, and its state of currency can help to create the sense that the blogger is actively “present” in that space and can be found there.

  • Next, there is presence in the sense that instant messenger (IM) and Twitter theorists discuss it. IM programs have an online presence indicator that conveys to the entire world or to a user’s connections (or, typically, to those from whom the user is not hiding) that one is currently online and available for communication; this is present not in a physical sense but in an availability sense. This is synchronous, real-time presence, to be distinguished from the asynchronous sense of either of the previous two definitions. Here, we also get statuscasting (so, beyond “Available,” there begins to be free-form choices—often with limited character counts—for indicating what we’re doing or how we’re feeling at the moment), and thus the phatic communication others have written about: at times “meaningless” bits of communication designed more to signal presence, connection, and attention (as in Figure 5-2).

Some statuscasting might seem trivial. It can sometimes be the equivalent of (nonverbal) phatic communication, the sounds and grunts of acknowledgment we make to remind one another that we exist. Somehow, though, my mental image of Cecily making peanut brittle makes me feel that I know her a little better than I did before.
Figure 5-2. Some statuscasting might seem trivial. It can sometimes be the equivalent of (nonverbal) phatic communication, the sounds and grunts of acknowledgment we make to remind one another that we exist. Somehow, though, my mental image of Cecily making peanut brittle makes me feel that I know her a little better than I did before.

We’re mainly talking about this last sense in this book, and to a lesser extent the second one. To bring this back down to earth a bit from the realm of philosophy, we can say that presence is a prerequisite for real-time (or minimal-lag) communication, and that it can itself be used as a medium for phatic communication.

The Future of Presence

In his Telepocalypse blog (http://bit.ly/1eVKvFi), Martin Geddes wrote:

It is very easy when talking about presence to get sucked into thinking about IM icons, and the messaging of comings and goings using protocols like SIMPLE. But go take a look at the work of Media Lab Europe in Dublin. They have flower pots that bloom according to the availability of your special other. Tables that remember what was on them. Then there are the haptic (touchy feely) instant messages, the time-smeared entrance lobby webcam, and so on. Presence isn’t just about smiley icons.

Presence Actions and Facets

The fundamental components of displaying interactive “presence” online has tended to break down into two facets: status and availablity.

Availability shows other people whether the user might be open to direct contact in real time

Status might take numerous forms and is a way of updating other people about some aspect of the user’s life at the time they were prompted to check in.

The primary principle to keep in mind when designing presence interfaces is to maximize opportunities for your users to declare themselves present to one another (similar to leaving footprints or other human traces). Practically speaking, this breaks down into a few actions that the user or system can take:

  • Publishing presence information

  • Displaying current presence status

  • Displaying a timeline of recent presence items

  • Maintaining a history (partial or complete) of past presence declarations

  • Providing users with a way to subscribe to presence updates

  • Providing users with a way to filter presence updates

There are a number of different aspects or facets of status, beyond availability, that can be included in an update, including but not necessarily limited to the following:

  • Current activity

  • Mood

  • Environment

  • Location

  • Device status (on/off)

  • Other (system-, device-, or user-defined facets)

Finally, there’s the public with whom a user’s availability, status, mood, location, and so on are shared, referred to in the old instant-messenger context as their “buddy list.”

Availability is the bottom line for online presence, as demonstrated in Figure 5-3. If you’re available, that’s fairly straightforward. It means, ostensibly, that it’s alright for others to contact you (interrupt you) in real time. Unavailability can take several flavors (away, busy, or idle). These facets originated in the context of messenger and chat applications, but they map fairly consistently to other persistent presence indicators.

Perhaps the most fundamental bit of presence information is available versus unavailable.
Figure 5-3. Perhaps the most fundamental bit of presence information is available versus unavailable.

Richer options for status are possible (beyond simply available or not). Many applications with presence features give the user the ability to either manually enter a status update (generally, what she’s currently doing) or have some application or object update her status automatically. Status information usually can be layered on top of availability information, as shown in Figure 5-4.

Beyond indicating availability, a presence status update might also indicate the activity in which the user is currently engaged.
Figure 5-4. Beyond indicating availability, a presence status update might also indicate the activity in which the user is currently engaged.

With a mood selector such as the one shown in Figure 5-5, the user can indicate how she currently feels (something otherwise rather difficult to discern through cold mechanical interfaces). Beware of trying to supply a complete taxonomy of human emotions. The chances are good that you’ll overcomplicate things.

A mood vocabulary can be free-form or based on a controlled list. Neopets offers four standard moods: happy, sad, angry, and sick.
Figure 5-5. A mood vocabulary can be free-form or based on a controlled list. Neopets offers four standard moods: happy, sad, angry, and sick.

Identifying your current location, either to other people or to applications, enables geographical information such as proximity and physical availability to come into play (see Chapter 16). Location information can be entered manually or detected automatically using services such as GPS, mobile phone cell towers, or by polling a geographical information broker.

Twitter users developed their own folk syntax for location that uses “L:” as a prefix, followed by latitude and longitude information or place names. This came about before the service added the option to share location information automatically when posting.

Availability

This pattern is also knowns as “Who’s Here Now?”

The interface pattern for managing and displaying availability may also be referred to as online presence indicators (OPIs). As Figure 5-6 and Figure 5-7 show, they provide a way for users to display to other people (either the public or their contacts, depending on the rules of the system) when they are available for contact and when they are not.

A small set of icons can indicate at a glance who is available, who is idle, and who is away.
Figure 5-6. A small set of icons can indicate at a glance who is available, who is idle, and who is away.
A simpler model might show just a subset of your contacts and indicate which are currently active, as in this Facebook module.
Figure 5-7. A simpler model might show just a subset of your contacts and indicate which are currently active, as in this Facebook module.

What

Users need to see who else is online, available, and open to contact.

Use when

  • A person wants to determine whether his friend is online.

  • A person wants to see who is available for contact.

  • A person wants to see whether his friend is available for communication.

  • A person wants to show his contacts that he is busy.

How

There are really two approaches. The prevailing approach to this pattern today is to show availability automatically, although this can have negative consequences for people who want to preserve their privacy or are actively hoping to avoid certain people.

The older pattern, established in first-generation IM apps, gives people the option to visually identify themselves in one of three possible states, “Available,” “Busy,” or “Offline” (these are explained further in Table 5-1). Additionally, if technically feasible, the client can identify the user as “Idle” if she is away from the computer for a set period of time.

Table 5-1. Common availability statuses and their meanings

Status

Meaning

Available

The user is logged in and available for contact. If the Busy and Idle states are unavailable, the OPI defaults to this state, more broadly defined as the Online state. An application might permit the user to reveal availability manually, or it might be set to display “Available” whenever the user logs in.

Busy

The user is logged in but has declared herself as Busy. Busy refers to two separate contexts that, in turn, relate to the diametrically opposed impetuses for IMing: focused intent and serendipity. One refers to actual busy-ness, requesting that others abide by those associated social mores (e.g., if a user sees someone set to “Do Not Disturb,” he knows that person is contactable, but will contact her only when necessary). The other refers to a form of explicit idleness that explains a user’s potential delay in response, which otherwise might not be adequately conveyed by the Idle state described next (e.g., “Stepped Out,” “Not at My Desk,” “Out to Lunch”). Setting your status as Busy bears no functional significance and serves only as a social announcement.

Idle

The user is logged in, but the client observes that no keyboard or mouse activity has happened within a set period of time. The user has the option to override this setting, thereby always appearing as either Available or Busy.

Offline

The user is not logged in or has logged in as “Invisible.”

Adopt a set of consistent icons for these three states (or four, if you include “Idle”). Studies show that traffic-light colors (red, green, amber) don’t map well to these choices, even though they are widely used among IM applications. This is mainly because although Available can be easily mapped to Go (green), three of the states (Busy, Offline, and Idle) are all equivalent to Stop (red), and none of them map particularly well to Slow Down/Proceed with Caution (amber).

This pattern does persist with some newer products, as well, such as WhatsApp, which is shown in Figure 5-8.

WhatsApp offers a range of availability choices, including the “traditional” options such as Available and Busy, but also other practical status choices such as “Battery about to die.”
Figure 5-8. WhatsApp offers a range of availability choices, including the “traditional” options such as Available and Busy, but also other practical status choices such as “Battery about to die.”

Stealth Mode

An automated system that is too transparent or honest can put users in awkward situations, such as when they wish to be available to only some of their contacts. Therefore, you might find it useful to provide a stealth mode—the ability to sign in as “Invisible” and hence not reveal oneself automatically upon connecting to the application.

Yahoo! Messenger, for example, provides granular selectivity by which you can appear Invisible only to specific people, using this procedure:

  1. While pressing the Control (Ctrl) key, click the name of the contact to whom you want to remain Invisible to highlight the contact.

  2. On the menu that opens, select Stealth Settings.

  3. Click Permanently Offline.

The specified contact will thereafter never see you as online unless you change this setting. To remind you, the contact’s name appears in italics in your Messenger List. (Messenger offers a similar feature for whole groups.)

On the other hand, Facebook currently provides no such blanket stealth mode. It does allow users to turn off chat for one or more users and to go “offline” while connected, one session at a time, but the overwhelming desire to make sure people connect here is overriding any customer desire to be stealthy online, leading to all sorts of user workarounds, such as the complex solution described on this blog (http://bit.ly/1Jo9hK6) that involves creating custom lists and using the existing feature set.

Why

Revealing availability is the fundamental building block of online presence. Providing your users with simple ways to do this fosters the sense of presence and availability that helps a social system feel inhabited by real people with realistic comings and goings.

Environment

An indication of what music the user is currently listening to is the most common environment report in presence updates. This can be used to give the flavor of the person’s environment, and doubles as a potential talking point. The user can manually fill in a “what I’m listening to” field or a status field for this purpose, or she can set an application to read what music is currently playing from the operating system or device, as demonstrated in Figure 5-9. The process of uploading this information to an ongoing stream is referred to as “scrobbling” (as popularized by Last.fm).

An application can automatically detect the current song playing in an application such as iTunes and assign its identifying information as the user’s current status. Often, a musical note symbol serves as a clue to the user’s friends that the information wasn’t entered manually and is in fact song data.
Figure 5-9. An application can automatically detect the current song playing in an application such as iTunes and assign its identifying information as the user’s current status. Often, a musical note symbol serves as a clue to the user’s friends that the information wasn’t entered manually and is in fact song data.

Buddy List

What

The user wants a distinct list of people she knows (friends, contacts, coworkers, family) to communicate with in real time (Figure 5-10). The term “buddy list” is now somewhat outmoded and associated primarily with legacy IM apps, but the notion remains under other names, such as “friends.”

Use when

Use this pattern when offering just-in-time communications, such as instant messaging.

Facebook is showing me some of the folks I engage with frequently as well as their activity status.
Figure 5-10. Facebook is showing me some of the folks I engage with frequently as well as their activity status.

How

  • Indicate which users are currently online (see Presence Actions and Facets).

  • Indicate which users are offline.

  • Indicate when a user is online but might be busy and not taking messages.

  • Consider indicating when a user is idle, which often indicates that the user is not at the computer or is engaged in another task.

  • Provide a way for users to organize their buddies into meaningful groupings, such as friends, family, golf buddies, work colleagues, and so on.

  • Consider giving users a means to create on-the-fly group chats through the selection of multiple people in a buddy list.

Why

Real-time communications and the buddy list to support them add an immediate and real-life component to what are often asynchronous online experiences.

Examples

Slack, a consumer enterprise communication app built on IRC patterns shows you people you’ve interacted with along with their online status (Figure 5-11).

Those dots would be green if any of my buddies were available right now in Slack.
Figure 5-11. Those dots would be green if any of my buddies were available right now in Slack.

As seen on

Facebook and Facebook Messenger

Slack (http://www.slackhq.com)

Skype (http://www.skype.com)

AIM (http://www.aim.com)

Yahoo! Messenger (http://messenger.yahoo.com)

Activity Streams

When status updates first emerged in the context of instant messenger programs, they were inherently fleeting, temporally tied to the immediate moment and then discarded. It really doesn’t make that much sense to keep an infinite log of Available, Busy, Idle, Offline, and so on for the life of the user or the application. However, as other status-capturing interfaces have evolved, the idea of at least maintaining a stream of recent history and then possibly mixing status reports with other snapshots of online activity has taken hold as a way of displaying presence.

There is still an element of the ephemeral in this. You’d rarely thumb through days and days of old status updates to find what a specific person was doing or thinking or listening to at some arbitrary point in the past (at least if you’re not a stalker). Yet, there’s really nothing to stop these sorts of feeds of personal status updates from being stored, permalinked, catalogued, indexed, made searchable, and so on, even if presence affordances are geared more naturally toward the present moment and the recent past.

You’ll need to think about persistence of old status updates. Are you committing to keeping them findable forever or just for the last few days? Will you give your users a way to download or archive status data, or even transport it to another system? These cumulative activity updates can paint a persistent portrait of a person online.

You can view a person’s activity stream as the sum total of observable behaviors he is engaging with online or within your system. This might include status updates, but it can also include any number of other recordable activities that can be captured via RSS feeds or by polling or scraping activity feeds across a wide variety of services. This might also be a mix of services within your system or network, or might combine services across the public Internet.

Figure 5-12 illustrates that an activity stream (or feed) can therefore consist of an aggregation of updates and activities that together can create a much richer sense of what the user has been doing, thinking about, and saying in the recent past.

When aggregating actions and behaviors across a number of different services, an activity stream of vitality updates can paint a more complete picture of a person’s day or recent activities for his followers.
Figure 5-12. When aggregating actions and behaviors across a number of different services, an activity stream of vitality updates can paint a more complete picture of a person’s day or recent activities for his followers.

When presenting an activity stream to your users, consider whether to offer a single type of update (such as status messages) or a mixture of multiple forms of activity (links, posted media, songs listened to, and so on). If mingling multiple types of activity, think about how your users might want to isolate a single context.

RebelMouse, for example, offers an easy way to comingle a lot of your online activity into a single broadsheet-like design, but this can also present an incoherent or just plain useless experience for anyone beyond the person generating all that sharing content (Figure 5-13).

When curated well, an aggregated activity feed can be as rich as a publication, but automated tools can also lead to a messy feel.
Figure 5-13. When curated well, an aggregated activity feed can be as rich as a publication, but automated tools can also lead to a messy feel.

Statuscasting

Statuscasting is the custom of broadcasting an ongoing stream of status updates to the public or to a set of contacts or followers. Similar in concept to IM status updates, statuscasting incorporates the idea of the ongoing feed that users can browse into the past. It does not necessarily indicate availability at any given point, but does imply it, in the sense that if you see a recent status update from a friend, you might conclude that she is available for contact.

There can be some value in cross-feeding status updates from one system to another. Twitter users, for example, can have their status updates on Twitter become their status messages in their IM clients (or vice versa). Likewise, posts to Twitter might be broadcast into another service, such as Facebook or Friendfeed or Yahoo! Updates. Be careful how you enable this kind of connection, however, because the original context can be stripped away, and the updates might not make sense or work well in the new context. For example, Away, Idle, and Available are 80 percent or more of all IM statuses.

Statuscasting tools such as Twitter (see Figure 5-14) lend themselves to inventive variations and uses. If you give people a box to type into and a button to press, they will discover their own uses for it.

Twitter used to ask the user to answer the question “What are you doing?” in 140 characters or less. The current “What’s happening?” if a bit more vague still invites you to paint a picture of your moment-to-moment thoughts and experiences.
Figure 5-14. Twitter used to ask the user to answer the question “What are you doing?” in 140 characters or less. The current “What’s happening?” if a bit more vague still invites you to paint a picture of your moment-to-moment thoughts and experiences.

In addition to displaying a single person’s statuscast feed, it’s common to provide a way to see a collection of people (everybody or just the user’s friends) and their most recent updates. These kinds of interfaces might benefit from offering the user an easy way to filter or sort, especially when one person is dominating the combined feed with a stream of constant updates.

What

Statuscasting (also known as Microblogging or Updates) is a way for users to create short posts. These are often aggregated into a stream and can consist of text, pictures, or video.

Users want to see what their friends have been doing presented in a convenient format. Additionally, applications derive an advertising benefit from being able to share with the public or a controlled audience what their users have been doing. These updates can serve as reminders to other users about what is possible within the system.

Use when

You can produce and consume updates in nearly every imaginable context: across a single application or network, across the Web, on mobile devices, and so on. You can also display them in a context-sensitive manner, presenting information that is relevant to what a user is currently consuming. Here are additional possibilities:

  • Use as a light alternative to blogging.

  • Use when you want to allow conversations and real-time updates but don’t need the synchronous conversations of instant messaging.

How

Updates aim to provide users with delightful, personally relevant, timely content that engages them, helps them connect with others and participate in one another’s lives, and encourages their participation in the service.

To accomplish this, create syndicated digests of user activity from content-producing sources and third-party products, and make them available to content consuming properties and other sites.

A sophisticated vitality system will learn about the user’s preferences by tracking clickthrough, so if the items in the stream start with a “good enough” guess, they can improve through iterative refinement of the weighted algorithm that selects items. The experience for an ordinary user, then, is to be shown updates presented more or less as “things we think you’d want to see based on who you are and where you are in the product.”

Updates tend to follow the form of subject, verb, and object, with an optional indirect option, as discussed in Chris Messina’s presentation on open activity streams (http://bit.ly/1gndq5X). Thus, here are some possible implementations:

  • The basic interface for microblogging is a text field, with a clearly marked character count limit and a Submit button. For alternatives to text (such as video and photos), clearly indicate the size and time limits.

  • Provide a method for viewing after posted. Both an author view and a community view should be available.

Why

Sometimes, all you need to do is say a few words or share a short thought. Microblogging addresses that need without the heavy-duty interface or overhead of blogs.

Managing Incoming Updates

As users begin to rely on a feed of updates for news of their friends’ doings online and clues to interesting bookmarked or recommended items, it is important to give them tools for fine-tuning the feed. Some refinement comes from the ability to add or remove sources (following or friending versus leaving or unfriending), but finer-grained options can involve the ability to ask for more or less of a certain type of content or items from a specific person, as depicted in Figure 5-15.

In this case, I have nothing against poor David Jay, but I have simply heard enough about the darn blizzard already. Notice the other options Facebook currently offers to help me influence the sorts of stories it shows me.
Figure 5-15. In this case, I have nothing against poor David Jay, but I have simply heard enough about the darn blizzard already. Notice the other options Facebook currently offers to help me influence the sorts of stories it shows me.

You can offer consider offering additional responsive choices for managing items (such as reporting abusive content) on the same menu because the triggering item is so compact.

In an aggregated feed, it can be easy to lose track of items as they are rapidly supplanted by newer updates, so offering your users a way to filter the feed to only show items from a single source or to hide one or more sources can help them to cut through the noise.

Keep Company

Technology can be cold and impersonal. When the concept of a “ghost in the machine” first arose, it was used to deride Descartes mind-body dualism, ridiculing the idea that the body is a simple meaty mechanism and the spirit is some ghostly presence that imbues it with humanity. Dualism has fallen out of fashion in philosophical circles, but the truth is that in today’s online social systems, there is a fundamental duality baked right in. The machinery connects us, but without the human presences (the ghosts), it is simply a tangle of wires and electronic impulses.

In the real world, we like to know that there are other people around, coming and going, adding to the life of a place. An abandoned building is scary, but one that has signs of life can be much warmer and more welcoming. There are a number of ways to communicate this sense of life in a social interface.

Signs of Life

The easiest way to communicate to your returning visitors the liveliness of your social environment is to present them with a summary of recent activities upon login, ideally those of people to whom they’re connected. For new users it might still be worthwhile to show them examples of recent activities, perhaps anonymizing the identities of the users to preserve their privacy. This is what LinkedIn does, and it doubles as a reminder to the user of the range of activities she can engage in within the service (Figure 5-16).

LinkedIn displays a series of clusters reporting on recent activities in the user’s network, giving a sense of the health and, yes, vitality of the network.
Figure 5-16. LinkedIn displays a series of clusters reporting on recent activities in the user’s network, giving a sense of the health and, yes, vitality of the network.

Another technique for signaling the transient presence of other visitors is a grid of faces or avatars, as you see in Skype (Figure 5-17).

Skype tries to show you faces but also shows you a lot of dummy avatars.
Figure 5-17. Skype tries to show you faces but also shows you a lot of dummy avatars.

Yahoo! designer Bryce Glass once said:

We had ... a simple JavaScript insert on any page on the intranet that would display a widget showing the last n employees who’d visited the page. Though ultimately killed by legal [over privacy concerns], it was extremely useful for establishing peoples’ presence “at” your design document, product requirements document, etc. (Did the team really review your spec? How recently? Who were the holdouts?)

Further Reading

  1. Activity Streams, http://activitystrea.ms (extension to the Atom spec)

  2. CultureBy, http://www.cultureby.com

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.141.29.145