Archive - Nov 2007 - Blog entry

Date

Microformats' use in Drupal

I'm participating in The Google Highly Open Participation Contest, I will work on Drupal because I'm one of it's users and it be nice if I can understand it's internal and work on it. Amazing for college essay xD.

This is a draft for my first task, Research Microformats and recommend ways they could be used in Drupal.
Microformats are a format based on the common XHTML. There are a few popular Microformats recommendation (I refuse to call it a standard) specifications, most notable are hCard, XFN, hCalendar and XOXO.

XFN

what is XFN

XFN are the most likely to be useful to Drupal(and the entire internet). Out going links are unavoidable part of every site, XFN is made to show the human to human relationship instead of content to content relationship of the out going link by adding rel="tag1 tag2 ... tagn".
I don't know if XFN can be extended, the background for XFN suggest there are a standard set of XFN rel tags [Friend, Acquaintance, Contact, Met, Co-worker, Colleague, Co-resident, Neighbor, Child, Parent, Sibling, Spouse, Kin, Muse, Crush, Date, Sweetheart, Me].

why is it useful for Drupal

XFN is already used by Wordpress in it's blogroll, I believe it can also be used in the same way in Drupal for these few reasons:
1. In the future, search engines might recognize XFN and map out the relationship between 2 links. Thus construct a social map of related people's sites.
2. Superfluous introduction of links to the reader. For example
<a href="http://kuzew.net:81">My colleague and friend Kuzew's site</a>
can be changed to
<a href="http://kuzew.net:81" rel="friend met colleague co-resident">kuzew's site</a>
any small javascript pop up can show up the information in the rel tag when mouse over.
3. A possibility of a module that aggregate all the links posted on the site and use the XFN information for easy browsing.
4. Map out each user's relationship

How to implement it

Outgoing links: XFN does not need to be implemented in the core because there is no core module used for creating out going links; however, it's nice to use it for modules like Links or CCK. XFN can construct it's own taxonomy group, where each one of the possible descriptions are tags.

