Mac MySQL QUI
February 1st, 2010Needed to quickly import a CSV file to a MySQL database today and found this app. Does a great job of interfacing with MySQL from the Mac.
Needed to quickly import a CSV file to a MySQL database today and found this app. Does a great job of interfacing with MySQL from the Mac.
After upgrading to Snow Leopard my HP LaserJet p1505 driver from Leopard wouldn’t work anymore. This printer isn’t listed on HP’s compatible or incompatible printer list for Snow Leopard, so who knows when/if a driver will be forthcoming. But I found a work around, just use the HP LaserJet 1015 - Gutenprint V 5.2.3 driver. It seems to work just fine.
This blog post talks about how to use the Google Website Optimizer for A/B testing across multiple domains. Specifically the scenario is that your test pages are on one domain, but your conversion pages are on another. This is more for my own memory, but figured some others might get some use out of it too.
Google will give you basically three different bits of code:
1. The control code, which is to be placed in the top of your original page.
2. The test page tracking code.
3. The conversion page tracking code.
Google will give you the necessary Javascript code to include in your pages. However, this system relies on cookies, so when you want it to work across domains you have to make a few modifications to remove the domain name tracking and allow the cross-site linking functions to be used.
Control Script Tracking Code:
Google will give you some code similar to the following which should be placed at the top of your original page:
<script>
function utmx_section(){}function utmx(){}
(function(){var k='2772144706',d=document,l=d.location,c=d.cookie;function f(n){
if(c){var i=c.indexOf(n+'=');if(i>-1){var j=c.indexOf(';',i);return c.substring(i+n.
length+1,j<0?c.length:j)}}}var x=f('__utmx'),xx=f('__utmxx'),h=l.hash;
d.write('<sc '+'ript src="'+
'http'+(l.protocol=='https:'?'s://ssl':'://www')+'.google-analytics.com'
+'/siteopt.js?v=1&utmxkey='+k+'&utmx='+(x?x:'')+'&utmxx='+(xx?xx:'')+'&utmxtime='
+new Date().valueOf()+(h?'&utmxhash='+escape(h.substr(1)):'')+
'" type="text/javascript" charset="utf-8"></sc>')})();
</script><script>utmx("url",'A/B');</script>
You need to add the three lines at the top:
<script>
_uhash = “off”;
_ulink =”1″;
_udn =”none”;
function utmx_section(){}function utmx(){}
(function(){var k=’2772144706′,d=document,l=d.location,c=d.cookie;function f(n){
if(c){var i=c.indexOf(n+’=');if(i>-1){var j=c.indexOf(’;',i);return c.substring(i+n.
length+1,j<0?c.length:j)}}}var x=f(’__utmx’),xx=f(’__utmxx’),h=l.hash;
d.write(’<sc ‘+’ript src=”‘+
‘http’+(l.protocol==’https:’?’s://ssl’:'://www’)+’.google-analytics.com’
+’/siteopt.js?v=1&utmxkey=’+k+’&utmx=’+(x?x:”)+’&utmxx=’+(xx?xx:”)+’&utmxtime=’
+new Date().valueOf()+(h?’&utmxhash=’+escape(h.substr(1)):”)+
‘” type=”text/javascript” charset=”utf-8″></sc>’)})();
</script><script>utmx(”url”,’A/B’);</script>
Test Page Tracking Code:
Google will give you some code similar to the following which should be placed at the bottom of your test pages (including the original):
<script type="text/javascript">
if(typeof(_gat)!='object')document.write('<sc '+'ript src="http'+
(document.location.protocol=='https:'?'s://ssl':'://www')+
'.google-analytics.com/ga.js"></sc>')</script>
<script type="text/javascript">
try {
var pageTracker=_gat._getTracker("UA-XXXXXXX-X");
pageTracker._trackPageview("/nnnnnnnnnn/test");
}catch(err){}</script>
You need to add three lines before the trackPageview call:
<script type="text/javascript">
if(typeof(_gat)!='object')document.write('<sc '+'ript src="http'+
(document.location.protocol=='https:'?'s://ssl':'://www')+
'.google-analytics.com/ga.js"></sc>')</script>
<script type="text/javascript">
try {
var pageTracker=_gat._getTracker("UA-XXXXXXX-X");
pageTracker._setDomainName(”none”);
pageTracker._setAllowLinker(true);
pageTracker._setAllowHash(false);
pageTracker._trackPageview(”/nnnnnnnnnn/test”);
}catch(err){}</script>
Converstion Page Tracking Code:
Google will give you some code similar to the following which should be placed at the bottom of your conversion pages:
<script type="text/javascript">
if(typeof(_gat)!='object')document.write('<sc '+'ript src="http'+
(document.location.protocol=='https:'?'s://ssl':'://www')+
'.google-analytics.com/ga.js"></sc>')</script>
<script type="text/javascript">
try {
var pageTracker=_gat._getTracker("UA-XXXXXXX-X");
pageTracker._trackPageview("/nnnnnnnnnn/goal");
}catch(err){}</script>
You need to add three lines before the trackPageview call:
<script type="text/javascript">
if(typeof(_gat)!='object')document.write('<sc '+'ript src="http'+
(document.location.protocol=='https:'?'s://ssl':'://www')+
'.google-analytics.com/ga.js"></sc>')</script>
<script type="text/javascript">
try {
var pageTracker=_gat._getTracker("UA-XXXXXXX-1");
pageTracker._setDomainName(”none”);
pageTracker._setAllowLinker(true);
pageTracker._setAllowHash(false);
pageTracker._trackPageview(”/nnnnnnnnnn/goal”);
}catch(err){}</script>
Making your links trackable:
Once you have the code setup to allow tracking through the links (setAllowLinker code) you need to make sure the links from your test page to your other domain are tracked. Be careful not to miss links, if you do miss links it is possible for people to be tracked as a visitor but not as converted even if they convert. This would result in missing some conversions and could make your test give you a false result.
Original Link:
<a href="http://www.linktoanotherdomain.com">Test Link</a>
Modified Link:
<a href="http://www.linktoanotherdomain.com" onclick="javascript:pageTracker._link(this.href); return false;">Test Link</a>
That’s all there is too it, unless your situation is a little more complicated, like mine was. I my case my tracked links didn’t point to my second domain because all of the links go through a script that does a 302 redirect. So I had to do one more step.
Passing Tracking Through Redirects:
So in my case the test page actually linked to a page on the same domain. That page does some work, then redirects the user with a 302 redirect to the success page on the second domain. So the link code correctly formulated the link, but my redirect script had to be smart enough to pass it along again. The google javascript linker code basically adds a few query string parameters to the URL. You basically have to just pass these along again as your redirect to the second domain. I found that I need to get the following parameters from the query string and add them to my redirect url to my conversion page: __utma, __utmb, __utmc, __utmx, __utmz, __utmv, __utmk (yes that is two _ in front of the variable names).
That’s it, then test your experiment to make sure it is working. Remember, data will take hours to appear after you have done you testing.
Recently I was building a version of Safe Eyes Mobile for Ad Hoc distribution to my iPhone. Everything was going well until I tried to sync the newly built app to my phone using iTunes. I got an Unknown Error 0xE8008018. I tried searching Google and Apple’s developer site, and the error was truly unknown, both returned no results.
After spending too much time narrowing down the problem i come to find out the problem was simple, my certificates had expired. All I had to do was generate new certificates and add them to my machine.
This week I had the opportunity to interact with Apple customer service twice and it turned out to be an interesting experience. A few weeks ago I decided to get a new iPod nano for my wife for Mother’s day. Her iPod had been caught out in the rain one day while riding her bike and wouldn’t charge expect with her computer. So I bought a her a new iPod Nano (4th generation) and had it engraved to mark the occasion of her first mother’s day.
A few days later she began trying to use it with her accessories like her car adapter, speaker system, etc. It wouldn’t charge! Obviously a little frustrating since that is the primary reason I got her a new one. It was equally as frustrating for her, so I told her I wouldn’t be offended if she wanted me to try and return it. We didn’t want to replace a couple hundred dollars worth of accessories, so we decided to try an return it even though I knew Apple typically wouldn’t take back an engraved iPod.
I called Apple and got a very helpful woman on the phone to whome explained the situation. She told me she would refund my shipping but that they usually won’t take back an engraved iPod, but she would ask her supervisor for an exception. After a few minutes she came back on the line and told me her supervisor had approved the return and would refund me the full amount, I wouldn’t even have to pay the typical restocking fee. I would just have a pay to ship it back. No problem from my perspective.
The weekend rolled around and I figured we would just go to the Apple store and see if there was anything they could do for the old iPod. I took it in and spoke to one of the Geniuses. He said it wasn’t under warranty, and that they don’t even really repair iPods, they usually just replace them, but he didn’t think it would be cost effective for me. I explained the whole story again to him, about the charging problem, the new iPod, etc. He then told me he thought they had an adapter in the back that would make the new iPod work with my old accessories. He disappeared for a few minutes and returned with an adapter. It was $25 and he suggested I give it a try and if it didn’t work I could return it within 14 days. So we gave it a try and it worked.
In both interactions these last few days I felt like I had people involved that really wanted to understand my problem and give me a solution that worked. Good job Apple.
I went over the the new NCG theater in Acworth today to watch a movie. It seems like a typical theater, definitely on the smaller side when compared to the huge mega theaters we have on Barrett Parkway. The movie I watched was digitally projected, which meant it was nice and clear. Not sure if they are fully digital or not.
I liked that they sold tickets and concessions from the same counter. They also offer free refills on popcorn and drinks. It is nice if you pay $4 for a coke that you can at least get a free refill.
This weekend I started having trouble with my Blackberry 8830 getting my email. After Ron helped me check all the Blackberry server stuff on our side, I noticed that the network indicator that normally says 1XEV in uppercase was instead showing as 1xev in lowercase.
After spending a little time in Google, I ran across a message board where I found out that the lowercase actually tells you something. It means that the phone is connected to the network, but not connected properly to the carriers Blackberry provisioning servers.
The fix was to power off, remove the battery, wait a few seconds, put battery back in and power up. After rebooting my email automatically started coming in again.
A few years ago for Christmas my wife got me a Logitech Harmony Remote (I think it is the 880). It is far an away one of the best universal remotes I have ever seen! I was reminded of this today as I wanted to make some changes to it.
A few months ago I finally broke down and bought an XBox 360. I decided to make it the DVD player in my home theater setup. Now with the addition of Netflix streaming directly to the XBox this proved to be a good decision. For the last few months I haven’t had my Harmony remote programmed to run the XBox. I have been having to use the Xbox controller to play movies. Today I set out to program the Xbox.
You program the remote using software from Logitech on your computer. It is a really easy to use and intuitive piece of software (and I don’t say that about much software, I’m pretty picky). Since I don’t have the computer I originally set the remote up on, I had to get the software. I expected to be told at Logitech’s site that the software was only for Windows. To my delight they had a Mac version of the software.
I installed the software, plugged the remote in via USB. It downloaded all my current settings (Awesome! I don’t have to start from scratch). I added the Xbox 360 device and updated my “Activities” to use the Xbox instead of the old DVD player. Activities is the way the remote arranges the things you want to do with your entertainment system, Watch DVD, Watch TV, etc. I update the remote, pointed it at my devices and clicked the “Watch DVD” activity. Everything just worked!
Harmony Remotes from Logitech are the “Mac” of the Universal Remote world. They are a little more expensive than generic universal remotes, but worth the extra money. They are a great gift idea because the person is reminded how awesome you are every time time they use their TV!
I found another plugin for sharing a blog post on Facebook. It’s called “Add To Facebook“.
I know there are a number of plugins like ShareThis that you can add to your site that allow you to share on multiple social network sites. But I have found that these can be overwhelming to deal. I might have an account on 3 of 15 or more sites listed. So I decided to go a slightly simpler path, only have a small number of sharing options.
I guess this makes me a “Mac”, limiting your options, but they are probably the ones that 85% of people would use.
I’m trying out a new wordpress plugin called “Tweet This” on both of my blogs. The idea is that it makes it easier for people to tweet your blog posts by setting up the tweet for them automatically.