Feeds:
Posts
Comments

Archive for the ‘linux’ Category

Twenty years ago today, Linus Torvalds sent the announcement that announced Linux to the world. The Linux Foundation has promoted the anniversary all year, displaying memorabilia and holding a Roaring Twenties theme party ( much to the evident embarrassment of Torvalds, who was conspicuously absent at LinuxCon when invited to take a bow.) – and it’s fitting that the free software ecosystem that has grown around Linux should be celebrated. However, amid all the self-congratulations, I think it’s worth remembering that what is being praised is the goal more than the reality.

I hate to insist on this cold splash of reality, I really do. Although I wasn’t around at the start, I have been involved in free software for twelve years, and I share the dream. For me, free software is as important a part of activism as recycling. One way or the other, it has been my major source of income for most of those twelve years. The community of free software is where I’ve found a modest dollop of fame. Moreover, as I rediscovered at last week’s LinuxCon, where I seem to have spent three days shaking hands and renewing old acquaintances, I feel at home in the community, and many of my closest friends come from it. So, when the keynote speakers on the first morning stood up and celebrated the accomplishments of free software, I was moved in much the same way as other people might be moved by the national anthem of their country.

And yet –

Something whispered in me that the keynotes at Linuxcon were just a little too self-congratulatory. I couldn’t help thinking that the rhetoric of co-operation was sometimes being delivered by the representatives of corporations famed for their cut-throat business practices. I thought, too, of how, despite everything that the free software ecosystem has accomplished – often contrary to the predictions of old-school business and development experts, much to my delight – the community seems to have balked at taking the final steps, putting up with cost-free drivers rather than pushing for free-license ones.

But the largest gap between rhetoric and practice came in the description of the community. The gospel was preached most vividly by Jon “Maddog” Hall.

Hall is a seemingly endless source of friendliness and good will, and part of me hates to contradict him. All the same, I had to raise an eyebrow when he proclaimed – as he had already done in his blog :

I am proud of the Free Software community in embracing diversity. And finally, it is lucky for me that the Free Software community also embraces older people…..

No one asks these programmer/entrepreneurs their age, their race, their religion, their sex or their “sexual orientation”. No one asks them if they were physically challenged, what country they came from, or their political views. No one told them “don’t go there”, “don’t do that”, “you are too young”, “you are too old”, “you are just a…” or “you can not succeed”…..because (as one of my favorite cartoons points out) “on the Internet no one knows that you are a dog”.

All the Free Software community says is “show me the code”.

It’s a wonderful dream, Jon, and I hope that one day it comes true. But read the Geek Feminism wiki, and you soon realize that it isn’t true yet. Pornographic presentations, the litany of sexist bloopers from one community leader after another, the knee-jerk, foul-mouthed hostility to even the suggestion that more should be done to encourage the participation of women – it all buzzes around in your head like loud music when you have a hangover. Before long,  you are forced into the realization that, unfortunately, the community does not always embrace diversity, and that portions of it care very much who you are. In fact, they care so much that they will do their best to prevent you from contributing your code no matter how well-written it is.

Taking time to appreciate the accomplishments of free software is only right. It’s a working community, and many of us don’t take enough time to appreciate what’s being built a bit at a time. But what Jon and the other Linuxcon keynote speakers praised was the ideal, not the way things are.

So, while we should celebrate what is after all a unique accomplishment, let’s also take time to remember that the accomplishment isn’t finished yet, and that we’ve collectively fallen short of the ideal. Forget that, and we risk always being less than we could be and betraying ourselves.

Read Full Post »

A few moments ago, I changed the flapper tank ball on the toilet. That would be an unpromising beginning for a blog entry, except for the unwarranted satisfaction I took from the job. Not that the repair needed a plumber, but I grew up thinking that I wasn’t the least bit handy. The fact that I am now in any way competent at home repairs I attribute largely to over a decade of using free and open source software.

So far as I remember, nobody ever told me I was clumsy in so many works as I was growing up. But, with one thing and another, I certainly received that impression. For one thing, I am left-handed, and, while like many lefties, I am necessarily more ambidextrous than the rest of the population, to the average eye, I looked clumsy. More importantly, I usually had to reverse any demonstrations I was given, an effort that few young children can successfully make, no matter how bright they happen to be. Consequently, I was a long time learning to tie my shoes or swim – which only justified everybody thinking me clumsy – including me.

