To Top

Our Blog

Guru Technologies

Keep command-line Subversion client (svn) from saving credentials

If you share a server with multiple users, you may find yourself committing as root.  In that case, it’s helpful if you can keep svn from saving credentials.  All you have to do is edit:

/root/.subversion/config

Set the following:

store-passwords = no
store-auth-creds = no

Then remove any credentials file that exists in:

/root/subversion/auth

Separating a foreground object from its background using GIMP’s Color to Alpha feature

Recently I was trying to separate a foreground image from its background so I could put the image on a new background of a completely different color.  There is a GIMP tutorial, but it failed to help me remove the ugly white or colored edges from the foreground.  Here is the image I started with:

Using that above mentioned GIMP tutorial, I tried my best to isolate only the text and place it on my background.  The best I could do was this:

The Solution

After using the Fuzzy Select tool to isolate the foreground image from it’s background (in this case, a white background) and pasting it into a new layer, I then set the entire background layer use the dark red color I wanted.  Then I used the “Color to Alpha” feature from the “Colors” menu.  It brings up this dialog:

From here, you specify the color you want made into alpha.  I left it at the default, white.  According to the GIMP documentation, this tool, “…will attempt to preserve anti-aliasing information by using a partially intelligent routine that replaces weak color information with weak alpha information. In this way, areas that contain an element of the selected color will maintain a blended appearance with their surrounding pixels”.  That is exactly what I needed.

Color to Alpha Applied

I had one final thing I wanted to do to the image, which was change the black color to a different one.  For this, I used the “Colorize” tool on the top layer, also in the “Colors” menu.

The Result

     And the zoomed out, final version:    

Return JSONP with CakePHP

Here’s a nice way to turn on JSONP for CakePHP. JSONP, or JSON with padding, is necessary when you want to include JSON from a site different than the one you’re on.

A good explanation for what JSONP is can be found here: https://stackoverflow.com/questions/2067472/what-is-jsonp-all-about

Just include this code on any CakePHP controller that you will be using with JSONP (or you could put it in the AppController to make it work everywhere in your app but that may add a slight performance hit). It checks to make sure that JSON is being returned before trying to apply the padding. This code overrides the afterFilter() which is the last controller action CakePHP does after doing rendering.

    // This funciton makes so JSONP works
    public function afterFilter() {
      parent::afterFilter();

      if (empty($this->request->query['callback']) || $this->response->type() != 'application/json') {
          return;
      }

      // jsonp response
      App::uses('Sanitize', 'Utility');
      $callbackFuncName = Sanitize::clean($this->request->query['callback']);
      $out = $this->response->body();
      $out = sprintf("%s(%s)", $callbackFuncName, $out);
      $this->response->body($out);
    }

Web browser text search

So I am working on a project where I have to search some HTML documents for a possible text string. This lead me to an interesting find in how browsers do searching on text.

 

Let’s look at the following HTML.

<div>
<div style="background-color: #00ff00;">Hello ther</div>
<div style="background-color: #ff0000;">e,
<span style="background-color: #f0ff00;">bob</span> how are</div>
<div style="background-color: #00ff00;">you?</div>
</div>

The text displays as the following: Text displayed in a browser

The yellow represents the inner span. The divs are different colors to show their distinction.

If you search for the text “Hello there” no results will be found as the browser does not search across div elements.

If you search for the text “e, bob how are” the text will be found as the browser will search across span elements.

It’s interesting to note that the browser’s search works only across defaulted inline elements but not elements set inline by the html.

Find out what Subversion commits haven’t been merged to stable

We frequently use Subversion for version control, and use /trunk to commit all code in active development and merge code to a stable branch that represents what is currently on a production server.

Sometimes commits need to be done right away, so you merge them right away; others can wait until you do a push.  After developing a while with regular commits to trunk, you can have a state where several commits in trunk may already be in the stable branch while others aren’t.  When you’re ready to push a group of commits to stable or do a full release of everything from trunk to stable, it’s helpful to know which commits haven’t been merged to your stable branch yet.

Here’s a bash script that will show you the details of everything in trunk that hasn’t been merged to stable:

#!/bin/bash
for i in `svn mergeinfo --show-revs eligible svn://server/project/trunk svn://server/project/branches/stable | cut -c 2-`
do
svn log -c $i svn://server/project/trunk
done | less

The magic here is the “svn merginfo –show-revs eligible”.  Very useful.

Using nullmailer as a simple MTA

nullmailer is a very simple MTA I like to use on Linux servers when I don’t want to have a lot of hassle with mail server configuration.

