Thursday, October 30, 2008
FLV Cuepoints in Flash CS3 with Flash Video Encoder versus FLV and F4V Cuepoints in Flash CS4 with Adobe Media Encoder Best Practice
How Cuepoints and which cuepoints type are presented to the user in Flash CS3 for FLV
and
How Cuepoints and which cuepoints type are presented in Flash CS4 for FLV and F4V.
View Cuepoint In Flash CS3
==========================
FLV:
Cuepoints when available are inported at the end of the Import Video Wizard workflow.
User are able to see their cuepoints by selecting the FLVPlayback Control on stage and after showing the Component Inspector panel (dockable panel). The cuepoints are visible in the cuepoint property of the Component Inspector. Cuepoints are sorted based on the SMPTE time at which they have been created. User can insert Event or Navigation Cuepoints using Flash Video Encoder. Cuepoints are embedded in the FLV.
Codewise, Flash Developers have the option to use Action Script 2 or Action Script 3 in order to interpret Cuepoints (Event and Navigation) at runtime (when the SWF is playback by Flash Player 9 or Flash Player 10). I am not going to cover the onCuepoint Callback (timed based event cuepoint callback) which applies to FLV only but rather focus on the use case where all cuepoints are preloaded/received at once. The following code is Action Script 3 code using NetStreem to attach a _metadata class in order to receive Metadata through onMetaData event callback. In onMetaData Cuepoints are returned in an Array.
connection.connect(connectURL);
stream = new NetStream(connection);
//assign metadata client
stream.client = _metadata;
var video:Video = new Video();
video.attachNetStream(stream);
stream.seek(0);
........
_metadata.onMetaData = function(eventObj:Object):void {
var cuePoints:Array = eventObj.cuePoints;
//cuepoints are returned as an Array
}
Callback Sequence
=================
For FLV the callback sequence will be
Callbacks: onMetaData
View Cuepoints In Flash CS4
===========================
FLV:
FLVs now contains two types of Cuepoints. Two types of Cuepoints are encoded in the FLV. "Flash CS3" Cuepoints and Cuepoints encoded as a subset of an XML Track
first < has been replace by { and > by } because google blog text editor is retarded..
{xmpDM:trackName}AME Markers{/xmpDM:trackName}
{xmpDM:frameRate}f254016000000{/xmpDM:frameRate}
{xmpDM:markers}
{rdf:Seq}
{rdf:li rdf:parseType="Resource"}
{xmpDM:startTime}7695905817600{/xmpDM:startTime}
{xmpDM:name}Title1{/xmpDM:name}
{xmpDM:type}FLVCuePoint{/xmpDM:type}
{xmpDM:cuePointType}Navigation{/xmpDM:cuePointType}
{xmpDM:cuePointParams}
{rdf:Seq}
{rdf:li rdf:parseType="Resource"}
{xmpDM:key}Title{/xmpDM:key}
{xmpDM:value}Star Trek{/xmpDM:value}
{/rdf:li}
{rdf:li rdf:parseType="Resource"}
{xmpDM:key}Color{/xmpDM:key}
{xmpDM:value}Blue{/xmpDM:value}
{/rdf:li}
{/rdf:Seq}
{/xmpDM:cuePointParams}
{/rdf:li}
{/rdf:Seq}
{/xmpDM:markers}
{/rdf:li}
{/rdf:Bag}
{/xmpDM:Tracks}
The cuepoint type are the same than the one defined in the FLV spec part of Flash CS3. The FLV Cuepoint Track (AME Markers in the above sample XMP block) follows
a "well defined" XML syntax, namely the XMP subset of RDF. The RDF spec uses a BNF-like grammar, not an XML DTD. The XML syntax described above is compliant with Flash CS4 integration of Cue Points through the Cue Points dialog and the Component Parameters Cue Points Property. This is assuming you are calling Adobe Media Encoder from Flash CS4 at encoding time.
For FLVs to ensure backward compatibility with Flash CS3, Flash CS4 presents the FLV Cuepoints encoded in the "non XMP form", like wise they were encoded in Flash CS3 and earlier, and WON'T present FLV XMP Cuepoints in the Component Inspector at all if the FLVs have been encoded by Adobe Media Encoder. If Flash Designers and Developers change XMP Cuepoints in their FLVs they have to bare in mind to maintain the non XMP cuepoints as well encoded in the file if they want to see them in Flash CS4 using Adobe SDK and Adobe Software. If Flash Developers prefer to preload XMP Cuepoints only in their SWFs for FLVs, they can rely on Adobe Bridge CS4 or the Import and Export XMP feature available in Adobe Media Encoder CS4 to edit/replace their Cuepoints. They need to preload their Cuepoints at runtime all the time through the onXMPData callback. As far as synchronisation of Cuepoints is concerned they can use a timer and video polling techniques when loading Cuepoints through onXMPData in order to provide accurate synchronization of Event and Navigation Cuepoints with Action Scripts. If they don't want to preload XMP Cuepoints but still want to use Cuepoints in their SWF they need to preload Cuepoints at runtime through onMetadata and proceed with timer and video polling techniques to perform the synchronization of their Action Scripts Code or rely on OnCuepoint which is an SMPTE timed based event callback notification available in Flash CS3 as well and Flash Player 9 but only for FLV.
F4V:
F4Vs also contains XMP Metadata in order to represent "FLV Cuepoints" as well when the F4Vs are encoded by Adobe Media Encoder
For F4Vs Flash CS4 present XMP Cuepoints in the Component Inspector in the order they appears in the RAW XMP Metadata block embedded in the F4V and in the Cuepoints dialog, Cuepoints params are listed in the order they appears in the RAW XMP Metadata block. User can alter XMP Cuepoints using Software and Human Interface such as Adobe Media Encoder or Adobe Bridge CS4 by exporting/modifying/importing XMP files.
Codewise, Flash Developers have the option to use Action Script 2 or Action Script 3 in order to interpret FLVs and F4Vs "FLV Cuepoints" at runtime (when the SWF is rendered by Flash Player 10). As far as synchronisation of Cuepoints is concerned they HAVE to use a timer and video position polling techniques when loading Cuepoints through onXMPData and they have to do their own Action Script synchronization for event and navigation cuepoints.
The following code is Action Script 3 code using NetStream to attach a _metadata class in order to receive Metadata through onMetaData event callback as well as the new callback onXMPData.
Callback Sequence
=================
For F4V the callback sequence is
Callbacks: onMetaData -> onXMPData -> onMetadata
For FLV the callback sequence is
Callbacks: onMetaData -> onXMPData
connection.connect(connectURL);
stream = new NetStream(connection);
//assign metadata client
stream.client = _metadata;
var video:Video = new Video();
video.attachNetStream(stream);
stream.seek(0);
........
_metadata.onMetaData = function(eventObj:Object):void {
var cuePoints:Array = eventObj.cuePoints;
// For F4V First and Third callback call in the callback sequence listed above
// For FLV First call in the callback sequence listed above
}
_metadata.onXMPData = function(info:Object):void {
trace("raw XMP =\n");
trace(info.data);
// For F4V Second call in the callback sequence listed above info.data contains raw XMP block
// For FLV Second call in the callback sequence listed above info.liveXML contains raw XMP block
}
Note: Flash CS4 will import Cue Points stored in the info.data object only not info.liveXML but your AS3 code in your custom player will receive the data as listed above with Flash Player 10
Overall : It is possible with both FLV and F4V cuepoints to have frame accuracy with Event and Navigation Cuepoint
XMP Resources and spec
XMPCore http://partners.adobe.com/public/developer/xmp/topic.html
XMP http://www.adobe.com/devnet/xmp/
Flash CS4 Video Playback http://www.adobe.com/devnet/flash/articles/flvplayback_fplayer9u3_04.html
FLV and F4V http://en.wikipedia.org/wiki/Flash_Video
XMP http://en.wikipedia.org/wiki/Extensible_Metadata_Platform
http://www.adobe.com/products/xmp/
Some useful resource regarding RDF and triple store
http://www.w3.org/TR/rdf-schema/
http://simile.mit.edu/reports/stores/
and finally a great use case of what can be done using XMP cuepoint : Interactive FLV and F4V Video
http://younsi.blogspot.com/2008/12/interactive-video-in-flash-using-f4v.html
Wednesday, October 22, 2008
gotoandlearn.com - Free video tutorials by Lee Brimelow on the Flash CS4 Platform
Tuesday, October 21, 2008
HTTP Post behavior between a C++ CURL client and IIS running Coldfusion 7 not as good as PHP but still providing the functionality
To validate my test i also used wget command line tool to post form data using the follwoing command.
wget-1.11.4b>wget --header="Content-tye:multipart/form-data, boundary=--========00000003640" --post-file=postdata.txt http://www.fullyqualifydomainname.com/post.cfm
where the file postdata.txt is :
--========00000003640
Content-Disposition: form-data; name="SessionID"
Content-Type: text/plain
--========00000003640
Content-Disposition: form-data; name="UserName"
Content-Type: text/plain
test
--========00000003640
Content-Disposition: form-data; name="UserPassword"
Content-Type: text/plain
test
--========00000003640
Content-Disposition: form-data; name="EOF"
Content-Type: text/plain
EOF
--========00000003640—
The conclusion of my test was that it is not easy to retrieve all post data into an array in one single call in ColdFusion something which is working great and easy to achieve in PHP. Something the coldfusion team should concider for future APIs... !
ColdFusion Script post.cfm
==========================
first < has been replace by / and > by \ because google blog text editor is retarded..
/cfset x = GetHttpRequestData()\
/cfsavecontent variable="y"\
/cfoutput\
/table cellpadding = "2" cellspacing = "2"\
/tr\
/td\/b\HTTP Request item//b\//td\
/td>/b>Value//b//td\ //tr\
/cfloop collection = #x.headers# item = "http_item"\
/tr\
/td>#http_item#//td\
/td>#StructFind(x.headers, http_item)#//td\ //cfloop\
/tr\
/td\request_method//td\
/td\#x.method#//td\//tr\
/tr\
/td>server_protocol//td\
/td>#x.protocol#//td\//tr\
//table\
/b>http_content --- #x.content#//b\
//cfoutput\
//cfsavecontent\
working post.php script
=======================
#begin script
error_log("post.php Enter");
$debug = 1;
$ua = $_SERVER["HTTP_USER_AGENT"];
$server_request_uri = $_SERVER['REQUEST_URI'];
$server_name = $_SERVER['HTTP_HOST'];
$remote_addr = $_SERVER['REMOTE_ADDR'];
$server_addr = $_SERVER['SERVER_ADDR'];
$server_port = $_SERVER['SERVER_PORT'];
$server_request = $_SERVER['REQUEST_METHOD'];
$server_request_time = $_SERVER['REQUEST_TIME'];
$server_protocol = $_SERVER["SERVER_PROTOCOL"];
error_log("=============================");
error_log("");
error_log("POST $server_request_uri HTTP/1.0");
foreach ($headers as $header_entry=>$header_value)
{
error_log("$header_entry: $header_value");
}
error_log(print_r($_POST,true));
#end script
WORKING PHP LOG
===============
21-Oct-2008 09:15:39]
[21-Oct-2008 09:16:29] post.php Enter
[21-Oct-2008 09:16:29] =============================
[21-Oct-2008 09:16:29]
[21-Oct-2008 09:16:29] POST /post.php HTTP/1.0
[21-Oct-2008 09:16:29] Host: www.fullyqualifydomainname.com
[21-Oct-2008 09:16:29] Content-Length: 655
[21-Oct-2008 09:16:29] Content-Encoding: ISO-8859-1
[21-Oct-2008 09:16:29] Content-Type: multipart/form-data; boundary=========00000024328
[21-Oct-2008 09:16:29] Accept: text/html, *.*
[21-Oct-2008 09:16:29] Expect: 100-continue
[21-Oct-2008 09:16:29] Array
(
[SessionID] =>
[version] => 1.0
[UserName] => test
[UserPassword] => test
[EOF] => EOF
)
on the other hand
wget http://www.fullyqualifydomainname.com/download/update.cfm --post-data="UserName=test&UserPassword=test" works fine with ColdFusion 7 and the previous script assuming that you will have to parse UserName=test&UserPassword=test as a ByteArray
Thursday, September 25, 2008
Canon EOS 5D MKII - Reverie
http://blog.vincentlaforet.com/
The reverie HD video is available on the smugmug CDN
http://www.smugmug.com/photos/best-video-sharing/
http://vincentlaforet.smugmug.com/gallery/6961015_exAjb/1/450568576_iAAka/Large
Quoting Vincent :
The H.264 mov files that you will see are straight out of the prototype camera.
(You will be able to see that these are indeed raw clips for yourself in the embedded EXIF info) and will prove all of the skeptics wrong - not a single color, tonal, noise, exposure - or ANY adjustment was made to any of the footage at any time).
Wednesday, September 17, 2008
Green Energy
As a matter of fact some nuclear plants are used to provide enough electricity for all those old and ugly AC/Units just for the month of June,July,august and September.
Well we all know that you can't use solar energy to provide enough "juice" for AC/unit but a nice panel could provide enough electricity to run your computers the all year, provide lighting and provide electricity for some of your utilities...
So what cities like Phoenix, Texas, Las Vegas are waiting for......
When the government will provide really good tax return intensive plan for people willing to installed solar panel ?
http://www.sunpowercorp.com/For-Homes.aspx
Okay so for Phoenix here are the numbers if you get yet an other loan of 25 years...
Gross Cost: $38,000
Federal Tax Credit: $7,140
State/Utility Rebate: $13,950
Net Cost: $16,910
First Year Bill Savings: 36%
Assuming that you don't have any problems with the panel after 5 years which use to be the average medium time before failure for older generation of solar panel you will pay per month :
With SunPower Without SunPower
Monthly Loan Payment $112.73 $0.00
Tax Savings * -$31.35 $0.00
Monthly Electric Bill $66.99 $105.00
Monthly Net Cost $148.38 $105.00
Per year 456 USD of saving.
This system seams to be good for people who can afford to pay in full.
It seams that best is to pay cash and yet the system should be fare if the
customer would get Federal Tax Credit EVERY year not only at purchase time.
Let's say your electric bill cost 66 USD instead of 105 USD. Your
clean saving net worth is 33 USD per month. Government should give
you 1/3 of the 33 USD of money back every month at least equivalent to
1 month of free energy per year.
Well it's a start...
http://www.energystar.gov/index.cfm?c=products.pr_tax_credits
http://www.gapminder.org/
Monday, September 08, 2008
Wednesday, September 03, 2008
Interactive H264 Video for Flash Player 10
http://younsi.blogspot.com/2008/12/interactive-video-in-flash-using-f4v.html
Thursday, August 28, 2008
iPhone has the big head but apple misses a point....
though it doesn't support Flash or Java.
http://www.crn.com/retail/210201022
Wednesday, August 20, 2008
OGG VORBIS and MOD tracker in Action Script 3
in Flash
http://blog.joa-ebert.com/2008/07/24/as3-vorbis-encoder/
http://blog.andre-michelle.com/
Tuesday, August 19, 2008
Stop making scrollbars in SWF when displaying Text
http://hossgifford.com/resizer/
This is a plea to you, the Flash developer community,
to stop making your own fucking scrollbars. They are fiddly,
non-standard and unintuitive to the average web user.
The thing is, all browsers already have scrollbars. And they
work really well. And everyone knows how to use them. But the
biggest criticism that Flash sites get again and again is their
fixed ‘letterbox’ format with text scrolling within an area of
that letterbox using some proprietary means of interactivity.
This doesn’t have to be the case. This file is a demonstration
of a technique that resizes the flash movie within the html page
to fit the content within the movie. It’s free to use and abuse,
whether you copy and paste it verbatim into your work, or if you
hack and slash it into something that suits the specifics of your
project.
Props to Geoff Stearns for his wonderful swfObject which this latest
version uses to greatly simplify things. Please check
"http://blog.deconcept.com/" for the latest version of swfObject as I
offer no guarantee that the version here is the most recent.
"Hoss Gifford,"
Glasgow,
14/11/2005
http://www.hossgifford.com/downloads.htm
Saturday, August 16, 2008
Things i hate about Vista
1 When copying and pasting folder with large amount of files EG 100 000 from one USB drive to an other a pop up dialog appears saying that there is not enough memory to perform the operation after some times.
2 Explorer.exe process still crashing no improvement since Windows XP
3 Thumbnail view of images and video in explorer are not working so use Adobe Bridge :)
4 Dual screen mode is just wrong and it is not possible to consistently run vista on a laptop with a broken screen for instance using only the external connector. If you want to connect your laptop running vista to an LCD TV through the VGA external connector of your laptop and then later on if you unplug the VGA cable because you want either to use the TV with an other laptop or simply put the laptop to sleep then next time you turn the laptop on after plugging the VGA connector vista will forget that you want your TV as the primary screen. The log in window will show up all the time on the laptop screen. It should be expected to use the last settings which is also the most used settings. It will reset to default settings which is just wrong. On the other hand all windows from the operating OS will open on the wrong screen the secondary screen. Same for control panel settings, if you open control panel on one screen (external screen) and then open the display settings the dialog will open on the wrong screen the "primary" laptop screen.
5 .... coming soon
Monday, July 21, 2008
Installing IIS on Windows XP Pro / Reminder
Installing IIS on Windows XP Pro
If you are running Windows XP Professional on your computer you can install Microsoft's web server, Internet Information Server 5.1 (IIS) for free from the Windows XP Pro installation CD and configure it to run on your system by following the instructions below: -
1. Place the Windows XP Professional CD-Rom into your CD-Rom Drive.
2. Open 'Add/Remove Windows Components' found in 'Add/Remove Programs' in the 'Control Panel'.
3. Place a tick in the check box for 'Internet Information Services (IIS)' leaving all the default installation settings intact.
4. Once IIS is installed on your machine you can view your home page in a web browser by typing 'http://localhost' (you can substitute 'localhost' for the name of your computer) into the address bar of your web browser. If you have not placed your web site into the default directory you should now be looking at the IIS documentation.
5. If you are not sure of the name of your computer right-click on the 'My Computer' icon on your desktop, select 'Properties' from the shortcut menu, and click on the 'Computer Name' tab.
6. Your default web directory to place your web site in is 'C:\Inetpub\wwwroot', but if you don't want to over write the IIS documentation found in this directory you can set up your own virtual directory through the 'Internet Information Services' console.
7. The 'Internet Information Services' console can be found in the 'Administration Tools' in the 'Control Panel' under 'Performance and Maintenance', if you do not have the control panel in Classic View.
8. Double-click on the 'Internet Information Services' icon.
8. Once the 'Internet Information Services' console is open you will see any IIS web services you have running on your machine including the SMTP server and FTP server, if you chose to install them with IIS.
9. To add a new virtual directory right click on 'Default Web Site' and select 'New', followed by 'Virtual Directory', from the drop down list.
7. Next you will see the 'Virtual Directory Creation Wizard' from the first screen click the 'next' button.
9. You will then be asked to type in an 'Alias' by which you will access the virtual directory from your web browser (this is the name you will type into your web browser after 'localhost' to view any web pages you place in the directory).
10. Next you will see a 'Browse...' button, click on this to select the directory your web site pages are in on your computer, after which click on the 'next' button to continue.
11. On the final part of the wizard you will see a series of boxes, if you are not worried about security then select them all, if you are and want to run ASP scripts then check the first two, followed by the 'next' button.
12. Once the virtual directory is created you can view the web pages in the folder by typing 'http://localhost/aliasName' (where 'aliasName' is, place the alias you called the virtual directory) into the address bar of your web browser (you can substitute 'localhost' for the name of your computer if you wish).
Wednesday, July 16, 2008
How to detect the selected language on Mac OS 10 Tiger/Leopard
The following code tested on Tiger will work like a charm.
static Boolean s_curLangInited = FALSE;
static Boolean s_bJapanese = FALSE;
if (!s_curLangInited)
{
CFComparisonResult result;
CFStringEncoding encoding = kCFStringEncodingMacRoman; // = 0;
CFAllocatorRef alloc_default = kCFAllocatorDefault; // = NULL;
// a couple of c string literals.
const char cstr_ja[] = "ja_JP";
// convert from c string to CFString
CFStringRef cf_jaString = CFStringCreateWithCString(alloc_default,cstr_ja,encoding);
//CString curLangStr = AfxGetApp()->GetProfileString(_T("Settings"), _T("Language"), _T("nil"));
CFLocaleRef loc = ::CFLocaleCopyCurrent();
CFStringRef cf_lang = (CFStringRef)::CFLocaleGetValue (loc, kCFLocaleLanguageCode);
CFMutableArrayRef available_locales;
CFArrayRef intersected_locales;
char user_locale[50];
struct direct *file;
DIR *dir;
CFArrayRef prefered_languages;
CFLocaleRef user_locale_ref = CFLocaleCopyCurrent();
CFStringRef user_locale_string_ref = CFLocaleGetIdentifier( user_locale_ref );
/* the prefered language in System Preferences.app, because it can differ from CFLocaleCopyCurrent().
However this prefered language is stored using the general language denotation
that may not include the country code (en,fr,en-GB,...) which is not accepted
by setlocale (setlocale would expect en_US,fr_FR,en_GB,...).
So we retrieve possible locales from /usr/share/locale and intersect them
with the prefered languages using CFBundleCopyLocalizationsForPreferences.
*/
dir = opendir("/usr/share/locale");
available_locales = CFArrayCreateMutable(kCFAllocatorDefault, 0, NULL);
while ((file = readdir(dir)))
{
/* This filters the 'right' locales (xx_xx.UTF-8) */
if (strstr(file->d_name, ".UTF-8"))
CFArrayAppendValue(available_locales, (void*)CFStringCreateWithCString(kCFAllocatorDefault,
file->d_name, kCFStringEncodingUTF8));
}
closedir(dir);
CFPreferencesAppSynchronize(kCFPreferencesAnyApplication);
prefered_languages = (CFArrayRef)CFPreferencesCopyValue( CFSTR("AppleLanguages"), kCFPreferencesAnyApplication,
kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
if (prefered_languages)
{
CFArrayRef intersected_locales = (CFArrayRef)CFBundleCopyLocalizationsForPreferences(available_locales, prefered_languages);
CFStringRef user_language = NULL;
if(CFArrayGetCount(intersected_locales))
user_language = (CFStringRef)CFArrayGetValueAtIndex(intersected_locales, 0);
if(user_language)
{
CFStringGetCString( user_language, user_locale, sizeof(user_locale), kCFStringEncodingUTF8 );
result = CFStringCompareWithOptions(user_language, cf_jaString, CFRangeMake( 0 ,CFStringGetLength(cf_jaString)), kCFCompareCaseInsensitive);
if (result == kCFCompareEqualTo) {
s_bJapanese = true;
}
else
{
s_bJapanese = false;
}
Tuesday, July 15, 2008
why didn't Apple let AT&T sell/activate the new iPhone over launch weekend?
http://www.flickr.com/photos/lasean/2668369038/
Monday, July 14, 2008
Tuesday, July 01, 2008
Modal Dialog using Carbon
and here is a basic sequence to display a modal dialog on the mac similar to Win32 MessageBox
{
DialogRef alert;
DialogItemIndex outHit;
CFStringRef errMsg;
CFStringRef errorExplanation;
UInt32 textLength;
alertStringExplanation = SomeUTF String
alertStringTitle = SomeUTF String
l1 = alertStringExplanation.length();
l2 = alertStringTitle.length();
textLength = l2;
errMsg = ::CFStringCreateWithBytes(NULL, (UInt8 *) alertStringTitle.get(), textLength, CFStringGetSystemEncoding(), false);
textLength = l1;
errorExplanation = ::CFStringCreateWithBytes(NULL, (UInt8 *) alertStringExplanation.get(), textLength, CFStringGetSystemEncoding(), false);
UInt32 numUnicodeChars = ::CFStringGetMaximumSizeForEncoding(textLength, kCFStringEncodingUnicode);
CreateStandardAlert(kAlertCautionAlert, errMsg, errorExplanation, NULL, &alert);
RunStandardAlert(alert, NULL, &outHit);
}
Indexing SWF file
For most people on the Web, if Google or Yahoo cannot find something, it doesn’t exist. That has been one of the biggest drawbacks to creating a Website or application that displays itself as a Flash (SWF) file. Search engines could see the file, but they could not see what was in it. Until now.
Adobe has come up with a way for the search engines to read SWF files and index all of the information they contain. That means any text or links in a Flash application can now be indexed. This is a huge step forward for Adobe and anyone who develops in Flash/Flex. Michele Turner, Adobe’s VP of marketing for its platform business, explains:
We are releasing technology to Google and Yahoo that enables them to crawl and index SWF files. They are now searchable. This will open up millions of Flash files to search.
Adobe has created a special Flash player for the search engines that acts like a virtual user going through each application. It actually goes through the runtime of each Flash application and translates it into something the search engines can understand. So all of those fancy interactive Flash Websites and other rich Internet applications that have been invisible to search engines, can now be seen by them.
Turner acknowledges that this invisibility so far “has been a big problem for those developing rich applications.” After all, it doesn’t matter how pretty your Website is if nobody can find it. Flash applications and Websites (many ironically created by ad agencies) have not been able to take advantage of any of the search-engine juice that so many online ad campaigns depend upon. This should be seen as part of Adobe’s larger efforts to remove any remaining restrictions associated with Flash (in April, for instance, it opened up the Flash runtime as part of its the Open Screen Project).
Google is already rolling out the SWF-indexing technology, while Yahoo still “has some work to do,” says Turner. Even so, this won’t solve all the problems with Flash content showing up on search engines.
Google SWF
http://googlewebmastercentral.blogspot.com/2008/06/improved-flash-indexing.html
ADOBE SWF searchability
http://www.adobe.com/devnet/flashplayer/articles/swf_searchability.html
Thursday, June 26, 2008
Flash web sites sample that i like
http://www.ilm.com/theshow/
Foxit PDF Preview Handler for Windows Vista, Office 2007 and Windows XP.
The Foxit PDF Preview Handler is a piece of software written by Tim Heuer with sponsorship from Foxit Software (providing the license so that we all can enjoy). Special thanks to Ryan Gregg for help with the Windows XP version. These preview handlers are a part of Microsoft Windows Vista in the operating system as well as in Outlook 2007.
Tim Heuer wrote:
For example, in Outlook 2007, if you receive an attachment that is a PDF you can click it and get a preview of that document right within Outlook without having to open the document in another program. It is an extremely helpful feature of Outlook that I love and why I wrote this handler for PDFs. Microsoft did not provide a default one for PDFs as a part of Outlook or Vista. If you install Adobe Acrobat 8.1+ you will get one as well. However, I am not a fan of Acrobat Reader as I think it is a slow application for what I use PDFs for – reading only. For this I prefer Foxit Reader as it is super light-weight and fast.
http://timheuer.com/blog/archive/2008/05/09/foxit-pdf-preview-handler.aspx
About straight and premultiplied channels
Practical advice for developers
(from DVD-HQ.info)
This section is aimed mainly at software developers, but regular users should read it too, because it shows how simple it is to deal with these issues from a programming point of view.
It might sound a bit self-righteous to write an article telling Photoshop's or 3dsmax's programmers how to do their job but... well, someone has to, because it's pretty obvious they aren't going to get it right by themselves (both are up to version 9, and are still lacking basic alpha channel conversion abilities).
First, here are the formulas to convert between matted and non-matted alpha. They can deal with any matte colour and are easy to implement for any colour depth and in any language. The variables used in the formulas are:
Cm = Component (matted)
Cu = Component (unmatted)
Cb = Component (background / matte colour)
a = Alpha
amax = Maximum possible alpha value (ex., 1.0)
All values are assumed to vary between 0.0 and 1.0 (for 8-bit files this would be 0-255 and for 16-bit files it would be 0-65535; remember to divide by the scale if you use anything other than 0.0-1.0).
To convert from unmatted alpha to matted alpha:
Cm = ( Cu ∙ a ) + [ Cb ∙ ( amax - a ) ]
To convert from matted alpha to straight (unmatted) alpha:
If a = 0, then Cu = Cm
Else, Cu = [ Cm - Cb ∙ ( amax - a ) ] / a
The formulas should be applied once to each colour component (ex.: R, G and B) of each pixel.
Those formulas are enough to add support for alpha channel conversion (with any matte colour) to any application. The software can then either cache a "working format" version of the image (generally meaning a straight-alpha version) or it can perform the conversion whenever it needs to read a pixel's colour channel values. There is really no excuse for not including this basic ability in a professional-level application.
The second issue is how to determine the kind of alpha channel used by a file that the user has just imported. One solution is to simply ask the user, but that's a pretty poor solution; users have more important things to worry about. So let's look at how software can determine the type of alpha channel and, if it turns out to be a matted alpha channel, how it can determine the background colour.
First we look for a pixel that is 100% transparent (0% opaque). If one exists, store its RGB values. Look for another pixel that is 100% transparent. Compare its RGB values with the ones previously stored. Repeat until the end of the file. If all pixels with 0% opacity have the same RGB values, it's almost guaranteed that that colour is the one used for the matte (if indeed there is a matte). If the colour varies, there's a good chance that we're looking at a straight-alpha file, or that the file uses some sort of really weird encoding (like the background bitmap example given above).
Now, even if all 100% transparent pixels have exactly the same colour, the file might still use "straight" alpha, so it's time to take the "background" RGB values we found above, plug them into the matted / unmatted conversion formulas and see if they make sense.
No pixel can have less of the matte colour in its RGB values than its alpha value would allow. For example, a colour channel in a pixel that is only 10% opaque cannot deviate more than 10% from the same channel of the matte colour.
If this condition isn't met by every pixel in the file, then there is no matte. If it is met by every pixel in the file, there's a very good chance that there is a matte, using the background colour we determined earlier.
There are other ways to make these decisions, some of which are simpler, faster, and will also get it right most of the time (for example, the program might analyse only a few pixels, rather than every pixel in the image).
Software should perform these tests when a file is first imported, and use the results to pre-fill the source format (or "footage interpretation") settings. This means that, in 99% of cases, the user will only need to click "ok".
If the tests are inconclusive (ex., because there are no transparent pixels in the file), then the software should ask the user to make the choice.
In any case, the user should always be given the option to toggle the type of alpha channel (between straight and matted), to pick the matte colour (manually or from the image) or to have the software "guess" the alpha channel type and matte colour again. These options should be available at any moment; not just when the file is first imported. If the software uses working proxies, a change of source format settings would cause the file to be re-imported.
(end of quote from DVD-HQ.info © Rui del-Negro 2008)