Personally I’ve always appreciated the emphasis on Populi versus Dei especially considering tumultuous, fractious and socialist history of Europe. But what it expresses best is the materialistic notion that perfection, i.e. God, is possible from the voice of the people and that truth resides in each and everyone of us. So this is my food for thoughts blog article about software technology. If you found article on this blog useful, click on any ad so that I can have a drink on you.

Tuesday, March 31, 2009

Monday, March 30, 2009

The Gnomon Workshop, the industry leader in professional training for artists in the entertainment and design industries. Founded by Alex Alvarez in 2000, The Gnomon Workshop was launched as a means to share professional techniques with artists who could not attend the hands-on courses offered at the Gnomon School of Visual Effects in Hollywood, California. Over the past six years, the Gnomon Workshop DVD library has expanded to offer training by over sixty professional instructors on a diverse range of tools, software and media including design, drawing, sculpture, painting, modeling, texturing, animation, effects and compositing. Shipped to literally every corner of the globe, our DVDs can be found in countless libraries, studios and universities... and on many thousand bookshelves.

I always love what Google is doing with Flash today.I also like software like picassa and SketchUp.The good news for SketchUp is that Google has Released an SFK for SketchUp sothat SketchUp 3D model can be exported to third party software like Flash CS4 thanks to XML importer for instance :)

Rounding NumbersThere are three basic ways to round numbers. The one that most people know is rounding to the nearest whole number, or to the nearest ten, but there are two other ways to round which are essentially very similar to this method. They are rounding to two (or three) deciml places and rounding to three (or four) significant figures.Why do we need to round numbers?You may see it reported that a TV program had 23 million viewers. This is not actually true because some of those viewers fell asleep half way through the program and some people lied about watching the program. The true number of viewers was somewhere between 22½ million and 23½ million and the published figure was rounded to the nearest million. Similarly if you used your calculator to find the square root of 1000, you would get something like:

√1000 = 31.622776601683793319988935444327

The most important digits are the 3, 1 and 6 at the beginning. The least important digits are the 3, 2 and 7 at the end. It is bad practice to write down all the digits that the calculator shows so we choose only to write down a few of the most important ones.Rounding to the nearest ten and the nearest whole numberLooking at the number above, it should be seen that, to the nearest ten, the square root of 1000 is 30. The above number is between 30 and 40 and it is nearer to 30. This is an example of rounding down.To the nearest whole number, the square root of 1000 is actually 32 because the number given above is closer to 32 than to 31. This is an example of rounding up.

Thursday, March 12, 2009

Not a long time ago I found an interesting FLV Player from the following company www.hitasoft.com and they offer a cool feature. You can playback videousing slow motion speed very handy when you playpback some sport. So I asked myself how this could be handled in Flash. This can be done using a new instance of Netstream or accessing Nestream object directly from FLVPlayback.

Initial Steps for Unicode-enabling Microsoft C/C++ Source

Clarify string lengths in API as byte or character counts. For character-based display or printing (as opposed to GUI which is pixel-based) use column counts, not byte or character.

Replace character pointer arithmetic with GetNext style, as characters may consist of more than one Unicode code unit.

Watch buffer size and buffer overflows- changing encodings may require either larger buffers or limiting string lengths. If character size changes from 1 byte to as many as 4 bytes, and string length was formerly 20 characters and 20 bytes, either expand the string buffer(s) from 20 to 80 bytes or limit the string to 5 characters (and therefore 20 bytes). Note maximum buffer expansion may be constrained (for example to 65 KB). Reducing string length to a fixed number of characters may break existing applications. Limiting strings to a fixed byte length is dangerous. For example, allowing any string that fits into 20 bytes. Simple operations such as uppercasing a string may cause it to grow and exceed the byte length.

Replace functions that accept or return arguments of a single character, with functions that use strings instead. (International) Operations on a single character may result in more than one code point being returned. For example, upper('ß') returns "SS".

Use wmain instead of main. The environment variable is then _wenviron instead of _environ.

wmain( int argc, wchar_t *argv[ ], wchar_t *envp[ ] ).

MFC Unicode applications use wWinMain as the entry point.

In the Output page of the Linker folder in the project's Property Pages dialog box, set the Entry Point symbol to wWinMainCRTStartup.

Consider fonts. Identify the fonts that will render each language or script used.

File I/O, Database, Transfer Protocol Considerations

Consider whether to read/write UTF-8 or UTF-16 in files, databases, and for data exchange.

Consider Endian-ness in UTF-16 files.

Read/Write Big-Endian on networks. Use Big-Endian if you don't produce a BOM.

Endian-ness of files will depend on the file format and/or the architecture of the source or target machine.

When reading files encoded in UTF-16 or UTF-32, be prepared to swap-bytes to convert endian-ness.

Also consider streams and transfer protocols and the encoding used in each.

