Tuesday, December 6, 2011

How to Spam Effectively

Here are some techniques on how to spam effectively.
  • Introduce yourself like you know the recipient personally. You might have some tender words in your subject line ("dearest", "beloved", "darling", "monkey love") which will immediately appeal to the reader and encourage them to check the message.
  • Pretend you're with a government agency or corporation. Believe me, when someone sees a message incoming from the FBI, CIA, Homeland Security, Bank of America, Hormel, Adam & Eve, or even The White House, it is a real attention getter!
  • Only use a first name in the "from" field of your messages. I have friends named Claire, Jane, Lexus, Chiquita, all of whom happen to be females with smokin' hot bodies. Of course I will not hesitate to open emails from these lovelies!
  • Use a free email provider like Yahoo to send out your messages. Using official addresses is so formal! Use casual addresses instead (like vincentnobi1970@yahoo.com) and you will instantly appeal to the recipient's heart and wallet.
  • Mention the name of a famous prescription drug, like Viagra. There is a flat 50% chance that the person reading your message has a penis. Use that opportunity to pimp the most effective erectile dysfunction drug in the world!
  • Occasionally misspell words, especially when impersonating a bank. Email can be so boring, everyone has a spellchecker these days. Be different! Tell someone they're going to loose access to their account, or that extra feeds will be charged.
  • Make sure your name appears followed by a bunch of abbreviations. I've always paid special attention to emails from my partner in Nigeria, Dr. Clement Okon, MD, PhD, DVM, MBA, ESQ, BS. Your customers will, too! 

That's it! I hope the techniques I've outlined above will help YOU become a more effective spammer.

Saturday, October 29, 2011

Gaia: Soccer Mom?!

Is mother Earth, a.k.a. Gaia, a soccer mom, taking her "children" to practice in a planet-sized SUV?? Original story here.

Saturday, October 15, 2011

Cannot Modify the Needed File

Upon restarting Windows, my StumbleUpon toolbar in Firefox seemed no more.

I went to the StumbleUpon site and tried to reinstall the add-on, but got this error:

StumbleUpon could not be installed because Firefox cannot modify the needed file.

My setup is a bit unusual in that I have a QSoft RAMDisk drive set up on my 4 GB system to utilize the extra 768 MB or so of PAE memory, normally inaccessible to Windows 7. I configured my system to use a folder on this drive, R:, named TEMP as a scratch space, and set up Firefox to use R:\ for its cache.

I discovered, however, that I'd forgotten to create a little script or batch file to create this TEMP folder on the R: drive. This meant that for some programs that might use the system's default temp space, it might fail, the folder R:\TEMP being nonexistent.

To get around this I simply modified my environment variables for TEMP and TMP to reference the root of the RAM drive, R:\. Now the StumbleUpon toolbar add-on installs successfully.

In case you encounter this error, make sure that you have sufficient space available in whatever folder you tell Windows to use as scratch space, and of course that it exists in the first place and is accessible.

Sunday, September 25, 2011

Center Text AND Images Within ASP .NET

I recently integrated the handy AddThis sharing and analytics tool into an ASP .NET site I'm working on.

Whether due to peculiarities of the markup or browser idiosyncrasies, I couldn't get the widget consistently centered. The widget code lives in a div tag, and despite a popular few suggestions, I simply couldn't get things centered horizontally.

Centering text is no big deal; simply applying a CSS style usually does this well enough:

text-align: center;

Images, however, aren't accounted for by this markup. 

I ended up enclosing the widget in a Table control with the HorizontalAlign attribute specified to "Center", and this did the trick.


Much easier to allow ASP .NET to handle the grunt work of emitting the necessary markup in this case than messing (directly) with styles.

Wednesday, September 14, 2011

Assembly must be Strong Signed in order to be marked as a Prerequisite

In the process of trying to update and rebuild a C# project utilizing Microsoft's Enterprise Library, I inexplicably got the error "Microsoft.Practices.EnterpriseLibrary.Data.dll must be strong signed in order to be marked as a prerequisite." 

