OS X Mavericks Updates to SVN 1.7: How to rollback to Subversion 1.6

So I’m not an early adopter but after updating my personal Mac to Mavericks with little issues, I decided to upgrade my work Mac as well.

Besides Mavericks not shipping with Java and breaking all my hard work with Jasper Reports, I soon after discovered that it had also upgraded my Subversion to 1.7 which stopped me from being able to check in my code.

So I found this little tip from Kevin Broome that fixed my issue quickly.  I figured it could be done but Keven actually found where the old SVN 1.6 lived on the hard drive.

To summarize:

1) Make a backup of your SVN 1.7

sudo mv /usr/bin/svn ~/Documents/svn_1.7

2) Point to 1.6 in paths

sudo nano /etc/paths

3) Add the following to paths

/Applications/Xcode.app/Contents/Developer/usr/subversion-1.6/bin

4) Check SVN version

svn help

That’s it, you should see Subversion 1.6
 

[SOLVED] How to Fix JasperReport Server and iReports in OS X Mavericks

So I am evaluating using JasperServer for an upcoming project. As a result I have a Jasper development environment setup on my MacBook Pro which includes JasperReports Server and Jasper iReports.

Recently I upgraded to OS X Mavericks and everything Jasper came crashing down. After further investigation I discovered a few things:

  1.  Mavericks actually didn’t come with a version of JDK, and in fact removed the version was installed on my Mac.
  2. As a result, $JAVA_HOME appeared to be non-existent
  3. Also, after getting Java installed again the default path bin/java has changed to Commands/java

So, to get things working again I did the following:

Install Java

Go here to download the latest release of java.

 

Upgrade and Reinstall JasperServer

My existing copy of JasperServer would still not run so I upgraded to the latest release (v5.5 at the time of this writing).

Download the latest Jasper here

Note:  In hindsight I’m assuming that this because of the $JAVA_HOME issues and the installer setting paths in configuration files. (Therefore, you may not need to upgrade.  You might be able to simply re-install the existing version. If so, let me know in the comments.)

Once you do this, JasperServer should run again.

Test Java

Check that java is installed

open terminal and type

java -v

You should see your java version number…

To Check your $JAVA_HOME

Open terminal and type:

echo $JAVA_HOME

If you see an empty line then follow steps in Part B, else if you see a path like this:

/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home

then congratulations – continue on to the next step.

Part B) Manually Set Your Java_Home (Only if the last steps didn’t work)

