Tablets with Physical Home Buttons

Dear  Amazon,

I see that you have released a new Fire Tablet. Again, it’s pretty much the same thing. I have been waiting for Amazon to come out with a Tablet that has a home button for the longest time. Quite frankly, I don’t mind the soft home button because I have always been an “Android” user. Unfortunately my children, parents and +50% of the world are more “simplistic”. They need that “panic go to home button” in plain sight.

Apple has this down, Samsung is catching on, and you with all your consumer-centricness can’t see this? Please just try it!

Thuan

United States Centralized Return Center

Dear Alibaba,

I recently bought a few things from AliExpress that didn’t come as described. It turns out it would cost me more to ship it back to the seller than the cost of the items. Because of this I buy a lot less, carefully buying things I only need. There goes your sales!

My suggestion to help you help me feed my impulse buying is to open up a return center here in the US. A place to take back all returns for your sellers, then ship back to China ever so often. There will be challenges and obstacles to overcome but PLEASE MAKE IT SO I CAN SHOP UNTIL I DROP!

Thuan

Javascript, Query, & Dotnetnuke Postback

Free time… many coding projects came to mind. One in particular was highlighting all desired text on a certain page. I found nice JavaScript snippet here:

http://www.nsftools.com/misc/SearchAndHighlight.htm

//<script language=”JavaScript”>
function doHighlight(spanText, searchTerm, highlightStartTag, highlightEndTag) {
// the highlightStartTag and highlightEndTag parameters are optional
if ((!highlightStartTag) || (!highlightEndTag)) {
highlightStartTag = “<font style=’background-color:yellow;’>”;
highlightEndTag = “</font>”;
}
var newText = “”;
var i = -1;
var lcSearchTerm = searchTerm.toLowerCase();
var lcSpanText = spanText.toLowerCase();
while (spanText.length > 0) {
i = lcSpanText.indexOf(lcSearchTerm, i + 1);
if (i < 0) {
newText += spanText;
spanText = “”;
} else {
// skip anything inside an HTML tag
if (spanText.lastIndexOf(“>”, i) >= spanText.lastIndexOf(“<“, i)) {
// skip anything inside a <script> block
if (lcSpanText.lastIndexOf(“/script>”, i) >= lcSpanText.lastIndexOf(“<script”, i)) {
// skip anything inside a <HyperLink> block
if (lcSpanText.lastIndexOf(“/asp:HyperLink>”, i) >= lcSpanText.lastIndexOf(“<asp:HyperLink”, i)) {
// skip anything inside a <linkbutton> block
if (lcSpanText.lastIndexOf(“/asp:linkbutton>”, i) >= lcSpanText.lastIndexOf(“<asp:linkbutton”, i)) {
// skip anything inside a <Checkbox> block
if (lcSpanText.lastIndexOf(“/asp:Checkbox>”, i) >= lcSpanText.lastIndexOf(“<asp:Checkbox”, i)) {
// skip anything inside a <panel> block
if (lcSpanText.lastIndexOf(“/asp:panel>”, i) >= lcSpanText.lastIndexOf(“<asp:panel”, i)) {
// skip anything inside a <legend> block
if (lcSpanText.lastIndexOf(“legend>”, i) >= lcSpanText.lastIndexOf(“<legend”, i)) {
newText += spanText.substring(0, i) + highlightStartTag + spanText.substr(i, searchTerm.length) + highlightEndTag;
spanText = spanText.substr(i + searchTerm.length);
lcSpanText = spanText.toLowerCase();
i = -1;
}
}
}
}
}
}
}
}
}
return newText;
return false;
}
function highlightSearchTerms(searchText, treatAsPhrase, warnOnFailure, highlightStartTag, highlightEndTag) {
if (treatAsPhrase) {
searchArray = [searchText];
} else {
searchArray = searchText.split(” “);
}
if (!document.getElementById(“spanText”) || typeof (document.getElementById(“spanText”).innerHTML) == “undefined”) {
if (warnOnFailure) {
Sorry, for some reason the text of this page is unavailable. Searching will not work.”);
}
return false;
}
var spanText = document.getElementById(“spanText”).innerHTML;
for (var i = 0; i < searchArray.length; i++) {
spanText = doHighlight(spanText, searchArray[i], highlightStartTag, highlightEndTag);
}
document.getElementById(“spanText”).innerHTML = spanText;
return false;
}
function badphrases(){
highlightSearchTerms(‘die kill’);
}
//window.onload(setTimeout(‘badphrases();’,3000));
//</script>