Probably, I wasn’t helped, either by the fact that I tried to compensate for my clumsiness by being energetic and aggressive when I played sports. These traits gave me a rough and ready ability, but I wasn’t initially chosen for the school soccer team in Grade Six, or as one of the Saturday morning players tapped for going into the premier division a few years later. I only learned the skills a soccer player needs to control the ball or work with a team a few years later.

Besides, I was bookish and liked academic subjects in school. Naturally I wasn’t supposed to have any physical skills as well. That would have been against all the laws of stereotyping.

Consequently, between one thing or another, I grew up thinking myself uncoordinated – a self image that, unsurprisingly, often made me just that. Whenever I tried anything new, I expected to do it poorly, so often I did.
Once, when I called myself a slow learner, a teacher replied, “Yeah, but I bet than when you do learn, you don’t forget it.” But that was not much compensation.

It was only when I became a university instructor and later a technical writer that I realized another source of my clumsiness: Most people are terrible teachers, even when they teach for a living. Few have the patience to work with beginners. Even fewer can remember the days when they were beginners. Inevitably, they leave out important steps when they try to instruct, or fail to mention what to do in unusual circumstances. Probably, the main reason why I taught English and wrote manuals successfully is that I tried to give students and users the instructions that I would need myself.

But the real revelation came as I started using GNU/Linux as my main operating system. Like everybody else, using Windows had taught me how to be helpless. The default resources discouraged me from exploring Windows, and the information I needed was mostly lacking.

GNU/Linux, though, is different. It is designed for users to poke about and configure. If you run into trouble, help is only an Internet search away.

Without making any conscious decision, or being aware of what was happening, slowly I started to learn how to troubleshoot. I learned that very little I could do would harm my installation, much less cause the motherboard to belch flames, as I half-feared. All I had to do was observe, take a few precautions, and work systematically, and I could do far more than I had ever imagined when I was a Windows user.

Gradually, I transferred this same mind-set to other parts of my life. To my surprise, I found that it was usually just as applicable to home repairs as those on the computer.

I won’t say that I have any particular talent for handiwork. But, somewhere along the line, I stopped thinking of myself as clumsy. I no longer approach every new physical task with the expectation of failure, and, far more often than not, I succeed at it. Even on those occasions when a real expert is needed, I often understand what the problem is . A surprising amount of the time, I just lack the tools or the parts to do the job myself.

This personal change is one of the biggest reasons that I am committed to free software. Using Windows only reinforced my belief in my own incompetence at fixing or improving things. By contrast, free software proved to my that I was capable of far more than I had ever imagined.

Read Full Post »

Every few months or so, someone blogs that free software would be more popular if it had fewer applications in each category. If a distribution would only include, say, Firefox, rather than Konqueror and Epiphany as well, or only OpenOffice.org without KOffice or Abiword, then users would have less anxiety option and locate the software they need more easily. Recently, though, I was very glad to have the choice.

For the past while, Trish’s GNOME desktop has been freezing after a dozen or so windows are opened or closed. The problem is an obscure one, and elusive when I try to track it down. I know it is peculiar to her account, since I don’t suffer from it, but more concrete information is slow to come by. Changing every configuration option that might even remotely connected doesn’t help. Ditto running her key files in another account. Removing the GNOME configuration files so that new default ones are created does nothing. Nor does upgrading GNOME or any of the software I suspect of being involved with the problem. I suspect that either Firefox or Thunderbird are complicit, and my investigations continue, but, meanwhile, Trish is left with a major annoyance every time she logs into her account.

If we were running Windows or OS X, she would have no choice except to endure while I troubleshoot. However, because we’re on GNU/Linux, I switched her over to KDE instead. After about ten minutes of customization, her new desktop looks about 90% the same as her old one, so the transition was minimal, so she can carry on with reading her email and browsing the web while I track down the problem.

Had KDE not removed the problem, I could have set up Xfce. Had Xfce not solved the problem, I could turned to IceWM, Blackbox, Fluxbox, Afterstep or any of a couple of dozen other desktops or window manager..

By contrast, had we been running Windows, she would have had to endure the problem, because only one desktop would be available for her (or perhaps I would have had to re-install). But, under GNU/Linux, I had an immediate choice of workarounds – and all because free software isn’t so rigidly organized that it has only one of everything. The redundancy that people love to decry makes an emergency far less urgent, so I, for one, hope that no distribution every tries to do much tidying. 

