Drew Yates

Andrew Yates's Sketch Pad

Name: Andrew D Yates
Mountain View, CA
Email: drew@drewyates.net
No Resumé

Archive for Computer

Tuesday, March 25, 2008

Why Student Programmers Rant about Business Students with “Ideas”

(as inspired by this and my pledge to positively contribute thoughtful ideas with less ranting)

I understand the frustration that engineering students and fledgling programmers feel when they first experience petitions from business students with startup ideas because I’ve felt that frustration myself. It’s a social struggle for status and identity which intrinsically favors business student. The engineering student is learning that their hard work in school does not entitle him to recognition and respect, and the business student is learning that he has no means to create anything alone. So the engineer seeks somebody to reward him, and the business student seeks somebody to reward —to create greater value for himself. As students are products school, the dynamic resembles school. Once again, the student programmer will work unhealthily hard to earn a reward imposed by others (like honor students), and the business student will work less but be respected more by capitalizing on his identity as a “social leader” (like football players).

Further, as business students almost always initiate the engagement, they lead relationship dynamic —to be in their favor. Often, the justification is that because the business student approached the programmer, the programmer works for the business student. This is called “having the idea,” but in practice, a startup idea is merely a decision to execute, not an idea of intrinsic value. [1] Leadership and the ability to make decisions is valuable, but only in groups with realizable ability to execute. Leadership of zero people is like division by zero: it’s undefined. Leadership of one people is like 1/1: two people to produce a one functional person. A 1 leader / 1 follower works for an Olympic gymnast and her coach, but in a startup, it’s a frustrating waste.

Since the business student needs the programmer, why doesn’t the programmer demand control of the engagement like, for example, an investor? Because the business student sets the initial expectations of the relationship, and changing those expectations may be very difficult or impossible for the programmer. For example, assume the business student suggests 10% equity for the programmer. To counter with 90% has been maneuvered to be too aggressive and would kill the deal. Even ambitious programmers will probably counter with 50%/50% (”fair”) and then compromise down to close. But even if a deal is reached, the programmer will feel offended and abused if they first thought that they deserved the better share.

Why don’t programmers approach business people to pay them to contribute their ideas? They do, for patent licenses, for example. But if my hypothesis is correct —that most startup ideas are merely decisions to execute rather than ideas of intrinsic value— then who would pay for a decision to execute? Nobody would unless they were convinced by others that they cannot make their own decisions. And to be convinced of that, I can see, is frustrating.

Programmers have a status inferiority complex, and ambitious engineering students feel entitled for respect for their “sacrifices” in school and esoteric technical skills —an expectation rarely socially realized outside of a geeky clique. The truth is that “engineer” and “programmer” are not high social status identities (they’re for “nerds”)[2]. Compounded by the introverted, intelligent, yet naive tendencies of engineering students, programmers may intellectually recognize that they are valuable yet do not command the respect they feel they deserve. Unfortunately, they have little ability to positively confront this frustration. So these humiliated ambitious programmers vent their frustration with violent outbursts against higher status people (business people) or retreat to status-supplements like video games like World of Warcraft. This dynamic may be intrinsic to being human, but it’s still unpleasant to be at the bottom of it.

Many business students are aggressive and gregarious, many programmers are socially awkward, and most inflammatory, the business student has no money to pay the programmer. So not only is the business student equipped to abuse, not only is the programmer equipped to be abused, but the situation forces business student to try to get more work for less. He can’t afford better behavior. [3]

Traditionally, when programmers contribute their programming skills to a business, it’s called “employment.” This is the cultural norm. So business students, despite paying less, try to mimic the employee-boss relationship model like how young girls try to mimic their parent’s dinner conversations with dolls. To them, that’s what “business” is. Programmers ambitious enough to want to start a startup will resent being treated like an employee, even if they’re called a “founder” and have an equity stake. Proud but resentful becomes humiliated, and humiliated becomes irrational and violent. Hence, a violent and socially destructive programmer rant explodes onto a blog.


[1] An idea like “let’s make a Facebook application about X (in March 2008)!” could lead to the realization of that idea which can be valuable (and thus the idea itself is valuable, since it initiated the effort), but such an idea by itself seems to have about a “n/0″ value, like a leader with no followers or a donut hole without a donut. …or maybe a “n/0 + n” value.[2] Is programming and engineering lower status that business? A programmer will try learn business, but a business man will avoid learning programming. Or, successful tech entrepreneurs with a programming background become “business people,” but successful tech entrepreneurs with a business background never become “programmers.” (both groups, if unsuccessful, become “technologists.”)