So if you tried to set your JAVA_HOME  on your mac but it didn’t work then try doing the following which was originally written about here:

  1. Start up Terminal
  2. Type “cd ~/” to go to your home folder
  3. Type “touch .bash_profile” to create your new file.
  4. Edit .bash_profile with your favorite editor (or you can just type “open -e .bash_profile” to open it in TextEdit.
  5. Type “. .bash_profile” to reload .bash_profile and update any functions you add.

Now test your JAVA_HOME again – Open terminal and type:

echo $JAVA_HOME

Finally, Tell iReport where Java is in Mavericks

  • Right click on the iReport.app (in Applications)
  • Show Package Contents
  • Navigate to /Contents/Resouces/ireport/etc
  • Edit iReport.conf with your favorite text editor
  • Add a line that says something like
  • jdkhome=“/path/to/javahome”

Where “jdkhome” should match the path that appears when you type “echo $JAVA_HOME” in terminal  For example, mine is:

jdkhome="/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home"

Finally…

Save the file and try running iReport again.  Your problems should be solved.

Let me know on Twitter or in the comments if this helped you!

How my Computer Science Degree Actually Hurt my Internet Business

Most online entrepreneurs that I have met are not technical people. More often than not they are visionaries with some other specialize skill set like accounting, investment banking, or general business to name a few.

For these people the fears and difficulty they have is the technical stuff: putting up their website, search engine optimization, or compiling and submitting their mobile app to the app store.

That is why so many of the beginner guides in the Internet marketing space are geared towards non technical people.

For me, the problem was not learning how to put up a website or write code – I’ve done both pretty well for about 10 years.

My problem has been what to do before and after your product is built – things like customer validation or marketing.

Because it is relatively easy for me to build something – a website, an app, an e-commerce site, whatever, I was quick to “fail fast” as the old startup proverb goes, and even quicker to move on to the next shiny object.

While we are on the subject, the suggestion to fail fast is bad advice.  Instead of failing fast, your goal should try to “learn faster than everyone else” as Eric Ries suggests.

I was given the curse of knowledge when it came to the internet.  But to make money online you need to understand a lot more than just how to put up a WordPress blog or how to write code.  In fact, I’ve seen many people better off BECAUSE they don’t know technology.

These people instead focus on the PROBLEM before they figure out a SOLUTION.

But anyone with this “curse” finds it difficult to keep an open mind and learn new things because they already feel that know it.

Like me, I already knew how to start a software company. After all, I knew how to write software. I already knew how to do SEO. My website was in Google’s search results, right?
The problem was that although I know how to write code I didn’t know how to make software useful to people.  And yes, I do know on-page SEO that was valid in 2005 but now-a-days it is off-page SEO that matters most.  But I ignored it.

Many elderly people struggle with a severe case of the “curse of knowledge.”  That is why so many reject new technology or new norms in society. “When I was your age…[Fill in the blank here]”

My point is: don’t be blinded by what you know.

Again, don’t be blinded by what you already know.

Because I knew technology, I THOUGHT I knew how to turn that knowledge into profit. My blinders were on.

It wasnt until I stopped screaming and started listening that the ball started rolling forward.  And believe me it is a lot harder to get the ball rolling than it is to keep it rolling once you have momentum.

Ultimately that is how I got 13,000 mobile app downloads literally overnight.  And no, we weren’t featured in iTunes.

Our app solved an annoying problem and bloggers liked it.

So if you have been struggling with something lately – be it starting a business or getting customers or even becoming a better listener, I suggest that you find somebody that has done what you are trying to do, or is good at what you want to learn and absorb everything you can from them.

There is this strange thing that happens when you hang out with people enough – your traits tend to rub off on each other. The same happens when you live in a country or part of a country. I am from Maine but I live in Florida. Every once Ina while I still catch myself with a little twang in my voice.

So although one might think that knowledge of the Internet might help you with an Internet based business, you might be wrong. It can only help you if you can take off your blinders long enough to look around.

Have you ignored something in your field or trade that is stopping you from getting to the next level?

Install SSL Certificate in OpenCart

Installing a SSL certificate is a breeze in the open source e-commerce system OpenCart.

  • First make sure you purchase a SSL or Secure Certificate and that it is activated for your domain where OpenCart is installed.
  • Next, login to to the admin section of your OpenCart site at http://www.example.com/admin/.
  • Then go to System > Settings, Click the Server tab, and check the radio button to use SSL.
  • Next you will need to connect to your domain with an FTP program such as FileZilla or access the config.php files in your cPanel.
  • Edit the config.php file and change the “http” to “https” on the following two lines.  Then save the file.
define('HTTPS_SERVER', 'https://www.example.com/');
define('HTTPS_IMAGE', 'https://www.example.com/image/');
  • Next open the /admin/ directory and edit the config.php similar to the previous step. Then save this file.
define('HTTPS_SERVER', 'https://www.example.com/');
define('HTTPS_IMAGE', 'https://www.example.com/image/');
  • That’s it! SSL is setup.

Important Notes:

  • It is important to remember that OpenCart does not require that all pages use “https” in the URL like most e-commerce solutions.  It does, however, force it when a user signs in or during the checkout process.
  • Also, if you get errors that say something about “unsecured content” then somewhere on your page you have a hardcoded url to images, CSS files, or other content of “http.”  To solve, view the source on the page where you are receiving the error and search for “http”.  You’ll notice that most are “https”.  Fix all the occurrences that are not “https”.

Twitter Bootstrap Theme for Drupal 6

I decided to give Twitter Bootstrap a try for my new mobile theme and design website.  Unfortunately, I was unable to find a Bootstrap 2 theme for Drupal 6, so I ported it over myself.  Since I use so much open source software, I decided a few months back that I want to start contributing more to open source. So I thought this theme might be handy for others.  Feel free to download it below and use it for your own projects.

Oh it is important to note that this is a Zen subtheme.  Please download and install Zen Theme for Drupal along with this theme and upload both to your website before activating the Bootstrap theme.

Skip to download

The Backstory

For my latest creation I choose Drupal as my weapon (read CMS) of choice because a) of the flexibility to do 80% of what I wanted it to do long term, b) because I knew it well and c) it’s awesome.  However, I ran into a couple of problems when finding a suitable theme:

