lathiat's google reader stream

Apple Removes Download Options From Quicktime Trailers Website

It appears that Apple has begun quietly phasing out its trailer download options from the trailers.apple.com website, effectively eliminating 1080p trailer availability.

Previously, the site gave users the ability to stream trailers in 480p or 720p, along with providing download options for 480p, 720p, and 1080p. Trailers uploaded to the site after an approximate date of May 22 no longer have any download options and can only be streamed in-browser at 480p or 720p.

trailersbefore

Trailer options before 5/22

trailersafter
Trailer options after 5/22

While trailers uploaded before May 22 can still be downloaded, Apple appears to be removing the option from movies with multiple trailers that have a trailer uploaded after that date. For example, Disney Pixar's Monsters University has trailers that were uploaded on the following dates: 6/20/12, 3/08/13, 5/20/13, and 5/22/13. None of these trailers have download options.

Disney’s Planes, on the other hand, has trailers that were uploaded on the following dates: 3/15/13, 04/04/13, and 5/17/13. Each of these trailers can still be downloaded at all resolutions, including 1080p.

So, while older trailers can still be downloaded from the site, Apple appears to be removing downloads from older trailers as newer trailers are added, slowly phasing out the availability of trailer downloads altogether.

It is not clear at this point why Apple has begun phasing out movie trailer downloads, but we have contacted the company for more information.

(Thanks Eduardo and Theo!)


Recent Mac and iOS Blog Stories
Automatic Connected Car System Delayed Until August
Best Buy to Discount iPhone by $50 Beginning Sunday
Skycore Creates Platform for Passbook Delivery Via MMS
Letter to Brazilian Apple Repair Centers Suggests June 2013 Policy Changes?
Jon Stewart Takes on Apple's Appearance in Front of Senate Committee
Angry Birds Space Named App of the Week, Available for Free
Evernote Adds Reminders to Mac and iOS Apps in Update
Shazam for iPad Rebuilt as Universal App With Background Auto-Tagging and More
    


Go to article


Holland Backup Manager


Part 1 - Installing Holland Backup Manager

I spoke at Percona Live Conference and Expo 2013 about backups. Part of the talk focussed on the backup products in the ecosystem that will help you make a backup of your MySQL data. This follow-up article touches on one of the frameworks from my talk, the Holland Backup Manager. I was able to have a chat with some of the guys on the Rackspace booth about Holland and had some questions regarding features answered.

Holland is a backup framework focussing mostly on MySQL backups but it is pluggable so you can write add backup providers to extend it to your own needs. Using the framework you're able to configure and deploy backup jobs of varying scope to multiple machines. The framework which was originally developed at Rackspace, currently supports mysqldump, lvm, xtrabackup and pgdump (Postgres) also sqllite. The latest version is number 1.0.8 which brings a few nice new features with it. I'll talk about the most significant of these in the third of the series.
I want to show some installation, configuration and then use of the framework. I'm a fan of this project and if you've got the need to standardise whilst being flexible then Holland could be the solution you've been looking for.

Firstly, head over to github to grab the files. https://github.com/holland-backup/holland
I've been using vagrant to provide a quick VM environment. This OS I'm using here is a CentOS 6.4 64bit host running in Virtualbox. All dependencies for Holland should be available on the popular package managers but if you're using something other then debian (apt-get) or redhat based (yum) then you might require some research elsewhere to meet the requirements of Holland.

Download the zip archive from github (the extension was lost in wget but it is a .zip file)
[vagrant@node1 ~]$ wget https://github.com/holland-backup/holland/archive/master.zip ... Saving to: `master' 100%[==================================================>] 602,186 572K/s in 1.0s (572 KB/s) - `master' saved [602186/602186]

So then proceed to unzip your archive
[vagrant@node1 ~]$ unzip ./master
Archive: ./master
832eaa6a0fff56a3009cdde22eda4746203c97f6
creating: holland-master/
inflating: holland-master/CHANGES.txt
inflating: holland-master/INSTALL
inflating: holland-master/LICENSE
inflating: holland-master/README
creating: holland-master/config/
inflating: holland-master/config/README
...

