旭东 的个人资料东东的家照片日志列表更多 工具 帮助

日志


6月29日

面对酷暑,大家应该少上网,多参加社会活动

连日来气温有升无降,北京气温更超过40度大关,用电负荷1184万千瓦创入夏新高。炙热的空气是如此凝重,仿佛要将世界的一切都毁灭殆尽,而用电又是如此紧张,我们的相关部分在承受着巨大的供电压力,面对如此严峻的形势,身为守法公民,身为中华好儿女,我们不应袖手旁观,我们有义务也有能力为祖国做出自己应有的贡献。 

但是,身为一名程序员,我们仅仅是社会中最底层最微不足道的一份子,我们又能为国家做些什么呢?

答案很简单,既然司机同志们能够自觉自愿地按照尾号而“每周少开一天车”来严格要求自己,那么,我们这些程序员当然也可以通过“每周少上一天网”来减少社会资源的压力,为祖国的建设添砖加瓦了。 


要知道,每生产一部个人电脑需要相当于电脑重量十倍的矿物燃料和与其自重相仿的化学品,包括对人体有害的物质。相比之下,生产汽车和冰箱所需的矿物燃料只是其自重的一倍和两倍。而且全球目前每年要出售一亿三千万多部电脑,其大量能源消耗以及被废弃的电脑对环境和人体健康构成很大的威胁,就在此时此刻,因计算机问题而产生的各种废弃品也正在向土壤和地下水中不停的释放有毒物质。 

不止如此,互联上的错综复杂的内容,也极大的毒害着我们纯真的心灵。远的不说,仅以近期焦点访谈中高也同学的个人经历而言,我们也十分有必要减少对于互联网的依赖,以至最终彻底杜绝这类丑恶现象的发生。

哎!身为一名程序员,每每想到这些事情,我都不禁痛心疾首,自怨自艾起来。设想下,如果没有我们,没有网络,纵使社会将有小小的不便,但总体来说,我们的祖国将是多么的繁荣富强啊!祖国的青少年们将是多么纯真善良啊!

然而,为了我们这些人的个人利益,为了能给我们找份工作,祖国竟然一直容许着我们的存在,而每每主动替我们打扫那些因为我们而产生的不良信息,想到此处,我不禁潸然泪下。

庆幸的是,我国民众的眼睛是雪亮的,最新的网络民意调查格式被以新华及搜狐网为首的正义媒体所广泛采用,[ 完全赞成封杀google] ,即反对以google为代表的互联网不良信息率达到乃至超过了100% !具体请看下图:

00

天佑中华!俗话说得好啊,“自古奸佞倾社稷!岂有文章覆乾坤? ”,“从来大奸大恶辈,必是道貌岸然人”,可惜无论google多么狡诈,多么的蒙蔽群众,在我国正义的新闻及网络媒体面前始终不堪一击,终将自取灭亡。

然而,毕竟现今我们还在从事这低贱的营生,从事这有可能令某些人人心神不宁的活动,如果我们也仅仅学习“少开一天车”而“少上一天网”,那么每周也不过一天,零零散散的看不出的网络环境改善的实际效果,更不足以弥补当下那巨大的用电空缺。

因而鄙人将参考“少开一天车”的精神,而进一步发扬光大,聚零为整,化有限为无限——改“每周少上一天网”为“每年少上一月网”,进而“每年少上半年网”,直至实现“永远不再使用互联网及计算机”的伟大进步。

在这段时间内,为了尽可能减少互联网带来的已知及潜在危害,鄙人将采取“四不两没有一可能”的原则使用计算机,也就是——

面对有史以来最酷热的季节,无论是工作中或者生活中我都要做到“不关心一切网络事件、不浏览一切网络新闻、不排除一切网络故障、不开发一切网络程式——总之在这段时间内,就当世界上压根没有互联网及电脑这种东西,更没有必要帮助任何人或单位使用及接触互联网与电脑这种东西,相反可能会采取积极行动阻止身边的人或单位接触互联网及电脑 ”。

在以CCTV为代表的进步媒体的言传身教下,我意识到,在拥有世界上最强大网络防火墙及极品过滤软件的我国,即便我们这些蹩脚程序员全部歇业乃至统统滚蛋,也不会对社会产生任何不好的影响,相反会更加有利于社会的建设与发展。

在这些供电紧张的日子里,我们这些可有可无的废人,应该要——也有必要少看那些很黄很暴力的画面,少接触那些很傻很天真的信息,少受别有用心者的挑拨与利用;应该要——也有必要放弃上网及操作计算机的恶行,转而走上大街,多与同龄人聚会,多与大众沟通,多接触及团结进步青年,多关心时事,积极参与社会实践,为祖国的现代化事业添砖加瓦。

这样,我们就不会心神不宁的无所是从了,更不会沦落为不明真相的一小撮而不能自拔了,一言以括之——与其宅在家里,不如宅在街上。

___________________________________________________________________

系统自动生成的免责声明:


以上文章为[Java版文章自动生成系统]自动生成,软件作者利用Java Bot技术实现网站自动录入,全程无人为参与。其中符号、标点及中文语句皆为Random方式由自然语法库中检索采集而成。本文的诞生完全依赖于Java 平台及其衍生物[Java版文章自动生成系统],因而本文观点不能代表软件作者实际观点,软件作者使用此文更不代表软件作者支持或反对文中涉及内容,本文 仅作为但不限定于[Java版文章自动生成系统]使用示例之用。


软件作者将不对此文承担任何责任与义务,如有异议,请与Java平台供应商Oracle-Sun取得联系。


系統自動生成的免責聲明: 

以上文章為[Java版文章自動生成系統]自動生成,軟件作者利用Java Bot技術實現網站自動錄入,全程無人為參與。其中符號、標點及中文語句皆為Random方式由自然語法庫中檢索採集而成。本文的誕生完全依賴於Java 平台及其衍生物[Java版文章自動生成系統],因而本文觀點不能代表軟件作者實際觀點,軟件作者使用此文更不代表軟件作者支持或反對文中涉及內容,本文 僅作為但不限定於[Java版文章自動生成系統]使用示例之用。 

軟件作者將不對此文承擔任何責任與義務,如有異議,請與Java平台供應商Oracle-Sun取得聯繫。


免責事項を自動的に生成さ: 

この記事の[ Javaのバージョンについては、上記の記事は、自動的にシステムが生成]は自動的に、ソフトウェアの作者のサイトのJava技術ボット自動エントリー、 誰も全体のプロセスに関与を使用するように生成されます。どのシンボル、句読点や方法は、中国語の言語は、財務省からのコレクションを取得するためにラン ダムな自然な構文があります。この記事の誕生完全にJavaプラットフォームとその派生商品に依存しています[この記事のJavaバージョンを自動的にシ ステムを生成] 、したがって、この資料の表示は、ソフトウェアの作者の実用的なポイントの見解を示すことはできませんが、このソフトウェアの作者の著者もサポートした り、記事関係の内容に反対するソフトウェアという意味ではない、この資料を使用するように、この記事では、この記事はこれに限定されない[ Javaのバージョンを自動的にシステムが生成]の例を使用しています。 

異議があれば、Sun、 Oracle 、 Javaプラットフォームのプロバイダにお問い合わせくださいソフトウェアは、この資料には、著者は、すべての責任と義務を負うことはありません。


Automatically generated Disclaimer: 

The above article for the [Java version of the article automatically generated system] automatically generated, the software's author to use technology site Java Bot automatic entry, no one involved in the entire process. In which symbols, punctuation and the way the Chinese language are Random natural syntax to retrieve the collection from the Treasury. The birth of this article is totally dependent on Java platform and its derivatives [Java version of the article automatically generated system], and therefore can not represent the views of this article a practical point of view the software's author, the software's author to use this article the author also does not mean that software to support or oppose the contents of the article involved, this article only as but not limited to [Java version of the article automatically generated system] by the use of examples.

Software, this article the author will not assume any responsibilities and obligations, if any objections, please contact the Java platform provider to contact the Oracle-Sun.


Généré automatiquement Disclaimer: 

L'article ci-dessus pour l'[version Java de l'article généré automatiquement système] généré automatiquement, le logiciel de l'auteur à utiliser la technologie Java Bot site automatique, pas de celui en cause dans l'ensemble du processus. En ce qui les symboles, les signes de ponctuation et de la manière dont la langue chinoise sont aléatoires naturelles syntaxe pour récupérer la collection de la Trésorerie. La naissance de cet article est totalement dépendant de la plate-forme Java et de ses dérivés [Java version de l'article généré automatiquement système], et ne peut donc pas représenter les vues de cet article, un point de vue pratique, l'auteur du programme, l'auteur du programme à utiliser cet article, l'auteur ne signifie pas que le logiciel de soutenir ou de s'opposer au contenu de l'article en cause, cet article ne que, mais non limité à [Java version de l'article généré automatiquement système] par l'utilisation d'exemples. 

Software, cet article, l'auteur n'assume aucune des responsabilités et des obligations, si aucune objection, s'il vous plaît contacter le fournisseur de plate-forme Java, de prendre contact avec la base de données Oracle-Sun.


책임의 한계를 자동으로 생성 : 

문서의 [자바 버전은 위의 문서를 자동으로 시스템을 생성] 자동으로 소프트웨어의 저자는 자바 기술을 사이트 봇 자동 입력, 아무도 전체 과정에 참여를 사용하여 생성된. 어떤 기호, 구두점과 방법은 중국의 언어가 재무성에서 컬렉션 랜덤 천연 구문을 검색할 수있습니다. 이 문서의 탄생은 전적으로 자바 플랫폼과 그 파생 상품에 의존한다 [기사의 자바 버전이 자동으로 시스템을 생성], 따라서이 문서를 볼 소프트웨어의 저자의 실용적인 시점의 의견을 대변하지 못하면, 그 소프트웨어의 저자는 저자도 지원하거나 관련된 문서의 내용을 반대하는 소프트웨어 말은하지 않는 경우이 문서를 사용하려면이 문서는 문서의로 국한되지 않음 [자바 버전이 자동으로 시스템을 생성] 예제의 사용에 의해. 

이의가있는 경우, 오라클 - 썬은 자바 플랫폼 공급자에게 연락하여 문의하시기 바랍니다 소프트웨어,이 문서의 저자는, 어떤 책임과 의무를지지 않습니다.


Αυτόματα δημιουργείται Disclaimer: 