Diversity may be messy, but, sometimes, messiness is better.

Read Full Post »

The personal always trumps the general. So, for me, the big news this morning is not the continuing speculations about whether a Microsoft takeover of Yahoo! would be competition for Google, but that Joe “Zonker” Brockmeier has been appointed community manager at the openSUSE project.

I’ve only met Zonker face-to-face once. It was back in 2001, when I was at the New York LinuxWorld Expo on behalf of Progeny Linux Systems. Progeny was sharing a booth with Maximum Linux magazine, and Zonker came around to ask if the company had any openings for technical writers (it didn’t). But in the following years, I came to recognize him as one of the half dozen or so best professional writers in the business. Then, for large chunks of 2006 and 2007, I interacted with him daily on Linux.com’s private IRC channel, where he went under the nickname of jzb. So, as happens on the Internet, I likely have the impression that I know him better than I actually do.

I suspect that jzb may not completely appreciate what I have to say here, but I hope that openSUSE appreciates what they’re getting. They’re getting a worker so dedicated that he makes me feel like a slacker – and I might as well be chained to my computer desk. I used to joke that Linux.com would fall apart if he ever got a life, and, although that’s not true – as we learned when he left last September to become editor-in-chief at Linux Magazine – it’s true that the channel has been quieter and not as much fun since.

So what else can openSUSE expect? They can expect a sarcastic wit that is acute without being nasty, and a thorough knowledge of science fiction and alternative music. They can also expect a sympathetic ear in private. Perhaps, too, they should expect some surprises, such as Linux.com’s last year when we discovered that he had been half of a long distance, intra-office romance for months without any of us suspecting.

But, most of all, they can expect someone who lives and breathes free software, and is more current about what’s happening in the community than anyone I’ve encountered (he used to regularly claim story assignments before I could, and, while he was aided by being two hours ahead of me, that wasn’t the only reason he consistently scooped me. I swear the bastard never sleeps).

I have no ambitions to be editor-in-chief or a community manager, and I would have personal reservations about working at Novell after its pact with Microsoft, so I can say without envy that I wish him nothing except success. I know that he has definite ideas about how to do things, and I suspect that, before he finishes, openSUSE will be a more organized and better known part of the community. And, for his part, I hope that being community manager is the position he’s been looking for.

The only thing I worry about is whether this is another setup by jzb, like those I’ve been the butt of in the past. You see, my comments about conspiracy theories have already caused some of the foaming mouth brigade to denounce me as secretly pro-Microsoft. By joining Novell, is Zonker arranging things so that Linux.com and Linux Magazine will be added to the Axis of Evil? After all, between the two of us, we must constitute a positive trend according what passes for logic in those circles. And is jzb sitting down in Florida, laughing about it?

You know, I wouldn’t put it past him – even if NOAFD (Not on a First Date), to use an acronym that he helped to coin and made into a punchline on IRC.

Read Full Post »

The fallout from my blog entry, “Conspiracy theorists and free software” continues. With all the people baying for my blood – some of whom, frankly, sound disingenuous in their demands for proof – the entry could easily take over my life, so in the last couple of days, I’ve withdrawn from active discussion of it. Frankly, the discussion is not that interesting to me, and (mercenary soul that I am), if I’m going to participate in more than my courtesy two email exchange with people, I’m going to get paid for doing so. And probably I will in a couple of weeks. Meanwhile, since I have an unexpected free half hour as I wait for a call to be returned, I’ve been reflecting on the various reactions the piece received.

To start with, I notice that Brian Profitt’s suggestion that I was lashing out at some negative criticism I received has been seized on by some commenters as a reason to dismiss what I said. However, although that was a shrewd suggestion on Brian’s part, it’s only true to the extent that the entry was inspired by someone asking me what I meant by conspiracy theory. Going into my fourth year as an online journalist, I long ago became immune to the insults and accusations of bias from both sides that often threaten to overwhelm thoughtful responses and legitimate corrections of mistakes. In fact, I maintain a page on my web site where I list choice bits of abuse for visitors’ amusement. I may sometimes respond, but I’m not much interested in flame wars. I have an anarchistic temperament, and, so long as I have my say, I’m perfectly willing to let others have theirs, even if theirs don’t have a lot of love for me.

