Categories
Reviews

Apple TV. Is it everything I had hoped it was?

Having toyed with the idea of hooking up my Samsung monitor as a TV for a the last few months, yesterday I took the next step and purchased an Apple TV. Was it everything I had hoped it was?

Is Apple TV all that it is hope to be

Not exactly. The name Apple TV had conjured up ideas and hopes of the first truly interactive web home interactive tv viewing experience. I thought with Apple computing tied with the traditional concept of TV something amazing lay in waiting. Sadly it did not live up to its name. To my dismay, despite the fact that it is hooked up to WiFi, Apple has not given it the Safari browser. That was my first huge disappointment.

However, I consoled myself, at least it is advertised to connect to apps from my iPhone via airplay. Eagerly I began playing with my iPhone apps to see how they would connect. It did not turn out to be nearly as AirPlay friendly as it was advertised. Even Safari didn’t work with AirPlay. Perhaps they plan for that in the future but as of right now it does not work. Some apps did allow me to stream video to Apple TV, such as Crackle, TED Talks, and VEVO. However my favorite TV watching apps CityTV and Global TV do not. Which kind of defeats the whole point of an interactive TV.

There are some pluses, playing music from my home computer’s shared library is very cool. And airplay seamlessly lets me play music from my iPhone to the Apple TV.

Overall I will still use the music sharing, whatever video sharing I am able, and the video rental features. Hopefully with the upcoming release of OS X Mountain Lion in the summer I will be able to use my browser from my computer on the TV. Then we will be taking a big step forward for mankind. Until then I can only hold my breath. If you were intrigued by the idea of plugging the Apple TV into a computer monitor I have posted my setup here.

Categories
Tutorials

What do URL and URI stand for?

So today I thought, I wonder what the definitions for the URL and URI acronyms are. Just incase anyone else out there is curious too.

URL: Uniform Resource Locator

URI: Uniform Resource Identifier

 

So what’s the difference between the two? All URLs are URIs, but not all URIs are URLs.

It’s like trying to explain that a Human is a Mammal but a Mammal is not always a Human. – DamnHandy

These are URLs

http://somewebpage.com

http://somewebpage.com/abc/

http://somewebpage.com/abc?g=t

Since they are all URLs they are therefore all URIs too.

This is a URI but is not a URL

urn:mpeg:mpeg7:schema:2001urn:isbn:0451450523

 

Hopefully that makes sense.

Categories
On Business On Law

Copyright 101

The laws not the bandSo recently I have been put in a situation where I am forced to think about copyrights (the law not the band). Despite my personal resistance to the field it’s probably a good thing to have a good grasp of. Here is an overview of some general principles worth knowing.

Who owns the copyright?

Generally speaking, the person the work is attributed to owns the copyright. This applies to anybody who created the work (self-publishers, contractors etc) with exception to employees. In the case of an employee, the company they work for owns the copyright of any work done while working at the company.

What is shared copyright ownership?

Multiple people can own a copyright. Unless otherwise specified in writing any work contributed collaboratively is owned equally by all who contributed regardless of the amount they contributed. For example all the members of band collectively working on a song own equal shares to that song’s copyright. Generally speaking shared copyrights usually share equally in profits from any sales of the work. We see this all the time in the music industry.

What is copyleft?

Copyleft is a term originally coined by Richard Stallman and is used to describe copyright laws that ensure the right of individuals to modify, share and distribute copyrighted material, and to ensure that future versions of work be free to modify, share and distribute as well.

Are all copyright licenses compatible with each other?

No. There are many licenses that are incompatible with each other. It is a good idea to do some research before choosing a copyright license for any work you do. Some people prefer licenses that protect the work, and other people prefer licenses that protect the end users’ rights to access, modify and redistribute the work (aka copyleft licenses). Broadly speaking those two kinds of licenses are incompatible with one another.

There are also licenses like the GNU GPL that are copyleft licenses but are incompatible with many other copyleft licenses as it imposes the restriction that all resulting copies be bound by the GNU GPL license.

Final thoughts

There are many streams of philosophy and ideals surrounding copyright law that are good to take into consideration when choosing your copyright practices. If you are only just starting to learn copyright law it can seem a bit overwhelming. However, there are a lot of great resources that help to explain a lot of the different concepts. If you are an expert in the field and have something you want to add please post it in the comments.