Note: “trying to” is not a sufficient condition for “succeeding at.”

[3] While gregarious programmers and awkward business people exist, the model is the other way. Claiming a counter example to a generality is not relevant to this essay, particularly since I assume such a dynamic would not produce the typical student programmer rant. Yes, it’s an unfortunate stereotype, and if I could discuss it without perpetuating it, I would. But unpleasantness doesn’t make a stereotype baseless.

Bookmark and Share
in Computer  |   |  Comments (28)

Saturday, June 2, 2007

Emacs RegExp Magic Snack

The other day I read that human psychology is such that because it abhors conflicting interpretations, the mind will go to absurd lengths to justify otherwise dubious or wasteful behavior if that person feels they are smart and prudent.

On that note:

I was working on converting a layout I designed for an X-ray diffraction device interface for a client when I realized that set of elements were a few pixels off.

Here is the offending CSS code:


#statusTab.tab {
right: 282px;
}
#dataTab.tab {
right: 188px;
}
#helpTab.tab {
right: 94px;
}
#settingsTab.tab {
right: 0px;
}

So instead of manually fixing each of these values (something that could be very obnoxious very quickly if I need to experiment with a few pixels), I wrote a little emacs regular expression (note: this only works with emacs 22+, and also note, emacs regex is not Perl regex)


Query replace regexp (alt+shift+control+5)
right: \([0-9]+\)px;
right: \,(+ (string-to-number \1) 3)px;

And ta da!


#statusTab.tab {
right: 285px;
}
#dataTab.tab {
right: 191px;
}
#helpTab.tab {
right: 97px;
}
#settingsTab.tab {
right: 3px;
}

Side note: if I start braying about all the fantastic features of an absurdly expensive new car or somesuch, please send me an email. ;)

Bookmark and Share
in Computer  |   |  Comments

Saturday, May 19, 2007

Elaboration on Comment Response about “Software Engineering” and “Astrology of Programming”

John, thank you for your interest and your response.

My problem is the astrology of programming. Astrology existed much longer than any modern science, so it’s not unreasonable to be wary of the same intellectual flaws.

Astrology flourished because people were comfortable to merely work, live, and teach within a reputable system. Whatever theories with the first mote of plausibility became the discipline as they aged. Over time, the discipline grew impenetrable as career scholars published derivative work. These explanations wove themselves into “common knowledge,” and to question them meant to assault authority itself.

And what professional scorns employment?

Regardless of your personal feelings of religion, theology has a similar problem. If it makes you more comfortable, choose whatever feuding sect of whatever religion you prefer to demean to confirm this analogy.

Today, well-taught scientific, mathematic, and engineering educations are vigilant, at least, in theory, against such incest. Science classes have corresponding labs. Math classes have puzzles and proofs. Engineering classes have construction projects. In each of these instances, the students must derive for themselves the “known laws” of the discipline from reality, if even with some guidance.

Yet, how many programming curriculums actually require reading and writing non-trivial software? Do we learn to write by learning about writing? Do we learn to write well at prompts in ten pages? If writing is thinking, what are we learning?

The most important goal of education is to instill intellectual curiosity and empirical rigor in students. Disciplines will change, but the value of these virtues will not. I would trust the opinions about software of my friend who wrote testriffic.com as a 100MB ball of embedded-PHP in click-and-drag-production over most professors. Ends and means are for textbooks. I believe reality —even if the lessons are uncomfortable.

Ironically, without virtues like critical thought and egalitarian dissent, the discipline will NOT change, and in stagnation, these virtues are treated as vices. Historically, the latter has been the rule. So, I do not feel my concern is without merit.

I know that you mean well with your “aerospace reliability” analogy argument, but retreating to an emotionally unassailable exclamation like “what if planes fell out of the sky” is too common —almost as common as the moral argument “so you believe in murder?” and the political argument “that’s what Hilter did.”

Extend these ideas to all of life, and that’s what it means to be a leukocyte.

Bookmark and Share
in Computer, The Real World  |   |  Comments (3)

Sunday, May 13, 2007