I hadn't touched this project in a while, in fact I may've last built it on a different PC, so I guess if I had strong signed the Enterprise Library dll, the new system had no idea. Also, I'd installed .NET 4 recently, so maybe this had something to do with this earlier version of the Enterprise LIbrary (my project implements 4.1 whereas the latest version is 5). I guess security in the .NET 3.5 framework isn't up to snuff as far as .NET 4 is concerned.

Anyway, it appeared I had no choice but to use the sn.exe utility and create a key pair and do all the stuff Microsoft suggests in their painfully tedious article on how to sign an assembly with a strong name. Luckily after some digging I found Signer, a command-line utility which simplifies the process of strongly signing one or more assemblies which VS 2008 may be complaining about.

I'm referencing this from the perspective of a Windows 7 64-bit system, so note that the following may vary if you're using 32-bit. 

In order to do it's thing, Signer requires access to some other command line utilities, most of which live in C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\. A few, however, including ilasm.exe and fusion.dll, live elsewhere (in my case, these were hanging out in C:\Windows\Microsoft.NET\Framework64\v4.0.30319).

I decided to copy Signer.EXE to the above SDK path, and copy the latest versions of the above files to that same path, so that when I execute Signer.EXE, it'll be able to easily find all the external EXE and DLL files in the same directory.

First of all, though, I needed to use MIcrosoft's sn utility to create an .snk key file in my SDK folder from a command prompt as follows:
sn.exe -k 1024 myProjectKeyName.snk

This instructs sn to produce a key file named myProjectKeyName.snk which I really don't care about for anything other than getting my project to build again. Thus, I chose an arbitrary key file name and value of 1024-bit key length.

I then executed Signer as follows in the same folder:
signer.exe -k myProjectKeyName.snk -outdir C:\myProject\myProjectLibrary -a C:\myProject\myProjectLibrary\*.dll

Here I'm instructing Signer to take the key I just created and strongly sign all .DLL files in my project's library folder. After this, I did a Clean Build on my project, then a Build, and thank goodness, the build completed successfully!
Even though Visual Studio 2008 can't build .NET 4 applications, I guess nevertheless since I have the .NET 4 framework installed, it's mandated that all assemblies shall be strong signed, or the project using them shall not build. Whatever, I'm just happy to have gotten past this issue.

Monday, September 12, 2011

Google-like Filtering with RadGrid and Separate Data Class

I needed to create a Google Suggest style search interface for an ASP.NET page.

Our site recently obtained licenses to the Telerik control suite, and the powerful RadGrid control looked like it was just what I needed. I found this example on the Telerik site.

Key to this setup is having a textbox for the user to input filter criteria, which is then from the user's perspective transformed into a RadComboBox object to house matching results; then once the user selects an item from the dropdown, the RadGrid is bound and displays any matching results.

I encountered a problem because our site uses a centralized class library for CRUD outside of this particular page’s code class, meaning I could not access my application’s data context from within the GridBoundColumn class definition. The Telerik example (specifically in the MyCustomFilteringColumnCS.cs file) performs its own queries as needed using a SqlDataAdapter with a ConnectionString obtained from the application configuration. A simple SELECT statement is executed which returns matching results.

When I tried to reference my centralized data class from within the GridBoundColumn class definition, I got the following error:

Cannot access non-static property … in static context.

Below is the problem code, revealing that the property CurrentUser is inaccessible to the class.

       protected void list_ItemsRequested(object o, RadComboBoxItemsRequestedEventArgs e)
        // Cannot access non-static property 'CurrentUser' in static context.
        using (MyCRUD mc = new MyCRUD(CurrentUser) )
              ((RadComboBox)o).DataTextField = DataField;
              ((RadComboBox)o).DataValueField = DataField;
              ((RadComboBox)o).DataSource = mc.GetMatchingAddresses(e.Text);