Το παραπάνω άρθρο για το [έκδοση Java του άρθρου αυτόματα σύστημα] αυτόματα δημιουργείται, το λογισμικό του συντάκτη της ιστοσελίδας να χρησιμοποιούν την τεχνολογία Java Bot αυτόματη θέση, κανείς δεν συμμετέχει στην όλη διαδικασία. Σε ποια σύμβολα, σημεία στίξης και τον τρόπο με τον οποίο η κινεζική γλώσσα είναι φυσικό Τυχαία σύνταξη, για να ανακτήσετε την είσπραξη από το ταμείο. Η γέννηση αυτού του άρθρου είναι εντελώς εξαρτώνται από την πλατφόρμα Java και των παραγώγων του [έκδοση Java του άρθρου αυτόματα συστήματος], και συνεπώς δεν μπορεί να εκφράζει τις απόψεις του παρόντος άρθρου πρακτική άποψη, το λογισμικό του συγγραφέα, το λογισμικό του συγγραφέα να χρησιμοποιήσει αυτό το άρθρο, ο συντάκτης επίσης δεν σημαίνει ότι το λογισμικό για την υποστήριξη ή αντιρρήσεις για το περιεχόμενο του άρθρου που συμμετέχουν, σε αυτό το άρθρο μόνο όπως όμως δεν περιορίζεται σε [έκδοση Java του άρθρου αυτόματα σύστημα] με τη χρήση παραδειγμάτων. 

Λογισμικό, το άρθρο αυτό ο συγγραφέας δεν φέρει καμία ευθύνες και τις υποχρεώσεις τους, αν υπάρχουν αντιρρήσεις, επικοινωνήστε με την πλατφόρμα Java παρόχου για να επικοινωνήσετε με την Oracle-Sun.


تلقائيا تنويه

المادة المذكورة أعلاه ل[جاوا نسخة من المادة تلقائيا نظام] تلقائيا ، برمجيات المؤلف إلى استخدام التكنولوجيا الموقع جافا بوت تلقائية دخول أي شخص متورط في العملية برمتها. فيها رموز وعلامات الترقيم الطريقة الصينية هي اللغة الطبيعية وتركيب برامج عشوائية ، لاستعادة وجمع من وزارة الخزانة. ولادة هذه المادة تعتمد اعتمادا كليا على منصة جافا ومشتقاته [جاوا نسخة من المادة تلقائيا نظام] ، وبالتالي لا يمكن أن تمثل آراء من هذه المادة وجهة نظر عملية البرمجيات مؤلف ، برمجيات المؤلف على استخدام هذه المادة البلاغ كما لا يعني أن البرامج لدعم أو معارضة مضمون المادة المعنية ، وهذه المادة فقط على سبيل المثال لا الحصر [جاوا نسخة من المادة تلقائيا نظام] عن طريق استخدام أمثلة على ذلك. 

البرمجيات ، وهذه المادة البلاغ لن تتحمل أية مسؤوليات والتزامات ، إن وجدت اعتراضات ، يرجى الاتصال لتوفير منصة جافا الاتصال أوراكل

___________________________________________________________________

为支持广大正义媒体的声音,抵制google恶行,减少互联网对社会的危害,鄙人自6月30日起决定自觉自愿的休网一月,博文更新也暂时停止到8月继续,特此声明。

5月18日

PCM文件格式简介

再存一个~ :)

PCM文件格式简介
PCM文件:模拟音频信号经模数转换(A/D变换)直接形成的二进制序列,该文件没有附加的文件头和文件结束标志。Windows的Convert工具可以把PCM音频格式的文件转换成Microsoft的WAV格式的文件。   脉冲编码调制PCM文件格式简介


          将音频数字化,其实就是将声音数字化。最常见的方式是透过脉冲编码调制PCM(Pulse Code Modulation) 。运作原理如下。首先我们考虑声音经过麦克风,转换成一连串电压变化的信号,如图一所示。这张图的横座标为秒,纵座标为电压大小。要将这样的信号转为 PCM 格式的方法,是使用三个参数来表示声音,它们是:声道数采样位数采样频率

         采样频率即取样频率,指每秒钟取得声音样本的次数。采样频率越高,声音的质量也就越好,声音的还原也就越真实,但同时它占的资源比较多。由于人耳的分辨率很有限,太高的频率并不能分辨出来。在16位声卡中有22KHz、44KHz等几级,其中,22KHz相当于普通FM广播的音质,44KHz已相当于CD音质了,目前的常用采样频率都不超过48KHz。 

        采样位数即采样值或取样值(就是将采样样本幅度量化)。它是用来衡量声音波动变化的一个参数,也可以说是声卡的分辨率。它的数值越大,分辨率也就越高,所发出声音的能力越强。
 
         声道数很好理解,有单声道和立体声之分,单声道的声音只能使用一个喇叭发声(有的也处理成两个喇叭输出同一个声道的声音),立体声的pcm可以使两个喇叭都发声(一般左右声道有分工) ,更能感受到空间效果。 
声波曲线1 声波曲线2 声波曲线3
  下面再用图解来看看采样位数和采样频率的概念。让我们来看看这几幅图。图中的黑色曲线表示的是pcm文件录制的自然界的声波,红色曲线表示的是pcm文件输出的声波,横坐标便是采样频率;纵坐标便是采样位数。这几幅图中的格子从左到右,逐渐加密,先是加大横坐标的密度,然后加大纵坐标的密度。显然,当横坐标的单位越小即两个采样时刻的间隔越小,则越有利于保持原始声音的真实情况,换句话说,采样的频率越大则音质越有保证;同理,当纵坐标的单位越小则越有利于音质的提高,即采样的位数越大越好。

          在计算机中采样位数一般有8位和16位之分,但有一点请大家注意,8位不是说把纵坐标分成8份,而是分成2的8次方即256份; 同理16位是把纵坐标分成2的16次方65536份; 而采样频率一般有11025HZ(11KHz),22050HZ(22KHz)、44100Hz(44KHz)三种。

 
样点
t1
t2
t3
t4
t5
t6
t7
...
t16
t17
t18
t19
t20
幅值
0011
0101
0111
1001
1011
1101
1110
...
0110
0110
0101
0011
0000


          那么,现在我们就可以得到pcm文件所占容量的公式:
     存储量=(采样频率*采样位数*声道)*时间/8(单位:字节数)

  例如,数字激光唱盘(CD-DA,红皮书标准)的标准采样频率为44.lkHz,采样数位为16位,立体声(2声道),可以几乎无失真地播出频率高达22kHz的声音,这也是人类所能听到的最高频率声音。激光唱盘一分钟音乐需要的存储量为:     
     (44.1*1000*l6*2)*60/8=10,584,000(字节)=10.584MBytes
这个数值就是pcm声音文件在硬盘中所占磁盘空间的存储量。

  计算机音频文件的格式决定了其声音的品质,日常生活中电话、收音机等均为模拟音频信号,即不存在采样频率和采样位数的概念,我们可以这样比较一下:
          44KHz,16BIT的声音称作:CD音质;
          22KHz、16Bit的声音效果近似于立体声(FM Stereo)广播,称作:广播音质;
          11kHz、8Bit的声音,称作:电话音质。 
          微软的WAV文件就是pcm编码的一种。


wav格式分析

wav文件格式分析详解

作者:曹京
日期:2006年7月17日
                                         

一、综述
    WAVE文件作为多媒体中使用的声波文件格式之一,它是以RIFF格式为标准的。
RIFF是英文Resource Interchange File Format的缩写,每个WAVE文件的头四个
字节便是“RIFF”。
    WAVE文件是由若干个Chunk组成的。按照在文件中的出现位置包括:RIFF WAVE
Chunk, Format Chunk, Fact Chunk(可选), Data Chunk。具体见下图:

 

------------------------------------------------
|             RIFF WAVE Chunk                  |
|             ID  = 'RIFF'                     |
|             RiffType = 'WAVE'                |
------------------------------------------------
|             Format Chunk                     |
|             ID = 'fmt '                      |
------------------------------------------------
|             Fact Chunk(optional)             |
|             ID = 'fact'                      |
------------------------------------------------
|             Data Chunk                       |
|             ID = 'data'                      |
------------------------------------------------
            图1   Wav格式包含Chunk示例

    其中除了Fact Chunk外,其他三个Chunk是必须的。每个Chunk有各自的ID,位
于Chunk最开始位置,作为标示,而且均为4个字节。并且紧跟在ID后面的是Chunk大
小(去除ID和Size所占的字节数后剩下的其他字节数目),4个字节表示,低字节
表示数值低位,高字节表示数值高位。下面具体介绍各个Chunk内容。
PS:
    所有数值表示均为低字节表示低位,高字节表示高位。

二、具体介绍
RIFF WAVE Chunk
    ==================================
    |       |所占字节数|  具体内容   |
    ==================================
    | ID    |  4 Bytes |   'RIFF'    |
    ----------------------------------
    | Size  |  4 Bytes |             |
    ----------------------------------
    | Type  |  4 Bytes |   'WAVE'    |
    ----------------------------------
            图2  RIFF WAVE Chunk

    以'FIFF'作为标示,然后紧跟着为size字段,该size是整个wav文件大小减去ID
和Size所占用的字节数,即FileLen - 8 = Size。然后是Type字段,为'WAVE',表
示是wav文件。
    结构定义如下:
 struct RIFF_HEADER
 {
  char szRiffID[4];  // 'R','I','F','F'
  DWORD dwRiffSize;
  char szRiffFormat[4]; // 'W','A','V','E'
 };

 

Format Chunk
    ====================================================================
    |               |   字节数  |              具体内容                |
    ====================================================================
    | ID            |  4 Bytes  |   'fmt '                             |
    --------------------------------------------------------------------
    | Size          |  4 Bytes  | 数值为16或18,18则最后又附加信息     |
    --------------------------------------------------------------------  ----
    | FormatTag     |  2 Bytes  | 编码方式,一般为0x0001(详见后文)     |     |
    --------------------------------------------------------------------     |
    | Channels      |  2 Bytes  | 声道数目,1--单声道;2--双声道       |     |
    --------------------------------------------------------------------     |
    | SamplesPerSec |  4 Bytes  | 采样频率                             |     |
    --------------------------------------------------------------------     |
    | AvgBytesPerSec|  4 Bytes  | 每秒所需字节数                       |     |===> WAVE_FORMAT
    --------------------------------------------------------------------     |
    | BlockAlign    |  2 Bytes  | 数据块对齐单位(每个采样需要的字节数) |     |
    --------------------------------------------------------------------     |
    | BitsPerSample |  2 Bytes  | 每个采样需要的bit数                  |     |
    --------------------------------------------------------------------     |
    |               |  2 Bytes  | 附加信息(可选,通过Size来判断有无) |     |
    --------------------------------------------------------------------  ----
                            图3  Format Chunk

    以'fmt '作为标示。一般情况下Size为16,此时最后附加信息没有;如果为18
