Computer Algorithms: Insertion Sort

Overview

Sorted data can dramatically change the speed of our program, therefore sorting algorithms are something quite special in computer science. For instance searching in a sorted list is faster than searching in an unordered list.

There are two main approaches in sorting – by comparing the elements and without comparing them. A typical algorithm from the first group is insertion sort. This algorithm is very simple and very intuitive to implement, but unfortunately it is not so effective compared to other sorting algorithms as quicksort and merge sort. Indeed insertion sort is useful for small sets of data with no more than about 20 items.

Insertion sort it is very intuitive method of sorting items and we often use it when we play card games. In this case the player often gets an unordered set of playing cards and intuitively starts to sort it. First by taking a card, making some comparisons and then putting the card on the right position.

So letâ€™s say we have an array of data. In the first step the array is unordered, but we can say that it consists of two sub-sets: sorted and unordered, where on the first step the only item in the sorted sub-set is its first item. If the length of the array is n the algorithm is considered completed in n-1 steps. On each step our sorted subset is growing with one item. The thing is that we take the first item from the unordered sub-set and with some comparisons we put it into its place in the sorted sub-set, like on the diagram bellow.

Continue reading Computer Algorithms: Insertion Sort

Few Thoughts on Web Video

On Air

It’s really full of video sharing websites out there, but in fact almost all of them use Flash player to display their video files. This is the reality now, but with the coming of HTML5, perhaps the things are changing a bit!

First of all if you start dealing with video sharing platforms the first thing to do maybe is to find a good Flash (.flv) player and to convert all your video content in FLV.

Few things to know with Flash video players:

1. The user can play those videos only after installing the Flash Plugin to his browser;
2. The video must be encoded either in FLV (or FLash Video) or in MPEG-4 with h.264 codec. Only than the Flash player can play it;

The HTML5, which can be described as variety of new “things” in the HTML comes with a native <video> tag. Something like the <img> tag where you can just point the source of the image in the src attribute. Continue reading Few Thoughts on Web Video

The task is to read the entire Gdata from a YouTube’s channel. It may sound easy, but as you may know Gdata is based on the Atom publishing protocol, and it naturally gives you only the latest few items.

Of course Zend Framework has a large set of classes dealing with Google’s Gdata services, one of them is the Zend_Gdata_YouTube.

It gives you the power to iterate/paginate over the entire set of YouTube user’s/channel’s videos. In that example let’s assume you have a protected function doing the reading of a single portion:

```protected function _process(Zend_Gdata_YouTube_VideoFeed \$videoFeed) {   /* @var \$entry Zend_Gdata_YouTube_VideoEntry */ foreach (\$videoFeed as \$entry) { /* @var \$published Zend_Gdata_App_Extension_Published */ \$published = \$entry->getPublished(); \$thumbnails = \$entry->getVideoThumbnails();   // set date format \$date = new Zend_Date(\$published->getText());   // array \$tags = \$entry->getVideoTags();   \$data['title'] = \$entry->getVideoTitle(); \$data['description'] = \$entry->getVideoDescription(); \$data['date'] = \$date->get('Y-MM-d hh:mm:ss'); \$data['thumb'] = @\$thumbnails[3]['url']; \$data['id'] = \$entry->getVideoId(); \$data['flash_player'] = \$entry->getFlashPlayerUrl(); \$data['tags'] = implode(',', \$tags) . ', ' . \$entry->getVideoCategory(); // do whatever you want with the data }   }```

The only thing left is to iterate over the “pages” of the feed. This can be done with getNextFeed() method.

```public function readRssAction() { \$userId = 'some_user'; \$client = new Zend_Http_Client(); \$gdata = new Zend_Gdata_YouTube(\$client, 'my-app', null, \$this->_apiKey); \$videoFeed = \$gdata->getUserUploads(\$userId);   // save the last items \$this->_process(\$videoFeed);   try { while (\$videoFeed = \$videoFeed->getNextFeed()) { \$this->_process(\$videoFeed); } } catch (Zend_Gdata_App_Exception \$e) { echo \$e->getMessage(); } }```

You’ll get an exception when there is no more feeds to process!

To combine all this into a single controller and to complete the code here’s the entire source:

```class YoutubeController extends Zend_Controller_Action { protected \$_apiKey = 'your_api_key_goes_here';   protected function _process(Zend_Gdata_YouTube_VideoFeed \$videoFeed) {   /* @var \$entry Zend_Gdata_YouTube_VideoEntry */ foreach (\$videoFeed as \$entry) { /* @var \$published Zend_Gdata_App_Extension_Published */ \$published = \$entry->getPublished(); \$thumbnails = \$entry->getVideoThumbnails();   // set date format \$date = new Zend_Date(\$published->getText());   // array \$tags = \$entry->getVideoTags();   \$data['title'] = \$entry->getVideoTitle(); \$data['description'] = \$entry->getVideoDescription(); \$data['date'] = \$date->get('Y-MM-d hh:mm:ss'); \$data['thumb'] = @\$thumbnails[3]['url']; \$data['id'] = \$entry->getVideoId(); \$data['flash_player'] = \$entry->getFlashPlayerUrl(); \$data['tags'] = implode(',', \$tags) . ', ' . \$entry->getVideoCategory(); // do whatever you want with the data } }   public function readRssAction() { \$userId = 'some_user'; \$client = new Zend_Http_Client(); \$gdata = new Zend_Gdata_YouTube(\$client, 'my-app', null, \$this->_apiKey); \$videoFeed = \$gdata->getUserUploads(\$userId);   // save the last items \$this->_process(\$videoFeed);   try { while (\$videoFeed = \$videoFeed->getNextFeed()) { \$this->_process(\$videoFeed); } } catch (Zend_Gdata_App_Exception \$e) { echo \$e->getMessage(); } } }```

Note: here you’ve to substitute the API key with the one you’ve for your development.

YouTube and Vimeo goes HTML5 with video tag usage! Catch them up!

What better example than that coming both from YouTube and Vimeo. Although video tag is not supported except under Safari and Chrome, that’s the future everyone’s going to embed sooner or later.

And if these “big players” are going that way, don’t hesitate to follow them! HTML5 is really what we as web developers were waiting for so long and even all of the problems during its standardization process it’s really cool there will be tags like video.

What YouTube is doing today, perhaps will seem normal to everyone tomorrow. However there are some questions still with no answer, as where the flash possibility to add ads into the player is going?! But we’re about to see great things from these two sites!

Just check out these two links: