Friday, April 16, 2010

Visa Fail with Authorize.NETs CIM

Just heard from a client that their "Save Credit Card" feature stopped working. They use Authorize.NET's Customer Information Manager (CIM) to securely save the credit cards.

Suddenly the application was just returning:
3,1,290,There is one or more missing or invalid required fields.
Why two, large, successful companies like VISA and Authorize.NET can't tell you which fields they want is beyond comprehension.

According to this message thread:
Visa has a mandate in place that allows us to do $0.00 authorizations to test the validity of a card, but in order to do it they require that an address be passed also. Since VISA is the only company that has this policy, the other card types will be unaffected and not experience the same error.
Up until recently they only required Card Number, Expiration, and Security Code. I tried using a dummy address like the message thread suggested. This would only work if the Authorize.NET Address Verification Service settings were configured to ignore the address, so in my case we'll likely be updating the code to pass the billing address in since we have it anyway.

Thanks for the notice on this VISA and Authorize.NET! You have to wonder how much time and money changes like this cost all the organizations affected?

Monday, April 12, 2010

SQL Service Broker Compatibility Level Issue

Spent about 3 hours troubleshooting why SQL Service Broker wouldn't work in production when it was working fine on two dev boxes with nearly identical configurations. The only indication there was an issue was that as soon as I'd create a Subscription the OnChange event would fire.

The SqlNotificationEventArgs contained the following:
Type:Subscribe
Source:Statement
Info:Options

Finally got a clue as to what this meant from these two sources:

1) The quote below from this page at MSDN clued me in that my TSQL was not valid (which meant there must be more to the story since the same statement works in dev)
Statement : The Transact-SQL statement is not valid for notifications; for example, a SELECT statement that could not be notified or a non-SELECT statement was executed.
2) I focused in on why SQL Server didn't like my "SET OPTIONS" and found the quote below from this page
I ran a compare between the two databases.

The local one, in 80-compatibility, needed the various SET options.

The remote one, in 90-compatibility, needed nothing extra to work.

When I changed the local one to 90-compatibility, the program magically worked, with or without the SET options.

Then I realized the Production environment had been upgraded from SQL 2000 in the past and it was likely I was running in "80-compatibility". Sure enough I was, and changing to "90-compatibility" fixed my issues as well!

3 hours down the drain but learned a little more about Service Broker debugging and troubleshooting.

Service Broker Troubleshooting by Jeremy Kadlec was excellent and so was Using and Monitoring SQL 2005 Query Notification by Sanchan Sahai Saxena

Note to self: Use SQL Server Profiler more.

Friday, April 2, 2010

Message to Apple: Enough with the Terms of Service!!!

Every other time I open iTunes I have to accept a new Terms of Service. WTF? Not only does it do it every time it installs one of its frequent software updates, but when I go to update the Apps on my iPhone I get another one for the iTunes Store in the middle of trying to update my apps. And then when you accept you have to go back and re-request the app updates. Why do I buy stuff from this company? And while I'm on the topic why do I have to reboot my computer to update iTunes? It should not be installing low level drivers but apparently it does because my DVD/CD Drive under Windows 7 disappeared one day. Go here for more info:
http://support.apple.com/kb/HT2615

Either Apple is losing it or all the hype they get for such a great user experience is completely undeserved.

Thursday, March 25, 2010

Get the System Uptime for a Windows Machine

From a command prompt type:
net stats srv
Look for the line that says "Statistics since"

More info:
http://support.microsoft.com/kb/555737

Friday, March 5, 2010

FFMPEG Settings for H264 on IPhone

Took me a coupe hours today to get this to work. First I tried to compile FFMPEG from source. This appeared to work but after a couple hours of it not liking the settings I was using I finally downloaded a Win32 binaries from here:
http://tripp.arrozcru.org/

Here's the command line I used to convert a 704x544 AVI. You'll probaby need to adjust some of the size settings for you're own application.

ffmpeg -i "Rick Astley - Never gonna give you up RICKROLL.avi" -vcodec libx264 -b 1500k -s 480x368 -acodec libfaac -ab 128k -ar 48000 -f mp4 -deinterlace -y rick-out.mp4


UPDATED 7/24/2011: updated 128kb to 128k per Daniel's feedback in the comments.

Here's the FFMPEG command line reference:
http://ffmpeg.org/ffmpeg-doc.html

Note for the IPhone the following limits:
H.264 video, up to 1.5 Mbps, 640 by 480 pixels, 30 frames per second, Low-Complexity version of the H.264 Baseline Profile with AAC-LC audio up to 160 Kbps, 48kHz, stereo audio in .m4v, .mp4, and .mov file formats;

If you're getting this error "error while opening encoder for output stream #0.0 - maybe incorrect parameters such as bit_rate, rate, width or height", you probably didn't compile FFMPEG correctly. Try downloading it from the website above.

H264 is currently my video format of choice since it works on the following:
  • IPhone
  • Silverlight
  • Flash
  • HTML5 in Safari (4+) and Chrome
  • Quicktime
Note to FFMPEG. Figure out a way to make it easier to get Win32 binaries with all the bells and whistles. Using your product is frustrating enough without having to compile it with a million third party libraries.

Sunday, February 28, 2010

.NET LINQ Bug - Specified cast is not valid.

I ran into this nasty little bug last week. It didn't show up on my local work station running Windows 7 but it showed up once published to our development server running Windows 2003 Server. It would happen when inserting a record to the database after calling "db.SubmitChanges()"

The root cause was having a "non-integer" key which I rarely use, but this instance was special. I was able to fix it immediately by deleting the association in the LINQ designer. I was lucky because so far I don't need this relationship defined in LINQ.

After the immediate fix I noticed our development server was missing some patches, so I put in a request to have those installed. I haven't yet tested if that fixes the problem but I suspect it will. Also there is this hotfix that may work:
https://connect.microsoft.com/VisualStudio/feedback/details/351358/invalidcastexception-on-linq-db-submit-with-non-integer-key

Hope this saves someone else some time!