则最后多了2个字节的附加信息。主要由一些软件制成的wav格式中含有该2个字节的
附加信息。
    结构定义如下:
 struct WAVE_FORMAT
 {
  WORD wFormatTag;
  WORD wChannels;
  DWORD dwSamplesPerSec;
  DWORD dwAvgBytesPerSec;
  WORD wBlockAlign;
  WORD wBitsPerSample;
 };
 struct FMT_BLOCK
 {
  char  szFmtID[4]; // 'f','m','t',' '
  DWORD  dwFmtSize;
  WAVE_FORMAT wavFormat;
 };

补充头文件样例说明:

首先是一串“52 49 46 46”这个是Ascii字符“RIFF”,这部分是固定格式,表明这是一个WAVE文件头。
然后是“E4 3C 00 00”,这个是我这个WAV文件的数据大小,记住这个大小是包括头文件的一部分的,包括除了前面8个字节的所有字节,也就等于文件总字节数减去8。这是一个DWORD,我这个文件对应是15588。
然后是“57 41 56 45 66 6D 74 20”,也是Ascii字符“WAVEfmt”,这部分是固定格式。
然后是PCMWAVEFORMAT部分,可以对照一下上面的struct定义,首先就是一个WAVEFORMAT的struct。
随后是“10 00 00 00”,这是一个DWORD,对应数字16,这个对应定义中的Sizeof(PCMWAVEFORMAT),后面我们可以看到这个段内容正好是16个字节。
随后的字节是“01 00”,这是一个WORD,对应定义为编码格式“WAVE_FORMAT_PCM”,我们一般用的是这个。
随后的是“01 00”,这是一个WORD,对应数字1,表示声道数为1,这是个单声道Wav。
随后的是“22 56 00 00”,这是一个DWORD,对应数字22050,代表的是采样频率22050。
随后的是“44 AC 00 00”,这是一个DWORD,对应数字44100,代表的是每秒的数据量。
然后是“02 00”,这是一个WORD,对应数字是2,表示块对齐的内容,含义不太清楚。
然后是“10 00”,这是一个WORD,对应WAVE文件的采样大小,数值为16,采样大小为16Bits。
然后是一串“64 61 74 61”,这个是Ascii字符“data”,标示头结束,开始数据区域。
而后是数据区的开头,有一个DWORD,我这里的字符是“C0 3C 00 00”,对应的十进制数为15552,看一下前面正好可以看到,文件大小是15596,其中到“data”标志出现为止的头是40个字节,再减去这个标志的4个字节正好是15552,再往后面就是真正的Wave文件的数据体了,头文件的解析就到这里。


Fact Chunk
    ==================================
    |       |所占字节数|  具体内容   |
    ==================================
    | ID    |  4 Bytes |   'fact'    |
    ----------------------------------
    | Size  |  4 Bytes |   数值为4   |
    ----------------------------------
    | data  |  4 Bytes |             |
    ----------------------------------
            图4  Fact Chunk

    Fact Chunk是可选字段,一般当wav文件由某些软件转化而成,则包含该Chunk。
    结构定义如下:
 struct FACT_BLOCK
 {
  char  szFactID[4]; // 'f','a','c','t'
  DWORD  dwFactSize;
 };

 

Data Chunk
    ==================================
    |       |所占字节数|  具体内容   |
    ==================================
    | ID    |  4 Bytes |   'data'    |
    ----------------------------------
    | Size  |  4 Bytes |             |
    ----------------------------------
    | data  |          |             |
    ----------------------------------
             图5 Data Chunk

    Data Chunk是真正保存wav数据的地方,以'data'作为该Chunk的标示。然后是
数据的大小。紧接着就是wav数据。根据Format Chunk中的声道数以及采样bit数,
wav数据的bit位置可以分成以下几种形式:
    ---------------------------------------------------------------------
    |   单声道  |    取样1    |    取样2    |    取样3    |    取样4    |
    |           |--------------------------------------------------------
    |  8bit量化 |    声道0    |    声道0    |    声道0    |    声道0    |
    ---------------------------------------------------------------------
    |   双声道  |          取样1            |           取样2           |
    |           |--------------------------------------------------------
    |  8bit量化 |  声道0(左)  |  声道1(右)  |  声道0(左)  |  声道1(右)  |
    ---------------------------------------------------------------------
    |           |          取样1            |           取样2           |
    |   单声道  |--------------------------------------------------------
    | 16bit量化 |    声道0    |  声道0      |    声道0    |  声道0      |
    |           | (低位字节)  | (高位字节)  | (低位字节)  | (高位字节)  |
    ---------------------------------------------------------------------
    |           |                         取样1                         |
    |   双声道  |--------------------------------------------------------
    | 16bit量化 |  声道0(左)  |  声道0(左)  |  声道1(右)  |  声道1(右)  |
    |           | (低位字节)  | (高位字节)  | (低位字节)  | (高位字节)  |
    ---------------------------------------------------------------------

    ---------------------------------------------------------------------
                         图6 wav数据bit位置安排方式

    Data Chunk头结构定义如下:
    struct DATA_BLOCK
 {
  char szDataID[4]; // 'd','a','t','a'
  DWORD dwDataSize;
 };

 

FormatTag:说明

#define WAVE_FORMAT_UNKNOWN 0x0000 /* Microsoft Corporation */ 
#define WAVE_FORMAT_PCM 0x0001     /* Microsoft Corporation */ 
#define WAVE_FORMAT_ADPCM 0x0002   /* Microsoft Corporation */ 
#define WAVE_FORMAT_ALAW 0x0006    /* Microsoft Corporation */ 
#define WAVE_FORMAT_MULAW 0x0007   /* Microsoft Corporation */ 
#define WAVE_FORMAT_GSM610 0x0031  /* Microsoft Corporation */ 
#define WAVE_FORMAT_MPEG 0x0050   /* Microsoft Corporation */ 


三、小结
    因此,根据上述结构定义以及格式介绍,很容易编写相应的wav格式解析代码。
这里具体的代码就不给出了。

 

四、参考资料
    1、李敏, 声频文件格式WAVE的转换, 电脑知识与技术(学术交流), 2005.
    2、http://www.codeguru.com/cpp/g-m/multimedia/audio/article.php/c8935__1/
    3、http://www.smth.org/pc/pcshowcom.php?cid=129276

    4、http://icculus.org/SDL_sound/downloads/external_documentation/wavecomp.htm (英文详细说明)



恩,抢过来,这样就不会丢了~

9月16日

编程八荣八耻...

以动手实践为荣 , 以只看不练为耻;
以打印日志为荣 , 以单步跟踪为耻;
以空格缩进为荣 , 以制表缩进为耻;
以单元测试为荣 , 以人工测试为耻;
以模块复用为荣 , 以复制粘贴为耻;
6月7日

成为最牛程序员的五大要诀

想成为最牛程序员吗?以下几点有助你实现这个目标。

Tip 1 要方法而不是记忆

我的一个程序员朋友常跟我说记住超过200个C++函数是多么的有帮助。“我从来不必去查找函数的定义,因此我可以比其他程序员编程快上50%。”他自豪的说。可结果是什么?难道他不知道编译器的代码自动完成功能可以节约大量查找函数及输入函数的时间吗,另外当C#发布出来后,他在记忆函数上面的努力就白费了。当然,编程中对函数的熟记是一件必需的事情,但是你应当花费更多的时间在学习做事的方法上,比如说创建一个数据库连接,如何产生RSS源等,然后是关注于代码是如何实现的。学习做事的正确方法远比死记硬背重要。

Tip 2 建立属于你自己的资源库

我们都会有因为这样或者那样原因而不得不建立的代码集。我从来不记得连接数据库的准确代码语句,所以我每次都不得不在代码集中花10分钟去查询它。为了解决这个问题,我创建了一个用于记录代码片段的Word文档,以帮助我记忆和查找。我的一个朋友建了个记录链接的书签,另外一个朋友在他的邮件中存储了这些内容。无论你的方法是什么,都是一种可以使你方便查找到文件或内容的好习惯。当你建立你的知识库后,你会发现它将极大的帮助你去把代码写得更好和更快。

Tip 3 知道做什么而不是怎样做

很多初级程序员问我“我怎样做这个,或者我怎样做那个?”我总是会跟他们说“你想做什么呢?”听闻此言后,他们会死盯着我,就好像我跟他们的妈妈约会了一样。这就是我的下一个观点,绝不要在知道你想做什么之前去学习怎样做,比如一个程序员想要搜索一个文本文件中是否存在的某个特定的词汇。下面是用C#来实现该目的:

string fileContent;
System.IO.FileStream myStream = new FileStream("c:\\aa.txt", FileMode.Open);
System.IO.StreamReader myStreamReader = new StreamReader(myStream); 
fileContent = myStreamReader.ReadToEnd();
myStreamReader.Close();
int idx = fileContent.
IndexOf("string"); 
if (idx)
{
return true
}

现在我给他这些代码去做这件事,但是更重要的是理解自己正在试着做的是什么。在这个例子中我们想做的是:
1. 打开一个文件
2. 读其中的内容
3. 关闭文件
4. 搜索字串
5. 如果找到了则输出结果
用这个方法来解决事情产生了以下结果:
1. 它使语言无关
2. 使你的精力集中在需要做什么上
3. 使你的代码更易读和有效
知道要做什么将使你的代码更有目的性。现在在C++、PHP、VB.NET、Ruby on Rails中编写上述代码是很容易的事情了,因为你理解了要做什么而不是怎样去做。

Tip 4 创建适合你的注释风格

每一个程序员都讨厌注释,但是为了写出更有质量和易读的代码,我们需要注释。问题是大多数程序员常被告知如何注释,一些公司希望每一行代码都有注释,另外一些则想要在每个函数前面有一段注释,还有的规定在不同的代码块前注释。我并不同意这种强制性的规定,只要代码是可用的、易读的和有效的,那么程序员应当可以用其个人喜好的格式来注释。对我来说在每一行都注释将破坏代码的节奏,我更喜欢在函数的前面注释,罗列我接下来一步步将要做什么,然后在函数中参考注释中所写的步骤进行编程。这是适合我的模式,这样可以在我编程前帮助我组织设计,也保持了我的节奏,使我不会因为需要注释而在编程时中断,也有助于其他人阅读我的代码。下面是我怎样注释的例子:

