RE:All Your Tax-Free Internet Shopping Is About To End

From the Business Insider we have this article about the demise of tax-free Internet Shopping.

"Supporters of this online sales tax bill are trying to muscle it through before senators find out how disastrous it would be for businesses in their states," Ayotte said. "I will fight this power grab every step of the way to protect small online businesses in New Hampshire and across the nation."

Baucus said the bill would require relatively small Internet retailers to comply with sales tax laws in thousands of jurisdictions.
"This legislation doesn’t help businesses expand and grow and hire more employees," Baucus said. "Instead, it forces small businesses to hire expensive lawyers and accountants to deal with the burdensome paperwork and added complexity of tax rules and filings across multiple states."

But Sen. Dick Durbin, D-Ill., said the bill requires participating states to make it relatively easy for Internet retailers to comply. States must provide free computer software to help retailers calculate sales taxes, based on where shoppers live. States must also establish a single entity to receive Internet sales tax revenue, so retailers don’t have to send them to individual counties or cities.

"We’re way beyond the quill pen and leger days," Durbin said. "Thanks to computers and thanks to software it is not that complex."

As a computer professional and a person who has tried to figure out which sales tax numbers to use in Ohio, I am skeptical that we can implement this system without a lot of small business pain. Here are some of my questions:

  1. If participating states are providing software to help retailers calculate sales, does that mean I will have to integrate fifty different sales tax calculators into our online order entry system so that I can show the customer the correct sales tax when they are checking out? Yes, Senator Durbin, fifty different sales tax calculators destroys productivity as much as going back to a quill pen and ledger. In a perfect IT world I would use a single number for the entire state and I would not have to worry with county and city taxes or exempt products. Getting the states to agree to a generic sales tax like this is probably like herding cats.
  2. I assume the states will want the sales tax to be paid monthly with annual reconciliations. This may not be that hard for Amazon but for our small business with a part time accountant this could be a lot of extra work that contributes nothing to the bottom line. If a part time accountant makes a mistake on one form, that is a problem. If more than one form has a problem, that is an accounting disaster and it may take a full time  accountant to fix the problem. Now just imagine if a state wants to audit your books. Multiplying the opportunity to fail by 50 does not sound like a plan to encourage and grow small businesses.
  3. If we had a test environment it might be interesting to see if small businesses opt to not sell merchandise in certain states or set up sales tax exempt subsidiaries.
  4. If you opt to pay sales tax electronically, you will have fifty or more userids you will need to keep up with. This problem could be reduced with a national clearing house organization to consolidate payments and record keeping but I don’t see that in the law.
  5. If you are a small business exempt for sales tax collection and you market  some of your products through Amazon, are you required to collect and report sales tax because Amazon is required to collect and report sales tax?
  6. If the legislators were serious about this internet tax, the legislators should convince Amazon and Google to take the lead with an open source project to standardize the code used for sales tax calculations and reporting. Amazon and Google have a lot of small businesses as customers and it would be nice if we came up with the same sales tax for an order. Small businesses view the changes required to support an internet sales tax as all risk and no reward. For those who believe in the law of unintended consequences, there is an incentive for a business to stay small so they can stay tax exempt.

My First Donation to an Open Source Project

I am glad to say that I finally donated to an open source project today. I have been thinking about donating to various open source projects over the years and have never gotten around to donating. The lucky recipient is They made a pitch for money, they were part of the group I was considering donating to, and they caught me at the right time.  Good for them!

Portableapps is one of several open source products I use on a regular basis. I like programs that do not mess with the windows registry and portableapps has a whole bunch of programs that are minimally invasive. As an old IT guy I have re-installed my fair share of operating systems due to registry problems. I even installed portableapps on some servers I care for. If you are careful you can use one copy available to several computers by using a shared network drive. Most of the portableapps applications I install are applications I use occasionally. The one exception is the portableapps version of Google Chrome. I guess I started using the portable version in response to some Internet Explorer problems and never changed. One of the nicest features of portableapps is that it is easy to update your applications.This is one of the cleanest and nicest ways to keep your occasionally used programs up to date. Nice job John!

