Get it All
Together

If you needed any more reason to believe that Twitter and social networking are important to defining your business – and that being the first to do so is critical – you need look no further than the shambolic mess that is the 2014 Winter Olympic Games in Sochi, Russia. Their marketing team was late out of the gate to get their social media campaign started in the first place.

Then when the problems hit, they were flat-footed with a response to the deluge of reporter complaints on Twitter. Those complaints became the stuff of Internet gold, and so the @SochiProblems Twitter account was created. That’s the way humor goes on Twitter. But now this:

With all of the negative attention, it’s probably no surprise that a parody Twitter account is making waves. What might be surprising is just how polite – and popular – the account is.

The @SochiProblems Twitter account has amassed a whopping 343,000 followers, just a week after launching.

Fortunately enough, the account is nowhere near as vitriolic as some other parody accounts have been. Still, the impact of the SochiProblems account highlights what happens when you allow social networks to define you in your own absence.

Don’t let it happen to you! Find out what HolisticNetworking can do to GET IT ALL TOGETHER for you and grow your business! Contact us today!

There’s Friendship George, and there’s Relationship George…

No matter how you slice it, freelancing always suffers from the potential same pitfall: inadvertently merging work and home life, and letting down time invade work time. Its the first lesson of freelancing: watch your time and watch your expenses as though your life depended upon it. Because it does.

And as much of an admonishment as this could be against letting laziness get the better of your work, it can in equal measure be an warning not to let work life disrupt your time with family and friends. You need a livelihood and you need a reason to work. They need to be kept, to the extent that it is possible for us freelancers, separate.

So one way I’ve found to “get in the zone” is to adopt a bit of my life in the cube for life as a work-from-anywhere freelance pro: have a work day mug.

Sounds silly, right? I mean, you’ve got all kinds of coffee cups in your kitchen cabinets. If you’re like a lot of people I know, that coffee mug collection is a polyglot riot of free mugs from jobs, collections from roomates past, and stuff you don’t even remember buying from a garage sale. But set just one aside to keep as your work mug.

Why? Because you’re going to be holding on to that mug every time you stop working and take your fingers off the keyboard. You’re going to be filling it up with the beloved jump juice you need to make the next synaptic leap towards your project’s completion. Your mug needs to be as “in the game” as you are. It needs to be dedicated. It needs to scream, “But what next?!?” every time you look at it.

My work day mug is nothing special. Just a $5 hunk of cheap earthenware, purchased nearly blind at a Walmart convenient to my last gig, when my previous work mug met an untimely end. No sentimentality; no naming my work mug. It exists to work. The stripes around the middle of it are classic coffee mug: they sort of remind me of my grandparents.

My grandfather: a hard-working blue collar man with no tolerance of idleness while there was work to be done. I channel that energy every time I hold my work mug.

And then, when it comes time to shut down the work computer for the day, I wash my work mug and put it away. If I want a cool-down cup of Joe, I put it in one of my many off time mugs. Preferably, a different one every day. It is time to relax: I can use whatever cup I like!

In order for you to see my stuff on Google+, you have to have me in a circle and I have to be posting to a circle with you in it.

As a wise denizen of Google+ recently pointed out, Google+ is a “project,” not yet a “product.” It still has miles to go before its complete and features are yet to be added, I am sure. But at first blush, the nacent social network looks promising and I’m certainly on-board with it as a means of personal communication.

But as a means of branding? Of the kind of public blogging persona I have built over years on my blog, FaceBook and Twitter? I’m not so sure.

On the one hand, the fact that I can cleave my stream into multiple “Circles,” targeting content to specific audiences, means the potential of significantly simplifying and enhancing my social experience. I can create a circle for this blog, one for my political blog and one even for my creative writing and musical experimentation. Then only the people I wish to see my content can tune in to those specific facets of what I’m doing.

But isn’t that exactly backwards, as a marketing tool? Don’t I want to put out different channels of content and let the audience decide what they see? Yes, of course I do. I don’t want to have to be responsible for saying, “this person shall only see my computer stuff,” because if they feel like checking out my music, I’d be happy to let them. Also, the onus is on me to know what they do and do not want to see, which I can hardly be expected to know beyond my immediate circle of friends.