There are suggestions to implement XFN in the core. Users can tag other users with their relationship. It's really complicated. Different user have different relationship to the same person. XFN did not say it should be in one domain to refer to another, but one node refer to another, but search engines are stupid and get confused easily, it's likely the search engine assumes a site is owned by one person, and 2 user pages link to each other does not make sense to the bots [opinion, might not be true, but this did confused me and I believe I'm smarter than bots.]. Even if the search engines are smart, mapping out the relationship between users are costly, a new table have to be provided to do the relationship linking. I don't believe most Drupal users need a social map and genealogy, that feature is best used as a contribute module.

hCard

What is hCard?

hCard is a microformats used to show profile of a person or a object.

How is it useful to Drupal?

1. hCard can be a extended part of each user's profile.
2. hCard as part of the site information

Examples

A uber basic hCard

<div id="hcard-Chao-Xu" class="vcard">
 <span class="fn">Chao Xu</span>
 <div class="org">Mgccl's Blog</div>
 <div class="adr">
  <div class="street-address">123 fake street</div>
 </div>
</div>

hCard is contained inside a div, The div id starts with "hcard", follows by the full name of the user, use hyphens instead of space. The id is not required. the class for the DIV is vcard, it shows this is a hCard that follows the vCard, it's required so parsers understand this as a hCard.
Each node's in the hCard indicates what type of information it contains. for example, fn contain the full name.
Visit the wiki to see the full specification for hCard

How to implement it

The site information can be directly built into the core, adding a few more field to the original site information page and tweak the output.
The user hCard should be a extension to the profile module, create fields(first name, last name, etc) for profile module. Then it will render the hCards inside the user profile pages. Since it creates field inside the profile module, the information on the hCard can be searched though the site.

XOXO

What is XOXO

XOXO is a outline format(not hugs and kisses), intended for describe each node of a list and allow easy rendering. The extension of the outline are done by embed definition list inside each list item.

Why is it useful for Drupal

0. Lists are more meaningful and easily aggregated in the future.
1. Book module's Outline
2. Outline of the taxonomy

How to implement it

Books module's book outline and the chapter outline can be done with XOXO. Description, url and title are 3 of the properties useful for the outline. just adding the following for each node in the list is enough

<dl>
      <dt>description</dt>
        <dd>snap some teaser or something...</dd>
</dl>

List of the taxonomy can be another application of XOXO, description of each category or tag can be embedded with XOXO. Best implemented in the core

There are no other places in the core requires XOXO, users might write posts embed XOXO, but like all other XHTML, user should not depend on core Drupal providing tools for posting, but rather write himself, use a WYSIWYG editor support microformats, or get a contributed filter with this supported.

Some simple rel attributes

What are the rel attributes

The family of rel attributes act as a simple description for links. The most famous one would be rel-nofollow, telling the search engine not to give the link any credit when ranking websites. rel-tag show the link as a tag, it has already implemented in Drupal 6. rel-license describe links connect to a license page.

Why is it useful for Drupal

1. rel-nofollow can fight spammers
2. rel-license provide information for bots

How to implement it

rel-nofollow should be part of the core for the comment module. and add a setting for global allow or disallow. Should be easy to add a rel="nofollow" condition(I assume... I don't know what handles external URLs...)
rel-license is not much useful for the core because most sites only link one license at the bottom of the page. but it should be implemented in the CCK, in case anyone uses CCK to create a download site, then each page can have a license field.

Other notes

XFN, rel-nofollow, rel-license and rel-tag all embed themselves inside the rel attribute.
rel is a attribute for a collection of relationships of the linked document to the current one. They all describe the link in some way, XFN is different from the other ones. It describes the relationships between the owners of the documents instead of the document itself.

hCalendar

What is hCalendar

hCalendar is a format to explain a event in time.

Why is it useful for Drupal

Serve as a input/output format for event and calendar CCK, some softwares can interpret them.

Examples

<div class="vevent" id="hcalendar-Owning-noobs">
  <a class="url" href="http://mgccl.com">
    <abbr class="dtstart" title="2007-12-05">December 5th</abbr>, 
    <abbr class="dtend" title="2007-12-06"> 2007</abbr>
    <span class="summary">Owning noobs</span>&mdash; at 
    <span class="location">Long Island</span>
  </a>
  <div class="description">describe the event</div>
  <div class="tags">Tags: 
    <a href="http://eventful.com/events/tags/PWNING">PWNING</a>
    <a href="http://eventful.com/events/tags/NOOB">NOOB</a>
  </div>
</div>

The div class "vevent" defines this block uses hCalendar.
Like hCard, every container for the information are declared by it;s class attribute. All class attributes are obvious what it means. For the nodes contain time, the title attribute contains the ISO8601 time format. It's much easier for computer to read than "October 13th".

How it can be implemented

Clearly, it should work with Event module. Event module will add a page to import hCalendar into database, it can be separate and not depend on any Drupal scripts. Event's output on pages should also be hCalendar, that's all the changes the module should endure. The output are XHTML for each individual event page. Create a template and replace some variable would do.
Calender CCK could do the same.
Microformats parser could help with the parsing.

Some other microformats are in draft stage, it's not recommend for Drupal. hAtom is worth a mention, hAtom embed itself on normal XHTML, enables syndication. Personally I don't like that idea, it's better to create a separate Atom, saves bandwidth.

rel is not important enough for dedicated parameter in l(). l() are for internal links, the only internal link I found would use rel is the rel-tags. l() uses drupal_attributes() to add the attributes, adding a rel flag would be over kill.

The laws of the Great Firewall of China

in

The original post is in Chinese, I found it interesting enough to translate it.
The author, Fenng states 3 laws of the Great Firewall of China. GFW. If you know nothing about GFW, please read the article on wired.
First law of GFW: Site with User-generated content will be harmonized1
Second law of GFW: Any site got harmonized will have a cloned [and way worse] version in China [Benefiting people who have no imagination at making their own stuff].
Third law of GFW: The site does not get harmonized is never the most popular site in it's niche.

GFW have killed wikipedia, flickr and more. and it's influence is getting larger everyday. This have to be stopped. Everything the people in China see is what the government wants them to see. A lot of people still believe the country is in it's best shape. This can never be accomplished since most people in China don't have the balls to go against the government. It's understandable. Anyone who does so will not just danger himself, but everyone close to him.
Chinese stock market crashed this week, all my financial security... noooooo.

  1. 1. Technical term for removal of information consider disruptive to the sociality by the China communist government

miniBench, a open source benchmark

miniBench is part of OpenSourceMark, a open source benchmark project. Despite the sound of the name, its not platform independent(maybe the source code is cross platform). I have tried it in Windows and I don't know if the source will work without a OS.
miniBench mainly benchmark the CPU, but it also bench mark the I/O and memory.
miniBench's output is directly to the command line, so it's best if you use methods to capture the output to a file. Open command line and go to the directory containing minibench.exe, then type this
minibench>filename.txt
in command line, any program>filename will result writing the output to the a file. To append to the file, use >> instead of >.

and now, just wait. don't let the computer do any other process because it affects the accuracy of the benchmark.
Below is the Thinkpad T60 with a Core duo T2500 2GHz CPU and 1G ram. Faster CPUs have smaller elapsed time. The LCD looks strange doesn't it? Because once upon a time, alcohol was poured into it.

        *** SUMMARY  ***
=====================================
Aes encrypt 8kB test 	888.55
Aes decrypt 8kB test 	701.85
Aes encrypt 16kB test 	901.23
Aes decrypt 16kB test 	703.75
Aes encrypt 32kB test 	901.23
Aes decrypt 32kB test 	701.85
Aes encrypt 64kB test 	894.84
Aes decrypt 64kB test 	701.85
Aes encrypt 128kB test 	894.84
Aes decrypt 128kB test 	701.85
Aes encrypt 256kB test 	897.41
Aes decrypt 256kB test 	701.31
Aes encrypt 512kB test 	894.20
Aes decrypt 512kB test 	701.18
Aes encrypt 1,024kB test 	895.06
Aes decrypt 1,024kB test 	701.81
Aes encrypt 2,048kB test 	891.53
Aes decrypt 2,048kB test 	699.77
Aes encrypt 4,096kB test 	897.96
Aes decrypt 4,096kB test 	704.82
Aes encrypt 8,192kB test 	901.53
Aes decrypt 8,192kB test 	704.82
Aes encrypt 16,384kB test 	898.80
Aes decrypt 16,384kB test 	705.61
Dhrystone test 	1895.73
Double-precision floating-point arithmetic test 	1061.05
Fib( 43 ) test 	966.49
FFT test 	747.44
FlopsFpuFloatAdd (MFLOPS) 	324.08
FlopsSseFloatAdd (MFLOPS) 	1624.37
FlopsFpuFloatMul (MFLOPS) 	316.02
FlopsSseFloatMul (MFLOPS) 	1600.00
FlopsFpuFloatDiv (MFLOPS) 	61.80
FlopsSseFloatDiv (MFLOPS) 	233.78
FlopsSseFloatMulAdd (MFLOPS) 	2825.61
FlopsFpuDoubleAdd (MFLOPS) 	839.45
FlopsSse2DoubleAdd (MFLOPS) 	839.45
FlopsSse2DoubleAddMax (MFLOPS) 	877.51
FlopsFpuDoubleMul (MFLOPS) 	930.23
FlopsSse2DoubleMul (MFLOPS) 	853.79
FlopsSse2DoubleMulMax (MFLOPS) 	786.89
FlopsFpuDoubleDiv (MFLOPS) 	64.08
FlopsSse2DoubleDiv (MFLOPS) 	64.08
FlopsFpuDoubleMulAdd3 (MFLOPS) 	1428.57
FlopsSse2DoubleMulAdd (MFLOPS) 	1295.55
FlopsSse2DoubleMulAdd2 (MFLOPS) 	1536.00
FlopsSse2DoubleMulAdd3 (MFLOPS) 	1428.57
FlopsSse2DoubleMulAdd4 (MFLOPS) 	1545.89
FlopsSse2DoubleMulAdd5 (MFLOPS) 	1464.53
Heap sort test 	725.93
Integer arithmetic test 	887.82
Integer matrix multiplication test 	695.05
Linpack (FLOPS DP Rolled) 	1102.00
Linpack (FLOPS DP Unrolled) 	1105.00
Pi test 	857.37
Queen test 	989.29
Sha-1 small strings score 	972.97
Sha-1 50k string score 	995.02
Sha-1 1,000,000 string score 	998.64
Sha-1 10,000,000 score 	995.02
Sha-1 overall score 	1010.06
Sha-256 small strings score 	1130.96
Sha-256 50k string score 	1168.59
Sha-256 1,000,000 string score 	1176.72
Sha-256 10,000,000 score 	1173.69
Sha-256 overall score 	1160.85
Sieve test 	1070.96
String concatenation test 	830.00
Transcendental floating-point function test 	526.32
Whetstone test 	1170.96
I/O test 	24.90
Random Assignment test (MB/s) 	40.21
Stream copy bandwidth (MB/s)  	2123.91
Stream scale bandwidth (MB/s) 	2101.02
Stream add bandwidth (MB/s)   	2334.82
Stream triad bandwidth (MB/s) 	2334.95
Memory Bandwidth Integer Read test (MB/s) 	2414.73
Memory Bandwidth Integer Read Reverse test (MB/s) 	2285.71
Memory Bandwidth Integer Read BP64 test (MB/s) 	3977.53
Memory Bandwidth Integer Read PREFETCHNTA test (MB/s) 	4330.72
Memory Bandwidth Integer Write test (MB/s) 	1889.47
Memory Bandwidth Integer Write Unroll test (MB/s) 	1260.31
Memory Bandwidth Integer Copy test (MB/s) 	2197.50
Memory Bandwidth Integer Add test (MB/s) 	2370.37
Memory Bandwidth Integer Scale test (MB/s) 	2085.51
Memory Bandwidth Integer Triad test (MB/s) 	2359.65
Memory Bandwidth Integer Copy BP64 test (MB/s) 	1740.19
Memory Bandwidth Double Read test (MB/s) 	3250.71
Memory Bandwidth Double Read Reverse test (MB/s) 	2909.09
Memory Bandwidth Double Write test (MB/s) 	1314.49
Memory Bandwidth Double Copy test (MB/s) 	2204.46
Memory Bandwidth memcpy test (MB/s) 	2098.36
=====================================
=====================================
Total elapsed time: 594.67 s.

For the other computer, Dell Inspiron 1200 with Celeron M 1.4GHz and 256MB memory, it's way much poorer result.

         *** SUMMARY  ***
=====================================
Aes encrypt 8kB test 	596.52
Aes decrypt 8kB test 	486.51
Aes encrypt 16kB test 	626.39
Aes decrypt 16kB test 	489.37
Aes encrypt 32kB test 	624.89
Aes decrypt 32kB test 	490.35
Aes encrypt 64kB test 	624.79
Aes decrypt 64kB test 	490.29
Aes encrypt 128kB test 	624.89
Aes decrypt 128kB test 	489.37
Aes encrypt 256kB test 	596.85
Aes decrypt 256kB test 	488.86
Aes encrypt 512kB test 	624.83
Aes decrypt 512kB test 	488.92
Aes encrypt 1,024kB test 	620.79
Aes decrypt 1,024kB test 	487.11
Aes encrypt 2,048kB test 	620.79
Aes decrypt 2,048kB test 	487.17
Aes encrypt 4,096kB test 	625.27
Aes decrypt 4,096kB test 	470.79
Aes encrypt 8,192kB test 	625.27
Aes decrypt 8,192kB test 	489.63
Aes encrypt 16,384kB test 	624.57
Aes decrypt 16,384kB test 	491.07
Dhrystone test 	1280.00
Double-precision floating-point arithmetic test 	734.10
Fib( 43 ) test 	658.63
FFT test 	361.28
FlopsFpuFloatAdd (MFLOPS) 	208.96
FlopsSseFloatAdd (MFLOPS) 	868.15
FlopsFpuFloatMul (MFLOPS) 	206.45
FlopsSseFloatMul (MFLOPS) 	890.37
FlopsFpuFloatDiv (MFLOPS) 	41.51
FlopsSseFloatDiv (MFLOPS) 	162.29
FlopsSseFloatMulAdd (MFLOPS) 	1863.17
FlopsFpuDoubleAdd (MFLOPS) 	453.00
FlopsSse2DoubleAdd (MFLOPS) 	492.31
FlopsSse2DoubleAddMax (MFLOPS) 	602.26
FlopsFpuDoubleMul (MFLOPS) 	445.19
FlopsSse2DoubleMul (MFLOPS) 	457.14
FlopsSse2DoubleMulMax (MFLOPS) 	495.87
FlopsFpuDoubleDiv (MFLOPS) 	43.84
FlopsSse2DoubleDiv (MFLOPS) 	44.52
FlopsFpuDoubleMulAdd3 (MFLOPS) 	690.15
FlopsSse2DoubleMulAdd (MFLOPS) 	711.11
FlopsSse2DoubleMulAdd2 (MFLOPS) 	1041.21
FlopsSse2DoubleMulAdd3 (MFLOPS) 	975.61
FlopsSse2DoubleMulAdd4 (MFLOPS) 	1050.04
FlopsSse2DoubleMulAdd5 (MFLOPS) 	952.38
Heap sort test 	413.71
Integer arithmetic test 	459.98
Integer matrix multiplication test 	506.86
Linpack (FLOPS DP Rolled) 	567.00
Linpack (FLOPS DP Unrolled) 	559.00
Pi test 	590.96
Queen test 	687.82
Sha-1 small strings score 	674.46
Sha-1 50k string score 	695.32
Sha-1 1,000,000 string score 	688.47
Sha-1 10,000,000 score 	656.42
Sha-1 overall score 	692.07
Sha-256 small strings score 	785.62
Sha-256 50k string score 	802.67
Sha-256 1,000,000 string score 	815.67
Sha-256 10,000,000 score 	815.86
Sha-256 overall score 	804.27
Sieve test 	725.45
String concatenation test 	33.59
Transcendental floating-point function test 	399.07
Whetstone test 	813.45
I/O test 	16.93
Random Assignment test (MB/s) 	24.07
Stream copy bandwidth (MB/s)  	983.69
Stream scale bandwidth (MB/s) 	1036.84
Stream add bandwidth (MB/s)   	1199.33
Stream triad bandwidth (MB/s) 	1200.60
Memory Bandwidth Integer Read test (MB/s) 	1510.29
Memory Bandwidth Integer Read Reverse test (MB/s) 	1497.01
Memory Bandwidth Integer Read BP64 test (MB/s) 	2164.80
Memory Bandwidth Integer Read PREFETCHNTA test (MB/s) 	2200.00
Memory Bandwidth Integer Write test (MB/s) 	1004.02
Memory Bandwidth Integer Write Unroll test (MB/s) 	619.91
Memory Bandwidth Integer Copy test (MB/s) 	1065.53
Memory Bandwidth Integer Add test (MB/s) 	1179.71
Memory Bandwidth Integer Scale test (MB/s) 	998.07
Memory Bandwidth Integer Triad test (MB/s) 	1157.52
Memory Bandwidth Integer Copy BP64 test (MB/s) 	854.89
Memory Bandwidth Double Read test (MB/s) 	1793.52
Memory Bandwidth Double Read Reverse test (MB/s) 	1799.57
Memory Bandwidth Double Write test (MB/s) 	585.48
Memory Bandwidth Double Copy test (MB/s) 	1076.75
Memory Bandwidth memcpy test (MB/s) 	1006.86
=====================================
=====================================
Total elapsed time: 904.39 s.

My sister's laptop

=== miniBench benchmark version 1.0===
         *** SUMMARY  ***
=====================================
Aes encrypt 8kB test 	491.15
Aes decrypt 8kB test 	469.98
Aes encrypt 16kB test 	478.01
Aes decrypt 16kB test 	442.62
Aes encrypt 32kB test 	488.21
Aes decrypt 32kB test 	448.14
Aes encrypt 64kB test 	462.21
Aes decrypt 64kB test 	448.14
Aes encrypt 128kB test 	414.10
Aes decrypt 128kB test 	461.34
Aes encrypt 256kB test 	481.84
Aes decrypt 256kB test 	470.50
Aes encrypt 512kB test 	484.76
Aes decrypt 512kB test 	480.91
Aes encrypt 1,024kB test 	477.88
Aes decrypt 1,024kB test 	472.93
Aes encrypt 2,048kB test 	467.24
Aes decrypt 2,048kB test 	452.64
Aes encrypt 4,096kB test 	468.73
Aes decrypt 4,096kB test 	481.33
Aes encrypt 8,192kB test 	475.41
Aes decrypt 8,192kB test 	484.28
Aes encrypt 16,384kB test 	481.55
Aes decrypt 16,384kB test 	479.34
Dhrystone test 	1603.21
Double-precision floating-point arithmetic test 	1159.57
Fib( 43 ) test 	1333.60
FFT test 	538.92
FlopsFpuFloatAdd (MFLOPS) 	185.46
FlopsSseFloatAdd (MFLOPS) 	453.77
FlopsFpuFloatMul (MFLOPS) 	171.80
FlopsSseFloatMul (MFLOPS) 	287.30
FlopsFpuFloatDiv (MFLOPS) 	78.00
FlopsSseFloatDiv (MFLOPS) 	193.14
FlopsSseFloatMulAdd (MFLOPS) 	2485.44
FlopsFpuDoubleAdd (MFLOPS) 	379.87
FlopsSse2DoubleAdd (MFLOPS) 	236.34
FlopsSse2DoubleAddMax (MFLOPS) 	279.72
FlopsFpuDoubleMul (MFLOPS) 	371.57
FlopsSse2DoubleMul (MFLOPS) 	214.53
FlopsSse2DoubleMulMax (MFLOPS) 	389.61
FlopsFpuDoubleDiv (MFLOPS) 	82.31
FlopsSse2DoubleDiv (MFLOPS) 	95.32
FlopsFpuDoubleMulAdd3 (MFLOPS) 	810.13
FlopsSse2DoubleMulAdd (MFLOPS) 	505.21
FlopsSse2DoubleMulAdd2 (MFLOPS) 	759.49
FlopsSse2DoubleMulAdd3 (MFLOPS) 	707.44
FlopsSse2DoubleMulAdd4 (MFLOPS) 	488.36
FlopsSse2DoubleMulAdd5 (MFLOPS) 	1412.80
Heap sort test 	549.20
Integer arithmetic test 	360.28
Integer matrix multiplication test 	387.53
Linpack (FLOPS DP Rolled) 	827.00
Linpack (FLOPS DP Unrolled) 	813.00
Pi test 	456.84
Queen test 	967.82
Sha-1 small strings score 	814.92
Sha-1 50k string score 	839.37
Sha-1 1,000,000 string score 	824.74
Sha-1 10,000,000 score 	832.07
Sha-1 overall score 	844.27
Sha-256 small strings score 	1160.68
Sha-256 50k string score 	1238.79
Sha-256 1,000,000 string score 	1235.87
Sha-256 10,000,000 score 	1232.60
Sha-256 overall score 	1216.92
Sieve test 	890.98
String concatenation test 	581.44
Transcendental floating-point function test 	547.34
Whetstone test 	1194.74
I/O test 	87.18
Random Assignment test (MB/s) 	27.79
Stream copy bandwidth (MB/s)  	2083.04
Stream scale bandwidth (MB/s) 	1974.68
Stream add bandwidth (MB/s)   	1535.04
Stream triad bandwidth (MB/s) 	1569.99
Memory Bandwidth Integer Read test (MB/s) 	1721.17
Memory Bandwidth Integer Read Reverse test (MB/s) 	1692.41
Memory Bandwidth Integer Read BP64 test (MB/s) 	3072.75
Memory Bandwidth Integer Read PREFETCHNTA test (MB/s) 	2861.05
Memory Bandwidth Integer Write test (MB/s) 	1544.70
Memory Bandwidth Integer Write Unroll test (MB/s) 	1563.00
Memory Bandwidth Integer Copy test (MB/s) 	2026.86
Memory Bandwidth Integer Add test (MB/s) 	2051.28
Memory Bandwidth Integer Scale test (MB/s) 	1976.28
Memory Bandwidth Integer Triad test (MB/s) 	2051.28
Memory Bandwidth Integer Copy BP64 test (MB/s) 	1927.53
Memory Bandwidth Double Read test (MB/s) 	2039.26
Memory Bandwidth Double Read Reverse test (MB/s) 	2039.00
Memory Bandwidth Double Write test (MB/s) 	1231.34
Memory Bandwidth Double Copy test (MB/s) 	2097.40
Memory Bandwidth memcpy test (MB/s) 	2011.06
=====================================
=====================================
Total elapsed time: 712.45 s.

Convert MP3 to WMA for free in Windows XP

Only apply to Windows XP[Maybe Vista too but I can't be bothered to check].
I personally prefer MP3 because it's the more widely supported format for audio than WMA.
Yeah, I just got a computer my mom removed from me 2 years ago, it have a 40GB hard disk, with loads of crap on it, my music is 4GB. For old computers like this, the smaller the music file is better.
WMA is the best choice for the windows system, it's about half the size of MP3s but still maintain the same quality. But I did not find any free software to convert MP3 to WMA, Google search is filled with commercial crap. I have to give those webmasters credit for making crap in the first thousand results.
So after some search for the alternative, I found the exact program for the job. Who could be better at making softwares for WMA than Microsoft? After all, it's Windows Media Audio.
I'm not talking about burn MP3 to CDs and then use Windows Media player to rip it into WMA. It show good problem solving skill but it's also plain stupid.
Convert MP3 to WMA
There is a bonus pack for Windows Media Player released by Microsoft. The package is 18 MB and you only need the one program in it, MP3 Audio Converter LE.
I made a zip file of the "useful part"[1 MB], see the attachment of this post. I never tested without installation. Please be my tester.
idk if this is legal or not... but w/e, I will put it up here until Microsoft ask me to remove it.

If you want to download the 18MB version [or just because mine stripped down version does not work], get it from this link.

Are blog contests healthy?

Sites devoted about sharing contests, like My Blog Contest and The Prize Blog, features more and more blog contests.
The usual blog contests features these few requirements:
1. Blog about the contest with specific anchor text
2. Blog about the blog holding the contest with specific anchor text
3. Comment or use some other form of communication to let the contest creator know

Usually, a blog contest means:
1. More visitors
2. Better ranking in search engines for some specific keywords
3. Some visitors might subscribe to the blog

A huge amount of benefit can be brought of the contest starter.
How about the contestants?
How about the Internet?

The contestants spend one post just to describe a contest to gain a small chance in winning some small price. If the post is unrelated to their blog, some readers of the contestant's blog will not be happy.

The Internet is created for information1. The blog contests is a way to play with the search engine. Contests are bribing bloggers to review their blog, like PayPerPost. Even a small blog with no much potential in some keyword but with high incentive prize, it can be increased in search engine rank. Thus the readers will read some poor quality blog because the blog paid some money for it.
PayPerPost users got punished by Google. Google will figure out a way of attack blog contests.

  1. 1. I know the saying "Internet is for porn" but porn is information.
Honey Pot that kill bots