That’s not to say that I don’t find people’s reactions fascinating – and more than a little intellectually distressing, since I’m an ex-university instructor who once spend his days trying to help people develop their abilities to argue coherently. A surprising number of people leaped to the conclusion that, despite a clear statement to the contrary, I was only talking about attitudes towards Microsoft (perhaps because I recently wrote an equally misread article that suggested that, since the free software was strong enough to defend itself, we could be wary of Microsoft without being paranoid). Even more seem to think that proving that there were reasons to distrust Microsoft in some way validated the attitudes and styles of arguments that I was condemning. Many, too, do not seem to believe that it is possible to mistrust corporation or organization without expressing unrelenting hate for it.

Clearly, what people brought to their reading was as important – and, in some cases, more important – than what I wrote. That’s their right, but, as I’ve often lamented in the past, if someone wants to disagree with me, I wish they would at least disagree with what I actually said, rather than what they imagine I said. At times, people seem to be arguing with their own reflections to such an extent that I feel extraneous to the process.

But I think my favorite response was from a commenter who assumed the responsibility of giving me elementary advice about how to write. I’m always willing to learn, but, considering that last year I sold roughly a quarter million words about free software, now I know the spirit in which Lauren Bacall responded a few years ago on hearing that she had been voted one of the sexiest elderly women in film. “That will certainly pep up my career,” she said (or something to that effect). “I can’t wait to tell my agent.” While not at the top of my profession, I’m not at the bottom, either, so I can’t help but be bemused by unasked advice from an unknown and relatively unproven writer — especially when I personally wouldn’t give writing advice unless specifically asked.

However, the most troubling thought to me in all the reactions is that I’ve apparently lost my anonymity online. This blog is modestly successful, but its readership is generally many times below what an article on Linux.com or Datamation receive. I thought it useful as a sandbox, a place to express my thoughts-in-progress without any fuss. If anything, I expected to get a few responses from friends and acquaintances.

But, as readers of the entry rise into the thousands, I realize that I was naive. Regardless of what merits I do or don’t have as a writer (and nobody could be more critical of my work than me, believe me), apparently some people do notice what I have to say about free software. Some of them may hate it, but they notice. That’s a humbling and frightening thought (and leads me to mutter repeatedly about the blind leaning the blind).

Even more importantly, it means that, unless I start writing under another name, I have to assume a greater responsibility for what I write publicly. No more working out of ideas publicly for me – from now on, I need to make sure that I state my assumptions clearly, and address opposing views in more detail, and not publish on certain subjects until my ideas are fully developed. People are still going to make invalid inferences, no matter what I do, but I feel the responsibility all the same, even while I tell myself that I’m being arrogant in feeling the obligation.

In a week or so, perhaps I’ll revisit the topic. Meanwhile, thanks for everyone who has commented or blogged in response. It’s interesting, and I’ve learned, even though I don’t have the time to respond in detail to everyone.

Read Full Post »

No one can be involved in the free software community to any extent without stumbling across conspiracy theorists. Like the mad wife in the attic, they’re an embarrassment to the community, clinging to attitudes appropriate to the days when free software was new and vulnerable, and providing an easy means for outsiders to discredit the rest of the community. They can also waste a lot of your time if you let them, so you should learn how to identify them for your own sake.

You remember the scene in Apocalypse Now when Colonel Kurtz mumbles his story? You may remember leaning forward, straining to hear him – only to realize with a cold thrill that what he is saying is insane. Conspiracy theorists are like that. If you’re not careful, you find yourself being slowly drawn into their world, either accepting their ideas or arguing with them. The result is the same, regardless of whether you’re face to face or on IRC or email — either way, you lose.