Installing Ruby on Rails for Ubuntu

I’m reposting this information because it took me days to get this stupid install done right until I found this walkthru on Google…

Copied from Rails on Ubuntu at http://ruphus.com/

Installing Rails (with readline and console support) on Ubuntu LTS

Here’s what I had to do to get Ruby on Rails to run on Ubuntu LTS with a functioning console (and irb).

It comes down to:

  1. Random packages
  2. Ruby (from source)
  3. Mysql packages
  4. Rubygems (from source)
  5. Rails (from a gem)

Building on posts by:

Thanks guys.

Preliminaries

Mostly via Ed Howland’s post (I believe termcap-compat, which he lists, is no longer necessary, since libc is up to 6 or uh erm… well I don’t rightly know, but that package wasn’t in the repos and everything seems to work for me without it! ☻).

sudo apt-get install gcc
sudo apt-get install build-essential
sudo apt-get install bison byacc gperf
sudo apt-get install zlib1g-dev
sudo apt-get install libreadline5 libreadline5-dev
sudo apt-get install libncurses5 libncurses5-dev
sudo apt-get install libssl-dev

Build Ruby

Download the Ruby source:

wget ftp://ftp.ruby-lang.org/pub/ruby/ruby-1.8.5-p12.tar.gz
tar xzf ruby-1.8.5-p12.tar.gz

And build it. Make some coffee, this takes a while. ☻

cd ruby-1.8.5-p12
./configure
make
sudo make install

Not sure why this is necessary (ActionMailer?)

apt-get install postfix

You’ll also want Ruby’s documentation stuff:

sudo apt-get install  rdoc ri irb

Mysql packages

apt-get install mysql-server mysql-common mysql-client
apt-get libmysqlclient15-dev libmysqlclient15off
apt-get install libmysql-ruby1.8

Build Ruby Gems

We’ll be using this to install Rails:

wget http://rubyforge.org/frs/download.php/11289/rubygems-0.9.0.tgz
tar xzf rubygems-0.9.0.tgz
cd rubygems-0.9.0
sudo ruby setup.rb

Build Rails

Actually the easiest part, I’ve never had trouble with this (knock wood).

sudo gem install rails --include-dependencies
sudo gem install mysql

Note that the mysql gem is really the DB connector for Ruby; it’s not Mysql itself. (We already did that.)

Bookmark and Share
in Computer  |   |  Comments (3)

Friday, April 20, 2007

The Magic Sparkle Way: Featuring Anti-Aliasing for Emacs in Ubuntu!

About The Magic Sparkles Way

The Magic Sparkle Way (Better Known As (BKA) its Three Letter Acronymn (TLA) MSW) is dedicated to wasting your productive time messing around with your computer tools because they are never quite configured exactly the way you like. Magic Sparkles can only be evoked by mystical strings of command line options, obscure software libraries with names that, when said out-loud, summon a variety of minor demons (try it!), and tweaking various hidden configuration files involving exhausting spiritual quests (google).

The archetypal pop-culture example of The Magic Sparkle Way in practice is Indiana Jones and the Last Crusade. It’s practiced by bitter, unshaven men who are duped into solving puzzles in the dark for greedy assholes to find the Solution to Everything, which always looks exactly as it shouldn’t, but never is chosen over the trap that looks exactly as it should, and even though you know better, you never quite earn the fame and fortune that you deserve because some new problem now demands your immediate attention.

Real Example!

The Magic Sparkles Way: How to get Emacs for Ubuntu with minimal suckage and lots of obnoxious configuration

Details from Emacs Wiki

You just can’t keep the fingers out of the Magic Sparkles, huh? You’re too linux/poor/old for a Mac? W32 editors are too “PHP” for the likes of your technical prowess? Emacs may be for you.

Experts agree that anti-aliasing is essential for pleasurable computing experience and above-average sexual performance. Yet poor Emacs, like a cockney flower girl with upper class aspirations, can’t seem to shake its filthy neckbeard breeding without substantial intervention.

I’m assuming that you have laughed away Ubuntu’s silly pretenses of “Normal People” (yah, no codecs, how am I supposed to watch porn and listen to emo?) and that you have already installed the basic prerequisite build tools. If not… slow down there, pipsqueak. We can’t be throwing fireballs all around all willy-nilly if we can’t quite get down magic missile. Go hit the Google.