/* 1. Open File*   

2. Read file into string*   

3. Close file*   

4. Search for key word*   

5. If fond return true;  

*/  

string fileContent;   

//1.   

System.IO.FileStream myStream = new FileStream("c:\\aa.txt", FileMode.Open);   

System.IO.StreamReader myStreamReader = new StreamReader(myStream);   

//2.   

fileContent = myStreamReader.ReadToEnd();   

//3.   

myStreamReader.Close();    

//4.   

int idx = fileContent.IndexOf("string");   

if (idx)   

{   

//5.   

return true;   

}  

/* 1. Open File* 
2. Read file into string* 
3. Close file* 
4. Search for key word* 
5. If fond return true;
*/
string fileContent;
//1.
System.IO.FileStream myStream = new FileStream("c:\\aa.txt", FileMode.Open);
System.IO.StreamReader myStreamReader = new StreamReader(myStream);
//2.
fileContent = myStreamReader.ReadToEnd();
//3.
myStreamReader.Close(); 
//4.
int idx = fileContent.IndexOf("string");
if (idx)
{
//5.
return true;
}


这种注释风格使我和大多数程序员可以容易的阅读它。那么,找一个适合你的注释风格吧。

Tip 5 精通one,学习another,关注next

有时有程序员发email问我他应该学习什么语言,什么是最好的编程语言等等。你至少应该精通一门编程语言,可以相当好的去编写代码,然后再去学习掌握另外一门,逐渐的成长。以我自己为例,我精通C++,擅长C#,并且已经开始使用SHELL大概有一两个月了。为什么呢?精通一门语言可以使你进步,在进步中写更好的代码,找到完成任务更好的方法等。进步也是我作为一个程序员年复一年的工作,却仍没有觉得枯燥的原因。

3月28日

pragma宏

在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。
其格式一般为: #Pragma Para
其中Para 为参数,下面来看一些常用的参数。
(1)message 参数。 Message 参数是我最喜欢的一个参数,它能够在编译信息输出窗
口中输出相应的信息,这对于源代码信息的控制是非常重要的。其使用方法为:
#Pragma message(“消息文本”)
当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。
当我们在程序中定义了许多宏来控制源代码版本的时候,我们自己有可能都会忘记有没有正确的设置这些宏,此时我们可以用这条指令在编译的时候就进行检查。
假设我们希望判断自己有没有在源代码的什么地方定义了_X86这个宏可以用下面的方法
#ifdef _X86
#Pragma message(“_X86 macro activated!”)
#endif
当我们定义了_X86这个宏以后,应用程序在编译时就会在编译输出窗口里显示“_
X86 macro activated!”。我们就不会因为不记得自己定义的一些特定的宏而抓耳挠腮了
(2)另一个使用得比较多的pragma参数是code_seg。格式如:
#pragma code_seg( ["section-name"[,"section-class"] ] )
它能够设置程序中函数代码存放的代码段,当我们开发驱动程序的时候就会使用到它。
(3)#pragma once (比较常用)
只要在头文件的最开始加入这条指令就能够保证头文件被编译一次,这条指令实际上在VC6中就已经有了,但是考虑到兼容性并没有太多的使用它。
(4)#pragma hdrstop表示预编译头文件到此为止,后面的头文件不进行预编译。BCB可以预编译头文件以加快链接的速度,但如果所有头文件都进行预编译又可能占太多磁盘空间,所以使用这个选项排除一些头文件。
有时单元之间有依赖关系,比如单元A依赖单元B,所以单元B要先于单元A编译。你可以用#pragma startup指定编译优先级,如果使用了#pragma package(smart_init) ,BCB就会根据优先级的大小先后编译。
(5)#pragma resource "*.dfm"表示把*.dfm文件中的资源加入工程。*.dfm中包括窗体
外观的定义。
(6)#pragma warning( disable : 4507 34; once : 4385; error : 164 )
等价于:
#pragma warning(disable:4507 34) // 不显示4507和34号警告信息
#pragma warning(once:4385) // 4385号警告信息仅报告一次
#pragma warning(error:164) // 把164号警告信息作为一个错误。
同时这个pragma warning 也支持如下格式:
#pragma warning( push [ ,n ] )
#pragma warning( pop )
这里n代表一个警告等级(1---4)。
#pragma warning( push )保存所有警告信息的现有的警告状态。
#pragma warning( push, n)保存所有警告信息的现有的警告状态,并且把全局警告
等级设定为n。
#pragma warning( pop )向栈中弹出最后一个警告信息,在入栈和出栈之间所作的
一切改动取消。例如:
#pragma warning( push )
#pragma warning( disable : 4705 )
#pragma warning( disable : 4706 )
#pragma warning( disable : 4707 )
//.......
#pragma warning( pop )
在这段代码的最后,重新保存所有的警告信息(包括4705,4706和4707)。
(7)pragma comment(...)
该指令将一个注释记录放入一个对象文件或可执行文件中。
常用的lib关键字,可以帮我们连入一个库文件。
12月2日

为什么软件业盛产思想家

 一手缔造微软帝国的比尔·盖茨有着无数的头衔:技术天才、企业家、顶级富豪,未来的主要身份是慈善家。但是,不要忘记,盖茨在互联网起步之初的断言:“在互联网上,没有人知道你是一条狗。”这句俏皮话的风靡一时,概括了人们对他的两部著作(1995年出版的《未来之路》以及1999年出版的《未来时速——数字神经系统和商业思维》)的推崇。当年这种推崇绝不仅仅因为盖茨的传奇经历,而是作为“思想家”的盖茨在书中所表达的对未来数字世界的敏锐洞察。

  没错,盖茨是惟一的。但是,从技术精英到思想家的转变,几乎成为任何一个软件企业领航人的共同特质。做软件做到一定境界,必然对软件之外的世界产生深刻的观察和感悟(这些感悟和观察,通常是提炼自痛苦而兴奋的软件开发经历),由此诞生一大批思想家和他们的深刻论断。

  这是软件领域迄今依然在继续着的一个极其有意思的现象,也是其他任何一种技术领域所没有的风景。何以至此?其实,人们笼统称做“软件”的东西,其实不能算做纯粹的技术工具,而是技术和思想的“混合体”。同时,做软件是痛苦的过程。软件的成熟过程是在现实应用环境下不断试错的过程。

  称这些人为思想家不为过吧。在软件领域,思想家们的智慧之光,无处不在。从软件的生产过程到软件的销售、应用,几乎都有经典的论断。1975年出版的《人月神话》成为软件开发者的必读经典。它当年所提出的一系列软件开发过程中的核心问题(譬如“软件银弹”),迄今依然是软件业界无法逾越的不二法门。

  环顾国内软件业界,思想家亦不乏其人。东软总裁刘积仁老师说,软件是一种态度; 新中大总裁石钟韶说,ERP等于“数学”加“哲学”;金蝶国际主席徐少春形容,ERP应该像搭积木一样灵活组装;科诺软件总裁汪须忠主张,让软件生产过程实现工厂化;普元总裁刘亚东大声疾呼,构件是中国软件的新机会!

  与软件紧密相关的领域,就是国人所谓的“信息化”。众所周知,一般IT项目的硬件建设大体从纯技术角度考虑即可,基本等同于人体的骨架。而恰恰是承载了业务流程和管理制度、模式等内容的软件系统,则好比人体的大脑和神经系统,这也就是为什么信息化失败,最终往往发生在软件(应用系统)环节的原因。

  由于软件承载了人类的思想,因此事实的结果是,软件最终成为思想家的竞技场,只不过打造其兵器的材料都是程序行而已。

10月28日

关于书籍

今天花了一晚上时间整理我手头的书籍,理顺了一下学过的知识体系结构。把感觉不错的书都放到图书列表上了,并对每本书做上注解和介绍。希望自己能在迷茫的时候看看这些书。大多数图书都是关于C++,实时图形技术和游戏方面的,这也许跟我工作和研究的方向有关吧。以后再涉猎哪个领域,我会把相关的图书也放到这里。希望对自己和搞技术的朋友的水平提高有所帮助。
 
详细的书籍资料我放在图书列表里,有兴趣可以去看看~
10月19日

说一说编程的恶习

  想想N年前初学编程的时候, 书上, 网上, 杂志上不断的在说, 要养成良好的编程习惯。 然后还给出了N长的一大篇文章来介绍一些编程规范。 我这个人是很懒的,大概的看了一下就过去了。 没有特意的记什么。 好在我这个人也不是特别的懒, 对自己的工作也是很上心。 编程的时候尽可能做到更好。 性能功能能考虑到的都要做到最好。  慢慢的也养成了一些编程的习惯, 时间长了, 下意识的就去遵守一些模式,模范之类的东西了。
         有了这些习惯, 再看这次修改的系统, 真的是生可忍熟不可忍了。  这次我也不说什么编程规范了, 我就说说这些编程恶习 。
         一,  程序没有注释
       注释!!注释!!! 如果只是打印了一个HELLO WORLD, 您不注释那也就算了, 如果是只有一两百行的小功能类您不注释, 那我也忍了, 可是3000多行一个类的业务逻辑代码, 您老人家还不注释!!!   你TM让我怎么去改代码,  一点业务逻辑的说明都没有, 我改代码的时候,得一边用DEBUG调试, 一边替他加注释。 然后才能进行自己的工作。 几千行的一个类,  一行注释都没有, 你TM就不觉得颜色单调了点吗?
       二,  不遵守基本的编程约定
       变量名大小写混乱, 明明是变量, 非要完全大写, 要不就大写开头。 要不就是方法名全是大写, 最牛B的一个方法是用中文做方法名, 你丫这时候想起打中文来了, 累不累呀。