My GridBoundColumn class does not exist until my application instantiates it with its parent RadGrid object, so I cannot directly assign a property to it. However, I stumbled upon this post which made me realize I could, in the GridBoundColumn class definition, make several changes.

  1. Define a constructor for the class which takes an existing instance of the MyCRUD class as input.
  1. Create a public property in the class definition which can be assigned the MyCRUD object.
  1. Create a private field in the class definition to contain the instance of the MyCRUD object to be utilized by the GridBoundColumn class.
Below is the modified class, with additions (*) indicated below.

       public class rgcFilterColumn : GridBoundColumn
            // * I added a constructor with an input parameter of the type 
            // * corresponding to my app’s CRUD object.       
            public rgcFilterColumn(MyCRUD mycrud)
                TheDataContext = mycrud;

            // * This field provides an instance of the rgcFilterColumn class 
            // * with the corresponding value set for the data context object.
            private readonly MyCRUD TheDataContext;

            // * This property enables the process which instantiates this 
            // * class to assign the MyCRUD object to TheDataContext.
            public MyCRUD thedatacontext
                get { return TheDataContext; }

     // RadGrid will call this method when it initializes
     // the controls inside the filtering item cells
            protected override void SetupFilterControls(TableCell cell)
                RadComboBox combo = new RadComboBox
                    ID = ("RadComboBox1" + UniqueName),
                    ShowToggleImage = false,
                    Skin = "Office2007",
                    EnableLoadOnDemand = true,
                    AutoPostBack = true,
                    MarkFirstMatch = true,
                    Height = Unit.Pixel(100)
                combo.ItemsRequested += list_ItemsRequested;
                combo.SelectedIndexChanged += list_SelectedIndexChanged;
                cell.Controls.AddAt(0, combo);

   // RadGrid will call this method when the value should
   // be set to the filtering input control(s)
           protected override void SetCurrentFilterValueToControl(TableCell cell)
                RadComboBox combo = (RadComboBox)cell.Controls[0];
                if ((CurrentFilterValue != string.Empty))
      combo.Text = CurrentFilterValue;

RadGrid will call this method when the filtering value
   // should be extracted from the filtering input control(s)
           protected override string GetCurrentFilterValueFromControl(TableCell cell)
                RadComboBox combo = (RadComboBox)cell.Controls[0];
                return combo.Text;

           protected void list_ItemsRequested(object o, RadComboBoxItemsRequestedEventArgs e)
                // * Below we use the value of field TheDataContext to execute 
                // * a method accesible via the MyCRUD data context for the application.
                using (MyCRUD mc = TheDataContext)         
                     ((RadComboBox)o).DataTextField = DataField;
                     ((RadComboBox)o).DataValueField = DataField;
                     ((RadComboBox)o).DataSource = mc.GetMatchingAddresses(e.Text);

           private void list_SelectedIndexChanged(object o, RadComboBoxSelectedIndexChangedEventArgs e)
                GridFilteringItem filterItem = (GridFilteringItem)((RadComboBox)o).NamingContainer;
                if ((UniqueName == "Index"))
                    // this is filtering for integer column type
                    filterItem.FireCommandEvent("Filter", new Pair("EqualTo", UniqueName));
                // filtering for string column type
                filterItem.FireCommandEvent("Filter", new Pair("Contains", UniqueName));


Now an instance of the GridBoundColumn class can happily utilize my application's central CRUD class for all its data retrieval operations.

Thursday, July 28, 2011

Google+: Why... So... Serious??

I just tried to use Google's +1 feature, but inexplicably saw red, an exclamation point icon appeared instead of the usual cheerful blue +1. Upon clicking this, I was greeted with the following:
Your profile is currently suspended
Until your profile is unsuspended, you will be unable to create +1's.


Initially this smacked of the kind of shit I've experienced on Yahoo Answers, where a profile you might invest a lot of time and effort in gets suspended because you post a controversial answer that a bunch of people dislike and report to indulge their passive aggressive tendencies. A closer look at my profile revealed this additional clarification.
Your profile is suspended

After reviewing your profile, we determined that the name you provided violates our Community Standards.