Anyways, you’ll want to be sure that install “libncurses5-dev” first, or the emacs will fizzle when you try to run it in the terminal (option -nw). (note: all the cool kids run in root. I’ll be assuming you’re cool, too, and running in root —like how all the cool kids are)


sudo su
apt-get install libncurses5-dev

Next, navigate to a decent place to save source code. I personally prefer the following because I prefer obscure three-letter abbreviations for short, simple words like “user” and “source”, yet “local” is spelled-out to prevent any logical pattern that might facilitate understanding:


cd /usr/local/src

Now you need to download the source code (or “magic spell”). I could tell you what this command means, but I would have to flay your eyes with burning strips of human flesh, and frankly, I’m already missing breakfast to write this. You’ll just have to trust this works even if you don’t already know how:


cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/sources/emacs co -r emacs-unicode-2 emacs

After a brief string of summonings, the Terrible Secrets of Emacs now reside in your working directory. I’m going to purposely leave out a minor step in this walkthru just to be sure that nobody accidentally performs any magic that they’re not quite ready to handle yet. It’s a tired cliche, and it always ends in disaster.

Next, you need to attune the Secret of Emacs to your system:


./configure --with-gtk --enable-font-backend --with-xft

You are now ready to build… can you weather the Screaming Sins of a Thousand Compiles? Be Strong…


make bootstrap
make
make install

Whew! Are you still here? Try this:


emacs --enable-font-backend --font "Bitstream Vera Sans Mono-11" &
emacs -nw

Eh? Magic Sparkles? Yes yes? I hope so. If not, you’re probably a bad person, and God is punishing you. A Google onst thou! Atone for your Demons of Stupid!

Now, if you’re like me, you get rather tired of saying “emacs –enable-font-backend –font “Bitstream Vera Sans Mono-11.” Fortunately, the magic of Bash makes it obscure and difficult to create shortcuts! Add these lines to your “/etc/bash.bashrc” file:


alias e='emacs --enable-font-backend --font "Bitstream Vera Sans Mono-11"'
alias se='sudo emacs --enable-font-backend --font "Bitstream Vera Sans Mono-11"'
alias fu='You, sir, are a degenerate human being, quite simian, really, and I strongly suspect ill-breeding and degenerate influences'
alias sfu='You, sir, are a degenerate human being, quite simian, really, and I strongly suspect ill-breeding and degenerate influences ...Seriously.'

And there you have it. Now go forth, and may a many Magic Sparkle be cast upon thou .emacs and *nix boxen!

Note: Please fill my comments about more Magic Sparkles and how my Magic Sparkles are not quite so Shiny nor Sparkly, nor do hardly any Magic Faeries dance about my Magic Sparkles in such a way that you find agreeable. After all, this is the Magic Sparkle Way.

Bookmark and Share
in Computer, Stupid  |   |  Comments (2)

Friday, April 20, 2007

nXML (nXHMTL) Emacs Mode for Ruby on Rails (.rhtml)

nXML mode and the subsequent nXHTML mode for emacs are godsends. It makes web development in emacs feel natural and clean —very zen.

One problem: nXHTML doesn’t know about embedded Ruby (<% and %>). My beautiful emacs-ruby-rails setup was marred by this unfortunate detail… until now.

Marshall Vandegrift has a patch for nXML mode for emacs that makes all those nasty red underlines melt away. Thanks, Marshall! Maybe this patch will be incorporated into future versions of the derivative nXHTML mode?? (hint hint ;) )

Bookmark and Share
in Computer  |   |  Comments (1)

Sunday, April 15, 2007

Basecamp > Bugzilla > FogBugz

How can I not drink the Kool-aid after all my time in Ruby?

I successfully installed Apache and bugzilla on my machine… and I wasn’t impressed. Some goofy bug on the main page tried to submit the login form to the wrong file (./cgi-bin/index.cgi translated to cgi-bin/index.cgi/cgi-bin/index.cg… something like that). I understand that this is software for open source by open source. I expected silliness, overly-complex-yet-spartan-looking design, and a hassle during configuration. I’m sure Bugzilla, once configured, works just great for the projects that use it. Most software is like that.