还有人用拼音做变量名方法名,就算您英文不好,稍微查一下金山词霸行不行,现在百度和GOOGLE都有翻译功能,稍微查一下英文,也当是学英语了行不行? 您实在太忙的话,不查也就算了,拼音就拼音吧,好赖也算是中国话的。 可是您就别用拼音简写了,英文简写还认不出来呢, 您还用拼音的开头字母当变量名, 那我TM上哪儿猜去呀!
三, 不明就里的代码
系统中经常会出现这样的代码,尤其是在controller里居多:
// some code
If(flag .equals(“submit”)){
model.getInfo();
}else{
model.getInfo();
}
我没写错,if和else调用的方法完全一样,大家也放心,我仔细的看过调用的代码,调用的方法里,也没有根据其它情况来改变他的运行路线。我就不明白为什么要做这个if判断了。担心会有什么特殊的业务逻辑, 所以也不赶随便去改他。 猜了半天,感觉最理想的答案是写代码的人,担心以后会有新的逻辑分支, 所以在这里用if预留了一个位置, 以后改的时候方便。
数日之后有幸遇见了当初写这代码的老兄,问过之后立刻晕倒,原来是这个代码是参照别的模块的样子写的,别的模块在这里都有N个程序分支,通过if来判断后决定调用哪个model里的方法。但他这个模块很简单,没有什么分支,就是调用那一个方法,但他写代码时,看别人的模块在这里都进行if判断了,所以觉得自己也应该判断一下,于是就出现了上面这样的代码。
四, 面向过程式的编程方法
遇到过好几次2000多行的方法,所有业务逻辑,一气呵成,就用了一个方法搞定。如果是简单的逻辑也就算了, 可是几千行的代码全放在一个方法里,一个类里有无数的重复代码。 这回到好,重构那本书没白看, 现在有了实践的机会了。
难道您自己调试的时候就不觉得麻烦吗? 我在这里不想讨论什么面向过程还是面向对象,也别和我说什么方法多了也不一定就是面向对象的思想。 平时对自己写的代码多上点心, 大家都是在这行干了几年的人了,把代码写的漂亮点有什么不好。
五, 代码缩进混乱
我们公司有规定,改代码的时候,不许修改原有代码的格式。 不管他多乱,也不许改。 我不明白这是为什么,也许是检查代码的人,要用文件比较工具吧。
但这下苦坏我了, 代码的格式那叫一个乱。 有顶着行头写的, 有向后空了N格的,大概是写代码的人, 为了方便自己找到正在调试的那段代码,所以把代码的缩进变得和其它代码与众不同吧。 那您调试完了到是重新排一下版呀, 这真的不累~~, 现在的IDE工具都有自动排版代码的功能, 一个快捷键就搞定了,稍微勤快一点行吗??
最BT的一段代码是缩进居然出了屏幕!!! 你吃饱了撑的呀, 没事缩那么远干吗, 我根据后台输出找了半天也没找到那段代码在哪儿, 原来是因为缩进的太远了,不在屏幕范围之内, 向右拉了半天滚动条才找到。 你丫是不是写着代码睡着了? 脸正好砸在TAB键上。
六, 多余的后台输出
好几个循环嵌套在一起~~~ 也行, 就算是因为业务逻辑需要,没别的办法也将就了。 好几个循环嵌套在一起查数据库, 咱们最好还是开动一下脑筋, 看看有什么更好的办法。如果还是没别的办法, 那也凑合了。 可这种情况您就别在后台输出SQL语句啦, 每次一执行程序,成百上千个SQL语句在后台输出, 查数据库才用了一两秒,结果输出这些SQL就用了半分钟。 您自己就没觉出程序慢在哪里吗? 您调试程序的时候输出一下也就算了, 提交到正式运行的环境时,就麻烦您,劳您大驾~~ 把那些输出注释掉吧,实在不行留几个重要的输出就行了。 让这种代码影响系统性能~~ 也太冤了吧。
七, 打肿脸充胖子
我也不知道这条算不算恶习,也许不算,在有些人眼里还是好事。但也要看具体情况,经常有些人写代码不喜欢用IDE,只用EDITPLUS这类工具。按常理说,初学者都应该尽量用这些编辑器写代码,对加深学习印象有好处。也有人说高手不屑于用那些IDE,我少见多怪, 这种绝顶高手我没见过。
但咱平时工作的时候,要的是效率,您不是那种高手就乖乖的用IDE吧。经常见到有些人,为查一个方法的调用,搜来搜去的。真正的高手是工作效率最高的人,不是用最简单工具的人。
今天就写这么多, 大家还遇到过什么样的编程恶习,欢迎补充。
大家不要总是抱怨什么工资太少,工作量太大。工作效率这玩意儿是要经验来做基础,这没错,经验少也没事。咱平时写程序的时候多上点心,多对自己的代码思考一下,多动动脑子。自然就能总结出最好的工作经验了,工作效率自然就提高了。
也别总是说什么STRUTS不好,HIBERNATE太慢,不屑去用它。人家的程序能在全世界流行,自然有他的过人之处。多读读他的代码,学习一下他到底好在哪里,如何才能把这些优点应用到自己的代码上。这才是最重要的。
写出上面这些代码的人,如果你的工资真的很少,那我只能惋惜的说一句:你的工资是可怜了点,但看您写的这代码,连这点工资都不应该给你!!
8月23日

GOOGLE和百度的变态域名

GOOGLE的变态域名:
http://www.mamashuojiusuannizhucedeyumingzaichanggoogledounengsousuochulai.cn/
  中文拼音:“妈妈说就算你注册的域名再长GOOGLE都能搜索出来”
然后百度也跟着注册了个:
http://www.mamashuojiusuannizhucedeyumingzaichangbaidudounengsousuochulai.cn/
  中文拼音:“妈妈说就算你注册的域名再长百度都能搜索出来”
 
呵呵 百度跟GOOGLE的竞争无处不在啊
另:国内有位高人,做个网站 叫百GOOGLE度 http://www.baigoogledu.com 把百度和GOOGLE集成到一个网页上,当用户输入一个关键字的时候,会同时显示GOOGLE和百度的搜索结果~ ! 大伙可以去用下哦,挺有意思。
 

看看你杀毒软件的能力吧

这段由欧洲防病毒协会提供的代码绝对值得大家一试:看看你杀毒软件的能力吧!

测试方法:

1.鼠标右键点击桌面空白处,创建一个“文本文档”。(什么,还不会建?我倒)

2.将下面这段测试代码复制到“文本”里,保存,然后可以直接右键点击这个文本,用杀毒软件扫描,也可以等一会,如果你的杀毒软件还行,会自动报毒并将该文本删除,那就可以初步放心了。

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

测试原理:

该段代码是欧洲计算机防病毒协会开发的一种病毒代码,其中的特征码已经包含在各种杀毒软件的病毒代码库里,所以可以用做测试病毒扫描引擎。

测试等级:

特等:复制完代码后便提示内存有病毒

优等:刚保存完就提示病毒(或者直接删除)

中等:保存后几秒提示病毒(或者直接删除)

下等:需自己启动病毒扫描查杀才提示病毒(或者直接删除)

劣等:无论怎么扫描都无法提示病毒(或者直接删除)

请大家测试完后评价下自己用的什么杀毒软件以及排什么等级,这篇文就好似中文杀毒软件评测文章了,,也可以惠及更多的人了。

8月3日

从SPCAES的域名想到的

现在这个空间有好几个域名(自己查的 肯定有更多的):
这几个其实都指向同一个空间。当一个名称访问不了的时候, 换一个就行了。

现在MS又推行LIVE策略了 以后第一个域名应该是最好访问的,最后一个域名应该是慢慢就淘汰了,访问不了的几率会大大增加。
MS这么做很为用户着想,用户在系统升级的同时不至于用老域名一下子访问不了空间,给了用户一个缓冲的机会。这么做看似没什么大不了的,可是从技术上看,空间的维护和设计都要比原来恐怕不止复杂一倍,管理的难度也要增加许多,而用户不需要为这些付出一分钱,这些恐怕是国内任何一个运营商都比不了的吧!而这些小的细节正反映了国内和国外的差距,国外的技术和用户体验都是一流的,而利润放在第二位--因为有了用户群和用户高度评价的产品是不会没有丰厚利润的,国内显然就要比国外的公司眼光短上很多了,这里就不批评某些国内公司了。
 
参与的项目的设计规划和管理中才发现,自己只是个毛毛虫,要变成蝴蝶点缀世界还需要很长时间很艰苦的修炼呢!戒骄戒躁,不做浮躁的人和事!
6月23日

百度八宗罪

总是有人说baidu是成功的。

的确,baidu在商业上是成功的。Nasdaq上市,中国使用人数最多的搜索引擎......

但是,当你看看baidu搜索出的内容,你就不能不承认,它的技术,它的道德取向,简直是一文不值!

baidu之罪一:对色情视而不见

百度贴吧,早就成为色情弥漫的场所,人称“百毒贴吧”!有人为之辩护,说是那里的管理员精力有限,无法及时审核。为此,我做了个小测试----在上面贴广告。结果呢?不到10分钟就立即被删除,而且每次实验结果都一样!也就是说,baidu的管理员是有足够精力的,只不过为了某些不可见人的目的,比如增加流量,而故意对色情内容“选择性失明”!足见baidu的本色!

baidu之罪二:同行不正当竞争

最近更是有传闻,说baidu从2002年(甚至更早)开始就利用各种不正当的手段打击google,包括通过各种渠道让ZF封锁,故意在google上搜索被过滤的关键字以使之无法正常访问等。

另有2005年1月21日,8848网站被baidu采用DDoS攻击,借助数千家baidu搜索联盟网站的巨大访问量恶意攻击8848,使其至少在26小时内无法访问。

2006年初,google.cn在美国加州开始运营,却有人暗中举报中国信息产业部,说google.cn没有获取ICP认证,涉嫌无照运营。尽管神秘人物的身份不明,但想想只有baidu可能受益......

baidu之罪三:抄,抄,还是抄

不仅是页面,google的业务几乎都被baidu给完整的抄了过来:google推出“地图服务”,baidu紧跟推出“百度地图”;google推出“桌面搜索”,baidu紧跟推出“百度硬盘搜索”;google推出“工具栏”,baidu紧跟推出“搜霸工具栏”;google推出“新闻快讯订阅”,baidu也接着有了“邮件新闻订阅”;google推出“Google Answers”,baidu就有了“百度知道”;google推出“AdSense”,baidu跟风出了“百度主体推广”......

baidu实在太能抄袭了,似乎就差GMail了,或许我们能在不远的将来看到BMail??或许,baidu的主要任务是:抄死google!拜托,baidu能不能有点新意阿??

baidu之罪四:竞价排名

不错,google也有自己的“竞价排名”,但是那里搜索出的网站都是列在页面顶部或右部,用户可以非常清楚地区分。当然,baidu没有那么“傻”,那里的排名就混杂在搜索结果中,只有baidu才知道。毕竟,对于一家上市公司恶言,金钱才是万能的嘛!哪里有google那样的“不为恶”那么单纯阿,呵呵!

baidu之罪五:侵犯版权