Problem 1

Bootstrap 2 Theme available for Drupal 7 not for Drupal 6 and the plug-ins I needed were all in Drupal 6.  Plus the Drupal 7 theme is still in development.

Problem 2

Bootstrap 1.4 Theme available for Drupal 6, but I needed lots of customization to get it working well.

So, that is why I ported over my own theme.

Without further adeu:

Download Bootstrap 2 Drupal Theme

(And don’t forget to download Zen Theme too!)

Drupal Imagecache Setup

One of the biggest benefits of Drupal is that it is highly flexible.  But with great flexibility comes great complexity.  Such is true when configuring our mobile design marketplace with imagecache in order to watermark, resize, and link the uploaded mobile themes to the proper url.  The trick is finding what to configure and where the configuration options are.  With a little help from JuliaKM, below are the steps I took to configure imagecache with Drupal:

  1. Install and activate all required modules such as Imagecache and imagecache actions (in my case).
  2. Go to Admin > Content types and add an Image field
  3. Go to Site building > Image cache and add or edit a preset.
  4. For watermarks, select “add overlay” action and point to watermark png.  Defaults to the files directory.
  5. Return to Admin > Content types and click on “Display fields.”  For both the Teaser and Full columns, select the name of the preset you created above.  There are also other options such as linking the image to the node or to itself.
And that’s it!  Of course you there is more to imagecache that that, but this is the basic process that you will need to follow to configure imagecache for pretty much anything.

 

[SOLVED] PhoneGapDelegate::shouldStartLoadWithRequest: Received Unhandled URL about:blank

Using ChildBrowser with PhoneGap on iOS: On iOS, the web view that PhoneGap provides doesn’t handle about:blank. After updating Xcode and iOS 5.1 SDK I began receiving the following error when I launched a browser on my actual device:

PhoneGapDelegate::shouldStartLoadWithRequest: Received Unhandled URL about:blank

Thanks to <a href=”http://www.jamesjoycewaskorean.com/#20110908150931″>James Joyce</a> for this fix:

The fix is twofold and will work for other plugins requiring about:blank too!

1) Create a file in the www folder called blank.html containing the markup below.

<html>
<body>
</body>
</html>

Next, in AppDelegate.m in your Xcode project, find the following method.

- (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
        return [ super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType ];
}

“This method is where one is able to rewrite requests on their way through. To rewrite about:blank to point to the blank.html file, it is first necessary to find the path to the www folder and thus to blank.html”

Replace that method with this:

- (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
        NSURLRequest* req = request;

        if ([[[request URL] absoluteString] isEqualToString: @"about:blank"]) {
                NSLog(@"Rewriting about:blank");
                NSString* app = [[NSBundle mainBundle] resourcePath];
                NSString* blankpath = [NSString stringWithFormat: @"%@/www/blank.html", app];
                NSURL* blankurl = [NSURL fileURLWithPath:blankpath];

                req = [NSURLRequest requestWithURL: blankurl];
        }

        return [ super webView:theWebView shouldStartLoadWithRequest:req navigationType:navigationType ];
}

This should allow web components that rely on about:blank to work correctly.

 

How to Parse a RSS Feed in Java