It will automatically send all local mail to one of my email addresses by simply installing it and configuring two files.  The /etc/nullmailer/remotes I put in my smtp server.  Here is an example:

mail.example.com smtp --user=myemail@example.com --pass=examplepassword

For /etc/nullmailer/adminaddr I put the following:

myemail@example.com

All mail delivered to, say, the local root account automatically gets sent to the email address put in the adminaddr file.  Simple and convenient.

Troubleshooting is also simple.  When the email is still in queue, you can see it with command mailq.  It will also show where it’s going to be delivered.  Logs can be found in /var/log/mail.log and /var/log/mail.err

One thing I’ve noticed is you’ve got to get your hostnames right.  Make sure /etc/mailname has the fully qualified domain name in it.  I had an issue when the hostname on the machine (/etc/hostname) was the same as the /etc/mailname.

Does Your Business Need a Mobile App?

As a business owner you may be asking yourself this question when it seems like the whole world is going mobile. There are some key points to consider in order to answer this question for your company.

The first thing to consider is your audience. What does your typical consumer look like? Nielson released a study in January 2012 with a sample of 20,000 consumers on reported smartphone ownership. The percent in each category is as follows:

  • 66% of 25-34 year olds
  • 54% of 18-24 year olds
  • 53% of 35-44 year olds

If your target audience is not in these age groups, you may not want to proceed with an app. However, if your audience is in a saturated bracket, consider if you have a following or would be able to create one with a little work. One thing to try before investing in a mobile app would be to create an online presence through a website and Facebook. Would your company be able to use an app to “push” products and services to your followers? Would a mobile app give you a competitive advantage?

Google released some other interesting data to consider:

  • Mobile searches have increased 4X since 2010, to over 100 billion mobile searches in 2011. Consumers are looking for information directly from their smartphones, often about local businesses, where to go and what to do.
  • 36% of all restaurant searches are done on the mobile phone.
  • 70% of smartphone users use their device while shopping in-store
  • 53% of searchers purchase as a result of a smartphone search
  • 95% of smartphone users have searched for local information
  • As a result of looking for local information, 77% contact a business and 44% purchased
  • By 2013, more people will use their mobile phones than PCs to get online

Does your business have the capability to benefit from this type of use to enhance shopping experiences, promote products or fill time-slots?

The last point to consider would be budget. Development costs can vary greatly depending on the complexity of the app. Meet with a development team to determine what functionality would be necessary and to craft the most useful tool for your business so your company’s costs will be returned exponentially.

Gaming to Grow Your Business

The Economist says “video games will be the fastest growing and most exciting form of mass media over the coming decade.” But why should that excitement end there? Businesses across the board are finding they can use the same idea, and the same audience, to increase business.

Today there are more than 180 million gamers of all ages in the US, and over 40 percent are female. Smartphones are adding to this increased audience. An example of merging business interests with gaming enthusiasm would be a new campaign by the Utah Division of Emergency Management and the Centers for Disease Control and Prevention which plans to capitalize on the recent rise in popularity of all things zombie. They are centering their new campaigns around “everyone’s favorite monster” in hopes of bringing increased attention to their cause and attendance to their events.

This same use of a modern gaming audience can be applied for business use in trainings, advertising, simulation or education. If you are looking for that extra something to bring attention to your business, business mobile app or desktop application, think about the possibilities of a gaming format.

References: Bloomberg Businessweek August 27-September 2 issue, ksl.com, The Economist

Html5 Audio restart playback in iOS Safari

When using html5 audio and Apple’s safari browser on iOS there is a problem that occurs when you try to set the audio’s time.

Html5 audio DOM object has an attribute called currentTime. This unfortunately isn’t available in iOS safari. This makes it difficult if you want to start the audio from the beginning.

An example code like this:

if($('#audio_' + id)[0].currentTime != undefined)
{
	$('#audio_' + id)[0].currentTime = 0;
}

will throw an exception.

There is an easy way around this problem and that is by removing the audio element from the DOM and then re-adding it.

Here is my code:

var audio = $('#audio_' + id).clone();
var parent = $('#audio_' + id).parent();
$('#audio_' + id).remove();

Post in the comments below if this has helped you in developing html5 audio in safari. Any questions are also welcome.

New mobile app – Vinny

We are excited to showcase a fantastic new mobile app we have helped develop. This app is still in beta but will be released soon!

Did you ever wonder what the dealer really paid for that car on the lot?

Check out Vinny, a new app that tells you the exact wholesale cost by simply scanning the VIN barcode. The creators of this idea put together a video highlighting how the new app works:

We created this app using PHP, Mongo DB datasource for Cakephp, and JQuery Mobile.