But there had to be a better way. My Ruby on Rails hacker friend mentioned Basecamp, and while I’ve heard of it, I thought: “yah yah, web 2.0 software that makes todo lists, I’ll ‘look at it’ later.” But I tried it tonight and I’m a convert. First, it’s simple. I don’t have to look for anything. Somehow, 37 signals has designed their website and applications to give me exactly what I want in the first place I look for it. Second, the flash-embedded tutorial videos. I can see quickly what can be done and how. This is exactly what I want from “productivity software,” less thinking, more showing, more doing. Basecamp has relieved that nasty pit in my gut that I get when I think “productivity software configuration.” I still have my suspicions, but I’m giving Basecamp a tentative thumbs-up… for now.

Don’t betray me, 37 Signals.

I’m going to try Backpack for my personal productivity, too.

I know that I’ve been writing about mostly boring technical day-to-day things lately… nothing too thought provoking. Fighting with my computers, new books, and old habits is exhausting. Aaron Swartz’s post Everything Good Is Bad For You irked me a bit; I should write less crap and be more thoughtful when I write. Aaron is always thoughtful. I wonder if one day, in a college class, the professor will refer to something that Aaron had written? Or Scott Adams? Will these “web essayists” ever achieve critical acclaim?

Somehow, I feel that they will, but in academia, they won’t. I think this is a slur against academia.

Bookmark and Share
in Computer, Day-to-Day, Interesting Links  |   |  Comments (2)

Saturday, April 14, 2007

Mundane Updates

This past week I’ve been busy reading about Ruby and Ruby on Rails. Let me tell you, reading for days is boring. It feels like every day I have some major engineering exam that I have to study for, but the exam is already over, and I’m struggling to cram the course material for no credit just to keep afloat. Every day.

I’m still struggling with focus. I did relapse earlier this week and surfed the web most of the day instead of doing work. I’m getting better, though. I figure that, ideally, there are 16 viable hours in a day. Ideally, that means 112 hours per week of productive time. In reality, most people are only productive perhaps 2 to 4 hours per day, and at best, productive 8 hours a day. Everyone gets the same amount of time, but it makes me cringe to think about how much of it is wasted on stupid nonsense and thrash.

By the way, I don’t mean 16 hours of “work work.” I mean 16 hours of time well-spent. A pleasant walk in the park? Ok. Four hours of web surfing, reading fluff and slouched in a dark room? Not so Ok.

Here is where I started writing about my explorations with bug tracking software… but I got pissed and wrote a rant instead. I made a separate post for that…

I’ve also finally started using version control (namely, subversion) for my personal projects. Mike suggested in the comments to keep your home directory under version control. Great idea. I’ve also heard of people doing this with their emacs files on a server, so on any computer, they can keep a consistent, functional emacs library. I’ll have to try that eventually, too. Another program I should learn to use is rsync for automatic backups. I should also start learning to use Ruby to write system scripts (instead of Bash shell script, which is pretty close to the shittiest tool I ever have to use. For anything non-trivial, it’s like trying to nail boards with a steam-powered, double-jointed-hammer with punch cards and unlabeled analog dials.)

My plan is to fully embrace Ruby and Ruby on Rails, be able to admin a webserver box intelligently, and start cranking out good software in emacs and linux at rates and with quality enough to meet my business ambitions. Otherwise, I’d still be hacking PHP in a stolen copy of Dreamweaver in Windows XP, publishing to a shared-server account by click-and-drag to the FTP client, and developing by echo and browser refresh. I know it can be done this way, and this is how I used to do things, and I know some fairly successful websites that use this model… but there has to be a better way. I’m going for the better way.

Bookmark and Share
in Computer, Day-to-Day, Productivity  |   |  Comments (2)

Saturday, April 14, 2007

Rant: Joel on Software’s FogBugz

Joel from Joel on Software is considered to be a respected voice in the software community. Following his advice from The Joel Test: 12 Steps to Better Code, I’ve been looking for good bug tracking software. Soo… why not FogBugz? It’s the bug tracking software that Joel’s company produces, and it’s supposed to be “really good.” That’s what I would expect from such an expert and his progressive, smart company, right?

Here is Joel’s UI Design for Programmers. Granted, Joel speaks mostly about desktop software, not web software… but oh look! His flagship product is a web ap, and so I’m not cutting him a break. Read this article, and then actually try using his software.

I’ve just opened a FogBugz account… and how is this such great software again? It looks and feels like a regular, boring web ap. It’s definitely not Google. Here’s a screenshot of FogBugz…