If you believe that your profile has been suspended in error, please provide us with additional information via this form, and we will review your profile again.

Google's rules provided this additional tidbit:
Display Name
To help fight spam and prevent fake profiles, use the name your friends, family, or co-workers usually call you. For example, if your full legal name is Charles Jones Jr. but you normally use Chuck Jones or Junior Jones, either of these would be acceptable.

Google+ is still being tested so to me this is no biggie, but it is an annoyance. Some people might not want to use their real name, some might want to create a profile with a fake name for their cat, dog, business, narwhal, whatever.

They have provided the option to provide optional verification in the form of a photo ID...

Additional Verification Information (Optional Section)

Attach a copy of your ID with your name and photo clearly visible. You can block out other personal information. Your ID will only be used to verify your name and will be deleted after review.

I chose not to pursue this option, since I know who I am and I feel Google needn't know more than whom I've presented through my online persona. Facebook, certainly, doesn't mind...

Hopefully Google will unclench their social networking buttcheeks and let people have some latitude in terms of naming their profiles.

Tuesday, July 26, 2011

Explorer.EXE Crashes and Restarts Constantly

After a reboot, Windows Explorer began to crash and restart constantly with an Event ID 1000 error. Windows Help was useless, so I opened Event Viewer and saw the following:

It's curious that a file which is part of the third-party Windows 7 Codec pack seems to be responsible:
Faulting module path: C:\Program Files\Win7codecs\filters\DivXMFSource.DLL

