mtouch exited with code 98
In an attempt to leverage my existing .NET skills, I started working on learning MonoTouch and MonoDroid. I tried following the simple HelloWorld tutorial on the documents section of MonoTouch and kept getting a random error during any build:
mtouch exited with code 98
This is a really good example of bad user experience. The error is extremely cryptic and tells the user nothing. I tried searching for documentation on error codes to no avail. Finally I stumbled upon the build output tab (which is hidden by default, unlike Visual Studio) to find a bit more useful information:
License file is missing. Please activate MonoTouch.
Looks like the IT team didn’t activate the license properly on the Mac they provided me but having this error description shown in the error list would have saved me 3 hours of hunting.
Dorco/DollarShaveClub vs Gillette Razor Review
TL;DR Version
- DollarShaveClub is a ripoff and waste of time. Buy the blades from DorcoUSA.com direct and save even more money and get the blades faster. You’ll get more blades for your money and you get them a lot faster.
- The Dorco requires more passes for the shave even though it has more blades. It also sucks on the neck area and caused an ingrown hair.
- Even though the Dorco is a fraction of the cost, I prefer the the Gillette as it provides a better shave, lasts longer, and shaves closer.
The Long Version
DollarShaveClub Review
After watching the hilarious viral video, I recently took advantage of DollarShaveClub through a deals site to give them a try. I’m wary of services that make me lazier but the prospect of saving money on expensive razors was too good to pass up. The premise of the service is you don’t need to remember buying your own razor blades and they’ll be cheaper than the Gillettes you’d buy at the store.
After signing up for the DollarShaveClub service, about two weeks later, I received a razor handle in the mail in a tiny cardboard envelope. Yes, that’s right, just a razor handle and no blades. While I’m all for giving businesses a second chance, there’s nothing convenient about having to remind the company that’s supposed to take the burden of remembering your blades to send you the blades, especially when you’re out of razor blades and they take two weeks to send them. I did send an e-mail to their customer service to alert them that the blades were missing and it took three days for them to respond. I don’t know their volume but that’s a long time for a response in internet time.
After inspecting the new “Executive” blades, I did some searching and found out that the blades were simply Dorco blades that they were reselling at a marked up premium. Dorco sells the cartridges in a 4 pack of blades. For some odd reason, DollarShaveClub removes one from the pack and sends you the pack with three and an empty slot.
Since my whole premise was saving money, I decided to explore Dorco directly. For the same price as two months worth of DollarShaveClub, which would equal 6 cartridges, I was able to buy 16 replacement cartridges. Additionally, I received the replacements in three days.
Dorco Pace6 vs Gillette Fusion ProGlide
I tried the Dorco Pace6 razor for two weeks. The verdict? It’s a decent razor. The handle is well designed and solid. My only complaint about the handle is that the base is really bulbous which makes it impossible to fit into my holder. The blades themselves only do a decent job overall. In comparing the Gillette vs. the Dorco, the Dorco requires more passes to do the shave even though it has an extra blade on it. They also absolutely suck shaving on my neck and have actually caused an ingrown hair. The Pace6 also does not provide as close a shave as the ProGlide so I have to shave more often. The Pace6 blade’s sharpness also doesn’t last as long as the ProGlide.
I’ve never had a cut, nick, or ingrown hair before with my ProGlide. After the negative experience, I’m sticking with the ProGlide even though it’s more money.
Drobo Dashboard Can’t Connect to Drobo when ESET Firewall is Active
Have a Drobo storage unit? If you have ESET Smart Security Firewall enabled, you’ll probably find Drobo Dashboard can’t connect while the firewall is on even after adding all the required ports and services to ESET’s rules from the Drobo online help site (http://goo.gl/iVKVU).
After enabling the detailed logging in ESET, I found that ESET’s firewall was flagging Drobo Dashboard as an intrusion attempt and blocked it. From the Drobo help page (http://goo.gl/iVKVU):
Drobo Dashboard connects to port 5000 and then randomly picks a port in the range for broadcasting.
This is definitely not the most intelligent way to build a product when users who are trying to secure their home or business network and it’s no wonder that ESET flagged the behavior as suspicious. Luckily there’s a fix to keep ESET from blocking the Drobo connection:
- Make sure you add the rules as per Drobo’s site (http://goo.gl/iVKVU).
- Open the main program window by clicking ‘Start’ -> ‘All Programs’ -> ‘ESET’ -> ‘ESET Smart Security’.
- Click on ‘Setup’ on the left, and then click ‘Enter Advanced setup’ on the right to open the Advanced Setup tree.
- From the Advanced Setup tree on the left, Expand ‘Network’, and Click on ‘Personal Firewall’, and then select ‘Interactive mode’ from the Filtering mode drop-down menu on the right.
- From the advanced setup tree, click ‘Personal Firewall’ -> ‘Rules and zones’. Click the ‘Setup…’ button in the Trusted zone section and then choose ‘Allow sharing’. Click ‘OK’.
- Click ‘Personal Firewall’ -> ‘IDS and advanced options’. In the ‘Allowed services’ section, make sure all services are selected. Click ‘OK’.
Drobo Dashboard should now be able to connect to the unit with no issues.
Reading JSON through JQuery from Cross Domain ASP.NET Web Service
Recently I had an issue with JQuery and accessing JSON from a cross domain ASP.NET Web Service. After much googling, I stumbled upon many articles that provided no fix that would solve the issue.
Every sample I found was some derivative of the following code:
$.ajax({ type: 'POST', dataType: 'jsonp', contentType: "application/json; charset=utf-8", , url: 'http://www.domain.com/webservice.asmx/function', data: '{}', success: function (response) {} });
Nearly every post pointing out that the contentType argument was the issue but it still didn’t work when I included it. There were posts that said you can’t use GET and had to use POST. There might be valid security issues with not using GET but that’s another topic of discussion. in the case of an open web service where you’re providing raw data to be consumed, a GET should suffice just fine.
To support GET, you need to add the following attribute tags to your asmx.cs:
[sourcecode language=”csharp”][WebMethod(), ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)][/sourcecode]
This will cause ASP.NET to automatically serialize the returned data to JSON without requiring you to do it manually in code. There are no issues when making the call locally either. The second you go cross domain, the call fails.
A few articles mention JSONP (JSON with Padding) which is supposed to provide a workaround for the Same Origin Policy in JavaScript. Once I implemented the JSONP, the entire function
function getJSON() { var url = 'http://www.domain.com/webservice.asmx/function'; $.ajax({ type: 'GET', url: url, async: false, jsonpCallback: 'jsonCallback', contentType: "application/json", dataType: 'jsonp', success: function (json) { alert(json); }, error: function (e) { alert(e.toString()); } }); }