The code worked beautifully when I tested it’s search then highlight functions. BUT when I tested it against the rest of the page I realized that my buttons weren’t working anymore. Something was going wrong and after playing with how the script loaded, what to block it from replacing, and where it highlighted I gave up.

Another solution had to be found. Knowing that Dotnetnuke had jQuery integrated into it I tried this jQuery plugin:

http://johannburkard.de/blog/programming/javascript/highlight-javascript-text-higlighting-jquery-plugin.html

Ostensibly, it looked like a winner like the last one. NO!, something was still wrong. Further inspection told me that the JavaScript was messing with DNN’s method of posting back. After some more trial and error I went to the DNN forums:

http://www.dnnsoftware.com/forums/forumid/199/threadid/503867/scope/posts

javascript and asp.net postbacks are somewhat at odds with each other under certain circumstances.
This is especially the case if there are any async / partial update panels on the page
– something that is more and more common these days.

That’s what I got, though it didn’t help much. I told me that I shouldn’t give up and after a little more searching I found my code: http://bartaz.github.io/sandbox.js/jquery.highlight.html

<style>.highlight { background-color: yellow; }</style>

<script language=”javascript” type=”text/javascript”>

jQuery.fn.highlight = function(pat) {
function innerHighlight(node, pat) {
var skip = 0;
if (node.nodeType == 3) {
var pos = node.data.toUpperCase().indexOf(pat);
if (pos >= 0) {
var spannode = document.createElement(‘span’);
spannode.className = ‘highlight’;
var middlebit = node.splitText(pos);
var endbit = middlebit.splitText(pat.length);
var middleclone = middlebit.cloneNode(true);
spannode.appendChild(middleclone);
middlebit.parentNode.replaceChild(spannode, middlebit);
skip = 1;
}
}
else if (node.nodeType == 1 && node.childNodes && !/(script|style)/i.test(node.tagName)) {
for (var i = 0; i < node.childNodes.length; ++i) {
i += innerHighlight(node.childNodes[i], pat);
}
}
return skip;
}
return this.length && pat && pat.length ? this.each(function() {
innerHighlight(this, pat.toUpperCase());
}) : this;
};

$(document).ready(function(){
$(“td”).highlight(“kill”);
});

</script>

Thank you Bartaz and Johann for the nice code. Bartaz’s updated code did the trick. I hope this helps someone else working with Dotnetnuke. Happy Coding to all!

 

What happen to Newegg?

I recently bought a bad drive from them. Sent it back and now very angry because Newegg said there is a scratch on it?!?! I shipped it back to them with care and it was well packaged.

Their lack of customer service reminded me why I stop shopping with them and moved to Amazon. I only forgot because they cleverly sold me a lemon.

Be careful of Newegg, and there “please send it to the manufacture” scam. I doesn’t matter if you bought it and sent it back immediately. It doesn’t matter if the product has a high failure rate. I took the risk because the product (a WD HD) was bundled with a NAS I wanted.

Anyways, my credit card company helped me get my money back. Boo to you Newegg.

Working with Cron Jobs

For a while now, I have been using my shared hosting to backup/store numerous image files. Retrieving those files over the internet has always been a pain. Especially when there are hundreds of files in a given folder. The end goal is to be able to download the archived folder to my computer for easy viewing.

So, I took the time to code something up. Here’s the psuedo code:

  1. zip folder
  2. rename zip to include date stamp
  3. move zip to another destination
  4. delete contents of folder for future backups
  5. give myself a high five