Fog Bugz

First, when I click my free trial link in my email, I’m taken to some useless splash page. WHERE THE FUCK IS THE AP? Do I have to log in? I don’t SEE a login box. Here is that screen.

Here is what I see: links back to the main page (hint, I’m trying to use your software in case I want to buy it, stop trying to sell to me after you closed the sale, dumbass), some boring shit about email… some confusing tags that randomly appear… “The link to your private demo site is: http://try.fogbugz.com/?id=82190IGXBTS” Ah ha! This will take me to my ap, right? NO! It’s just a link back to the EXACT SAME PAGE I’M ON RIGHT NOW! Some more crap about help (why do I need help or want to learn keyboard shortcuts before I’ve even seen the ap?) a version number (why do I care about this internal programmer cruft?)… FINALLY, in the two of the least-conspicuous screen areas (far right and middle of body text), in little body text font, is “Log On.” Not “Login” or “log in,” which are the web standards. Wasn’t there a long rant in that UI article about making up your own language for important user functions?

I log in at the log in screen. Why is there a confusing note about passwords and admins? This is a trial version, and of course, it’s just me. If this is suppose to be friendly for non-tech users, then why do you print the full version number of the software at the bottom of every screen? I’m taken to the main screen. What now? I only see text, where are all the actions? Oh! All the important menu items are in body font and pushed away to the far right of the screen… why? I eventually see that there is a list of suggested tasks, but I don’t read this because it’s disguised as body text, and the body text starts with the exact same splash crap that pissed me off before. And… there’s a nice “picture of the day.” Too bad this isn’t Flickr. Where is my list of bugs? Since, you know, this is Bug Listing software… Oh, there they are, in tiny font, smooshed to the far left of the screen. There’s some cruft on the far right that with a the dubious header “Show Me” (no shit?) and a couple of 1-2 items lists that seem to replicate information elsewhere on the page. Whatever. Why can’t there be tabs of major actions in shiny buttons at the top, a menu of places on the left, and the main page is a big, shiny table with big buttons and 14px+ text of useful information?

Instead I get:

Welcome to FogBugz.

Project Management, Email Management, and Chat Groups

The link to your private demo site is:
http://try.fogbugz.com/?id=82190IGXBTS

Use the following address to send email into FogBugz: trial+82190IGXBTS@fogcreek.com

After purchasing FogBugz, you can download your trial database in SQL Server 2000 format or Access format or MySQL format.

(shoots self in head with finger-pistol and makes *kkrrr!* noise with eyeroll)

I clicked around a bit more, but I was already pissed, and bugzilla is free and is less of a hassle.

This isn’t quite crap, but I expected gold. This isn’t gold. Yes, I’ve enjoyed some of Joel’s essays. But where is the result? This? This looks like and works like a bullshit blub web ap. Unlike Joel’s own advice, it’s a constant barrage of non-standard web UI, inconspicuous buttons, disjoint menus, verbose and worthless text, and irrelevant forced decisions.

So what if you “hire the best programmers.” Really? You need superstar hackers to build software that’s basically a table printed in a webpage with email and user accounts? You’d be out of business by a teen with Ruby on Rails if software sold by quality, but fortunately for you, it sells mostly by good exposure, and so I expect you to be around for a while.

My very strong recommendation is to hire some web designers and marketing people that will say:

“Hey you fucking idiot, nobody cares about the internal details of your software when they want to merely log in and see a list of bugs. Maybe you should make a log in form than takes you to a list of bugs.”

Bookmark and Share
in Computer, Rant  |   |  Comments (5)

Thursday, April 12, 2007

Switching from Windows/Cygwin to Ubuntu Linux

All day today I’ve been fighting with my machine to install Ruby on Rails… and I’ve had enough. Windows is still important, but it’s dead. Most of my time anymore is either fighting with Windows/Cygwin or fighting with emacs to work in Windows. I’m switching to Ubuntu for good. I’m just sorry that my headmouse won’t work…

I wish I had a Mac… someday. Besides, what serious developers use Windows anymore? I don’t know of any who do and are proud of it.

Bookmark and Share
in Computer, Day-to-Day  |   |  Comments (3)

« Previous entries
  • info on cialis
  • buy viagra online
  • ultram doses