A while back I was required to parse an rss feed on my company’s website.  Having little experience with Java Tag Libraries (.tld), I decided to give one a try.  The following is how I implemented RSS into a JSP page.

Import and include the tag library into your project.

In this case it is rssutils.tld and rssutils.jar.  This can be achieved many different ways either in the XML configuration or in the GUI Editor’s Import function (i.e. File > Import or Tools > Manage Libraries) etc.

Release Early, Release Often

As a software developer, I have repeatedly heard the phrase release early, release often.  But in the back of my mind, I have always wondered how companies handle customers when they release buggy software.   Well, the other day I finally got my answer and found it quite amusing.

After downgrading a failed major upgrade on software that we use, I called technical support to see if we could come up with a resolution.  As I was put on hold on the technical support line, the automated voice said: “Due to the excitement of release 11 (ahem..bugs), we are experiencing higher than usual call volumes.”  Brilliant, I though.  I am going to have to keep that one.

Easily Parse XML

How to Easily Parse XML

XML is used a lot on the internet and in business .  For instance, it is used by Blogs in a format called Real Simple Syndication, or RSS , to allow people to read a blog without actually visiting the blog’s website.  XML is also used to store reference information in web services and configuration files on many open and closed source products such as Instant Messager servers , web servers , and Oracle’s SQL Developer .

Since XML has become so popular in recent years, there are tools for most languages that make XML pretty easy to parse and handle.

Here are 2 tools you can use to parse XML:

1)  MagpieRSS for PHP

MagpieRSS is a great way to parse almost any format of XML clearly and concisely.  Simply include the file "rss_fetch.inc" and then access the entire XML feed as an array.

From their example page:

<item rdf:about="http://protest.net/NorthEast/calendrome.cgi?span=event&ID=210257">
<title>Weekly Peace Vigil</title>
<link>http://protest.net/NorthEast/calendrome.cgi?span=event&ID=210257</link>
<description>Wear a white ribbon</description>
<dc:subject>Peace</dc:subject>
<ev:startdate>2002-06-01T11:00:00</ev:startdate>
<ev:location>Northampton, MA</ev:location>
<ev:enddate>2002-06-01T12:00:00</ev:enddate>
<ev:type>Protest</ev:type>
</item>

Get's parsed to:

array(
title => 'Weekly Peace Vigil',
link => 'http://protest.net/NorthEast/calendrome.cgi?span=event&ID=210257',
description => 'Wear a white ribbon',
dc => array (
subject => 'Peace'
),
ev => array (
startdate => '2002-06-01T11:00:00',
enddate => '2002-06-01T12:00:00',
type => 'Protest',
location => 'Northampton, MA'
)
);

2) RSSutils Jar and Tag Library for Java

First, download and unpack RSSutils from here
.  Next copy 
rssutils.jar

and rsstaglib.tld
into your 
/WEB-INF/lib
directory.  Then add the following to web.xml
:


    <taglib>
<taglib-uri>/WEB-INF/lib/rssutils.tld</taglib-uri>
<taglib-location>/WEB-INF/lib/rssutils.tld</taglib-location>
</taglib>

Now you can reference the tag library in your JSP page similar to the following example:

    <%@ taglib uri="/WEB-INF/lib/rssutils.tld" prefix="rss" %>

<rss:feed
url="http://url/to/xml.xml" feedId="xmlFeed"/>
<b>Image: </b><rss:channelImage feedId="xmlFeed"/><br>
<b>Title: </b><rss:channelTitle feedId="xmlFeed"/><br>
<b>Link: </b><rss:channelLink feedId="xmlFeed" asLink="true"/><br>
<b>Description: </b><rss:channelDescription feedId="xmlFeed"/><br>
<ul>
<rss:forEachItem feedId="xmlFeed">
<li><rss:itemDescription feedId="xmlFeed"/><br><br>
</rss:forEachItem>
</ul>


Make sure you come up with a unique feedId
to use throughout the page, especially if you are going to be parsing multiple feeds on a single page.  Read a much longer rssutils tutorial here
.