MP3搜索就是其中最引人注目的一个,占有baidu高达16%的流量(ALEXA统计结果)!而且,那里隐藏着一个巨大的秘密!!baidu很“聪明”,在MP3搜索上作了手脚,仅有来自中国的IP才能正常的搜索。如果以正常方式进行访问,搜索Titanic,baidu会返回1460个结果;然后给浏览器设置一个国外的代理服务器,再搜索Titanic,就不能返回任何结果。大家可以自己尝试一下!

baidu就是这么个彻头彻尾的大骗子,对国内唱片公司的指控就是“我是流氓我怕谁”,而对国外确实骗骗骗,这样的公司,为什么还要去用??!!

baidu之罪六:冒充中国公司

无耻之至的baidu,张口闭口就说自己的“民族企业”,比google“更懂中文”,还要厚颜无耻的说什么反百度就是不爱国,支持google就是卖国的!

但是,baidu真的是中国公司吗?首先,baidu在英属开曼群岛注册,创始人李彦宏持有美国绿卡,baidu的启动资金是美国的风险投资,目前美资在baidu中占有超过51%的股份,而baidu在中国注册全资子公司也不过是为了规避中国政府关于外资不能进入新闻广告等领域的法规。这样的公司也叫民族企业??!!准确的说,baidu是一家由华人创办的,专注于在华业务的美资搜索引擎技术公司!

baidu之罪七:流氓软件

为了获得更大的流量,开发了一个颇有争议的流氓软件-百度超级搜霸,百度公司称其能使用户的搜索更加方便,并且远离网页广告困扰。但有大量用户投诉百度超级搜霸强制安装、难以卸载,在不少论坛中,如何卸载百度超级搜霸插件经常成为热门话题,在2005年北京网络行业协会设立的“流氓软件”网络调查中,百度超级搜霸成为“流氓软件”排行榜前十名,和3721在人们心目中的地位相当,并被限令整改。

然而可笑的是,2006年的3月15日,百度居然贼喊捉贼,自己开通超级搜霸315举报网站。换句话说,以前的baidu会强奸一个网民七八次,但现在可能只强奸一次,在baidu眼里,它已经从良了!

人,不能无耻到这个地步!

baidu之罪八:收录网站的方式

baidu的爬虫是最勤劳的,每天都在不停的到处搜录新网站,而不是好网站。在月光博客上有个实验,不在其他网站做任何链接的新网站,向baidu和google提交页面后,一个月后baidu搜录了24900篇,而google为0。

这难道能说明baidu比google好么?绝对不是!百度这种“贪婪”爬虫抓取方法,虽然会让用户能够在百度搜索出一些Google里搜索不到的页面,但这实在是损人利己。其带给网站站长不少负面效果:服务器和带宽资源过度消耗,垃圾站被变相鼓励了,原创的有特色的网站则被边缘化,MP3音乐网站则更苦不堪言-自己的MP3被百度盗链后带来大量文件下载却没有带来页面访问。

因此,中国的网民也出现了很奇怪的现象:大量的新网民和菜鸟新手喜欢用百度搜索,因为百度往往搜索到很多别处搜索不到的页面,但内容的匹配度则令人质疑,而专业人士和老鸟则更喜欢用Google,个人站长则普遍和百度有“个人恩怨”。因此百度在业界的Blog以及社区中口碑都不太好,但在普通的低层次的网民心中却不错,这些大量的普通网民给百度带来了大量流量。

如果说google的宗旨是“Don't be evil”,那baidu的宗旨一定是:Just be evil!

旗帜鲜明的反对baidu!垃圾百度!
6月18日

吉祥三宝之研究生


爸爸
哎!
本科毕业就非得考研吗?
对啦!
不考研难道就没有出路吗?
哪有啊!
许多硕士生也相当郁闷啊!
接着读博嘛!
学士硕士博士就是吉祥的一家!
 
妈妈
哎!
病中的儿子何时能够回家?
等考研成了!
考不上难道你就不爱我吗?
去火葬场吧!
李嘉诚也就是小学毕业啊
少跟我废话!
硕士博士烈士就是吉祥的一家!
 
宝贝
啊?
爸爸像太阳照着妈妈!
那妈妈呢?
妈妈像绿叶托着红花!
那我呢?
你是考研无意识的苦瓜!
噢!明白啦!
考研盲从抑郁症就是吉祥如意的一家!

打油诗一首~

茫茫内存里,你我不曾相见;
寥寥代码中,命运注定良缘.
当编译开始,我们齐手共建
--中国软件的春天!
虽然我们是不同的对象,都有隐私的一面,
但我相信你会找到我的接口,把我的最真给你看!
因为我是你的指针,在茫茫内存的堆栈中,
永远指向你那片天空,不孜不倦!
我愿做你的内联,供你无限次的调用,直到海枯石烂!
我愿做你的引用,和你同进退共生死,一起经受考验!
只是我不愿苦苦地调试你的心情,最终沦为你的友元!
而我更不愿始乱终弃,删不清借你用的空间,
最后一拍两散,搞得内存混乱...
如今我们已被MFC封装--事事变迁!
如今我们已向COM走去--可想当年!

不知你可曾记得那已经褪色却仍然绽放光芒的三个字: API......
6月16日

手机辐射到底有多厉害???

就在前几天,美国联邦通讯委员会(FCC)发布了全球手机辐射排行榜,虽然目前还没有足够的证据表明手机辐射是否会导致大脑患病,但手机辐射的危害不言而喻,至于手机的辐射到底有多厉害,平时我们在使用的时候似乎很难感觉到,今天我们以国外网友的试验来了解一下手机辐射的利害。

选好鸡蛋


手机煮鸡蛋开始

  现在看到的是俄罗斯KP网站做的“手机煮鸡蛋”实验,他们要做的是通过手机的通话来煮熟鸡蛋,首先选择了一个鸡蛋放置在陶瓷的杯子里(易导热),之后在鸡蛋的两侧分别放置了两个手机,接着便进行了通话,在开始的15分钟里,鸡蛋似乎没有发生什么明显的变化,当通话进行到25分钟的时候,细微的变化产生了,鸡蛋壳开始发烫,进行到40分钟时鸡蛋表面开始变得更加脆硬,实验人员用手敲开之后发现里面的蛋白已经成固体状,但蛋黄还是呈稀松状,于是便继续进行到65分钟,就在这时整个实验结束,实验人员取下鸡蛋发现已经完全熟透。


可以吃了

  在没有烟火的情况下这种煮鸡蛋的方法的确是个不错的尝试,只是不知道用手机煮熟的鸡蛋味道是否依然鲜美。

5月15日

一个老程序员的自白

 

本来不想写的,实在不想看到某些人误人子弟,混淆视听,耽误了中国IT的未来,所以一吐为快
  

  一些人总是发出一些错误的声音,形成了劣胜优汰可怕的现象。他们在误导着中国,把我们的后继军训练成软件蓝领――――胸无大志,目光短浅,稍有点成绩就自满就自高自大的人,浑不知天外有天,外国正在虎视眈眈盯着中国的庞大市场。
  由于软件蓝领的呼声人们不再致力于培养大批的高精尖人才,掌握国际尖端技术的人。而是花费心思培训一群猪出来给外国人利用。把自己的命运交给了外国人手里。结果,在最容易的管理软件领域也输给外国人,外国人派几个人过来,利用中国的劳动力,开发出软件,再卖给中国。大量的利润到了外国人手里。而我们的中的一些人还在沾沾自喜:外国人给的工资高;外国的软件好。
  奴才!
  低品质产品是没人要的。软件蓝领也不例外。
  他们不知道中国制造一个优秀程序员的难度,还在患红眼病。程序员制造,你可算过成为一个程序的高昂代价?没日没夜地工作,没有女朋友,感情是一片沙漠,没有钱打工者的命运是悲惨的。
  真想知道究竟是哪个公司的程序员为了五十块钱跳槽,是哪个公司说需要软件蓝领。
  在马年,过春节,万家欢乐的时候,程序员们还在工作,用他们瘦弱的身躯,支撑起中国的软件工业。
  他们把不思进取比喻为工作稳定。
  国外可以在一个单位效力几十年。在国内不行。为什么?没有培训,没有上升机会。你被压榨完后就被扔掉。哪个有志向的人甘于这样的命运?
  中国的程序员是世界上最好的程序员。他们不计报酬,没日没夜地工作。没有女朋友,没有节假日,可能几年后他们一无所有。他们仍在加班。
  一、 程序员为什么要跳槽?有两个报道:
  1、“程序员为了五十块钱就跳槽”“万月月薪请不动程序员”“20%的程序员跳槽后都去了外企”
  2、印度的程序员比中国稳定。
  另有两个报道:
  1、 本科生去美国工作两年后即可年薪10万美元。当然,他们是加薪很快。
  2、 国外的企业都有培训。很吸引人。许多人是冲着培训去的。
  国外可以在一个单位效力几十年。在国内不行。为什么?没有培训,没有上升机会。你被压榨完后就被扔掉。哪个有志向的人甘于这样的命运?
  中国的程序员是世界上最好的程序员。他们不计报酬,没日没夜地工作。没有女朋友,没有节假日,可能几年后他们一无所有。他们仍在加班。
  有培训,就意味着你不会永远拿着现在的薪水。意味着你在不断进取,不断进步,能力越来越强,你就可以担当越来越重的工作,就可涨工资。给人看到未来。即使你对现在的薪水待遇不满意,你通过自身的辛勤不懈的努力和奋斗,就可达到你要的待遇。你不用嫉妒别人。只要你努力就可达到他甚至超过他。
  没培训,意味着不思进取,思想僵化,要被淘汰。没有希望,看不到未来。你注定被淘汰。别人通过拼捕获得的成功你就要嫉妒。因为你永远达不到那个高度。只有暗算他,把他拉下来,你才能达到心理的平衡。
  去外企,你可以看到一个光明的前途,你可以不断进步。路越走越宽。你在那个企业工作一段时间后,学到了很多东西。出来后你就是另外一个人。我曾经想去一个企业,不是因为他的工资高,而是他那里有培训,甚至送到国外培训,从他那里出来后可以当总经理。
  在国内,你的路会越走越窄,最终无路可走。因为你没有学习,落后于时代,再找到新工作都很难。
  国内公司只会大呼疾呼人才难留。他们没想过,他们是如何对待人才的,他们只会残酷剥削,搞政治斗争,整人。
  国内公司不去学习别人的先进的管理方法,反倒怨来怨去,浑不去找自己自身的原因。