For further reading.

Wikipedia article on copyright http://en.wikipedia.org/wiki/Copyright

Wikipedia article on BSD License  http://en.wikipedia.org/wiki/BSD_licenses

Creative Commons License choosing tool http://creativecommons.org/choose/

GNU free copyright philosophy http://www.gnu.org/philosophy/philosophy.html

 

Categories
Fun

Awesome lego machine solves Rubiks cube!

I thought it would be fun to post random videos and things I find interesting about machines on this blog every weekend. This one is pretty cool. I think lego and rubiks cubes are two of the best inventions ever and putting them together is even better. So here’s my first “weekend special”, it’s a video I came across on Youtube.

Categories
PHP

The Scope Resolution Operator (::) explained

Double Colon object oriented programming

I remember when I first came across the mysterious double-colon (::), also known as the Scope Resolution Operator. I was experimenting with a php library I hadn’t written, but was asked to extend, and at the time I had no idea what classes were, how they worked, or how they helped.

To try and figure out what the double-colon did I remember I peppered Google search with questions like, “What is the :: ?” or “what does the :: symbol mean?”  Those searches proved useless. At the time php5 was still very new and most PHP coders were writing procedural code rather than object-oriented code.

Now that I use object-oriented design every day I thought I would explain what the double colon :: means, just in case there are any new PHP programmers, like I was, and are confused by the mysterious double colon.

When and how to use the double-colon:

You use the double-colon to access static methods from a class. To get the color of the bear, from the example class I wrote about here, you would write the following.

Bear::getColor();
Code language: CSS (css)

I will break the above line of code into its three parts.

1. Bear – First you write the name of the class you are referring to. In this case Bear.

2. :: – Then you use the double-colon because the method is declared as static.

3. getColor(); Then you write the name of the function you are calling that exists within that class.

And that’s the basic use of the double-colon to call a method from within a class.

The double-colon is simply a way of referencing the class object and accessing the static methods (functions) and constants within that class. If you are new to this I just said a lot. I explain these things briefly here.

Categories
PHP

PHP Classes briefly explained

Writing classes in php

What is a Class

A class is also known as an object. To better understand the concept of an object, think of it as you would a material object like a bear. Let’s pretend that we are going to have to make a bear using a class. To start you would give the animal a name. In this case, class Bear. Then you would need to add characteristics. Like the animal’s color and weight. These would be the variables declared at the beginning of the class. You are declaring them as variables as it is possible that these characteristics might change with different bears. You may have the variable $color = ‘white’ or $weight= ‘500kg’. You may also have constants, these don’t change. A constant might be something that classifies a bear as a bear, for example some Scientific classifications would be KINGDOM = ‘Animalia’, or PHYLUM = ‘Chordata’. These things are common to all bears and do not change. You would also have methods. Methods are functions that either call data about the bear or calculate something for the bear and return the values back to the caller. You may have the function getColor(), to get the color of the bear. Or getKindom() to get the kindom of the bear.

When you write a class you have the option of declaring a variable or method public or private. A public method or variable is accessible by all. A private method or variable is only accessible to methods and variables within the class. A good rule of thumb in writing classes is to try to avoid making variables public. You may need to edit your classes over the course of time and the variable may change, this would affect any application that would have been referring to the variable had it been public. Rather, try to refer to variables only using methods. This ensures that even if you change how or where you store the information, the method to get the information could be rewritten to handle the changes so the applications referring to your class would continue to work and know no different.

To create a class simply write: 