Label files or protocols for data exchange with the correct character encoding. E.g. set HTTP, HTML, XML to UTF-8 or UTF-16.

Consider Unicode BOM (Byte Order Marker) and whether it should be written with data. Remove it when reading data.

Note that the Unicode schema changes will have different impacts and concerns on different vendors' databases. If database portability is a requirement, the features and behaviors of each database need to be taken into account.

(I know this item is seriously understated. To be expanded sometime in the future.)

Stream I/O

Streams are difficult in Microsoft C++. You may run into 3 types of problems:

Unicode filenames are not supported. The workaround is to use FILE * _wfopen and if needed, use the FILE handle in subsequent stream I/O.

std::ifstream stm(_wfopen(pFilename, L"r"));

Stream I/O will convert Unicode data from/to native (ANSI) code page on read/write, not UTF-8 or UTF-16. However the stream class can be modified to read/write UTF-8. You can implement a facet to convert between Unicode and UTF-8.

codecvt <wchar_t, char_traits <wchar_t> >

To read/write UTF-16 with stream I/O, use binary opens and binary I/O. To set binary I/O:

_setmode( _fileno( stdin ), _O_BINARY );

Also see the Microsoft run-time library reference: "Unicode Stream I/O in Text and Binary Modes".

Note: There aren't TCHAR equivalents for cout/wcout, cin/wcin, etc. You may want to make your own preprocessor definition for "tout", if you are compiling code both ways.

Reconsider doing this on your own. Bring in an experienced Unicode consultant, and deploy your existing resources on the tasks they do best. (Hey, an I18nGuy's gotta earn a living...)

Unicode BOM Encoding Values

Encoding Form

BOM Encoding

UTF-8

EF BB BF

UTF-16

(big-endian)

FE FF

UTF-16

(little-endian)

FF FE

UTF-16BE, UTF-32BE

(big-endian)

No BOM!

UTF-16LE, UTF-32LE

(little-endian)

No BOM!

UTF-32

(big-endian)

00 00 FE FF

UTF-32

(little-endian)

FF FE 00 00

SCSU

(compression)

0E FE FF

The Byte Order Marker (BOM) is Unicode character U+FEFF. (It can also represent a Zero Width No-break Space.) The code point U+FFFE is illegal in Unicode, and should never appear in a Unicode character stream. Therefore the BOM can be used in the first character of a file (or more generally a string), as an indicator of endian-ness. With UTF-16, if the first character is read as bytes FE FF then the text has the same endian-ness as the machine reading it. If the character is read as bytes FF FE, then the endian-ness is reversed and all 16-bit words should be byte-swapped as they are read-in. In the same way, the BOM indicates the endian-ness of text encoded with UTF-32.

Note that not all files start with a BOM however. In fact, the Unicode Standard says that text that does not begin with a BOM MUST be interpreted in big-endian form.

The character U+FEFF also serves as an encoding signature for the Unicode Encoding Forms. The table shows the encoding of U+FEFF in each of the Unicode encoding forms. Note that by definition, text labeled as UTF-16BE, UTF-32BE, UTF-32LE or UTF-16LE should not have a BOM. The endian-ness is indicated in the label.

For text that is compressed with the SCSU (Standard Compression Scheme for Unicode) algorithm, there is also a recommended signature.

Constant and Global Variables

ANSI

Wide

TCHAR

EOF

WEOF

_TEOF

_environ

_wenviron

_tenviron

_pgmptr

_wpgmptr

_tpgmptr

Data Types

ANSI

Wide

TCHAR

char

wchar_t

_TCHAR

_finddata_t

_wfinddata_t

_tfinddata_t

__finddata64_t

__wfinddata64_t

_tfinddata64_t

_finddatai64_t

_wfinddatai64_t

_tfinddatai64_t

int

wint_t

_TINT

signed char

wchar_t

_TSCHAR

unsigned char

wchar_t

_TUCHAR

char

wchar_t

_TXCHAR

L

_T or _TEXT

LPSTR

(char *)

LPWSTR

(wchar_t *)

LPTSTR

(_TCHAR *)

LPCSTR

(const char *)

LPCWSTR

(const wchar_t *)

LPCTSTR

(const _TCHAR *)

LPOLESTR

(For OLE)

LPWSTR

LPTSTR

Platform SDK String Functions

There are many Windows API that compile into ANSI or Wide forms, depending on whether the symbol UNICODE is defined. Modules that operate on both ANSI and Wide characters, need to be aware of this. Otherwise, using the Character Data Type-independent name requires no changes, just compile with the symbol UNICODE defined.

The following list is by no means all of the Character Data Type-dependent API, just some character and string related ones. Look in WinNLS.h for some code page and locale related API.

Thursday, March 05, 2009

BDTI explains how video codecs like MPEG-4 and H.264 work, and how they differ from one another. It also explains the demands codecs make on processors.This article assumes a basic understanding of video compression algorithms. For an introduction to video coders, see How video compression works.