ProTip: Take some time to go through the various Holland directories. Throughout the directories there README and INSTALL files that will explain more about the accompanying files.

[vagrant@node1 holland-master]$ ls -l
total 56
-rw-rw-r-- 1 vagrant vagrant 7064 May 13 17:45 CHANGES.txt
drwxrwxr-x 4 vagrant vagrant 4096 May 13 17:45 config
drwxrwxr-x 3 vagrant vagrant 4096 May 13 17:45 contrib
drwxrwxr-x 4 vagrant vagrant 4096 May 13 17:45 docs
drwxrwxr-x 7 vagrant vagrant 4096 May 13 17:45 holland
-rw-rw-r-- 1 vagrant vagrant 1782 May 13 17:45 INSTALL
-rw-rw-r-- 1 vagrant vagrant 3290 May 13 17:45 LICENSE
drwxrwxr-x 13 vagrant vagrant 4096 May 13 17:45 plugins
-rw-rw-r-- 1 vagrant vagrant 514 May 13 17:45 README
-rw-rw-r-- 1 vagrant vagrant 62 May 13 17:45 setup.cfg
-rw-rw-r-- 1 vagrant vagrant 1441 May 13 17:45 setup.py
drwxrwxr-x 2 vagrant vagrant 4096 May 13 17:45 tests
-rwxr-xr-x 1 vagrant vagrant 1782 May 13 17:45 tomsay.py