class Bear { #Any code goes here }
Code language: PHP (php)


The following is an example of a simple class. A class can include variables (methods), functions, constants etc.

class Bear { const KINGDOM = 'A constant value'; const PHYLUM = 'Chordata'; private static $color = 'White'; private static $diet = 'Salmon and Berries'; public static function getColor() { echo self::$color; } public function getDiet() { echo self::$diet; } }
Code language: PHP (php)

Important Notes:

Usually it is good practice to save each class in individual files. In this case I would save the above class in the file Bear.class.php. I like to include .class within the file name. It is not necessary but it makes it much easier to know which files are classes.

There are a lot more to using Objects than what I showed you in the simple example above. But that is all you really need to know to get started using static functions and classes.

In the future I will create more tutorials showing you how to extend objects and to call them. And explain what new ClassName(); means and how the operator -> works.

Categories
Dropbox

Remove dropbox conflicted files on Mac or Linux using Terminal

dropbox
I like Dropbox. I use it all the time to share files across machines and work on group projects. However, I don’t like how Dropbox duplicates files as and saves them as conflicted copies. It’s not something that I need or use. I just delete those “conflicted” files. 99.99% of the time the conflicted files are not conflicted, Dropbox is just over zealous. Also I use .git to handle my file pushes so I know right away if files have changed. I don’t need Dropbox doing this for me.

I work on a Mac so here is something I run in my terminal to quickly remove those annoying conflicted files.

$ cd dropbox
$ find . -type f -name "* conflicted *" -exec rm -f {} \;
Categories
PHP

Increase PHP Script Execution Time Limit Using ini_set()

Today I had to set the PHP script execution time directly from within the php file. Here’s what I did.

Add the following code to your file. You can change the seconds to what you need. It is important to be careful using this on a live server. If you allow a script to run too long you could hog all your servers resources and bog the site way down. 5 minutes is a lifetime in server time and it might be longer than you need.

ini_set('max_execution_time', 300); //300 seconds = 5 minutes
Categories
On Business

Life lesson #2: Passion is not a luxury.

Steve Jobs quote

My first post for this blog was about inspiration and why I believed it was necessary for success in business. The other day I was watching some videos of Steve Jobs on You Tube talking about business success. In the interview he stated that passion was the ingredient that sustained successful people until they had success.

Achieving success is hard. Ask anyone who has played sport competitively, or tried to change the minds of people in a team or politics. It takes a lot of work and a lot of perseverance, and often times, in business it seems like it takes more perseverance simply because the goal is new and untried.

So passion is not a luxury anymore if you are an entrepreneur and you want to succeed. I’ve often believed that its good to love what you do, but haven’t really taken much time to think about the implications of loving what you do. It means that when the hurdles and challenges come, you have more than will-power motivating you to continue. It means that when your big sale fell through and you can’t pay yourself for a second time in two months you have more than will-power motivating you to continue. It means that when you can’t see the crest of the hill but believe in what you are doing you have more than will-power motivating you to continue.

“I’m convinced that about half of what separates the successful entrepreneurs from the non-successful ones is pure perseverance.” Steve Jobs

I don’t know what challenges you might be facing in your business, but I hope that you will persevere. If anyone is reading this and has a story about perseverance please leave it in the comments below. I would love to hear it. 

If you are interested, here are some great Steve Jobs quotes.

Categories
MySQL PHP

What to do when you have the error “too many connections”

Recently our servers went down. The error we were getting was “Too many connections”. This meant that we needed to increase the limit on the number of available connections within our mysql config file. The setting is called

max_connections

Before you go upping the number of max user connections there are two things to consider.

1. Is your code opening and closing the connections efficiently?

According to the mysql “using mysql_close() isn’t usually necessary, as non-persistent open links are automatically closed at the end of the script’s execution.” However, there are rare occasions where the connections do not close properly, so it is always a good rule of thumb to include mysql_close() at the end of your scripts.

Another mistake that can occur is that you may be unintentionally opening a new connection for each query, rather than opening one connection and then closing it once all your queries are completed. This will definitely increase the number of user connections.

Also, using persistent connections are generally frowned upon these days. For php using mysql_connect has actually proven to be more efficient.

2. Do you have enough memory (RAM) available to handle your increased connections.

Once you know your code is clean and you are still running out of available user connections the next step will be to increase your number of max_connections on your mysql config file.

It is important to calculate your available memory before upping your connection limit however, other wise you will encounter this error:

Connect Error (1135) Can't create a new thread (errno 12); if you are not out of available memory, you can consult the manual for a possible OS-dependent bug

This error is simply telling you that you are using too much memory. To avoid this error when upping your connection number use the following formula to calculate your number of available connections.

Key_buffer_size + ((read_buffer_size + sort_buffer_size)*max_connections) = memory needed

If you know your server’s ram, calculating the number of max_connections is straight forward.

I hope this helps you if you are encountering this problem

Note: Your current settings for Key_buffer_size, read_buffer_size, sort_buffer_size and max_connections can all be found in your mysql config file.