This gist shows how to create a GIF screencast using only free OS X tools: QuickTime, ffmpeg, and gifsicle.
To capture the video (filesize: 19MB), using the free "QuickTime Player" application:
| <IfModule mod_expires.c> | |
| ExpiresActive On | |
| ExpiresByType image/jpg "access 1 year" | |
| ExpiresByType image/jpeg "access 1 year" | |
| ExpiresByType image/gif "access 1 year" | |
| ExpiresByType image/png "access 1 year" | |
| ExpiresByType text/css "access 1 month" | |
| ExpiresByType text/html "access 1 month" | |
| ExpiresByType application/pdf "access 1 month" | |
| ExpiresByType text/x-javascript "access 1 month" |
| var selector = 'img' // Replace this with the selector for the element you want to make transformable | |
| jQuery.getScript('//ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js', function() { | |
| jQuery.getScript('//cdnjs.cloudflare.com/ajax/libs/numeric/1.2.6/numeric.min.js', function() { | |
| (function() { | |
| var $, applyTransform, getTransform, makeTransformable; | |
| $ = jQuery; |
| <html> | |
| <head> | |
| <title>Select styles with CSS only</title> | |
| <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| <style> | |
| body { | |
| background-color: #fff; | |
| font-family: helvetica, sans-serif; | |
| margin: 4% 10% | |
| } |
| # Turn on Expires and set default to 0 | |
| ExpiresActive On | |
| ExpiresDefault A0 | |
| # Set up caching on media files for 1 year (forever?) | |
| <FilesMatch "\.(flv|ico|pdf|avi|mov|ppt|doc|mp3|wmv|wav)$"> | |
| ExpiresDefault A29030400 | |
| Header append Cache-Control "public" | |
| </FilesMatch> | |
| // shim layer with setTimeout fallback | |
| window.requestAnimFrame = (function(){ | |
| return window.requestAnimationFrame || | |
| window.webkitRequestAnimationFrame || | |
| window.mozRequestAnimationFrame || | |
| function( callback ){ | |
| window.setTimeout(callback, 1000 / 60); | |
| }; | |
| })(); |
| # Apache configuration file | |
| # httpd.apache.org/docs/2.2/mod/quickreference.html | |
| # Note .htaccess files are an overhead, this logic should be in your Apache | |
| # config if possible: httpd.apache.org/docs/2.2/howto/htaccess.html | |
| # Techniques in here adapted from all over, including: | |
| # Kroc Camen: camendesign.com/.htaccess | |
| # perishablepress.com/press/2006/01/10/stupid-htaccess-tricks/ | |
| # Sample .htaccess file of CMS MODx: modxcms.com | |
| # This is the free sample of .htaccess from 6GO s.r.l. | |
| # @author Claudio Ludovico Panetta (@Ludo237) |
| // http://paulirish.com/2011/requestanimationframe-for-smart-animating/ | |
| // http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating | |
| // requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel | |
| // MIT license | |
| (function() { | |
| var lastTime = 0; | |
| var vendors = ['ms', 'moz', 'webkit', 'o']; |
| (function(){ | |
| var event_names = { | |
| "click" : "" , | |
| "tweet" : "", | |
| "retweet" : "source_tweet_id", | |
| "follow" : "screen_name", | |
| "favorite" : "tweet_id" | |
| }; | |
| for(var event_name in event_names) |
| <div id="fb-root"></div> | |
| <script> | |
| (function() { | |
| window.fbAsyncInit = function() { | |
| FB.Event.subscribe('edge.create', function(response) { | |
| _gaq.push(['_trackSocial', 'facebook', 'like', response]); | |
| }); | |
| FB.Event.subscribe('edge.remove', function(response) { | |
| _gaq.push(['_trackSocial', 'facebook', 'unlike', response]); | |
| }); |