Of course, I Google’d and looked for an easy way out… to see if some has posted the exact code I was looking for. No such luck but here are the links that were handy:

What I learned:

  • Cron Jobs on shared web hosting gives us the ability to run automated shell level scripts.
  • Cron Jobs coding was essentially Unix, nice I can code Unix!

Once I got started, I did run into a few Cron Jobs specifics:

  1. you have to escape the ‘%’ sign with a ‘\’ in a cron job, http://www.webhostingtalk.com/showthread.php?t=678062
  2. bonus: && operator, helped me reduce my script to one line, http://forums.freebsd.org/showthread.php?t=30964

Nevertheless, here’s the script that will hopefully help someone else looking to compress and backup a whole directory then delete its contents:

zip /destination/of/directory/with/date/label/$(date +\%Y\%m\%d).zip /directory/to/be/zipped/* && rm /directory/to/be/zipped/cleared/*

Happy Coding!

DSL Extreme Service, Signup Scam

Beware Potential DSL Extreme Customers!

My Comcast bill recently jumped up after our promo year ended. I then decided to give DSL a try. DSL Extreme, was bragging about providing 6MBs. I called to confirm that I could get the service. “Yes, you can. We can provide 6mbs in your area.” With that I signed up with their service AND essentially threw away $240. Don’t trust DSL Extreme or their employees, because what they tell you doesn’t mean anything. The tests they do to confirm the speed you can get don’t mean anything. Please read the following support ticket:

Hello! A new DSLExtreme.com ticket has been created for your issue:

Ticket ID: 5330797
Time Created: 4/30/2013 9:08:43 AM
Issue: Thuan called in to cancel the account due to slow speed, he said he can’t get the speed he signed up for which is 6meg.

Resolution (if completed): Checked the account. Informed that he’s still on a contract, and if he will cancel his account Early Termination Fee or Contract payoff will apply on his account. He said that we are not giving him the 6meg speed. Informed him that the speed on his account is 3000-6000/512-768 and per our terms and condition we’re still good of the 80% of the minimum speed which is 2400meg. He said that he will contact his credit card and will have a dispute on the charge.

Please include the subject line in any replies concerning this issue.

As you can see it’s all in the fine print. According to their terms and conditions, all they are required to get you and hold you to your contract is 80% of the minimum. In my case it was 2.4MB… THAT’S LESS THAN HALF OF WHAT I THOUGHT I WOULD BE GETTING!!!

My contract started on 4/23/2013, and since day 1 I had contacted DSL Extreme and ATT multiple times. The ATT Field Tech came out to work on my line several times and even brought out a line specialist. I am sure he documented this in his notes and it could be confirmed by DSL Extreme. Then on 4/30/13, I gave up and asked to cancel because the speed just wasn’t there.

I tried to use there service for a week, it’s not like I took advantage of them somehow. I even had my own modem, they didn’t send me one.

Apparently, DSL Extreme doesn’t care for CUSTOMER SATISFACTION. The only thing that matters is the money. Well, I am not satisfied and will tell everyone about this. And will tell my other family members currently using use DSL Extreme to cancel. FYI DSL Extreme, I have suggested a few people to use you and they actually are. Good bye to that.

We will continue to pay and use the service along with additional service for principals sake. I just hate wasting money. Well there’s also the fact that I don’t want to deal with debt collectors or take a hit on my credit. BLAH!, I tell you! BLAH!

And like you DSL Extreme, I have a price to remove this post: $500 and the cancellation of my service!

BTW, it can also be assumed that if you live in the Evergreen area… don’t even think about AT&T service! It sucks. Stick with Comcast. The speed is well worth the price they charge.

Blog Upgrades

I just did a few upgrades. I added Facebook, Twitter, and Google+ like buttons. I also completely replaced the original WordPress comments system with the Facebook comments system. The upgrades will make my blog easier to use and more interactive. There is a drawback, all of the old/original comments are gone. Especially, the helpful osCommerce module related comments. I am sorry I that inconveniences anyone.

eBay: 9% S/H

eBay is taking more nowadays. After selling off a few extra items I noticed that eBay took a fee off of my S/H charges. If you look into their final value fees, you’ll see this:

Here’s a simple example of a final value fee calculation for an auction-style listing:

  • You sell an item for $95.00 with a shipping cost of $5.00.
  • Your final value fee on the item cost is 9% of $95,00, which is $8.55.
  • Your final value fee on the shipping cost is 9% of $5.00, which is $0.45.

It’s the same thing as: item cost + shipping cost * 9%, which equals: total value * 9%. No wonder they aren’t charging an insertion fee any more; they simple raised rates all around. Then add on PayPal fees (~5%), which means eBay nearly takes 15%. Some seller are paying 20%+, WOW!

Just thought I would rant a little to spread the word around to all you unsuspecting eBay sellers…

A Little Warning About ZenniOptical.com

About 2 weeks ago I bought 4 pairs of eyeglasses from ZenniOptical.com and got them about a week. Ordering from them was a cinch and enjoyable. But (there’s always a but), when 2 the pairs that were for me ran a little small; the other 2 were for the kids and fit them perfectly. One of the was a medium (#730712) and bearable but the other which was supposed to be medium/large (#730712) but actually smaller than the medium.

Immediately I emailed support asking for a refund. But they said, “after your return has been processed by our office, you will receive a refund in the amount of fifty percent of the production cost of the returned glasses. We do not reimburse for shipping and handling. So, I asked if I could exchange? Again they repeated that it was my fault and should have read the sizing instructions, which I did! Additionally I had already ordered from them before:

The brown case and pair to the right are from an older ZenniOptical.com order; IMO when their quality was much better. Look at the cases they give you now, about half the size of the original. They really cram them in there. I digressed a little didn’t I? As stated they didn’t care I am a repeat customer or the fact that they glasses I got for myself were bought as spares and dirt cheap. Why would I scam them over $15? Additionally, of the four I bought these were the cheapest! Oh, the photographic proof of their mislabeling/sizing:

No more buying them for me, especially after what I just went through. I know it’s only $15, but its the principle of it all… how easily they took my money but can careless if they made a sizing mistake. So, be careful if you are thinking about ordering from them. Oh, by the way I’ll be keeping them because it just doesn’t make sense: $15+s/h, return for 50% ($7.50)-s/h costs(3.75)=3.75. That means I paid $12 and some change for their sizing mistake and end up with nothing!

[rating:2/5]

-Thuan

Bad GoDaddy Customer Service

Last night, I noticed a couple of my sites were down, both hosted on GoDaddy. After talking to support for about an hour and hearing that it was my fault. I did my own check up and restarted the application pool for ASP.net. That worked.

But this post is not about there servers randomly going down. It’s about another bad customer service experience I had with GoDaddy support. Every time I asked for the support expert (ha) to check to see if something had gone wrong on their end he said, “nothing has gone wrong, your site is scripted wrong.” Even after explaining that I had not touched my site in ages and the other was install by GoDaddy… he continued to disregard any my suggestion/queries has to what might have gone wrong.¬† In the end all I wanted was the sites up and not to point a finger.

I even started a post on their forums and without surprise other users have been experiencing the same problems for 30+ hours. Honestly they could have just checked and might have found/suggested something like “please try restarting your application pool?!?!”

http://community.godaddy.com/groups/web-hosting/forum/topic/sites-down-1/

It gets worst they edited any (if not) all the comments on the forums that made the server failures their fault. Again saying it’s our fault. Big time, NO NO!!!

After writing this I will still keep the sites mention with them because moving the sites will be such a hassle and their prices are one of the lowest for Windows hosting. But as for future sites and any potential customers they might have had going to them from me… the count is now ZERO.

So if you are considering GoDaddy web hosting. Be very very careful.

[rating:2/5]

-Thuan