1、 为什么要跳来跳去?
  因为在本公司内没有上升机会。
  中国程序员是艰苦的,也是聪明的。他们利用一切时间进行学习。就拿我来说,军训完毕后,离计算机机房下班只有十五分钟时间了。一口飞跑到机房,只有十分钟可以学习电脑。就这十分钟,也要利用上。
  当他们发现本公司没有培训机会,没有学习机会,可这一切又怎能挡得住前进的脚步?国内公司管理一般是很差的,员工没有成长机会和发展空间。唯一的办法就是跳槽。某人戏称,每跳一次,工资就要加一倍。就拿我来说,每跳一次工资也确实是加一倍。拼命学习获得了知识的高增长,个人的高速进步,这没错。而雇主能看上我,也确实是自己能力已经达到这个水平。但越来最后每跳一次的时间越长。也许是因为进步速度慢了吧。后来又有些后悔,跳来跳去没有根,人到了一定程度就要扎下根来,把一项技术搞透,就需要长时间的积累,反而又踏实下来了。
  所以说,那些不断跳来跳去的程序员,其实是仍在初级阶段,到了中级阶段基本就稳定下来了,在某一个细分方向上获得突破。但我建议是,如果不能达到工资翻一倍的水平,或者目标公司没有特别之处,最好不要跳。否则每跳一次,原来积累的人际关系就会丢掉,而技术又没有长足的进步,如此跳来跳去,只会毁了自己,更可能越跳工资越低。到了一定层次后就不能再满足于一些小钱,而是要做事业了。衡量的目标,不是当前多少钱,而是以后会有多少钱。
  一般来说,国内公司也没培训,初级阶段获得迅速成长的惟一途径是自我学习跳槽。中级阶段要稳定下来。因为你这时已经到了“高原阶段”,工资也到了高原,精力也没以前充沛,不能再没日没夜加班加点了,也很难再获得突破,要想技术飞速进步只能去国外了。或者自己苦心钻研。现在许许多多的程序员通过自己的努力都到了此阶段。
  2、 为什么要跳到外企?
  外企有信用。让人放心。有培训,有高薪,老板把你当人看,剥削较轻,不像国内企业那样敲骨吸髓。可以找到女朋友。一般可以找到大施身手的空间。但有随时被裁危险。但一般是做得非常开心、顺心。
  老板说给你多少钱一般不用担心他会找理由克扣。这样你就可以尽可以放心地大施手脚。
  下面列举几个事实,说明为什么要跳到外企:
  1、广州惠创软件公司http://www.hcweb.com.cn/ ;在广州体育西路。
  其老板以前是搞外贸的,发了财。我拿自己的全部代码(我拥有版权的软件),他卖.他老板说,你只能给我打工.你自己去运作,赚了钱,你这个软件开发者和版权拥有者只能拿到40%以下.而且你来到公司三个月后,代码的版权要归公司 。
  我起身走了。如果我能出国的话,我一辈子都不愿意再回来。
  2、广州市小聪软件公司http://www.jxc.com.cn
  我去之前谈好,我不要工资,我自己独立运作市场和软件开发,他公司只提供一个营业执照,赚钱分给他一半。辛苦了一个月,击败了众多对手后,一个十万元的项目总算有要签合同了。那个老板说,公司调整。你划到市场部。项目的10%拿到市场部,你再从市场部分得点数。(到我手里只有不到5%)。从下个月起,每个月1000块钱工资。你说话不算数,出尔反尔,没信用。我抗议。抗议无效。算工资的话,也行,那你把上个月的1000块钱工资算给我才行。不,上个月没工资。只能从下个月开始算工资。那我走,你把项目的15%提成算给我,这是你定的规定。没有15%,你只能拿5%。如果你现在走,那5%也拿不到。
  跟这样的公司混,你有未来吗?我能拼命给他干吗?
  我拿起背包头也不回地走了。一分钱也没拿到。找到的新工作是,一个月一万。打工。
  我想把项目带走。但客户怕得不到保障。因为我没有公司。最后仍是把项目给了那个进销存公司。
  3、晶苑集团。港资企业http://www.crystalgroup.com
  我对晶苑集团怀着深深的尊敬,并祝 晶苑集团 南中国电脑部 叶富华先生 马到成功,新春愉快。
  我印象最深的就是外企的信用。
  面试时,接待小姐端来一杯茶水。我很感激他们对我这样一个普通程序员的重视。(我去国内公司面试没有一家给我端水的。他们让你先做一份考题。做完了你回去等通知。后来我有经验了,去之前先问问怎样面试,只要是做题,见不着考官的,一概不去。再后来发展到只要是国内企业的,一概不去。)我的工资是上一份工作的将近二倍。
  欣喜若狂。公司有买被子津贴(公司给你买被子)、吃饭补助、住宿补助、加班费(1.5元/小时)。有加班费好啊。拼命加班吧。
  每天工作十八个小时到二十个小时。在四个月零十天的工作中,我只休息了一天。其他时间时间每天都像玩命似地。。。没有人逼我们,是我们自愿的。
  公司从香港总部派人到大陆对我们进行培训。支出专门的图书经费让我们建立电脑图书馆。请来专门的电脑教师,列出培训大纲,每天对我们进行程序培训。
  4、香港迎新丰软件公司。港资http://www.welcomeERP.com ;位于广州天河软件园。
  我做了四天,什么成绩都没做出来。但公司归给工资不误。午餐费、住宿费、交通费、保险费都给了我。很有信用。这样的公司,员工不会说它的坏话。只会尊敬、热爱和拥戴这个企业。
  老板很好。我们只要使他的资本达到20%的利润率就行了。
  5、矩元鞋业。台资。
  月薪8000请了个程序员(这个程序员不是我,我没有那么菜)。不知什么原因,反正做了两个月什么也没做出来。公司虽然大呼上当:-),但仍然是客客气气地付了一万六给他。这份胸襟,试问哪个国内企业能做得到?
  结论:
  国外企业已经完成原始积累,所以剥削相对轻很多,给员工的空间也较大。国内的企业还正在进行原始积累,进行疯狂压榨。正如资本论所说,只给你基本的生活费,其他的全部被老板拿走。“每一个毛孔都滴着血和肮脏的东西”。那两个国内公司,也滴尽了无数程序员的血泪。
  不说了。空喊口号没用。还是克隆微软,克隆人家的管理方式来得实在。把我们玩弄于股掌之上,说给我们加薪加薪再加薪全部算下来我拼命赚钱的95%都被你拿走多一分都不给我,说给我股票给我们期权可没一样能兑现,你说给我们多少工资我时刻都要提防你克扣工钱。你太贪婪,恨不得把全部拿过去,全部占为己有,不给我们留下一点活路。
  你喊多少口号都没用。我幸而生在这个加入WTO的社会,要在以前,我早被你整死了。我入外企我光荣。我逃脱魔掌我光荣。“士为知己者死”,你不要怪我们去外企。不能因为你生在中国我们就活该被你整死。你是土老财,我们是被解放军解放的翻身作主的奴隶。
二、程序员工资太高?
  你们在花前月下亲那柔嫩的红唇的时候,我们在做什么?你们在剥开女孩子衣服共度良宵的时候,我们在做什么?你们在唱歌跳舞纵情享乐的时候,我们在做什么?你们在争风吃醋大打出手的时候,我们在做什么?你们在给校长送礼的时候,我们在做什么?你们在喝酒猜拳的时候,我们在做什么?
  我们在写程序。
  如果你把我们的工资和那些好吃懒做在学校泡妞打架毕业后贪污受贿疯狂压榨人民血汗黑心黑手拿黑钱的人进行比较,我只能告诉你,你错了。
  你付出了什么,我们付出了什么?
  如果因为你的工资只有八百元,看见别人的工资超过你就生气,就要求别人的工资也要向八百元看齐,我只能说,你犯了红眼病了。中国人的劣根就是,不患穷患不均。外国人看到谁有钱就说,啊,我要超过他。中国人说,他妈 的,我恨不得把他杀掉!大家都穷,我没意见,如果有谁冒尖我就想把他给拔掉。只想问一句,别人辛苦工作的时候,你干什么去了?
  我要说,当一个人,倾毕生精力和心血,把所有东西都倾注于一件事情时,他获得的只是普通人的十倍工资,这太低了。
  只拿着几千块钱工资,太少了。拿这点工资想去买一个人的青春和爱恋,这个人太不值得了。
  做生意的,当官的,欺压老百姓的,作威作福的,贪污受贿的。
  他们不用担心失业,不用担心技术过时,不用担心众多的竞争者。他们不用担心房子,不用担心车子。谁都知道他们一个月不会只有几千块钱那么简单。打工,写程序,是不能同他们比的。一个拥用着程序员的聪明和智慧的人去做那些事情,收入肯定比当程序员强算了,不比了。比起来心痛。
  这两个是纵向比较。同地区不同工种这间比较。按劳取酬,多劳多得,我们的所得与所付出的,仍然是不成比例。
  再横向比较。同一个劳动力在不同劳动市场上价格的比较,同一工种在不同地区的工资进行比较。
  程序员的工资,不是太高,而是太低了。
  一个本科生,出国工作两年后就可年薪十万,美元。而我们在为我们伟大的社会主义国家作贡献,只拿着5%的工资。(国外100万,国内才5万)
  一个同事到了国外,月薪5000美元,而他在国内才4000人民币。相差十倍。
  一个人,排除掉感情因素,他的东西当然是卖给出价高的那个人。这还用问吗?
  正如大批的留学生回来。不是我爱国,而是国内的空白多,机会多,发展空间大,所以我们大批地回来。
  时代在呼唤,人才的价值在回归,知识的价值在回归。
  附记:
  今年过春节,万家团聚,马年飞跃的时候,我在写程序。
  刘兴波,你在做什么?
  3、 中国需要大量软件蓝领?
  我们已经输给了外国,还要在新一轮的竞争中自甘堕落?
  1、谁要软件蓝领?
  一记者去人才市场向各招聘单位问其需不需要软件蓝领.招聘单位都不明白软件蓝领是什么意思.待记者说明软件蓝领的意思后,各公司都说我们不要。基层人才从来都不缺乏。
  一方面是报纸大声呼吁软件蓝领要尽快制造出来,”我们要有大量的低成本的代码工人”,另一方面,企业不要这方面的人才.怪事。是谁大声疾呼需要软件蓝领的?他不知道各大公司都在裁员吗?
  面对生产力越来越高的生产工具(软件开发工具),软件蓝领淘汰势在必行。那些学习太慢的白领都会被淘汰掉,更遑论蓝领了。软件蓝领,还没培训出来就已面临灭顶之灾。
  软件工厂是不错,但软件工厂的核心不是吞下大量的软件蓝领和人海战术,而是对现有资源的整合和利用,降低现有的生产成本和交易成本.一味嚷嚷要求软件蓝领的企业,只是那些由于管理不善快要被市场淘汰的企业,这样的险恶用心有两个:一是最好不要钱的软件奴隶供驱使,二是将那些正在会成长起来的优秀的人才扼杀在摇篮中,他们成长不起来,就减少了竞争对手。而且由于对他们进行的愚化教育,要他们立志成为软件蓝领。没有了胸怀大志,中国的软件产业才真正危险。
  可喜的是,市场将用残酷的市场法则对那些人和那些所谓的软件蓝领进行残酷地淘汰。只有那些真正有领导眼光的魄力的“软件工厂”才会真正建立起来。微软才是软件工厂,他将几十几百人几千人几万人的力量集中在一起,生产出产品,在全世界销售。我们某些“软件工厂”不过是玩概念罢了。玩吧,玩吧,终有死的一天。你会死的很难看。
  可喜的是,软件蓝领喊了很久也没见哪个企业招一个,更多的是裁员。
  事实证明了蓝领的不适应性。机器排挤人,程序员中也在排挤之列。由于高生产力的开发工具的越来越多的使用,软件开发成本的大幅下降,软件开发越来越自动化,越来越多的人被机器排挤掉。许多由人去完成的事情,现在由机器做的很好,许多程序员被裁下来。(资深程序员应该有这种体会)。
  现在所谓的“软件工厂”,最大的危害在于他由于在学生中传播,使许多学生胸无大志,挣两钱就满足,把许多优秀人才扼杀在摇蓝中。
  我们需要的是,天才的政治家,整合起一盘散沙的中国,天才的军事家,抵抗外强的侵略。
  附:有人由“深圳快找不到蓝领了”而觉得“软件业也快找不到蓝领了”。
  深圳快找不到蓝领了。
  不错。
  他们要找的是什么样的蓝领?是以前概念中的只读完小学二年级,穿着蓝色工装,满身油污,手拿老虎钳的蓝领吗?
  不。
  他们要精通计算机技术,要精通图纸,要精通制造工艺,要精通机电技术,还要懂英文。这样才能读懂英文说明书,才能看懂图纸,才能编制数控机床所用的计算机程序,才能控制数控机床。而且这些最先进的数控机床使用了目前世界上最先进的技术,因此这个“蓝领”如果几年不跟踪技术趋势他就会发现他不再会使用这些代表着最先进生产力的机器,就会被淘汰掉。
  这样的蓝领是一般的所谓的白领能比得上的吗?三个白领也比不上这样一个“蓝领”呀。随随便便大喊一声“我们找不到这样的蓝领”,实在是有失偏颇。有没有想过,在这样一个使用着高技术,掌握着自动化工具蓝领的背后,是多少低技术蓝领的失业?生产制造这样一个蓝领,需要多少金钱和时间?这样的蓝领实在是造价不菲。所以在国外,总工和总经理是一级的,总工的待遇有时比总经理还高。而在国内人多粥少人治环境中,技术人才实在得不到重视。