Recently, I forgot that simple axiom, until I brought myself up with a start. I won’t mention the people in question, because I don’t want to dignify their antics with more attention. But, while the experience is still fresh in my mind, here are some of the signs that should put you on your guard:

  • An obsession about a single person, corporation, or issue to the exclusion of everything else: Conspiracy theorists will spend an inordinate amount of time researching and blogging about the object of their obsession. Although Microsoft is a favorite object of free software conspiracy theorists, I’ve also come across people with an obsession against Richard Stallman, the Free Software Foundation, the Open Source Initiative, or even a particular project, such as KDE or GNOME. But, no matter what topics a discussion with them begins with, they will always find a way to bring up their obsession, often straining to do so. At the first hint of news, they will rush to blog about it, filling in gaps with speculation.
  • Extreme paranoia directed at the object of the obsession: The object of the obsession is viewed as vastly more powerful than the free software community. It is conceived as moving constantly in the shadows, recruiting dupes, spreading money when it has some and laying long range plans to subvert some or all of the community. Sometimes, these plans may make direct business sense, but, just as often, they are for dubious benefits. Should the object of the obsession deny an accusation, the conspiracy theorists simply regard the denial as a sign of how clever the enemy is.
  • An either / or mindset: For conspiracy theorists, no middle ground exists. Unless you are in complete agreement with them, you are in the enemy camp – and probably in the enemy pay. Even an attempt to qualify their argument will mark you as part of the problem. So will suggesting that they work to change or influence the object of the obsession where that is possible. The conspiracy theorist’s identity is bound up with being in opposition to the object of their obsession that anything except whole-hearted hatred is unacceptable to them. Key phrases: “There can be no truce with [insert object of obsession here]” and “Eternal vigilance is the price of freedom.”
  • An inability to summarize other viewpoints with any accuracy: Convinced that they are on the right side, the average conspiracy theorist is either unable or unwilling to report other people’s ideas with any accuracy. Instead, they seem to report what they imagine others are saying, or is convenient to believe that others are saying.
  • A refusal to modify opinions, even in light of new evidence: Conspiracy theorists’ beliefs are so important to them that to change them would risk losing identity. So they don’t, ever. When offered new information that might challenge their basic position, they will either try to discredit it or change the subject immediately, perhaps raising a peripherally related point but not addressing the new information.
  • The use of decontextualized evidence: Conspiracy theorists see information that supports their central belief, and are prone to miss information that challenges or contradicts it. They will take a phrase out of context – for instance, take a comment on a technical issue to be about a political one — or even ignore basic grammar such as the serial comma in order to find support for their beliefs.
  • A refusal to consider alternate explanations: Coincidence, circumstance, and human stupidity do not exist for the conspiracy theorist. For this reason, they make no effort to discount them, not even to strengthen their own arguments. The one explanation that conspiracy theorists accept is malevolence.
  • A lack of civility and a quickness to give and take offense: The free software community is not the politest place in the world. However, even by its standard, conspiracy theorists are abusive. They’re quick to hurl insults, or to take insults personally. Their writing leaves an impression of emotion held barely in check, the words rushing out of them as fast as they can manage in their anger.
  • A disregard for the rules of evidence: The wise pundit looks for evidence that would hold up in a court of law – that is, establish a point beyond a reasonable doubt. By contrast, conspiracy theorists have no such restraint. For instance, if a company has hired a former Microsoft executive, that is proof that the company is controlled by Microsoft. Never mind that Microsoft is so large that any North American company has a good chance of hiring a former Microsoft executive – the one tenuous connection is enough to establish proof for a conspiracy theorist. Key phrase: “Can it be coincidence that . . . ?” (Sometimes, yes)
  • A scattergun approach to evidence: Instead of building up an argument point by point, conspiracy theorists tend to bury you in a random collection of related facts. They can take this approach, because their obsession causes them to have hundred of points ready at any given point. But instead of the rational building of an argument, the result is not logical persuasion, but an impressionistic, often highly emotional view of the situation.
  • A lack of self-reflection: Many of the sort of people I’m talking about know that “conspiracy theory” can be negative term, and are insulted if you apply it to them. However they don’t have the least idea of why it is appropriately applied to them. Accuse them of paranoia, and they will explain that they are only be sensible, and everyone else is living in a fool’s paradise. Suggest they have a cavalier attitude to evidence, and they’ll say much the same same. Don’t expect a sense of humor, either – that’s usually lost with the self-reflection. If they call you a “Microsoft shill” and you ask, “Where can I send an invoice?” they’ll assume you’ve just revealed your true allegiance, not that you’re making a joke.