And now we come to an even bigger worry: the Double-Blind Circle. In the Double-Blind Circle, I’ve added people to a Circle that aren’t actually interested in what I have to say. They don’t have me in any of their Circles, or worse yet, they have me in a Circle for jerks (see what I did there?) that they never look at. Now I’m spending my time and going to the trouble of developing content specifically for a Circle that is completely useless. Its Double-Blind, get it?

Yes, click-throughs will tell me who clicks on content; comments and Plus1’s will tell me who is interacting. But headline readers and lurkers abound. Just because a person on Twitter isn’t retweeting, commenting or clicking on my headlines in no way means they’re not engaged and reading. How do I know if the same is true or not on Google+?

I only ask these questions because I’m actually quite excited about G+ and am itching something fierce to get at the API once its released. But in the meanwhile, its worth asking the questions, especially since so many of my friends and connections in the world of Social Media are doing the same types of promotion and marketing that I am.

Amid all the tragedy of the Japanese tsunami situation, we got a chance to inject a bit of normalcy into our day and go to the mall. While there, I had a chance to check out a Motorola Xoom at the Verizon store. Of course as any good developer would, I immediately began running through a battery of my own websites and projects to see how they compared on the native browser.

The result was somewhat shockingly disappointing: not only did Xoom’s browser appear not to want to render the web font packages I had installed on one of my sites, but in fact did not degrade properly either. The font packages are Font Squirrel packages and work decently with every other browser I’ve encountered. But on the Xoom, serifed fonts which had the base “serif” as their last choice of fonts in the family ended up rendering in a sans-serif text.

Is that because the browser is choking on the web font and just giving up? Is that because there is no default serifed font (how is that even possible?)? I do not know and only got a few moments of playing before the inevitable cheery sales person investigated my interest and harshed my groove. So I didn’t get a chance to find out. But boy, would I like to!

I’ve discovered an interesting behavior in CakePHP that, as far as I know, is not documented in the book. I’d rather not attempt to edit the book – I’m not sure I’m right and anyway, they’ve just changed the book in some rather annoying way that I’d like to observe a bit before using – so instead I’ll just note it here for now.

The behavior in question concerns the pass array that exists in the Controller $this->params array and also the one that exists in the Router::connect function. Apparently, these two are connected in at least one very specific way. Namely: the order of elements in the Router::connect pass array overrides the order of elements in the URL model. Consider the following:

[php]

/rating_events/ny/east_rochester/12

/**
* Entry in routes.php:
*/
Router::connect(
‘/rating_events/:location/:city/:company’,
array(‘controller’ =>; ‘rating_events’, ‘action’ =>; ‘index’),
array( ‘pass’ => array(‘company’, ‘location’, ‘city’),
<– Insert regular expressions here –>
)
);
[/php]

In the above code, if the pass array was not set,we would expect that the pass array in $this->params[‘pass’] would follow the natural order in the URL:
[php]
array(‘ny’, ‘east_rochester’, 12);
[/php]
But with the ‘pass’ array set in Router::connect, the array actually comes out like this:
[php]
array(12, ‘ny’, ‘east_rochester’);
[/php]

You can therefore define the exact order of elements in that resulting params array. I can see this being handy as in the development process I’m currently going through, where the order and number of parameters passed in this way might be different from Controller to Controller, but always referring to much of the same data and using a lot of shared functions. Being able to organize the order of this array – for example, always having city and location appear in the same order and at the same numeric position – lowers the cost of processing and developing later when you don’t need to make exceptions in your code for Controller A versus Controller B.

I happened upon this when reorganizing my URL structure to try to make it universal. I couldn’t get the params[‘pass’] array to work, so I printed it out. Imagine my surprise when it was a completely different order than I expected!

So, in developing the new website application for my company, I’ve hit a peculiar snafu. Namely that, because the same basic system will be used to spawn a number of different websites, things that go into making a website visible, such as images, views, css files and others will need to be different from instance to instance. I found an excellent tutorial on ignoring files, but that’s when I hit the snag: since I put everything under revision already, I discovered that I could not ignore the files and folders I wanted to anymore.