4、软件工厂
  其实,我们真正想要的,不是软件蓝领,而是软件工厂。而且这样的工厂最多只要两个。
  当软件生产的管理水平到了一定高度,自会以工厂的形式运作,以大幅降低生产成本。
  软件工厂是用来做什么的?
  1、生产什么?哪里这么多的订单来维持工厂的运转?
  2、软件的零边际成本(即可复制多份而成本几乎为零)。一份软件只需要一份就够的情况下,多个工厂是不是重复开发,浪费资源?这样竞争的结果,顶好是全世界就一家工厂归好,交易成本减少到最小。
  中国大规模的重复开发,低水平的重复开发。如果大家团结在一起,组成个工厂,严密组织,分工协作,既提高了生产率,也降低了浪费。
  工厂的设立是为了降低交易成本。
  软件工业也有生产成本逐渐下降的趋势。只有大规模地群体协作,用工厂这种组织方式能有效地提高生产力,降低交易成本。
  工厂的核心不是软件蓝领,而是组织和协作。集中所有人的智慧去做一件事情。大规模地降低生产成本。
  中国目前虽然需要软件,但还缺少强有力的组织。可以说,还没发展到工厂的程度。
  所以我们曾经有个把中国所有程序员组织起来,像一个大型的软件公司那样运作,做成虚拟软件工厂的想法。但还没做完。
  中国的IT确像有些人说的那样,中间人才大量,高精尖人才严重不足。在我看来,基层员工从来就不缺少,由于外国对我们进行技术封锁,所以我们在向前进军的路上很难突破。但我们中间人才正在夜以继日地,在管理和技术领域进行拼搏,向高精尖人才进军。但只要有一个能突围,一定会有大批人相继突围。我们在等待着群体突破的那一天。那一天,从中间领域“制造”出来的大批高精尖人才在国际软件工业叱咤风云,领袖群雄。
  五、“淘尽黄沙始见金”,要是再有员工因为工资而“叛逃”的话,不如说一句:由他去吧!
  很潇洒。很气派。道理也很对。只是口气有点自大,有点不自量力,而且也写错了。
  我记得原文是"千淘万漉虽辛苦,吹尽狂沙始见金。”,出自于《菜根谭》。刘兴波这位仁兄居然用"淘"尽狂沙始见金”,可见是一位炒股高手。妙,妙!只可惜恐怕是人云亦云,如果所猜不错的话,这位仁兄在专家的指示下应该赔了不少。
  只是,在人才界,这个恐怕还要改。去的是谁?留下的是什么?
  很不幸,去的都是顶尖高手和优秀员工,留下来的只是找不到工作的人。在这个人满为患,就业困难的社会,只有那个顶尖高手和高素质的人,才能自由选择工作单位,才能来去自如,才能到外企工作。留下来的,不是不想走,而是怕找不到新工作。只有那些有本事的人才能“你不把老子当人,老子自会找到把我当人的地方”
  借用微软的一句话,那些最优秀的人才永远不会恳求你。
  说说两件事。
  1、在某软件公司工作期间,深圳一个猎头公司天天打电话来。没错,http://www.jpc.com猎头。
  2、简历在网上发布几天后,突然接到神秘电话,邀去面试。咦,这个企业我没发过应聘信哪?去面试。几十人济济一堂,集中比赛。这个公司股东中,日本住友银行竟郝然在目。
  3、某集团。好像是在某国际排名中占第十六位吧,说,你过来。你可以把你的朋友全都叫过来上班。把你父母也接来。
  你以为被挖走的黄沙哪?
  “沙中找金(人才争夺)好激烈,拿走黄金留下沙”。黄金以前被拿到美国,现在是拿到外企,留下的都是别人挑剩下来的。对不? 
  
      我拿着钱痛苦流涕:多少钱才能买走我的爱?
5月11日

项目经理10大成功态度

 
态度决定一切,要将项目做好,除了要掌握项目管理技能之外,项目经理更应该具备良好的态度,我总结了10大成功态度如下:
1. 要有“一定要”的决心:一个人不是一定要的时候,连小石头都可挡住他的去路,只有“一定要”的人,再大的障碍都挡不住他想要的结果。
2. 要有强烈的企图心:要以成为行业中的世界最顶尖为目标。只要能找出一个成功的理由,你就能够成功!
3. 相信:成功者先相信,后看见,目标决定策略,只要精神不滑坡,方法总比困难多。
4. 做事:成功者愿意做一般人不愿意做的事,成功者愿意做一般人不敢做的事,成功者做一般人做不到的事。
5. 对待问题:你要了解解决问题,是一种态度而不是技巧,因此你必须相信你能解决所有问题。
6. 发挥潜能:人的潜能是无限的,你永远不知道你的潜能极限在哪里?不断地告诉自己:我喜欢我自己,我是最棒的。
7. 不要找借口:成功者找方法,失败者找借口;要成功就不要有借口,要借口就难以成功;当你没有借口的那一刻,就是你选择成功的开始。
8. 不怕困难:成功者“热爱痛苦”。
9. 学习经验:成功者学习别人的经验,一般人学习自己的经验。
10. 绝不放弃:成功者绝不放弃,放弃者绝不成功。
3月14日

电话面试

刚才接到了平生最郁闷的一次电话面试。

晚上快8点的时候,手机响了,对方说是微软研究院的,要对我面试一下,还问了我的座机号码,相当的nice。

首先是让我介绍一下自己做的最得意的一个项目,我就拿我上海那个项目来说。对方问,我来答。不到10分钟,对方就已经把我那个项目分析的淋漓尽致了,说白了,就是我那个项目很easy,不值一提。

然后就开始按照我简历上的东西一项一项的来问。

C++,问我对多态怎么看,我说就是一个vtable,对方说vtable是在编译的时候还是在运行的时候,我。。。

MFC,问我如果不用winzard,消息是怎么映射的,如果不用winzard,怎么让按钮响应事件。我。。。

SqlServer,问我存储过程和存储函数有什么区别,我。。。

B/S,C/S有什么区别?我。。。

DataStructure,问我用链表怎样来实现栈和队列,然后操作栈和队列有什么区别?我。。。

问我对com怎么看,我。。。

当时的郁闷就别提了,总的来说就是面上的东西能说一点,但是再一问深入地东西,就over了。

完了,我自知答得不好,就很郁闷的说我差得好远啊,他还是很好的,告诉我不应该急躁,应该静下心来仔细研究一门,不能样样稀松。

通过这次面试我算是明白了,我还差得远呢。

MySQL启动错误的解决


我的操作系统是 Windows 2000,无论安装何版本的MySQL,在管理工具的服务中启动
MySQL服务时都会在中途报错!内容为:在 本地计算机 无法启动MySQL服务 错误1067:进
程意外中止



经过多方求教,得解决方法如下:



查找Windows目录下的my.ini文件,编辑内容(如果没有该文件,则新建一个),至少包含
basedir,datadir这两个基本的配置。
[mysqld]
# set basedir to installation path, e.g., c:/mysql
# 设置为MYSQL的安装目录
basedir=D:/www/WebServer/MySQL
# set datadir to location of data directory,
# e.g., c:/mysql/data or d:/mydata/data
# 设置为MYSQL的数据目录
datadir=D:/www/WebServer/MySQL/data


搞定,收工