Fortunately, I got around this issue by simply uninstalling the codec pack as described here, by executing the file Win7codecs.msi in a subfolder contained immediately under C:\ProgramData\Win7codecs\, and then choosing Remove (the only option available via Control Panel \ Programs \ Programs and Features is to perform a "Repair", which didn't help in my case).

Saturday, July 9, 2011

Create Shortcut to Executable using C#

I needed a C# method to create a shortcut to an executable and place it on the user's desktop in Windows.

I found a method to actually create the shortcut which utilizes the Windows Scripting Host object model. Most examples I found used a separate icon file for the shortcut, whereas I wanted to have the shortcut icon by default be the same one used by the executable itself.

First you must create a reference in Visual Studio to the Windows Script Host Object Model COM object as shown here:

Below is the modified method, where sLinkPathName is the path to the executable.

using IWshRuntimeLibrary


private void appShortcutToDesktop(string sLinkPathName)
          WshShellClass wsh = new WshShellClass();
          IWshRuntimeLibrary.IWshShortcut scShortcut;

          // Choose the path for the shortcut
          scShortcut = wsh.CreateShortcut(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\shorcut.lnk") as IWshRuntimeLibrary.IWshShortcut;

          // Where the shortcut should point to
          scShortcut.TargetPath = txtFile.Text;

          // Description for the shortcut
          scShortcut.Description = "This is a shortcut.";

          // Location for the shortcut's icon
          scShortcut.IconLocation = sLinkPathName + ", 0";

          // Create the shortcut at the given path
     catch (Exception ex)

Line 22 sets the shortcut's IconLocation property such that it grabs the default icon for the executable, the same one that you'd expect to see if you created the shortcut manually.

Saturday, July 2, 2011

Google +1 Button: Instant SEO

Google's new +1 button is the information innovator's response to the fairly ubiquitous Facebook, StumbleUpon, and other icons that let you promote content you find useful. I noticed that Google incorporated this feature into my search results as well, so I decided to experiment.

A popular blog post of mine describing a DIY screen protector for the Viewsonic G Tablet appears at spot #9 among my Google search results as shown below:

Note the greyed out +1 button just to the right of the link title, which animates tantalizingly as you hover over the search result. I went ahead and clicked it, essentially voting my link up in the rankings. Here's the result:

From the #9 to the #5 spot with one click?? I'll take it! You also receive a notification just below and to the left indicating that you've +1'd a given link.

I don't know whether "+1'd" has as catchy a ring to it as "Liked", but if it brings more traffic to my site, then I'm all for it!

Tuesday, June 7, 2011

Viewsonic G Tablet DIY Screen Protector

I recently purchased the Viewsonic G Tablet. Once you dump the factory ROM, it's great, but unfortunately its glossy surface is a fingerprint magnet and the glare can be pretty bad in bright light.

There are some commercially available, custom fit, and relatively expensive screen protectors out there, but paying upwards of $20 for a transparent piece of floppy plastic is a bit overkill in my mind. Another quite effective and relatively inexpensive solution to protect the screen involves using frisket film, a clear, nearly transparent adhesive film used for tracing, stencils, and related tasks.

I opted for the cheaper route. Care to try it? 

Here's how.

First get some matte frisket film. The "low tack" variety works just fine; it adheres snugly, yet can be easily peeled away without leaving residue. You can print out this template as a guide. Use some paper clips to secure the roughly 9 x 12" frisket film to the template. Then, using a sharp razor or knife, carefully cut along the whitespace between the inner and outer black borders. After cutting, you can trim the corners of the film to accommodate the curves of the tablet, and also cut out a notch for its built-in camera.

Thoroughly clean the surface of the tablet with a damp, lint-free cloth to remove dust and hair. Then, put on a pair of powder-free surgical gloves (latex or non depending on whether you're allergic or not), remove the backing from the frisket film.

Carefully apply the film onto the tablet surface. It helps to have a straightedge handy for this process. Begin with one edge and even up the border of the film with that of the tablet, then carefully smooth the film onto the surface of the tablet, and with a very careful scraping action use the straightedge to apply the film.

Bubbles may form, but some of these you'll be able to work out by carefully "massaging" the film's surface. Over time, any remaining bubbles that are tiny (roughly the size of pinholes) should gradually fade away.

I did notice that the translucence of the film did detract, but only slightly, from the sharpness of the text, but the photo below doesn't do the film justice. The touch sensitivity is just as good as it was prior to applying the film, and over time I'm guessing the minute bubbles will fade away.

Given that each sheet of frisket film in a 12 pack ends up costing around $1.25 apiece, the future prospect of replacing a worn film is far better than the initial cost of an expensive precut film. In this case, a little work means a lot of savings, as well as reducing glare without compromising the sensitivity of the Viewsonic G Tablet touch screen.

Tuesday, May 31, 2011

Perfection vs Excellence

The love of my life once told me, strive for excellence, not perfection.


Perfection is unattainable, whereas excellence is achievable.

Oxford’s defines perfection as the condition, state, or quality of being free or as free as possible from all flaws or defects” while excellence is defined as “the quality of being outstanding or extremely good”.

Perfection and excellence both are human concepts, so naturally we use these as tools in our interface with the universe. Myriad examples of the application of either concept abound, so to narrow the focus to one, consider a sword made of diamond versus a sword made of Damascus steel.

The hypothetical diamond sword.
The diamond sword is perfect. It’s been crafted out of pure diamond, one of the hardest known substances on earth consisting of a crystal lattice of tetrahedrally bonded carbon atoms, and has a razor-sharp edge that can slice a piece of tissue paper falling across its blade cleanly in two with the help of gravity alone. Against an unarmored opponent, this sword would likely slice their flesh to ribbons in the hands of an adept duelist.

However, lurking within this flawless weapon is a fatal shortcoming. The carbon atoms of a diamond are bound in a relatively brittle lattice configuration, which many practitioners of diamond cutting will attest is easily fractured. Indeed, transforming uncut diamond into precious jewel-quality stones relies on this inherent crystalline structure.

In contrast, there is the sword crafted of fine Damascus steel. Although the physical shape of this sword is the same as its crystalline counterpart, its molecular structure is vastly more complex and variable.

Closeup of a Damascus steel blade.

Research on Damascus swords crafted in ancient times has revealed that impurities in the steel ingots used to craft these swords led to the formation of what we describe today as nanowires and carbon nanotubes, structures which lend unique variability and resilience to the metal at the molecular level. In addition, Damascus steel blades have been found to contain a variety of elements as impurities, including carbon, manganese, vanadium, calcium, lead, and others.

Now envision these two blades, each executing two basic techniques of sword combat, the slash, and the parry.

The slash involves using the sharpened edge of the blade to slice the flesh of an opponent.


Given the sharpness of the flawless diamond sword’s blade in this example, as well as that of the Damascus steel blade, and the target, say a pork belly, it seems clear that both blades will perform this straightforward task well. Indeed, perhaps the diamond will edge out the Damascus steel to some extent, similar to the way obsidian, a similarly brittle but remarkably sharp material exceeds the sharpness of surgical steel, reducing the extent of scar tissue in flesh.

The parry, however, is a bit more interactive. Rather than simply connecting the leading edge of a blade against flesh, a parry may involve blocking or deflecting a strike using the flat of the blade.


Whether the diamond blade is giving or receiving the parry, it’s highly likely that the blade will break. Given diamond’s relatively inflexible crystal lattice, the odds are very much in favor of any impact fracturing that lattice and causing the blade at best to crack in two, at worst to shatter into the proverbial million pieces.

What does this say about the efficacy of striving for excellence in favor of perfection?

Perfection has honed the diamond blade to razor sharpness, given it crystal clarity, and made it capable of slicing flesh with the greatest of ease. The focus, and utility, of the blade are as uniform as the pure carbon it’s composed of. For the specialized task of slashing, it is masterfully suited to this role.

Excellence has granted unique characteristics to the Damascus steel by virtue of the impurities infusing its molecular structure. It may result in an incision which under a microscope appears more jagged, but the relatively flexibility and resilience of the blade enable it more likely to withstand a powerful blow.

The diamond blade illustrates simultaneously the appeal and the danger of embracing perfection. Perfection is flawless, sublime, but inherently fragile, whereas excellence, though not flawless, may better endure the onslaughts of the unexpected by virtue of the very imperfections which define it.

Thursday, May 26, 2011

Windows Wallpaper Woes

After installing Windows 7 service pack 1 (build 7061), I inexplicably was unable to change the wallpaper, it allowed me to only change from one solid color to another.

I found a fix that worked for me, it involved simply opening the following folder and deleting the TranscodedWallpaper.jpg file contained within. 

Once I did this, I closed the Personalize screen and reopened it, and then I was able to once again change wallpaper to something considerably less drab than one of the various solid colors.

Friday, May 20, 2011

"Unknown Hard Error" BSOD and CI.DLL

My Windows 7 64-bit laptop suffered a BSOD with "Unknown hard error". A reboot resulted in Windows immediately going into Startup Repair mode, and the log showed that the file ci.dll had been corrupted.

I tried booting into Safe Mode, tried a Last Known Good boot, neither option worked, each time the system jumped back into Startup Repair. Finally, I chose the option Disable Driver Signature Enforcement, and was able to successfully boot into normal mode. This option bypasses the functionality in Windows which checks for system or driver file corruption and thus far it seemed like perhaps some software or driver I'd recently installed or updated might've led to this boot issue.

Days prior I'd been noticing some strange behavior in Windows. I had been unable to access my GMail and Live accounts. GMail would forever remain at the initial progress bar, eventually timing out and asking if I wanted to use basic HTML mode; Live would load the initial screen showing my email but just sit there, any clicks on my Inbox or Sent Items or other folders did nothing. Once I booted in this Disable Driver Signature Enforcement mode though, a new twist; it appeared my Google search results were now occasionally being redirected to advertising sites.

It turned out to be malware, a rootkit to be specific.

I ran a full scan with the latest SpyBot as well as Symantec Endpoint Protection, installed on all our workplace PCs, but these found nothing.

However, in tracking down other reports of apparent ci.dll file corruption, I discovered Kaspersky's TDSSKiller tool. I downloaded and ran the tool, which performed a concise scan that took roughly a minute to complete. Lo and behold, a rootkit, a member of the notorious TDSS family.


I ensured the Cure option was selected, then clicked Continue, and allowed the tool to initiate a reboot and hopefully clean out the rootkit.

Following the removal, I could once again boot into Windows normally, and the anomalous behaviors described above no longer occurred.

Friday, May 13, 2011

Vaccines: Unnatural Selection

Whether or not to vaccinate children from infectious disease is a hotly debated topic.

Bordetella pertussis, the bacteria responsible for whooping cough.

I encountered a discussion where some parents discuss their choice not to vaccinate their kids. The author cites various factors justifying this choice; that vaccines may compromise the body's ability to fight infection, may cause an allergic reaction, or hinder the healthy development of the immune system; that the ingredients of many vaccines, among which may be chicken, monkey, and aborted human fetal cells, aluminum, and various others, are undesirable to have injected into the body; that there is insufficient research to justify the use of vaccines to prevent disease.

Child receiving an oral vaccine for polio.

Evolution is an ongoing process, and the evolution of the human race is in many ways insulated from the process of natural selection. Medical science has insulated sufferers of type 1 diabetes like myself from being selected out of the population by providing synthetic insulin, an artificial means to adapt to a challenge thrust onto me by circumstance. Without this development, I would be dead, and my unique genetic heritage obliterated.

Similarly, vaccines enable the human body to compensate for many an infectious disease. No longer for a disease such as polio or measles or whooping cough need the body be completely unprepared for the onslaught; rather, a vaccine enables the unique signature of these and other contagions to be recognized by the body as pathogens, and enable it to produce an army of antibodies and other agents to systematically eradicate it.

Collection of poliovirus.

What if the entire human race stopped using vaccines altogether?

Many people would die. The science that goes into creating and refining vaccines would be absent, leaving the body to fend for itself against the elements, taking on from the environment whatever pathogens stray into its path.

However, many others would live. Sexual reproduction shuffles the cards of our genes between individuals, resulting in novel combinations of genetic traits, some of which will open the door to certain pathogens and slam them shut to others. For those who would survive, over long spans of time across many generations of human beings, the survivors would conceivably refine their immune systems to compensate for whatever pathogens their environment presents.

Of course, microbes also evolve, as evidenced by the emergence of MRSA; an antibiotic which is highly effective against one species of bacteria may prove ineffective against another, enabling the latter to thrive in spite of our best efforts to eliminate it. In the short term, it would seem that ideally vaccines provide relief from suffering by "tuning" the immune system to respond to pathogens. In the long term, however, the utility of vaccines is in my mind questionable.

Let's say we have a bacteria that causes the flesh to rapidly waste away and die, an uncompromisingly lethal, supercharged form of leprosy

Man aged 24 suffering from leprosy.

Science develops a vaccine which tunes the immune system to recognize and destroy this bacteria before it can take hold. Irrespective of whether your DNA already imparts a natural resistance to this bacteria or not, without fail a person who takes the vaccine will resist and survive. 

Now, remove the vaccine from the equation. Current and future generations must fend for themselves, and some will inevitably die, while others will suffer no consequences, having survived the bacteria by virtue of their natural immunity.

In the short term, we can dispense with vaccines and let children and adults contract diseases, suffer, and die. In the long term, diseases we fear today might be silently eradicated by our immune systems such that they no longer pose a threat. Vaccines today may indeed insulate us from suffering, and keep natural selection at bay by allowing those with insufficient immunity to withstand disease that might otherwise kill them.

"River of Time 2" by Scott Boden.

Question is, do we choose to take on nature without the benefit of safe, effective, rigorously-researched vaccines that do as they claim and prevent disease, or shrug our shoulders and keep a stiff upper lip as time marches on, serving as the ancestors of people in the far future who will benefit from our suffering in the form of immune systems tuned through the generations? 

I'm in favor of vaccines, provided that they are researched extensively so that they enable us to safely, effectively augment our ability to combat infectious disease. No offense to any of my future relatives, but if we can combat human suffering in the here and now, we should.