What is the solution? Well, here goes.

The first step is to backup the files you want to keep out of versioning. Just copy and paste them into a safe folder, outside the working directory somewhere. This way, it will be easy to put stuff back where it belongs later.

Next, we explicitly delete the files from the repository:
[code]myhost: working svn delete ./path/to/directory/
myhost: working svn commit -m "We need to make sure that the repository no longer records these files as being under revision."[/code]

Ok! Now that the files and folders are no longer in the repository, its time to click and drag / copy and paste our folders back into their correct locations. You will now see something like this:
[code]
myhost: working svn status
? path/to/directory
[/code]

Thats, ok: in fact, that’s exactly what we want. Now, Subversion does not recognize our directories as versioned items. They’re brand new, as far as Subversion knows or cares. Now we can set the svn:ignore same as we would any other time:
[code]myhost: working cd path/to
myhost: to svn propset svn:ignore directory .
property ‘svn:ignore’ set on ‘.'[/code]

That’s it! Do an svn up and you’ll see your directories are not listed anymore.

It’s important to remember that, if you’re going to ignore more than one directory or file within a given directory, you need to create a file that you can feed into the svn propedit command that will list them separately. This blog post does an excellent job of explaining how to ignore files and directories. And of course, you should also refer back to the Red-Bean handbook on the subject.

I adore my Android phone and am a serious fan-boy loyal customer of the Android operating system. But like any operating system, there are generally a few things you need in order to properly maintain the system and get really full use out of it. Fortunately, the Android Market is teeming with option for you to download and install. Many of them are either entirely free or else offer a basic shareware version. After pawing around the marketplace for the past year, I’ve come up with what seems like the base list of applications Google should have just included in their core:

7. Scan Life

Those crazy black and white squares are everywhere, now. Magazines, websites, newspapers. And they’re handy as all get-out, after all, providing you with a way to scan a barcode and instantly get downloads for the phone or do all kinds of other things like download coupons and such. To do this, there are a number of options. The option I settled on was ScanLife. ScanLife is a simple and relatively lightweight application that allows you to scan bar codes and get information based on the results. While it was originally built for the new style of scan codes that I’ve been discussing, the application will also scan any UPC code as well, providing you pricing information.

6. Color Note

Another thing I’ve found odd about Android is the lack of a note pad. I suppose not many phones do have this feature, but if you think if a phone as a mini computer – and what else is it, these days? – then having a simple text editor or note pad seems like a pretty basic thing. Well, the solution I found was ColorNote. ColorNote allows you to create a note or a list quickly and easily, automatically saving whatever information you put into the note. The notes are then searchable, sortable by name or by the color of the “paper” you wrote the note on – very handy for keeping similar notes and lists – or by the date of creation/update. I find this app invaluable, especially when I think of things to remind myself of that don’t bear the time and trouble of sending myself an email or some other less handy method.

5. Lookout

You pretty much have to have some sort of anti-virus. It might as well be a free system. Lookout provides a fast, unobtrusive system for maintaining anti-virus basics on the system. The only time you really see Lookout is briefly on downloading something or when the system needs to be updated, which is about once every two weeks or so. Because it doesn’t seem to run all the time, it’s not the drain on memory I anticipated it would be.

4. Mini Info

Now we’re getting into the maintenance of your phone as it’s own entity. Mini Info provides information on resource usage across the system, including memory and memory card usage, along with CPU usage. It’s good to be able to monitor this stuff, especially because applications have an unfortunate habit of running in the background, even when they’re not required. You close out of an application, thinking you’ve stopped it, but in fact, the app continues to exist in memory. The results? Buggy, slow performance and a drained battery. Not fun. Well, what do you do about all those nasty bits, like browser windows, apps and Android systems running for no good reason? Funny you should ask….

3. Juice Defender

Enter the first level in active device maintenance apps. Juice Defender provides a fast and efficient background process for regulating the flow of data on and off the phone, which in turn limits the amount of battery life used. By limiting data usage to, say, once every fifteen minutes, Juice Defender throttles those greedy apps that constantly want to update themselves. This leaves you with much more efficient battery usage, which any smart phone user will appreciate.