Before going any further lets take care of the dependencies. They're easily met using yum/apt or if you want to compile them yourself then go right ahead;
&nbsp - python-setuptools
&nbsp - mysqldb (python's mysql connector)

Now, lets take care of some directories that need to exists. These are configurable later, but for simplicity sake we'll roll forward with the Holland defaults. Your environment is likely to be different especially if you're mounting remote storage to store the backup files you make.

[vagrant@node1 config]$ sudo mkdir -p /etc/holland [vagrant@node1 plugins]$ sudo mkdir -p /var/log/holland [vagrant@node1 plugins]$ sudo mkdir -p /var/spool/holland

Now the directories we've created will only be writable to root since we needed elevated privileges to make them. You might choose to chmod the directories if you're going to use a specific backup user to run your backup jobs. Now we're ready to run the python setup file from the root of the unarchived directory
[vagrant@node1 holland-master]$ sudo python ./setup.py install
running install
running bdist_egg
running egg_info
creating holland.egg-info
writing holland.egg-info/PKG-INFO
...
Installing holland script to /usr/bin

Installed /usr/lib/python2.6/site-packages/holland-1.0.8-py2.6.egg
Processing dependencies for holland==1.0.8
Finished processing dependencies for holland==1.0.8

Without any errors in the previous output it's safe to assume we're installed.
[vagrant@node1 config]$ holland --version
Holland Backup v1.0.8
Copyright (c) 2008-2010 Rackspace US, Inc.
More info available at http://hollandbackup.org


Lets review what is in the plugin directory. These are the providers. Some are core libraries for the use of particular providers. There's also an example and random directory which we will reference in the next article on config.

[vagrant@node1 plugins]$ ls -w1
ACTIVE
holland.backup.example
holland.backup.mysqldump
holland.backup.mysqlhotcopy
holland.backup.mysql_lvm
holland.backup.pgdump
holland.backup.random
holland.backup.sqlite
holland.backup.xtrabackup
holland.lib.common
holland.lib.lvm
holland.lib.mysql
README

There are a couple of essential installs we need to take care of before we're ready to tackle the plugins for the backup tools. These are the holland.lib.common & holland.lib.mysql. For each you need to run the setup.py file from within the directories. The output should look something like the following.


[vagrant@node1]$ cd holland.lib.common/
[vagrant@node1 holland.lib.common]$ sudo python setup.py install
running install
...
Adding holland.lib.common 1.0.8dev to easy-install.pth file

Installed /usr/lib/python2.6/site-packages/holland.lib.common-1.0.8dev-py2.6.egg
Processing dependencies for holland.lib.common==1.0.8dev
Finished processing dependencies for holland.lib.common==1.0.8dev

[vagrant@node1 holland.lib.common]$ cd ../holland.lib.mysql/
[vagrant@node1 holland.lib.mysql]$ sudo python setup.py install
running install
...
Adding holland.lib.mysql 1.0.8dev to easy-install.pth file

Installed /usr/lib/python2.6/site-packages/holland.lib.mysql-1.0.8dev-py2.6.egg
Processing dependencies for holland.lib.mysql==1.0.8dev
Finished processing dependencies for holland.lib.mysql==1.0.8dev


Now, I'm mainly interested in mysqldump and xtrabackup but you might want to use the mysql_lvm. I don't think there are many takers for mysqlhotcopy these days. The same steps apply for each provider you want to install on each machine.
[vagrant@node1 holland.backup.mysqldump]$ sudo python setup.py install running install ... Adding holland.backup.mysqldump 1.0.8dev to easy-install.pth file Installed /usr/lib/python2.6/site-packages/holland.backup.mysqldump-1.0.8dev-py2.6.egg Processing dependencies for holland.backup.mysqldump==1.0.8dev Finished processing dependencies for holland.backup.mysqldump==1.0.8dev

and then finally from the xtrabackup directory;
[vagrant@node1 plugins]$ cd holland.backup.xtrabackup/ [vagrant@node1 holland.backup.xtrabackup]$ sudo python setup.py install running install ... Adding holland.backup.xtrabackup 1.0.8dev to easy-install.pth file Installed /usr/lib/python2.6/site-packages/holland.backup.xtrabackup-1.0.8dev-py2.6.egg Processing dependencies for holland.backup.xtrabackup==1.0.8dev Finished processing dependencies for holland.backup.xtrabackup==1.0.8dev

So in summary it's the library files for the plugins;
  - holland.lib.common
  - holland.lib.mysql
  - holland.lib.lvm (depending if you're going to use it)

In part two I'll be giving an overview of the config files and then part three will be some cookbook-like config for the various providers.
PlanetMySQL Voting: Vote UP / Vote DOWN

Go to article


We Saved a Spot for You!

We Saved a Spot for You!

Submitted by: Unknown

Tagged: douchebag parkers , cars , funny , parking , fail nation
Share on Facebook

Go to article


This is What Happens When You Shower at Your Girlfriend's Place

This is What Happens When You Shower at Your Girlfriend's Place

Submitted by: Unknown

Tagged: shower , funny , men vs women , bathing , g rated , dating
Share on Facebook

Go to article


Why Is There a Dolphin in My Drink?

Why Is There a Dolphin in My Drink?

Submitted by: Unknown

Tagged: drink , dolphin , wtf , funny , cocktail , after 12 , g rated
Share on Facebook

Go to article


I Knew I Wanted a Red Car

I Knew I Wanted a Red Car

Submitted by: Bobloblaw (via knoxville.craigslist.org)

Tagged: indecision , cars , funny , g rated , there I fixed it
Share on Facebook

Go to article


Don't Ask Why, Just Accept It

Don't Ask Why, Just Accept It

Submitted by: Unknown

Tagged: weather , thunderstorms , storms , monday thru friday , g rated
Share on Facebook

Go to article


RPi control your server PSU over the Internet

remote-server-psu-control-via-RPi

Here’s an interesting use of a Raspberry Pi to control the PSU on a server. [Martin Peres] is going to be away for a few months and still wants access to his PC. This isn’t really all that tough… it’s what SSH is made for. But he also wants lower-level access to the hardware. Specifically he needs to control and get feedback on what the PSU is doing, and even wanted to have access to the serial console without having to go through the computer’s NIC.

The image above shows one part of his solution. This is a custom Ethernet port that connects to his Rasberry Pi header breakout board. Inside the computer the jack is wired to the motherboard power LED to give feedback about the current state of the power supply. It also patches into the green wire on the PSU, which lets him turn on the power by pulling it to ground. After working out the cable routing he developed a web interface that makes it easy to interact with the setup.

As with other hacks along these lines letting an embedded computer run 24/7 is a lot less wasteful than leaving a PC on. That’s a concept we can really get behind.


Filed under: Network Hacks, Raspberry Pi

Go to article


Nice Crop Job

Nice Crop Job

Submitted by: Unknown

Tagged: selfies , man of steel , funny , superman-autocowrecks , g rated
Share on Facebook

Go to article


It's All Fun and Games Until. . .

It's All Fun and Games Until. . .

Submitted by: Unknown

Tagged: creepy baby , funny , parenting
Share on Facebook

Go to article


Percona Server for MySQL 5.5.31-30.3 now available

Percona Server for MySQL version 5.5.31-30.3

Percona Server for MySQL version 5.5.31-30.3

Percona is glad to announce the release of Percona Server for MySQL 5.5.31-30.3 on May 24, 2013 (Downloads are available here and from the Percona Software Repositories). Based on MySQL 5.5.31, including all the bug fixes in it, Percona Server 5.5.31-30.3 is now the current stable release in the 5.5 series. All of Percona‘s software is open-source and free, all the details of the release can be found in the 5.5.31-30.3 milestone at Launchpad.

New Features:

Bugs Fixed:

Release notes for Percona Server for MySQL 5.5.31-30.3 are available in our online documentation. Bugs can be reported on the launchpad bug tracker.

The post Percona Server for MySQL 5.5.31-30.3 now available appeared first on MySQL Performance Blog.


PlanetMySQL Voting: Vote UP / Vote DOWN

Go to article


Psy Impostor Crashes the Cannes Film Festival

Psy Impostor Crashes the Cannes Film Festival

They're already calling him "Psych!" The fake Psy had celebs all over the festival fooled. What they didn't know is that the real Psy was actually in the United States doing appearances on talk shows. Nonetheless, the anonymous impersonator (who has disappeared since being revealed) enjoyed a weekend in lap of luxury, being allowed access to everywhere from the luxurious Carlton Hotel, Martinez Beach, and even the private party of millionaire fashion designer Goga Ashkenazi.

Oppa Conman Style!

Submitted by: stephenwood51

Tagged: psy impostor , psych , cannes film festival , fake psy , naomie harris , impostor , conman , gangnam style , psy , funny
Share on Facebook

Go to article


Roommate Sabotage

Roommate Sabotage

Submitted by: aus886

Tagged: trolling , roommates , funny , justin bieber , failbook
Share on Facebook

Go to article


New stable kernels 3.9.4, 3.4.47, and 3.0.80

There are three new stable kernels available: 3.9.4, 3.4.47, and 3.0.80. All contain important fixes.

Go to article


Tungsten University: Load a Vertica data warehouse with MySQL data

Continuent Tungsten offers real-time replication from MySQL to a variety of DBMS types including Vertica. In this Tungsten University webcast we will show you the details of setting up MySQL-to-Vertica replication, including the following topics: Introduction to Continuent Tungsten features for data warehouse loading Installation for MySQL to Vertica replication Best practices for applications:
PlanetMySQL Voting: Vote UP / Vote DOWN

Go to article


This is the Most Insane LEGO Creation You'll See This Week

This is the Most Insane LEGO Creation You'll See This Week

We've seen a lot of LEGO creations come and go here, but this may just be the coolest yet! The good folks over at PopSci did a piece on this incredible LEGO creation. Check out the full article for a video!

Submitted by: ichc.chrispeeler

Tagged: star wars , lego , x wing , nerdgasm , g rated , win
Share on Facebook

Go to article


McCain Puts Politics Aside and Asks the Tough Questions

Submitted by: Unknown

Tagged: apps , apple , mccain , funny , AutocoWrecks
Share on Facebook

Go to article


Morgan Freeman Falls Asleep During a TV Interview

Morgan Freeman Falls Asleep During a TV Interview

Michael Caine's GIFs me the sleep-feels too, Morgan.

Submitted by: Unknown

Tagged: gifs , TV , Morgan Freeman , sleeping , funny
Share on Facebook

Go to article


iPhone Urinalysis App Draws U.S. Government Scrutiny

The U.S. Food and Drug Administration has sent a letter to BioSense Technologies over its iPhone uChek urinalysis system, asking why its medical app hasn't been cleared by the agency. The app is one of the first that turns the iPhone into a medical device, designed to read urinalysis test strips that are normally examined by users and compared to a color-coded chart.

With the uChek system, patients can take a picture of the strip with the iPhone's camera and then receive an automated readout of parameters like glucose, urobilinogen, pH, ketone and more. The app also stores results which then can be analyzed over time.

Uchek
Though medical device makers have adopted the iPhone for some measurements like blood glucose monitoring for diabetics, large scale use of smartphones and tablets as a replacement for existing medical devices has yet to take off -- likely due in large part to government regulation of medical devices.

From Bloomberg:

Biosense Technologies Private Ltd.’s uChek system isn’t cleared by the Food and Drug Administration and the agency said it wants to know why not, in a first-of-its-kind letter to a maker of a mobile-device application. The app relies on users, such as diabetics checking their glucose, to dip test strips in urine and use the smartphone’s camera to allow the system to processes and generate automated results.

UChek works with test strips made by Siemens AG (SIE) and Bayer AG (BAYN), which are only approved for visual reading and require new clearance for automated analysis, the FDA said in the letter. The agency has said it wants stricter rules for apps that directly diagnose or treat conditions, proposing in 2011 to apply similar quality standards as for heart stents, ultrasound machines and other medical devices.
The uChek kit can be purchased in the US and India for $40, while the uCheck iPhone app is a free download [Direct Link] from the App Store -- though the app can also manually read urine strips from other companies.


Recent Mac and iOS Blog Stories
Best Buy to Discount iPhone by $50 Beginning Sunday
Skycore Creates Platform for Passbook Delivery Via MMS
Letter to Brazilian Apple Repair Centers Suggests June 2013 Policy Changes?
Jon Stewart Takes on Apple's Appearance in Front of Senate Committee
Angry Birds Space Named App of the Week, Available for Free
Evernote Adds Reminders to Mac and iOS Apps in Update
Shazam for iPad Rebuilt as Universal App With Background Auto-Tagging and More
Gmail Management App 'Mailbox' Gains iPad Compatibility
    


Go to article


Implementing asynchronous cascade delete in MySQL

A while back one of my foreign keys started causing trouble. The problem was that some parent rows had tens of thousand of child rows, and the foreign key was defined with CASCADE DELETE enabled. When we deleted one of those parent rows on a master database, it took several seconds to execute the delete because of the cascade. This led to latency for the end user, and also led to replication delays.

The immediate solution was make the application tolerant of orphaned rows in the child table and to drop the explicit foreign key constraint.

I didn't really want to leave those orphaned rows hanging around in the child table, so I decided to implement an asynchronous process to delete the orphaned rows on a scheduled basis. Read on for a description of that process.

Using the sakila database as an example, imagine I drop the foreign key between file_category and category, like so:

alter table sakila.film_category drop foreign key fk_film_category_category;

Without the foreign key in place, deletes on the category table lead to orphaned rows in film_category. For example, I will delete the "New" category:

``` mysql> delete from sakila.category

-> where name = 'New';

Query OK, 1 row affected (0.01 sec) ```

There are several ways to count the orphaned rows. Here are two different naive implementations using OUTER JOIN or NOT EXISTS:

``` mysql> select count(*)

-> from sakila.film_category c 
-> left outer join sakila.category p on p.category_id = c.category_id 
-> where p.category_id is null;

+----------+ | count(*) | +----------+ | 63 | +----------+ 1 row in set (0.00 sec)

mysql> select count(*)

-> from sakila.film_category c 
-> where not exists 
-> (
->   select NULL from sakila.category p where p.category_id = c.category_id
-> );

+----------+ | count(*) | +----------+ | 63 | +----------+ 1 row in set (0.01 sec) ```

I can also delete the orphaned rows using the same query approaches. I'll roll the first delete back so I can demonstrate the second query in the same session:

``` mysql> set autocommit = 0; Query OK, 0 rows affected (0.00 sec)

mysql> delete c.*

-> from sakila.film_category c 
-> left outer join sakila.category p on p.category_id = c.category_id 
-> where p.category_id is null;

Query OK, 63 rows affected (0.02 sec)

mysql> rollback; Query OK, 0 rows affected (0.00 sec)

mysql> delete c.*

-> from sakila.film_category c 
-> where not exists (select NULL from sakila.category p where p.category_id = c.category_id);

Query OK, 63 rows affected (0.01 sec)

mysql> commit; Query OK, 0 rows affected (0.00 sec) ```

This approach will be very slow for tables containing millions of rows, so in my real world case I didn't use this approach. Instead I decided it would be a lot easier and faster to delete the orphaned rows if I knew who their parent was. To this end I created a new table to track the deleted rows, and populated it using a trigger. Continuing the example in the sakila database:

``` CREATE TABLE category_deleted ( category_id tinyint(3) unsigned NOT NULL, name varchar(25) NOT NULL, last_update timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, delete_time timestamp NOT NULL, PRIMARY KEY (category_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DELIMITER $$

DROP TRIGGER IF EXISTS sakila.TR_A_DEL_CATEGORY $$

CREATE TRIGGER sakila.TR_A_DEL_CATEGORY AFTER DELETE ON sakila.category FOR EACH ROW BEGIN

INSERT IGNORE INTO sakila.category_deleted (category_id, name, last_update, delete_time) VALUES (old.category_id, old.name, old.last_update,now());

END $$

DELIMITER ; ```

Now I can delete another category to test the trigger:

``` mysql> -- delete a single category mysql> delete from sakila.category

->     where name = 'Classics';

Query OK, 1 row affected (0.01 sec)

mysql> -- verify the trigger worked mysql> select * from sakila.category_deleted; +-------------+----------+---------------------+---------------------+ | category_id | name | last_update | delete_time | +-------------+----------+---------------------+---------------------+ | 4 | Classics | 2006-02-15 04:46:27 | 2013-05-21 18:21:53 | +-------------+----------+---------------------+---------------------+ 1 row in set (0.00 sec)

mysql> -- count the orphaned rows using the _deleted table mysql> select count(*)

-> from sakila.film_category c 
->     inner join sakila.category_deleted p on p.category_id = c.category_id;   

+----------+ | count(*) | +----------+ | 57 | +----------+ 1 row in set (0.00 sec) ```

I also wanted to execute the deletes on the child table in chunks, so I implemented a stored procedure to delete the orphaned rows by iterating through the rows in the _deleted table, deleting the child rows, and then deleting from the _deleted table. If I had to implement it again, I would probably use common_schema to chunk the deletes so I wouldn't need the stored procedure.

Here's an implementation using common_schema:

``` -- first delete the orphaned rows from the child table set @script := " split(sakila.film_category: delete sakila.film_category.*

from sakila.film_category 
inner join sakila.category_deleted on sakila.category_deleted.category_id = sakila.film_category.category_id 

) SELECT $split_total_rowcount AS 'rows deleted so far'; "; call common_schema.run(@script);

-- then delete the rows from the _deleted table (assuming they have no children) delete p.* from sakila.category_deleted p left outer join sakila.film_category c on c.category_id = p.category_id where c.category_id is null; ```


PlanetMySQL Voting: Vote UP / Vote DOWN

Go to article