Exchange Server Event ID Descriptions Are Missing

This week I had the pleasure of trying to figure out why the Exchange 2003 server was having problems again. It has been a long time since I looked closely at Exchange but the event log was not helpful. All of the Exchange Server Event ID Descriptions were missing. I did not need the descriptions to tell me we had run out of space so I set about purging old email messages and setting the “Deleted Item Retention” to zero. After the regular Exchange maintenance completed I still was getting some messages, so I set out to fix the description problem.

In my case I found out that the event ID descriptions were missing as described in XGEN: Exchange Server Event ID Descriptions Are Missing. Unfortunately this KB did not provide a sample to work from so I had to go elsewhere. Eventually I found a sample registry and manually entered the keys for MSExchangeIs Mailbox Store, MSExchangeIs Public Store, MSExchangeIS, and MSExchangeSA. Now I can look in the event log to see how  we are to filling up the Exchange database.

Powershell Snippets

First/End of Month Date calculations

$dNow = get-date 
$dNowMonth = $dNow.Month 
$dNowYear = $dNow.Year 
#Use for beginning of month datetime search, first day at 00 am 
$firstDayOfMonth = get-date "$dNowMonth/1/$dNowYear" 
#Use for end of month datetime search, first day of next month at 00 am 
$lastDayOfMonth = $firstDayOfMonth.AddMonths(1) 
#Use this end of month search when you do not need the time value 
$ReallastDayOfMonth = $lastDayOfMonth.AddDays(-1) 
write-host "FirstDay = $firstDayOfMonth LastDay = $lastDayOfMonth RealLastDayOfMonth = $ReallastDayOfMonth" 

Create alias if does not exist

if ( -not (get-alias zip -ErrorAction SilentlyContinue)) 
    {new-item -path alias:zip -value "C:\Program Files\7-Zip\7z.exe"} 

Map the network drive if it does not exist( with “filesystem” fix for Test-Path on a network drive).

$drive = "H:" 
$remotedir = "\\myserver\SYSBACKUPS" 
$localdir = "F:\SYSBACKUPS\" 
$filesel = "sql_db_" + (get-Date -uformat "%Y%m%d") + ".7z" 
if (-not(Test-Path ($localdir+$filesel))) 
    #We do not have the backup file so lets see if network drive is mapped 
    if (-not (Test-Path -path "filesystem::H:\")) 
        $net = new-object -ComObject WScript.Network
        $net.MapNetworkDrive($drive, $remotedir, $false, "username", "password")
#... Insert rest of the code here

Classic ASP and Amazon MWS

Okay, I know I am writing about stuff almost no one cares about. Classic ASP is the Dodo of web programming. Who in their right mind would be writing Classic ASP transactions to Amazon MWS? Isn’t Classic ASP dead! The only saving grace from Amazon not supporting Classic ASP is that Amazon’s support of PHP or C# is  not exactly brilliant. So for the few of you who might be interested, submitting MWS transactions using Classic ASP can be done. Most of the ASP code is already available in the forums. The only trick is the  request and feed signatures.

The key to the request signature problem was to implement Daniel O’Malley’s contribution in the post, I have authentication code for Classic ASP — anyone need it?. The trick was how to create a base64 encoded SHA256 signature that Amazon requires for the request. Several people tried to write native ASP functions for SHA256, MD5, and Base64 encoding but they could not match the results of the Amazon Scratchpad.  Daniel’s solution was to call JavaScript functions from ASP. That was brilliantly simple! He wrote a simple WSC wrapper for the JavaScript code available at and published it as sha256.wsc. That was cool! The Base64 encoded SHA256 signatures it generates matches the Amazon Scratchpad. I got it to work on the ListOrders and GetOrder transactions but I needed more. I needed to submit a “_POST_ORDER_FULFILLMENT_DATA_” feed and Amazon required a Base64 encoded MD5 signature for the feed data. This is an important transaction if you want to get paid. If you do not have a lot of Amazon orders your marketing person could update this manually. If you prefer the marketing person to focus on generating more sales, you should probably consider doing this task automatically. In our case we had a system that kept track of tracking numbers for each order.  So I followed Daniel’s example and merged the MD5 code from the same web site into Daniel’s code. My code is called sha256md5.wsc file. My testing confirmed that it generated both sha256 and md5 signatures that matched the Amazon Scratchpad. After a week of posting fulfillment data I have to conclude it is working. Your mileage may vary! Guess what? Our sales are up! I guess the plan of letting marketing folks focus on marketing is working! I love it when a plan comes together!

Since several people asked for it. Here is the wsc file, sha256md5.txt. I hope it helps.

SQL 2008 Express installation errors with 0x84B10001

In my case I was trying to update SQL Server Management Studio (SSMS) from 2005 to 2008. Yea, I know it is 2012 but the 2005 stuff was working. As a general rule I don’t mess with stuff that is working but 2008 SSMS is a simple way to get 2008 SMO for PowerShell. The 2008 SSMS installation complained about the existing 2005 version and asked me to uninstall the 2005 version before proceeding. After I uninstalled the 2005 version I resumed the 2008 installation and it generated this error message.

SQL Server Setup has encountered the following error:

Unable to generate a temporary class (result=1).
error CS0006: Metadata file ‘C:\WINDOWS\assembly\GAC_MSIL\MSClusterLib\\MSClusterLib.dll’ could not be found

Error code 0x84B10001.

Although some folks recommended repairing the SQL installation, my fix was simple. I restarted the 2008 installation and it re-installed the missing items.

Getting Updated Google Shopping Results

After I fixed my problem with Google Shopping I decided to see how long it would take for my browser to show correct shopping results. It has been almost a week and no change in the results. Today I decided to move on. I fixed the problem on Internet Explorer by deleting browsing history(cookies). Fixing the problem on Google Chrome was a bit more challenging. Here was the setting that worked.

Settings - Clear browsing data_2012-11-05_11-56-33

Fixing the Google Shopping problem where no products show up even though the product ads are searchable

I have been battling this problem with Product Ads for some time. Our Products Ads were supposedly search-able but we could not find them using Google Shopping. We could find our products via a standard Google search and via Google Shopper on my android phone. In the last email of this continuing saga of questionable product support I saw a telephone number. Previous phone calls by our marketing guy had Google support recommending that he increase the bid amount and open the server up for Google bot searches. None of those recommendations worked but I really did not have a choice. So I called Google and they recommended that I add a default product ad extension for all products. Hmm… Here’s the steps:

  1. Bring up your product listing ads campaign, My Product Listing Ads.
  2. Click on the Ad Extensions tab.
  3. In my case the Ad Extensions area of the screen was blank, so I clicked on the New Extension button.
  4. There was only one choice for me, All products, so I selected it. Now I have one Ad Extension on my screen for all products.
  5. The person from Google said it would take about 12 hours for it to process.

This morning our products are searchable in Google Shopping from most desktops and we are back into the comparisons. I guess that a default product extension is a necessary step. See the picture below for an example.

We still have the problem where we get different search results from different browsers and laptops. My desktop using Chrome seems to be using an old version of shopping results where as my Firefox browser on the same computer retrieves current shopping results. I guess Chrome uses a cached version and will eventually catch up. Another new change for Google Shopping is that  "site:" does not work any more. It is fascinating that Bing and Google have had so many problems with shopping search engines.

Campaign Management_2012-10-30_10-59-37a

Comparison Shopping Engines: Want to Compete with Amazon? Start Offering Remarkable Content

Here is a great post by Trinity Hartman, Managing Editor of Content Ping that argues that the best way to compete with Amazon is with great content and offers a few pointers on how to improve the content.

If CSEs want to compete with Amazon as places where online shoppers go to discover products and compare prices, they’ll need to improve their content.


Making Great Content Work

Here’s my advice to CSEs on how they can become go-to sites for product discovery and research:

  1. Obtain outstanding product descriptions
  2. Make room at the product page level for enhanced content (lifestyle images, video, 3D images, magnification, buying guides, etc.)
  3. Pay attention to product page design
  4. Include more consumer-generated content (product reviews) 

Comparison Shopping Engines: Want to Compete with Amazon? Start Offering Remarkable Content
Fri, 28 Sep 2012 15:13:06 GMT

Playing with Pythonxy

I am not a python developer but occasionally I find a need to do something in Python. Over the years I tried Python and Python plus Eclipse.  About a year ago I tried Pythonxy and liked it.  I initially downloaded the package since I wanted to do some statistical analysis using python and this was an easy way to get all of the dependencies. Here are some of features I like and dislike.


  1. Naturally it includes Python and a wide assortment of packages including NumPy, SciPy, Matplotlib, and IPython. It is kind of a no brainer to set up a Python environment with a full complement of libraries.
  2. It includes a nice full featured python IDE, Spyder.  If you do not like Spyder you can always go back to Scite and IDLE.
  3. It includes several packages I wanted to play with Eclipse, QtwxPython, and MinGW although Eclipse is now an extra package.


  1. It is a large download, 477 MB.
  2. I converted my statistical analysis to R  so I have little use for the scientific libraries.
  3. In some cases you will be working with older packages, such as IPython(0.10.2) and MinGW(4.5) and upgrading these packages breaks other things. In the case of MinGW I installed the newest Msys/MinGW version over the old installed version(MinGW32-xy) and everything seems to be working. However, upgrading IPython to the latest version breaks the enhanced command consoles for IPython.
  4. Occasionally I have problems installing Pythonxy at work. Mcafee flags the log2del.exe as a trojan while Security Essentials at home does not. This is annoying since several people have reported Mcafee’s report as a false positive.

Amazon to Not Pay For Google Shopping Listings

Tien Nguyen wrote a nice article, Amazon to Not Pay For Google Shopping Listings, in which he said:

In all it’s good news for retailers, large or small to not have to compete with Amazon for eyeballs on their products, similar to an MLB team learning that the high budgeted Yankees are bowing out of the season. Since Google Shopping Ads’ costs will be determined by the market, similar to Adwords (which interestingly enough Amazon is still on), one less high spender should in theory lower costs and increase visiblity for the rest.

On one hand I agree with him that it is good to not be competing with Amazon in Google Shopping. Lower ad costs will be good, too. At one time it seemed that every time I looked at a Google Shopping price comparison Amazon was at the top of the list. In recent months I found more and more instances in which Amazon was not the low cost price leader. The bad news is that even when we were the price leader, we were not getting either the clicks or the conversions.

Our marketing guy is pretty skeptical about Google Shopping Ads. Our trial run with Google Shopping ended with terrible conversion rates compared to Google Adwords. We are getting a better bang for our advertising buck with Google Adwords.  Part of the problem is that Google Shopping and Adwords are competing against each other for the same sale rather than being complimentary or additive. When I look at the potential for this channel, I am pretty dismayed. Google Shopping has the most comprehensive comparison shopping list out there and we are getting about the same sales from Google Shopping as we are getting from Shopzilla.  Our Nextag sales are even better. I don’t get it.

An e-mail message that is larger than the sending message size limit or the receiving message size limit is not delivered

This problem plagued us for the last couple of days. One of our vendors sent us a 11 MB Acrobat catalog as an attachment to a regular email message and Microsoft’s Exchange was not letting it through. I thought that the personal sending and receiving limits would override the global limits. This would allow a few people to receive large attachments. Microsoft’s KB 28572 set me straight.

These global settings affect all Exchange recipients. If a recipient has configured their own personal sending or receiving message size limits, the global message size limits override the individual message size limits of the mailbox.

Google Shopping Problems

We finally gave up on Google Product Ads this week. We get a lot more traffic from Google Shopping than from the Product Ads so it made sense to turn Product Ads off until Google can get their act together. Our problems with Google Shopping seems to have started on June 28th when our search clicks fell off to almost nothing.  Despite all of our products showing available for Product Search only 934 products could be found using Google Shopping. We tried briefly to try and make our feed work for both Product Ads and Product Search but the progress was too little and too slow. So we unchecked the Product Ads box on the advanced feed settings and submitted the feed again. The disapproved Product Ads is zero and the products we can find using a generic Google Shopping search has climbed from 4390 to 5510 and our search clicks are back to where they were before this mess. This whole mess could have been avoided with some good diagnostic messages in Merchant Center and some decent customer support.


Google Shopping is not listing products if the product-ads or product search is disapproved

In the Merchant Center Troubleshooting group Celebird said this in response to the question Google Product Ads Disapproved but Product Search Approved:

for a u.s. feed the two policies have now been combined —
if product-ads is disapproved the items will not be listed;
if product-search is disapproved the items will not be listed.

Although I have not seen this confirmed in any Google communication, it sure looks like this is what is happening. The big problem is that we do not know why our Product Ads are being disapproved. It is hard to fix a problem without an error report. Here is my previous post on this problem, Google Shopping Fail? Webmasters Report – CPC Strategy .

Google Shopping Fail? Webmasters Report – CPC Strategy

Andrew posted this article on random occasions Google has denied the Google Shopping ads for retailers that abide by all rules. Since I do not have a Facebook ID I will make my comments here.

We noticed a problem last week and it was more severe than Product Ads being disapproved. Only the products with "approved" Product Ads were actually searchable in Google Shopping. Only 934 of our 6652 products could be found using a generic search in Google Shopping despite the Merchant Center saying that all of the products were searchable. Removing the products from Product Ads seems to have fixed the problem.

Here is part of Andrew’s article.

A few hours ago we received word that on random occasions Google has denied the Google Shopping ads for retailers that abide by all rules. These retailers were given no notice on why their Google Shopping ads were disapproved, just a nasty looking graph in the Google Merchant Center:

Google Shopping Fail? Webmasters Report – CPC Strategy

Compiling Open Source Programs using MinGW/MSYS

MinGW, a contraction of "Minimalist GNU for Windows", is a minimalist development environment for native Microsoft Windows applications.

I was looking at an open source program(TCL/TK) recently and decided to try compiling it from source. I checked out the Tclers wiki and it had instructions for several different programming environments. In the past I had mixed success using Microsoft’s Visual Studio Express and Cygwin environments to compile open source software. Getting pre-made binaries is so much easier! Since I was feeling adventuresome, I opted for the MinGW/MSYS environment. I was looking for a lean, mean open source compiling machine.

Using the latest mingw-get-inst version the installation of MinGW/MSYS was pretty simple and quick. Then I followed the Building Tcl/Tk with Mingw instructions. Since I had already installed MinGW/MSYS, I skipped the part of the instructions that installed it. Within a couple of minutes I had a compiled version of TCL/TK. I believe I installed the MingGW/MSYS environment and compiled TCL/TK in a shorter time than I would have spent installing Visual Studion Express.Winking smile

Since this compiling test went so well I was curious whether I could repeat this feat on a slightly more difficult animal, OpenSSL. The INSTALL.W32 had sufficient instructions to compile the program but I had to do it twice. MinGW/MSYS is almost Linux. The problem I ran into was that it does not handle symbolic links very well. The note said it was essential that you use MSYS to unpack the source and they were right.  Fortunately the "configure" stage fixes the problem. Everything went well except that I got a statically linked executable and I did not see the shared libraries, libeay32.dll and ssleay32.dll.  It took me a little more looking before I figured out how to create the libraries. In my case I used the command, "perl Configure mingw shared –prefix=/c/OpenSSL", to re-create the executable and shared libraries. If you looking for a lean environment to create windows binaries from open source programs, this environment is attractive. It is fast, uses the standard GNU compilers, and is free.

How Big is Safari’s Market Share?

Last week I was browsing the statistics for our web site created by Awstats and noticed something odd. Safari was our second most popular browser! This result was odd since I had read a report saying that Google Chrome had recently passed Internet Explorer as the most popular browser in the world. On our web site the most popular browser was Internet Explorer(51.8%) followed by Safari(18.3%), Firefox(17.6%), and Google Chrome(8.0%). Since 21.3% of our users are using either a Macintosh, an iPad, or an iPhone, the Safari number looks reasonable. Going through the previous months files I found that Safari pulled ahead of Firefox in December of 2011. After a little hacking of the using the instructions in the article, Analyze HTTP logs, looking for iOS, a significant chunk of the Safari traffic originates on iPhones and iPads. Since we believe that the group of people visiting our web site customers are older than average, this makes an interesting statement about the acceptance of iPhones, iPads, and Safari. This group seems to have chosen iPads and iPhones over Macintosh computers as their browsing platform and the Safari browser over Google Chrome and Firefox browsers for their Internet browsing.

PC magazine wrote a nice article on the current trends in web browser, Google’s Chrome Tops IE in Global Browser Share. In that article Chloe uses two different sources for browser statistics, StatCounter and NetMarketShareâ„¢ and they come up with different results. Except for the Safari/Google Chrome issues our web site statistics are very similar to NetMarketShareâ„¢. Here are their graphs for market browser share.


Graph generated at StatCounter.


Graph generated at NetMarketShareâ„¢.

The Saga of the Weekly Newsletter

Probably the main reason my employer hired me was because the Exchange server had crashed and they needed help immediately. A biweekly newsletter had a “problem” and the Exchange server had run out of disk space.  Since I arrived at the peak for the season and they had several high priority items for me to work on, the initial solution was to stop sending the newsletter.

About six months later we decided to restart the newsletter and the results were pretty ugly. Exchange did not crash but there were a lot of error messages. So I set about fixing the newsletter.

The configuration consisted of a Visual Basic application and a local SMTP server.  This configuration was in response to some severe problems encountered when the application ran directly off of the production server. The processing is simple. A Visual Basic application pulls the current newsletter and the mailing list from our data base and then sends individual emails to the SMTP server. When I started working on the newsletter, the mailing list had about 120,000 people on it. There was an automated program that was supposed to clean up the mailing list based on the error messages returned. Obviously this wasn’t working.

To start fixing the problems I adopted a check list that is very similar to what John Pollard of ReturnPath recommended recently in a post. Although we are not big enough to use their services, I appreciate the efforts that ReturnPath has made in the industry. Here is John’s list.

What should a marketer do to establish Sending Permanence and a good sending reputation on a new IP address?

The answer to this question is to take the new IP address through a warm-up process that works within the ISP restrictions over a period of time. An ISP wants to protect its members from spammers, so working within their rules can help your IP establish a positive sending history and a good sending reputation. Below is a list of seven simple tips to help you get started warming up your IPs:

  1. Deploy from a sound infrastructure: A correctly configured DNS, such as reverse DNS (PTR) records and authenticating with SPF and DKIM tells an ISP that you are more likely a legitimate sender.
  2. Sign up your IP address with all available feedback loops: Maintaining a low complaint rate is a primary factor in determining your sending reputation. Spammers don’t care about complaints and IP addresses with high complaint rates experience ISP blocks and email being sent to the junk folder.
  3. Ensure your bounce process is set to remove unknown users after one bounce: Maintaining a low unknown user rate is another primary factor in determining your sending reputation. IP addresses sending to a large number of unknown users experience ISP blocks and email being sent to the junk folder.
  4. Clean up your email list of inactive and unengaged subscribers: Spam traps are inactive email addresses created by an ISP to catch spammers or marketers with bad list hygiene practices. IP addresses sending to a large number of spam traps experience ISP blocks and email being sent to the junk folder.
  5. Send to your best subscribers first: Your best subscribers are those that are actively engaged with your email program (e.g. high opens, click-throughs and conversions). These subscribers give your new IP address high engagement metrics which tells an ISP that your email is legitimate.
  6. Start slowly and increase volume over time: ISPs limit the amount of email they will accept from a new IP address (throttling). Start sending a small number of emails to each ISP and let their spam filters get used to the sending behavior of your new IP address before increasing volume.
  7. Monitor your Deliverability: Monitor how the ISPs are treating your email during the warm-up process using Return Path’s Mailbox Monitor. Your Inbox Placement Rate is a good indicator of when an ISP’s spam filter adjusts and can help identify other deliverability problems.

Here is my check list for fixing our newsletter problems.

  1. The first thing I did was to set up subdomains and reverse DNS (PTR) records for the static IPs we would be using to send out the mail. The reverse pointer record is a requirement for most feedback loops. Since we had ISP connections from two different ISP providers and we saturate the connection for several hours, I routed the newsletter to our backup internet gateway. That made the folks in the office happy.
  2. Next I set up feedback loops for those ISPs that did not require DKIM, AOL, Roadrunner, and Comcast.
  3. Then I ran our mailing list through a batch program to verify email addresses. This knocked off about 20,000 unknown or obsolete email addresses off our mailing list.
  4. Since the automated mailing list cleanup procedure did not work, I replaced it with two procedures. I used a semi-automatic procedure using a group of Regex expressions to categorize the SMTP errors I was getting off of the SMTP server. It seems that every ISP has a different way to tell the sender that an email address is unknown or inactive. The 5.1.1 and various flavors of the 5.5.0 code are the most common SMTP error codes for unknown or inactive users but I did find a couple of folks using the 5.7.1 code. I use this list to remove about 60 users off of the mailing list a week. I also used a semi-automatic procedure of examining the returned email in the newsletter inbox. Most of the 700 messages are mail box full messages and vacation replies which I eliminate quickly through the use of filters. Although this is tedious I chose to manually go through the remaining emails. This typically is about 250 emails and consist of miscellaneous error messages not caught by one of my filters, feedback loop replies, challenge and reply messages, some unknown user replies, and the occasional customer reply.
  5. My next trick was to install a second SMTP server(iRedMail) to sign the email and forward the email to the existing SMTP server. Yahoo likes DKIM and we needed to get back in Yahoo’s good graces. Once I confirmed that we were properly signing our emails, we could set up the feedback loop with Yahoo. 

So how has this worked out. In November of 2009 we went from biweekly to weekly mailings and our sales from the newsletter doubled. This surprised our marketing guy. Our mailing list which started out at 120,000 in 2009 is now down to 88,000. This drop has some benefits that are not obvious. Yahoo has not throttled us in over a year so we must be doing something right. Even when an ISP spam checking routine(e.g. Comcast) bans us, it is quickly resolved by filling out a form. Since we are complying with all of the best practices for senders, I can release the email in 24 hours. Even though our mailing list is down about 2.5% from 2011 and our sales are up 50%. These are pretty impressive numbers considering that our sales outside of the newsletter are flat compared to last year. For those of you who keep track of the sender score, our score went from 80 to 96. Here is our latest report.


CSVed 2.2.1

I was in need of a way to create a simple HTML table from an Excel spreadsheet. The “Save As” option in Excel created the standard Microsoft messy HTML. The Google Docs version was not much better. I finally ended up cleaning it up by hand. Then I tried CSVed. This is a good solution for this problem and other CSV problems. You can read the clipboard directly and export a fairly minimal HTML file.

My final solution was to write a PowerShell script that read the clipboard, transformed the data into a simple HTML table, and then sent the text back to the clipboard. A clipboard manager like Clipboard Manager is probably a necessity to manage the clips if you don’t get the correct results the first time.

CSVed is an easy and powerful CSV file editor, you can manipulate any CSV file, separated with any separator.

some features:
  • edit, add, insert and delete items;
  • import;
  • change separator;
  • add, delete columns;
  • rearrange column order;
  • save selection of rows and columns;
  • save filtered items;
  • save with double quotes;
  • search and replace;
  • filter items;
  • remove duplicates;
  • append and merge files;
  • install and uninstall
  • help in English
  • add prefix and suffix
  • split and join columns
  • export to HTML, Excel, Word, XML and more
  • proper words and strings
  • column search
  • column sort and global sort

The listview is running in virtual mode, that means the data is displayed on demand. (not the entire CSV file is loaded in the listview) so CSVed can handle big files and is very fast.
In other words, you can do everything with a CSV file you wanted. CSV is cardware.