2. Advanced Task Killer

But our job is not quite done. Limiting the Internet usage on the phone is important. But that doesn’t by itself get rid of the problem of open applications and memory usage. For that, we take the next step and install Advanced Task Killer. ATK runs in the background and silently kills tasks that are no longer necessary. These would include things like open browser windows or applications and you’ll be amazed at the number of these processes that are running without your knowledge and not required for your system’s performance. You can also see a list of currently-running processes and kill the ones you wish to. An icon you can place on your desktop also allows you to kill non-vital tasks with a single click.

1. Locale

Finally, the best way to keep your battery life under control is to simply not use things when you’re never really going to use them. What governs when you will and when you won’t use applications largely depends on where you are and what time it is, and so Locale is your best friend in this regard. Locale will allow you to specify a number of conditions as a single profile, then set the power and access settings that make the most sense for that set of conditions. For example, when I’m home, it’s past 10 and the phone is on the charger, the most likely case is that I’m asleep. So in this case, I turn all options to silent modes – no phone rings, notifications or email. When I’m at the school my wife works at, I set all the ringers to vibrate because I’m probably at a play. When I’m at work, my phone vibrates on ring, but all other notifications are suppressed. When I’m home, regardless of time, my wifi connection is turned on, whereas my default setting turns it off to keep battery life under control.

I hope you got some good use out of this little list. Especially for new Android users, the list of possible applications is huge and daunting, but with a little experienced help, you can be up, running and humming along straight away.

Since they announced the new Bundles earlier this week, I haven’t had a chance to really get into what they were. But today, I took the Bundles for a spin and really like what I’m seeing!

Bit.ly Bundles basically allow you to link blog directly through their website, which is really nice when you consider how much Twitter users such as myself use bit.ly to shorten the links we’re already link-blogging on Twitter. Using Bundles, we can take the most interesting, most clicked-on, or most relevant of the links we created for the day and make a bundle out of them. You can also just create a bundle naturally.

The Bundles lead to all kinds of other potential possibilities that I’m hoping bit.ly developers are considering, many of which are tied to the statistics and analysis I’ve been hoping they will implement. This are not limited to, but include:

  • Generating a Bundle based on the most-clicked links for the day/week/month/year
  • Generating a Bundle based on exclusively-linked content (stuff you’ve linked to that no one else has. Better still if you can get the most popular exclusive content!)
  • “Automatically add to Bundle” option to allow you to always create daily bundles, whether or not they get published.
  • “Add to bundle” option for any link, rather than the current check-and-create, which is limiting.
  • Seems like, if you can create these on-the-fly Bundle “link blogs,” the same aught to be possible for custom domains: give us the option to display our links on our custom shortening domains in a similar fashion to the Bundles. That would rock!

All in all, Bundles have some really awesome potential for the future and I really hope the bit.ly folks keep working along these lines!

For reasons I’m not entirely clear on, CakePHP developers object in general to the practice of including Models into your Componets. I suspect the problem lies in the idea that you might end up with lots and lots of associated Models within the overall framework of a given Controller, leading to bad performance. That makes some sense, but why aren’t there any directions then on how to include the Controller’s Models into the Component, when its actually quite easy to do?

I dunno. But I finally figured it out and I’m passing along the information.

The trick is using the initialize() function. I presume that CakePHP must look at all included Objects to see if this function exists, otherwise I’m not entirely sure how else it becomes a globally recognized function. Perhaps someone more knowledgeable can chime in down there in the comments thingy?

Still, here is some sample code that first includes the Controller into the Component as a reference (taken from this example in the CakePHP Book) and then takes the logical next step of including the Model (in this case, WebPriceView) into the Component as well:
[php]
/*
// initialize: Initializing the Component, importing some needed Objects from the Controller.
*/
public function initialize(&$controller) {
$this->controller =& $controller;
$this->WebPriceView =& $controller->WebPriceView;
}
[/php]
It bears mentioning that this example can be extended well beyond including Models to including helpers and anything else you need from the Controller.