This isn’t a pop quiz of the “Should you quit your job?” or “Which Tolkien character are you like?” variety, and still less a guideline to psychiatric assessment, so I can’t tell you exactly how many of these behaviors are needed to diagnosis someone as a conspiracy theorist. In fact, I’m tempted simply to say that, when you meet one, you’ll know. Still, the more of these traits you see, the greater the likelihood that you’re dealing with a conspiracy theorist. If you see more than half, then the likelihood becomes a near-certainty.

And then what should you do? The problem is nicely summarized by two verses of Proverbs 26. The first is: “Answer not a fool according to his folly, lest thou also be like unto him.” The second is: “Answer a fool according to his folly, lest he be wise in his own conceit”. In other words, you don’t want to be dragged down to a conspiracy theorist’s own level, but you don’t want them to continue unchallenged and perhaps convince others who aren’t paying enough attention to realize the kind of person they are facing.

Answering is always tempting, but you have to put a limit on your answers. Whenever I receive comments on an article I’ve published, with few exceptions I restrict myself to two exchanges, regardless of whether I’m dealing with a conspiracy theorist or not. That way, I show politeness and respect to someone who has taken the trouble to contact me, but I don’t use up all my spare time in answering people. If your time is valuable, you might want to do the same.

However, you should also bear in mind that you can’t win. Try to refute a conspiracy theorist, and you simply prove to them that you’re the enemy. In the end, the best thing you can do for yourself – to say nothing of free software – is to stop responding to the conspiracy theorist as soon as you realize the type of person you’re dealing with. The time you spend dealing with a conspiracy theorist will be put to much better use writing code, persuading a friend to try free software or dealing with the real threats to the community instead of the imaginary ones.

Read Full Post »

Every month or so, I get a request from a magazine asking if I want to write about GNU/Linux or free software. One or two are legitimate professonal offers that I am glad to consider, if only for variation and to length the list of markets to which I can sell – or, to be more exact, to which I might some day sell, since I don’t have many open slots on my monthly schedule. However, more often, the magazine either doesn’t pay or else pays a token like $30 per page, and I have to decline, despite their offers of additional payment in copies or free advertising, neither of which I have much use for. The exchange never fails to leave me feeling guilty, defensive, and unsatisfied.

Admittedly, many magazines and publishers prey on wannabe writers’ desire to be published. However, I’m sure that many are doing their best, paying what they can and hoping that they might one day generate enough income to pay their contributors better. In fact, I am sure that most of them are sincere; they’re generally too excited about what they are doing to be deliberate exploiters.

This sort of low-paying work might have acceptable in the days when I was writing articles in my spare time and trying to build a reputation. I could have helped the editors, and they could have helped me. But how can I explain to these well-meaning people that I’m not just dabbling in writing these days? That in the time I wrote them a 1500 word article, I could have made ten or fifteen times as much writing for my regular markets? That I literally cannot afford to contribute to their magazine or web site?

I can’t explain, of course. Not without being completely undiplomatic and crass. So, I usually hedge until my correspondents’ persistence forces me to be blunter, or they come up with another argument.

Usually, the next argument is the idea – either openly stated or hinted – that, since all of us are interested in free software, then I am somehow obligated to give my labor for free.

Consciously or otherwise, this argument conflates the meanings of free software. Free software, as everyone constantly points out, isn’t free because it doesn’t cost. It’s free in a political or philosophical sense – and, on that score, I have a good conscience. It seems perfectly reasonable to me that, in return for the money I need to live, the markets where I publish should have exclusive rights to my articles for thirty days. After that, I am perfectly happy to have the articles reprinted or translated under a Creative Commons Attribution – No Derivatives license, In fact, I almost never refuse such requests.

Besides, are the people who trying to guilt-trip me donating their labor for free? In many cases, I doubt it.

Anyway, I maintain that, in keeping people informed about free software, I am already contributing to the greater cause. I happen to be one of those lucky enough or persistent enough to be able to earn my living through doing so, but I don’t see why the one should invalidate the other.

True, I do make some gratis contributions to free software in my own time – but that’s beside the point. What matters is that I don’t feel the need to prove my credentials, particularly to strangers I don’t know. So, at this point, they usually break off the correspondence, often with parting comments about my selfishness or lack of generosity.

And of course I do feel hard-hearted at times. But, when it comes to the way I make my livelihood, I have to ration my time. Otherwise, I could easily lose a large chunk of my income for the month. So, I break off, too, muttering my excuses after an exchange that has satisfied nobody.

Read Full Post »

Older Posts »