一君's profileRNX Studio™PhotosBlogListsMore Tools Help

Blog


    7/31/2009

    业内人士自曝奶茶业黑幕 长期饮用可致癌

    7月29日下午,做了几年奶茶生意的朱刚(化名)曝料称,湖北武汉大多数奶茶店所售奶茶都是用奶精和甜蜜素加色素勾兑而成,长期饮用,将会埋下不少隐患。“我对我所说的任何一个字都可以负法律责任,你写新闻时可以用我的真名。”
    《长江商报》报道,朱刚之前在某大学门口一个繁华的位置做奶茶生意,“每年赚7万多”。随着自己对奶茶行业的深入了解,朱刚说:“我不能再昧着良心赚钱了”。朱刚介绍:“大多数香甜爽口的奶茶其实就是一堆食品添加剂加上色素做成的,时下开始流行的果味奶茶也大同小异。”
    一般奶茶:大多用奶精 与鲜奶根本不搭边
    长期摄入可增加患冠心病、肿瘤、哮喘等疾病的几率,幼儿智力会受影响

    朱刚介绍,市面上出售的大多数奶茶使用的“奶”是一种奶精,而奶精的主要成分氢化植物油是一种反式脂肪酸,与鲜奶根本搭不上边。
    “奶精不仅价格便宜,而且味道更香浓,原因就是奶精中含有一种名为植脂末的化学物质。而这种物质中含有铅、铜等有害物质,长期摄入,可增加患冠心病、肿瘤、哮喘等疾病的几率,幼儿智力会受影响。”朱刚总结说,正常情况下,奶精中含有的反式脂肪酸易导致冠心病,每天一杯500毫升珍珠奶茶中反式脂肪酸含量已超出正常人体承受极限。

    朱刚介绍,他之前从加盟商那里拿货,一杯奶茶使用的奶精成本在0.4元左右,现在一些厂商供应的奶精已经可以低至0.2元,至于这种0.2元成本的奶精有何玄机,自己暂不了解,“冲奶精时需要用热水,否则化不开,难看还不好喝。”
    “鲜奶一斤大约在一块五左右,按照2:1比例冲调才会有奶味,一杯小杯奶茶360毫升,要用240毫升鲜奶,价格就在8毛钱左右了,这还没有加上其他原料,武汉一杯360毫升的奶茶普遍售价在一块五,加上房租、水电、人工成本,用鲜奶就要赔本了。”朱刚算了一笔账。

    珍珠奶茶:吃珍珠当心吃的塑料
    椰果奶茶:椰果多用双氧水漂白
    塑料根本不能被人体吸收 双氧水主要用于造纸业和纺织业的漂白
    “现在有一种牛奶叫营养舒化奶,其特点就是把大分子牛奶化整为零,方便人体吸收,广告做得也很形象。如果搞个相反的,把小颗粒搞成大颗粒,让人吸收不了你会买吗?但奶茶中的‘椰果’和‘珍珠’就是化零为整,让人无法吸收。”朱刚介绍,目前奶茶销售中,一般情况下,女孩子都会要老板放点珍珠和椰果,而这种东西带来的隐患触目惊心。

    原来,朱刚加盟的那家公司在一次给他打货时明确提示,每次放珍珠和椰果时,能少就尽量少,而此要求并非是为了节约成本,“主要是怕出问题。”朱刚解释称,那家加盟公司告诉他,目前的珍珠为了增加嚼劲,有些生产商开始往里面加了高分子材料,也就是传统意义上的“塑料”,由于这家加盟公司也不敢确认他们进的珍珠是否塑料,才要求尽量少放乃至不放。

    “珍珠的主要成分就是木薯淀粉,但它弹性不好,为了增加弹性,应该是添加小麦(资讯,行情)蛋白,但厂家为了节省成本,就添加高分子材料,这样嚼劲就有了,但塑料是不能被人体吸收的,长期使用的后果你想会是什么?”朱刚介绍完珍珠,又介绍起了“椰果”。
    “椰果的主要问题就是使用了双氧水浸泡。”原来,新鲜椰果由于成本高,就使用了椰果浸泡后渗出的水,椰果水经过添加其他物质(暂不明为何物),液体椰果水变身固体椰果,此时固体椰果为黄褐色,为了变成透明椰果,就使用了工业用双氧水漂白,而双氧水主要用于造纸业和纺织业,起漂白作用,国家明令禁止在食品加工中使用工业用双氧水,“这个央视都曝光过。”

    水果奶茶:添加日落黄、胭脂红等色素
    超标使用或频繁饮用致癌
    朱刚介绍,随着奶茶业的竞争加剧,一些奶茶加盟公司就不断开发新产品,这两年水果奶茶成为一种新的流行品种,如木瓜、西瓜、草莓奶茶等,由于味道媲美水果,不少店子打出招牌“可以喝的水果”,但实际上这些水果奶茶有些根本不含水果。
    “就是‘果粉’,不是水果。不过,正规的果粉多是天然水果做成的,但有些厂家使用的果粉却是合成的,使用了一点果粉加上其他的东西合成,喝起来水果味很足。”据朱刚介绍,正规果粉一斤在30元左右,但从加盟公司那里只需要10元甚至更低。
    水果奶茶为了增加水果的质感,不少奶茶店往里面加果肉,果肉五颜六色,“果肉很多都是经加工而成的产品,全部添加了色素等成分。除了白色果脯外,其他颜色的果脯都是添加色素形成的,比如日落黄、胭脂红等,不过这种东西喝个一两杯,人体不会感觉有异样。”
    记者查询获悉,日落黄是一种人工色素,如果超标使用就隐含致癌的可能;另外,一杯不超标,如果频繁饮用,累计超标同样会增加风险。

    奶茶甜味:甜蜜素(即糖精)代替蔗糖
    糖精大都添加了芒硝和氯化镁,这都是工业用的,人能吃吗?
    奶茶的另外一个不得不说的秘密是“甜蜜素”——奶茶甜味的来源。正常的甜味应该来自蔗糖,但奶茶中的甜味却是来自甜蜜素,即糖精。
    “糖精都会提前做成水,放在罐子里,在奶茶冲好后往里面添加。一般情况下,顾客是不会去问你添加的什么。我们后来和加盟公司熟了后,他们才透露,这些都是糖精,但让我们对外宣称,这叫蜂蜜水,或者糖水,就说是蔗糖做的。反正也没有部门来查。”朱刚说,糖精一般是蔗糖甜味的30倍,正常情况下,化成水之后的糖精水,只要一小勺子就行了,越甜使用的糖精也就越多。
    “适当的糖精放到奶茶里不要紧,但是有些奶茶店使用的糖精违规添加了芒硝和工业氯化镁,一般进价低于10块钱一斤的糖精都可能添加了芒硝和氯化镁,这种东西都是工业用的,人怎么能吃呢?”

    食品专家:应出台规范标准
    就奶茶行业大量使用食品添加剂一事,华中农业大学食品科技学院一位不愿透露姓名的教授认为,奶茶行业使用食品添加剂只要不过量,同时不添加有害化工产品,就没有必要一棒子打死,而是应该出台国家或地方标准,用来规范它,监督这个行业健康发展。

    奶茶店老板:从不喝奶茶
    在洪山区小何西村一条狭长的巷子里,奶茶店不下十家。该巷子是武汉三所高校共用的繁华街道,住着大量的大学生和打工者,据一位奶茶店老板介绍,这里的奶茶生意普遍较好,最好的一家位于巷子入口处,夏天高峰一天可以卖到2000多杯,“一天赚个上千块钱没问题。”
    记者在一家用黑色装饰的奶茶店看到,颜色各异的粉状物装有十几盒子,一位女孩子点了一份西瓜奶茶,员工熟练地从一红色粉末状的盒子里挖出粉状物,又添加了其他粉状物一小塑料勺,然后用热水冲开,问询后获悉需要加椰果,该员工又从旁边一盒子里挖出一勺子椰果,放进去后用封口机封口,拿出来摇一摇,给顾客,一杯奶茶的生产程序就结束了,前后不到一分钟。
    “你们喝这种奶茶吗?”记者问道,该店3位员工用奇怪的眼神看着记者,其中一位女孩子答道:“不喝。”当被问及原因时,三个员工相互对视一眼,笑了笑未作答。

    在另外一家奶茶店,一位30多岁的奶茶店老板斩钉截铁地回答,从来不喝,“要喝也就是喝点绿茶、红茶,就是这种用茶叶直接泡出来的。”同样的,这位老板对不喝奶茶的原因讳莫如深。

    专卖店:奶茶就是添加剂做成的
    昨日,记者对汉正街、团结村和千家街等武汉售卖奶茶原料的批发地点进行了走访。在千家街一家专门出售添加剂的店里,甜蜜素、奶精、复合甜味剂、豆浆添加剂等到处都是,“我这里的添加剂都是正规的,工商每个月都来查的。”

    当获悉记者想要开家奶茶店,老板顿时热情起来,“你需要的奶茶,我这里都可以勾兑得出来。”在老板提供的一份单子上,记者看到,制作一杯普通奶茶大体需要植脂末、口服葡萄糖、麦芽糊精、鲜奶精、蛋白糖、阿拉伯胶、乙基麦芽酚、亮兰、安赛蜜、苯甲酸钠等食品添加剂。

    “有不少奶茶店的老板都是从我这里进货,他们回去后勾兑成奶茶原料。”老板拿出一盒2斤的椰奶奶精报价为19元,复合甜味剂(含蛋白糖)26元,“你要是做椰奶的奶茶,用这两个就行了。”据老板介绍,这两种原料都可以冲100斤奶茶,可以做成几百杯,加上杯子和水,成本也就是在6毛钱左右,“我这里的复合甜味剂比甜蜜素更安全,味道也更香甜,比别人卖的原料好,价格也不比别人贵。”

    当记者询问,要是自己随便勾兑,比例错了会不会出现问题,老板笑了笑,“奶茶就是添加剂做的,一杯奶茶含有上十种添加剂,要是出问题早就该出了。你要是害怕,少用点就行了,我这里的产品质量好得很,不会出问题。”

    在千家街另外一家专卖奶茶原料的店里,记者看到,各类奶茶原料都已调配好,如浓缩果浆、各类奶茶粉、椰果、果脯、奶精、珍珠等一应俱全。店主介绍,各类产品因品牌不同,价格也不同,如浓缩果浆,“黑森林”18元一瓶,比“美味王”(13元一瓶)贵5元,这样一瓶浓缩果浆大约可以调出50杯果汁饮料来。

    上学的朋友们,逛街的朋友们,打牌的朋友们,不要去喝了~

    RNX Studio™ 转载,版权归原作者所有。

    7/28/2009

    一个比CBitmap更优秀的类 -- CImage类

    Visual C++的CBitmap类的功能是比较弱的,它只能显示出在资源中的图标、位图、光标以及图元文件的内容,而不像VB中的Image控件可以显示出绝大多数的外部图像文件(BMP、GIF、JPEG等)。如果想要在对话框或其他窗口中显示外部图像文件则只能借助于第三方提供的控件或代码,未免过于繁琐.

       现在,.net引入了一个功能非常强大的新类 ----- CImage.有了CImage类,Visual C++在图像方面的缺憾将一去不复返。CImage是MFC和ATL共享的新类,它能从外部磁盘中调入一个JPEG、GIF、BMP和PNG格式的图像文件加以显示,而且这些文件格式可以相互转换。例如通过简单的几句,就可以实现CImage类和CBitmap类实例的:

    HBITMAP hBitmap=image.Detach();
    CBitmap bmp;
    bmp.Attach(hBitmap);

    这样一来,就又回归到以前操纵CBitmap的方式了.CImage本身封装了DIB(设备无关位图)的功能,因而能够处理每个位图像素。

    它具有下列最酷特性:
      1、AlphaBlend支持像素级的颜色混合,从而实现透明和半透明的效果。
      2、PlgBlt能使一个矩形区域的位图映射到一个平行四边形区域中,而且还可能使用位屏蔽操作。
      3、TransparentBlt在目标区域中产生透明图像,SetTransparentColor用来设置某种颜色是透明色。
      4、MaskBlt在目标区域中产生源位图与屏蔽位图合成的效果。

    由于CImage在不同的Windows操作系统中其某些性能是不一样的,因此在使用时要特别注意。例如,CImage::PlgBlt和 CImage::MaskBlt只能在 Windows NT 4.0 或更高版本中使用,但不能运行在Windows 95/98 应用程序中。CImage::AlphaBlend和CImage::TransparentBlt也只能在 Windows 2000/98或其更高版本中使用。即使在Windows 2000运行程序还必须将stdafx.h文件中的WINVER和_WIN32_WINNT的预定义修改成0x0500才能正常使用。

    使用CImage的一般方法
      使用CImage的一般方法是这样的过程:
      (1) 打开应用程序的stdafx.h文件添加CImage类的包含文件:
    #include <atlimage.h>
      (2) 定义一个CImage类对象,然后调用CImage::Load方法装载一个外部图像文件。
      (3) 调用CImage::Draw方法绘制图像。Draw方法具有如下定义:

    BOOL Draw( HDC hDestDC, int xDest, int yDest,
    int nDestWidth, int nDestHeight, int xSrc, int ySrc,
    int nSrcWidth, int nSrcHeight );
    BOOL Draw( HDC hDestDC, const RECT& rectDest, const RECT& rectSrc );
    BOOL Draw( HDC hDestDC, int xDest, int yDest );
    BOOL Draw( HDC hDestDC, const POINT& pointDest );
    BOOL Draw( HDC hDestDC, int xDest, int yDest,
    int nDestWidth, int nDestHeight );
    BOOL Draw( HDC hDestDC, const RECT& rectDest );

      其中,hDestDC用来指定绘制的目标设备环境句柄,(xDest, yDest)和pointDest用来指定图像显示的位置,这个位置和源图像的左上角点相对应。nDestWidth和nDestHeight分别指定图像要显示的高度和宽度,xSrc、ySrc、nSrcWidth和nSrcHeight用来指定要显示的源图像的某个部分所在的位置和大小。 rectDest和rectSrc分别用来指定目标设备环境上和源图像所要显示的某个部分的位置和大小。
      需要说明的是,Draw方法综合了StretchBlt、TransparentBlt和AlphaBlend函数的功能。默认时,Draw的功能和 StretchBlt相同。但当图像含有透明色或Alpha通道时,它的功能又和TransparentBlt、AlphaBlend相同。因此,在一般情况下,我们都应该尽量调用CImage::Draw方法来绘制图像。
      例如,下面的示例Ex_Image是实现这样的功能:当选择"文件"ò"打开"菜单命令后,弹出一个文件打开对话框。当选定一个图像文件后,就会在窗口客户区中显示该图像文件内容。这个示例的具体步骤如下:
      (1) 创建一个默认的单文档程序项目Ex_Image。
      (2) 打开stdafx.h文件中添加CImage类的包含文件atlimage.h。
      (3) 在CEx_ImageView类添加ID_FILE_OPEN的COMMAND事件映射程序,并添加下列代码:

    void CEx_ImageView::OnFileOpen()
    {
     CString strFilter;
     CSimpleArray<GUID> aguidFileTypes;
     HRESULT hResult;
     // 获取CImage支持的图像文件的过滤字符串
     hResult = m_Image.GetExporterFilterString(strFilter,aguidFileTypes,
    _T( "All Image Files") );
     if (FAILED(hResult)) {
      MessageBox("GetExporterFilter调用失败!");
      return;
     }
     CFileDialog dlg(TRUE, NULL, NULL, OFN_FILEMUSTEXIST, strFilter);
     if(IDOK != dlg.DoModal())
      return;
     m_Image.Destroy();
     // 将外部图像文件装载到CImage对象中
     hResult = m_Image.Load(dlg.GetFileName());
     if (FAILED(hResult)) {
      MessageBox("调用图像文件失败!");
      return;
     }
     // 设置主窗口标题栏内容
     CString str;
     str.LoadString(AFX_IDS_APP_TITLE);
     AfxGetMainWnd()->SetWindowText(str + " - " +dlg.GetFileName());
     Invalidate(); // 强制调用OnDraw
    }

      (4) 定位到CEx_ImageView::OnDraw函数处,添加下列代码:

    void CEx_ImageView::OnDraw(CDC* pDC)
    {
     CEx_ImageDoc* pDoc = GetDocument();
     ASSERT_VALID(pDoc);
     if (!m_Image.IsNull()) {
      m_Image.Draw(pDC->m_hDC,0,0);
     }
    }

      (5) 打开Ex_ImageView.h文件,添加一个公共的成员数据m_Image:

    public:
    CImage m_Image;

      (6) 编译并运行。单击"打开"工具按钮,在弹出的对话框中指定一个图像文件后,单击"打开"按钮,其结果如图7.21所示。

    将图片用其它格式保存
      CImage::Save方法能将一个图像文件按另一种格式来保存,它的原型如下:

    HRESULT Save( LPCTSTR pszFileName, REFGUID guidFileType= GUID_NULL);

      其中,pszFileName用来指定一个文件名,guidFileType用来指定要保存的图像文件格式,当为GUID_NULL时,其文件格式由文件的扩展名来决定,这也是该函数的默认值。它还可以是GUID_BMPFile(BMP文件格式)、GUID_PNGFile(PNG文件格式)、 GUID_JPEGFile(JPEG文件格式)和GUID_GIFFile(GIF文件格式)。
      例如,下面的过程是在Ex_Image示例基础上进行的,我们在CEx_ImageView类添加ID_FILE_SAVE_AS的COMMAND事件映射程序,并添加下列代码:

    void CEx_ImageView::OnFileSaveAs()
    {
     if (m_Image.IsNull()) {
      MessageBox("你还没有打开一个要保存的图像文件!");
      return;
     }
     CString strFilter;
     strFilter = "位图文件|*.bmp|JPEG 图像文件|*.jpg| \
    GIF 图像文件|*.gif|PNG 图像文件|*.png||";
     CFileDialog dlg(FALSE,NULL,NULL,NULL,strFilter);
     if ( IDOK != dlg.DoModal())
      return;
     // 如果用户没有指定文件扩展名,则为其添加一个
     CString strFileName;
     CString strExtension;
     strFileName = dlg.m_ofn.lpstrFile;
     if (dlg.m_ofn.nFileExtension == 0)
     {
      switch (dlg.m_ofn.nFilterIndex)
      {
       case 1:
        strExtension = "bmp"; break;
       case 2:
        strExtension = "jpg"; break;
       case 3:
        strExtension = "gif"; break;
       case 4:
        strExtension = "png"; break;
       default:
        break;
      }
      strFileName = strFileName + '.' + strExtension;
     }
     // 图像保存
     HRESULT hResult = m_Image.Save(strFileName);
     if (FAILED(hResult))
      MessageBox("保存图像文件失败!");

    将图片用其它格式保存
      CImage::Save方法能将一个图像文件按另一种格式来保存,它的原型如下:

    HRESULT Save( LPCTSTR pszFileName, REFGUID guidFileType= GUID_NULL);

      其中,pszFileName用来指定一个文件名,guidFileType用来指定要保存的图像文件格式,当为GUID_NULL时,其文件格式由文件的扩展名来决定,这也是该函数的默认值。它还可以是GUID_BMPFile(BMP文件格式)、GUID_PNGFile(PNG文件格式)、 GUID_JPEGFile(JPEG文件格式)和GUID_GIFFile(GIF文件格式)。
      例如,下面的过程是在Ex_Image示例基础上进行的,我们在CEx_ImageView类添加ID_FILE_SAVE_AS的COMMAND事件映射程序,并添加下列代码:
    void CEx_ImageView::OnFileSaveAs()
    {
     if (m_Image.IsNull()) {
      MessageBox("你还没有打开一个要保存的图像文件!");
      return;
     }
     CString strFilter;
     strFilter = "位图文件|*.bmp|JPEG 图像文件|*.jpg| \
    GIF 图像文件|*.gif|PNG 图像文件|*.png||";
     CFileDialog dlg(FALSE,NULL,NULL,NULL,strFilter);
     if ( IDOK != dlg.DoModal())
      return;
     // 如果用户没有指定文件扩展名,则为其添加一个
     CString strFileName;
     CString strExtension;
     strFileName = dlg.m_ofn.lpstrFile;
     if (dlg.m_ofn.nFileExtension == 0)
     {
      switch (dlg.m_ofn.nFilterIndex)
      {
       case 1:
        strExtension = "bmp"; break;
       case 2:
        strExtension = "jpg"; break;
       case 3:
        strExtension = "gif"; break;
       case 4:
        strExtension = "png"; break;
       default:
        break;
      }
      strFileName = strFileName + '.' + strExtension;
     }
     // 图像保存
     HRESULT hResult = m_Image.Save(strFileName);
     if (FAILED(hResult))
      MessageBox("保存图像文件失败!");
    变成黑白图片
      由于许多图像文件使用颜色表来发挥显示设备的色彩显示能力,因而将一张彩色图片变成黑色图片时需要调用CImage::IsIndexed来判断是否使用颜色表,若是则修改颜色表,否则直接将像素进行颜色设置。例如下面的代码:

    void CEx_ImageView::MakeBlackAndwhite(CImage* image)
    {
     if (image->IsNull()) return;
     if (!image->IsIndexed()) {
      // 直接修改像素颜色
      COLORREF pixel;
      int maxY = image->GetHeight(), maxX = image->GetWidth();
      byte r,g,b,avg;
      for (int x=0; x<maxX; x++) {
       for (int y=0; y<maxY; y++) {
        pixel = image->GetPixel(x,y);
        r = GetRValue(pixel);
        g = GetGValue(pixel);
        b = GetBValue(pixel);
        avg = (int)((r + g + b)/3);
        image->SetPixelRGB(x,y,avg,avg,avg);
       }
      }
     } else {
      // 获取并修改颜色表
      int MaxColors = image->GetMaxColorTableEntries();
      RGBQUAD* ColorTable;
      ColorTable = new RGBQUAD[MaxColors];
      image->GetColorTable(0,MaxColors,ColorTable);
      for (int i=0; i<MaxColors; i++)
      {
       int avg = (ColorTable[i].rgbBlue + ColorTable[i].rgbGreen + ColorTable[i].rgbRed)/3;
       ColorTable[i].rgbBlue = avg;
       ColorTable[i].rgbGreen = avg;
       ColorTable[i].rgbRed = avg;
      }
      image->SetColorTable(0,MaxColors,ColorTable);
      delete(ColorTable);
     }
    }

      至此,我们介绍了GDI+和CImage的一般使用方法和技巧。当然,它们本身还有许多更深入的方法,由于篇幅所限,这里不再一一讨论。

    RNX Studio™ 转载,版权归原作者所有。

    Windows Mobile下的重力感应器(Gravitational Sensor)开发

    背景

    重力感应器(Gravitational Sensor,简称为GSensor),类似于Accelerometer和Tilt Sensor, 用于测量倾斜度的感应器。严格定义来说,Accelerometer和Tilt Sensor是有区别的,Accelerometer可以测量三维,而Tilt Sensor只能测量二维。术语的定义见 AccelerometerTilt_sensor

    Accelerometer被广泛用于手机等移动设备上,同时用于Wii的手柄上,Wii游戏的移动就是根据Accelerometer测量的数据进行移动的。

    简介

    重力感应器(Gravitational Sensor, Accelerometer)已经被广泛应用于Windows Mobile设备上,可是由于MS没有官方定义和提供统一的API,为重力感应器的开发带来不便,本文讲述如何在HTC和Samsung设备上进行重力感应器的开发,实现统一访问了GSensor的类库,在实现过程中使用了Singleton,Simple Factory和Observer模式。

    原理

    根据设备的内在能力,Accelerometer能够测量一维,二维或者三维的重力加速度。关于 Accelerometer的原理可以参考wikipedia的文章Accelerometer,我不详细介绍了,我主要介绍一下软件开发相关的。

    acc3

    图1 源自于《Samsung Mobile Innovator Windows Mobile API Programming Guide》

    从上图可以看出重力信息只是和设备本身有关,和设备在相对位置无关。例如设备平放在水平的桌面上,对这长的屏幕前后移动设备(如下图2),Y轴会发生变化。

    acc2

    图2 源自于 Windows Mobile Unified Sensor API

    另外的情况,设备长的屏幕垂直放(如下图3),上下移动,也是Y轴在发生变化。

    acc1

    图3 源自于 Windows Mobile Unified Sensor API

    Samsung 的手机可以输入 *#0*# 启动LCD Test 程序来测试Accelerometer的运行状况。

    原罪

    Windows Mobile 6.5及以下的设备,是没有统一的API操作GSensor,MS一直没有统一包括GSensor在内的所有Sensor的接口(其他Sensors包括Light Sensor,Stylus Sensor等等),甚至连WM7也没有官方答复,关于MS的答复可以参考下面链接 Windows Mobile finally getting a Unified Sensor API, support for capacitive screens? Update: Answer – No.

    没有统一的API,各个手机硬件厂商都需要开发自己的API,其中以HTC和samsung最为出名。开始的时候,各个厂商都不公开自己的API,导致Windows Mobile的开发人员只能通过反向工程(Reverse Engineering)等非正当手段获取API,哪怕获取了厂商的API,开发的程序也不能同时支持多种硬件设备。幸运的是Koush 封装了一个托管版本的 Windows Mobile Unified Sensor API ,同时支持HTC和Samsung。下面我会介绍如何使用native c++分别调用HTC和Samsung的GSensor API。

    Samsung GSensor API

    Samsung已经公开了自己的API,可以在 Samsung Mobile Innovator Windows Mobile SDK 1.1 注册下载和安装。里面包含的Samsung官方的GSensor API。 使用Samsung的API需要安装一个Cab。Cab在 C:\Program Files\Samsung Windows Mobile SDK\redist\smi_wm_sdk_redist_1_1_0.cab

    GSensor API定义见 C:\Program Files\Samsung Windows Mobile SDK\inc\smiAccelerometer.h

    取GVector信息
    GVector SamsungGSensor::GetGVector()
    {
    SmiAccelerometerVector accel;
    if(SmiAccelerometerGetVector(&accel) == SMI_SUCCESS)
    {
    GVector gVector;
    gVector.x = accel.x;
    gVector.y = accel.y;
    gVector.z = accel.z;

    return gVector;
    }
    throw;
    }

    调用SmiAccelerometerGetVector() API取出GVector信息。

    订阅GVector信息

    Samsung的API提供订阅功能。

    void SamsungGSensor::Register()
    {
    SmiAccelerometerCapabilities cap;
    if( SmiAccelerometerGetCapabilities(&cap) != SMI_SUCCESS)
    {
    throw;
    }
    SmiAccelerometerHandler h = &GetVectorHandler;

    if(SmiAccelerometerRegisterHandler(1000, h) != SMI_SUCCESS)
    {
    throw;
    }

    //Execute the task every second.
    //Start(1000);
    }

    SmiAccelerometerGetCapabilities()函数检查GSensor的情况,SmiAccelerometerRegisterHandler()注册GetVectorHandler处理函数定期取出GVector信息,SmiAccelerometerRegisterHandler()的第一个参数为interval(取数据的间隔),第二个为回调处理函数,该函数只能为static。

    void SamsungGSensor::Unregister()
    {
    SmiAccelerometerUnregisterHandler();

    //Stop();
    }

    上面是反注册函数。

    void SamsungGSensor::GetVectorHandler(SmiAccelerometerVector accel)
    {
    GVector gVector;
    gVector.x = accel.x;
    gVector.y = accel.y;
    gVector.z = accel.z;
    SamsungGSensor::GetInstance()->GVectorChanged(gVector);
    }

    这是回调函数,定义如下:

    private:
    static void GetVectorHandler(SmiAccelerometerVector accel);

    由于SmiAccelerometerRegisterHandler()注册的回调函数只能是static的,所以我在开发SamsungGSensor的时候不得不把这个类做成Singleton,否则static函数没法取出对象的实例指针了。

    acc5

    运行于Samsung机器的界面。

    HTC GSensor API

    目前为止(2009年7月),HTC还没有公开Sensor的APIs,所以这些API都是通过反向工程(Reverse Engineering)出来的,使用有风险,自己承担。

    API的定义生成和清理
    private:
    // The following PInvokes were ported from the results of the reverse engineering done
    // by Scott at scottandmichelle.net.
    // Blog post: http://scottandmichelle.net/scott/comments.html?entry=784
    typedef HANDLE (WINAPI * PFN_HTCSensorOpen)(DWORD);
    typedef void (WINAPI * PFN_HTCSensorClose)(HANDLE);
    typedef DWORD (WINAPI * PFN_HTCSensorGetDataOutput)(HANDLE, PSENSORDATA);

    PFN_HTCSensorOpen pfnHTCSensorOpen;
    PFN_HTCSensorClose pfnHTCSensorClose;
    PFN_HTCSensorGetDataOutput pfnHTCSensorGetDataOutput;
    #define SENSOR_DLL      L"HTCSensorSDK.dll"

    HTCGSensor::HTCGSensor(void)
    {
    HMODULE hSensorLib = LoadLibrary(SENSOR_DLL);

    if (hSensorLib == NULL)
    {
    printf("Unable to load HTC Sensor DLL");
    throw;
    }

    pfnHTCSensorOpen = (PFN_HTCSensorOpen)
    GetProcAddress(hSensorLib, L"HTCSensorOpen");
    pfnHTCSensorClose = (PFN_HTCSensorClose)
    GetProcAddress(hSensorLib, L"HTCSensorClose");
    pfnHTCSensorGetDataOutput = (PFN_HTCSensorGetDataOutput)
    GetProcAddress(hSensorLib, L"HTCSensorGetDataOutput");

    if (pfnHTCSensorOpen == NULL ||
    pfnHTCSensorClose == NULL ||
    pfnHTCSensorGetDataOutput == NULL)
    {
    printf("Unable to find entry point");
    throw;
    }

    sensorHandle = NULL;
    sensorHandle = pfnHTCSensorOpen(HTC_GSensor);
    }

    HTCGSensor* HTCGSensor::Create()
    {
    HANDLE hEvent = CreateEvent(NULL, TRUE, FALSE, L"HTC_GSENSOR_SERVICESTART");
    if (hEvent == NULL || GetLastError() != ERROR_ALREADY_EXISTS)
    {
    printf("Unable to create Sensor Event");
    throw;
    }
    SetEvent(hEvent);
    CloseHandle(hEvent);

    return new HTCGSensor();
    }

    HTCGSensor::~HTCGSensor(void)
    {
    if(sensorHandle != NULL)
    {
    pfnHTCSensorClose(sensorHandle);
    sensorHandle = NULL;
    }

    HANDLE hEvent = CreateEvent(NULL, TRUE, FALSE, L"HTC_GSENSOR_SERVICESTOP");
    if (hEvent == NULL || GetLastError() != ERROR_ALREADY_EXISTS)
    {
    printf("Unable to stop Sensor Event");
    throw;
    }

    SetEvent(hEvent);
    CloseHandle(hEvent);
    }

    HTCGSensor()构造函数加载DLL和生成函数调用的入口指针。Create()函数启动Sensor。~HTCGSensor()释放资源。

    取GVector信息
    GVector HTCGSensor::GetGVector()
    {
    GVector gVector;
    SENSORDATA data;
    pfnHTCSensorGetDataOutput(sensorHandle, &data);

    // HTC's Sensor returns a vector which is around 1000 in length on average..
    // but it really depends on how the device is oriented.
    // When simply face up, my Diamond returns a vector of around 840 in length.
    // While face down, it returns a vector of around 1200 in length.
    // The vector direction is fairly accurate, however, the length is clearly not extremely precise.
    float htcScaleFactor = 1.0 / 1000.0 * 9.8;
    gVector.x = data.TiltX * htcScaleFactor;
    gVector.y = data.TiltY * htcScaleFactor;
    gVector.z = data.Orientation * htcScaleFactor;
    return gVector;
    }
    订阅GVector信息

    由于HTC的API不提供订阅功能,所以我封装了一个ThreadTask(线程任务)类,否则生成一个线程,定期执行任务,在这个场景下是定期取GVector信息。

    #include <Windows.h>

    class ThreadTask
    {
    public:
    ThreadTask();
    ~ThreadTask(void);

    private:
    HANDLE mProcEvent;

    HANDLE mThreadHnd;
    DWORD mThreadId;
    bool mThreadHalt;
    int mInterval;
    bool mStarted;

    public:
    void ProcessTask();
    void Start(int interval);
    void Stop();
    virtual void Process() {};
    };

    //    Thread methods
    DWORD WINAPI ProcessThread(void *param)
    {
    if (param)
    {
    ThreadTask* thread = (ThreadTask*)param;
    thread->ProcessTask();
    }
    return 0;
    }


    ThreadTask::ThreadTask() :
    mProcEvent(INVALID_HANDLE_VALUE),
    mThreadHnd(NULL),
    mThreadId(0),
    mThreadHalt(false),
    mInterval(0),
    mStarted(false)
    {

    }

    ThreadTask::~ThreadTask(void)
    {
    Stop();
    }

    void ThreadTask::Start(int interval)
    {
    if(!mStarted)
    {
    mStarted = true;
    mInterval = interval;
    mProcEvent = CreateEvent(NULL, true, false, NULL); // manual reset, initial state reset
    mThreadHnd = CreateThread(NULL, 0, &ProcessThread, this, CREATE_SUSPENDED, &mThreadId);

    if (mThreadHnd)
    {
    SetThreadPriority(mThreadHnd,THREAD_PRIORITY_NORMAL);
    ResumeThread(mThreadHnd);
    }
    }
    }

    void ThreadTask::Stop()
    {
    if(mStarted)
    {
    mThreadHalt = true;

    // Signal the event
    SetEvent(mProcEvent);

    // Wait for the Thread to Die
    WaitForSingleObject(mThreadHnd, INFINITE);
    CloseHandle(mThreadHnd);

    CloseHandle(mProcEvent);
    mStarted = false;
    }
    }

    void ThreadTask::ProcessTask()
    {
    while (!mThreadHalt)
    {
    WaitForSingleObject(mProcEvent, mInterval); //INFINITE
    ResetEvent(mProcEvent);

    //process by subclass
    Process();
    }
    }

    作为ThreadTask的子类只需要知道interval来启动Thread,然后重写处理定时任务函数(Override Process() )。

    void HTCGSensor::Register()
    {
    Start(1000);
    }

    void HTCGSensor::Unregister()
    {
    Stop();
    }

    void HTCGSensor::Process()
    {
    GVectorChanged(GetGVector());
    }

    Sensors工厂

    Client不需要知道具体那个厂家(HTC or Samsung)的Sensor,只需要调用工厂类生成Sensor类。

    class GSensorFactory
    {
    public:
    static IGSensor* CreateGSensor();
    };

    IGSensor* GSensorFactory::CreateGSensor()
    {
    try
    {
    return SamsungGSensor::GetInstance();
    }
    catch(...)
    {
    }
    try
    {
    return HTCGSensor::Create();
    }
    catch(...)
    {
    }
    return NULL;
    }

    自动生产相应的Sensor

    LRESULT CSensorTesterView::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
    {
    gSensor = GSensorFactory::CreateGSensor();
    if(NULL == gSensor)
    {
    MessageBox(L"Can not Initialise GSensor.");
    }
    return TRUE;
    }

    Client只是调用工厂类生产Sensor对象。

    Observer模式

    为Client提供一个当GVector发生改变时自动通知更新的功能,这里使用了Observer模式,我使用了一个开源的类 Experiences of Implementing the Observer Design Pattern (Part 3) ,这个类具有很多优点,类型安全(type safe),通用性(generic),任意参数类型和任意参数数量,回传Sender的指针等等, 代码在这里下载http://tse3.sourceforge.net/doc/api/TSE3__Notifier.html

    class IGSensor;
    /**
    * Oberver interface for Gravitation Sensor.
    *
    */
    class IGSensorListener
    {
    public:
    typedef IGSensor notifier_type;

    virtual void IGSensor_GVectorChanged(IGSensor* gSensor, GVector gVector) {};
    };

    这是Listener,也就是我们常说的Abstract Observer。需要定义notifier_type和定义回调接口。

    /**
    * Interface of Gravitation Sensor.
    *
    */
    class IGSensor :
    public Notifier<IGSensorListener>,
    public ThreadTask
    {
    public:
    IGSensor(void);
    ~IGSensor(void);

    public:
    virtual GVector GetGVector() = 0;
    virtual void Register() = 0;
    virtual void Unregister() = 0;

    protected:
    void GVectorChanged(GVector gVector);
    };
    这是Notifier也就是Subject,需要继承 Notifier<IGSensorListener>

    class CSensorTesterView : 
    public Listener<IGSensorListener>
    {
    public:
    virtual void IGSensor_GVectorChanged(IGSensor* gSensor, GVector gVector) override;
    LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
    };
    LRESULT CSensorTesterView::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
    {
    gSensor->Register();
    attachTo(gSensor);
    return TRUE;
    }

    上面显示的是client类,为了演示把一些Observer模式无关的代码删除掉,完整代码可以下载源代码。client类需要继承public Listener<IGSensorListener>,重写IGSensor_GVectorChanged()函数和调用attachTo()函数进行注册。

    一个统一访问GSensor的类库和实例代码就完成了。由于没有HTC的机器,如果谁能为我提供一个测试,我会衷心感谢他。

    源代码:SensorTester.rar

    环境:VS2008 + WM 6 professional SDK + Samsung Windows Mobile SDK

    作者:Jake.NETJake's Blog on 博客园
    出处:http://procoder.cnblogs.com
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    更多文章请看 .NET Compact Framework, WinCE, Windows Mobile开发系列

    Tag标签: Windows Mobile,GSensor,HTC,Samsung

    RNX Studio™ 转载,版权归原作者所有。

    7/26/2009

    光荣加入光头党

    image

    终于下了决心,加入了光头党,本来前天24号就准备剃的,可惜那天生了病,怕冷,所以搁到今天。理光头的速度比做发型快多了,剃好那个清凉啊,大太阳下都觉得冷飕飕的。发了裸(头)照给几个朋友,反响不错,明天去公司准备再轰动一下~嘻嘻。

    RNX Studio™ 版权所有

    一中国导演想模仿《星球大战》拍科幻电影《地球保卫战》

    一位中国导演想模仿《星球大战》拍一部科幻大片《地球保卫战》,于是他写好了剧本,也找好了投资,准备开拍。当然,拍之前必须送交广电总局审查。于是他把剧本大纲寄给了广电总局。
    大纲是这么写的:许多年以后,地球已经处于一片混乱和动荡之中。火星人趁乱进攻地球。在危难时刻,太空船长梭罗和最后的武士卢克一起组成了反抗联军,抗击火星人的进攻。在丽亚公主、机器人R2、犹达师傅的帮助下,他们用“原力”打败了火星人的“黑暗力量”,一举攻破了火星人的飞船,挽救了地球。
    这位导演很快收到了广电总局的回复。回复中写道:既然地球已经处于一片混乱和动荡之中,那么中国的情况怎样?
    导演马上回复:中国也是如此。
    广电总局:不可能。在党的领导下,中国绝不会乱。
    导演哭笑不得,回复道:到了那时候政党都已经不存在了。
    广电总局:你好大胆!竟敢诅咒XX党垮台?
    导演冷汗直冒,连忙回复:您误会了,这只是幻想出来的一个情况,不是真实的。
    广电总局:即便不是真实的,也会使观众产生不必要的联想,影响社会稳定,这个罪名你担当得起吗?
    <导演心里一阵发毛,只得修改剧本。过了几天,他提交了新修改好的剧本大纲。
    大纲是这么写的:许多年以后,地球已经处于一片混乱和动荡之中,但中国却是一片繁荣昌盛、欣欣向荣的景象,人民安居乐业、生活幸福。然而,火星人却突然进攻地球。在危难时刻,太空船长梭罗和最后的武士卢克一起组成了反抗联军,抗击火星人的进攻。在丽亚公主、机器人R2、犹达师傅的帮助下,他们用“原力”打败了火星人的“黑暗力量”,一举攻破了火星人的飞船,挽救了地球。
    很快,他又收到了广电总局的回复。回复中写道:这个梭罗和卢克是什么身份?
    导演回复:他们是拯救地球的英雄。
    广电总局:难道地球就被这几个人给挽救了?我们的中国军队、公安干警在哪里?我们的党在哪里?
    导演:人类差不多已经被火星人打败了,最后是他们几个历经千难万险,终于打跑了火星人。
    广电总局:你这是宣扬个人英雄主义!蔑视组织的存在!会造成严重的社会影响。打回重写!
    导演没办法,只能再改。冥思苦想了好几天,终于改好了。
    新的大纲是这么写的:许多年以后,地球已经处于一片混乱和动荡之中,但中国却是一片繁荣昌盛、欣欣向荣的景象,人民安居乐业、生活幸福。然而,火星人却突然进攻地球。在危难时刻,我党派出了优秀党员梭罗和中国军人卢克一起组成了反抗联军,抗击火星人的进攻。在公安干警们的帮助下,他们用“原力”打败了火星人的“黑暗力量”,一举攻破了火星人的飞船,挽救了地球。
    很快,他收到了广电总局的回复。广电总局说:基本满意。不过,这“原力”和“黑暗力量”是什么东西?
    导演解释:它们是一种用意念控制的能量,这种力量非常强大,可以做到隔空打物,它有两个面,好的光明面和坏的黑暗面……
    广电总局立即有了回复:这怎么行?这是封建迷信!歪门邪道!不符合科学发展观!会造成严重的社会影响,不明真相的群众会信以为真,青少年会竞相模仿,会给未成年人带来严重的负面影响。打回重写!
    导演吐了三升血,好不容易缓过劲来。没办法,还得改。
    经过反反复复的修改,最终通过审查的剧本大纲是这样的:
    许多年以后,地球已经处于一片混乱和动荡之中,但中国却是一片繁荣昌盛、欣欣向荣的景象,人民安居乐业、生活幸福。然而,火星人却突然进攻地球。在危难时刻,中国挺身而出力挽狂澜,我党派出了优秀党员梭罗和中国军人卢克一起组成了反抗联军,抗击火星人的进攻。在公安干警们的帮助下,大家齐心协力,用菜刀、棍棒、镰刀、斧头与火星人展开了激烈的搏斗,一举打败了火星人,挽救了地球。最后卢克光荣入党,梭罗也成为了人们竞相学习的英雄模范。从此地球恢复了平静,人们幸福的生活着……
    导演兴冲冲拿着剧本去找投资方。投资方看完,沉默良久,说你只有找周星驰来拍。
    导演很高兴。想,我这剧本都大牌到要请星爷来拍了。托了二爷的大妈的孙子的学校的保安的女朋友的工作单位的上级领导的老婆的关系找到了周星驰。
    周星驰看了剧本,拿起坐着的折凳猛k了导演2个小时。打完以后说,你这不是存心整我吗,你到底是不是要耍我啊。要是换了我2年前的脾气,我一脚就把你踹到下面的马路上去,再把你挂到皇后巷广场上鞭尸啊你这个蠢货,你马上给我滚回火星去。废物,你真是废物,记住啊,你是个废物,不准你用走的,你跟我用滚的去

    RNX Studio™ 转载,版权归原作者所有

    7/19/2009

    无标题文档

    第三天了~自我封闭了三天,做了三天睡衣党,不理任何人,当然没也什么人理我。吃饭没食欲,三天全素餐,每天的睡觉时间超过16个小时,全天躲在空调房间里,一个人研究着d2的缺陷、对比各种信用卡之间的差别、各种日期与存款的计算与计划、音频降噪处理的学习、反复看着难得隐身的IM上有谁出现有谁离开而不参与任何对话、反复考虑自己的未来、看小说看到手机没电也不高兴充,唯一觉得有点意思的是,做了很多家务活,心情低落的一塌糊涂。

    很明显,我是知道自己为什么这么低落的,自作孽也好,谁作孽也好,低落就像女人的每月那几天一样光顾着我的生活。是的,谁也没有时光机器,所以,后悔没什么用,自己的路,自己走,别人的生活,别人过。去年的这个时候,整个情况都是反的,结果得意忘形~ 得意忘形,实在是本人一大缺点,切记切忌。

    新主板的电子噪音真的很大,用麦录音时的背景电流噪声实在是和老机器不能比,可能功率大了,关闭了音频增强功能也不能避免,所以研究了在CEP中的降噪处理,很简单,首先在极其安静的情况下录一段环境噪声,再使用“效果”->“降噪器”中的噪音采样功能将其收录,

    image

    然后重建一份声音档,开始正常录音,完成后,会从波形图上很明显的看到背景噪音,

    image

    再次打开降噪器,调整曲线的平滑度,反复试听,基本能将整段音频的噪音降低到原来的30%,然后在两段波形空隙的地方,使用“音量标准化”调整成0.5%即可(网上有文说直接使用静音菜单,我觉得,如果直接静音,一些自然的换气声会被去除,显得整段音频是一口气录下来的一样,听起来很累),如果换气声比较大,可以将其标准化至1~2%左右,效果不错。当然啦,最重要的还是录音设备要好,那是无敌的,我那30元的耳麦和600元的主板是不能解决大问题的~

    明天又要准时带上面具,上演人生大戏~

    RNX Studio™ 版权所有

    7/12/2009

    汉语六级考试题

    鉴于我国改革开放力度不断加大,越来越多的外国人口涌入我国。由于其中绝大多数人不能熟练地掌握汉语,这给双方在沟通上造成了很大的不便,也容易引起一些不必要的误会。在我国第250届全国****大会第13次全体会议上特作出决定:以后凡外籍人士进入我国,必须先通过汉语六级考试,否则将不予发放签证。另据消息,美国哈佛大学、麻省理工学院、英国牛津、剑桥大学等国外高等学府纷纷作出规定:凡在该校就读人员,如不能通过汉语六级考试,将不予发放毕业证书。为方便广大外籍人士做好应准备,我们特将部分例题公布如下:
    一、 听力(每题一分)
    1、
    甲:今天公共汽车上人多么?
    乙:还行,第一站上来3个,下去5个;
         第二站上来7个,下去12个;
         第三站上来45个,下去23个;
         第四站上来18个,下去12个;
         第五站上来9个,下去8个。
    问:乙共坐了几站?
    A.5  B.82 C.60   (答案:A) 
    2、
    甲:您吃了么?
    乙:没呢!
    问:这段对话最可能发生在那儿?
    A.厕所 B.澡堂子 C.胡同口儿
    (答案:C,有答B者加半分,发现答A者即刻拖出考场)
    3、甲:作业怎么还不交?
      乙:我没带。
      甲:你长脑子了么?你怎么忘不了吃饭呀?你弱智吧你?
    问:甲的身份是什么?
    A.神经病  B.老师  C.流氓
    (答案:B,有答C者加半分)
    4、
    甲:你怎么还没到?
    乙:堵车堵得我头都晕了。
    甲:快点儿,再不来大嘴巴抽你。
    问:乙为什么没到?
    A.头晕  B.堵车  C.怕甲大嘴巴抽他 (答案:B,发现答C者就大嘴巴抽他)
    二、阅读理解(每题二分)
    中国有一种植物叫葳蕤。从前有个人叫蔺芈。他想用一张罽子去捕一只鸩。不小心被葳蕤绊了一个跟头。他很踯蹰该不该再去捉。忽然他发现了一根扃,于是便用扃去打鸩,可是鸩飞走了。蔺芈气愤地说:“再抓到你就把你做成俎醢!”虽然恨,但此时却没办法。于是蔺芈只好采了几根葳蕤回家了。
    1、葳蕤为什么要绊蔺芈?
    A.葳蕤招讨厌  B.蔺芈犯贱 C.这是自然规律  D.以上皆错
    2、“罽子”是什么意思?
    A.网  B.席子 C.布  D.绳子
    3、蔺芈为什么要捉鸩?
    A.蔺芈爱上了鸩  B.蔺芈讨厌鸩 C.上天的安排 D.题目中没有给出
    4、蔺芈为什么带葳蕤回去?
    A.回家报复它  B.养起来 C.蔺芈爱上了葳蕤  D.以上都对  
    5、请你给本文加一个合适的题目:
    A.傻*蔺芈  B.鸩的故事 C.草本植物葳蕤  D.蔺芈传奇 (以上五题答案由判卷老师自行决定,第五题答A者加四分)
    三、 词汇与结构(每题0.5分)
    1、小王抽( )小李一个嘴巴。
    A.了  B.到  C.著  D.上
    2、解放军( )守在边关。
    A.戊  B.戌  C.戍  D.戎
    3、用荣誉去( )他。
    A.歔  B.勖  C.砉  D 矞
    4、和“歇菜“意思最相近的词语是:
    A.雄起  B.完菜  C.点菜 D.玩完
    5、( )打了我一巴掌。
    A.尔  B.汝 C.你  D.彼
    6、你在干嘛( )?
    A.呢  B.呀  C.哟  D.乎
    (以上答案由判卷老师自行决定。作第二题时容易发生考生晕倒现象特提请考场管理人员提前做好抢救工作;第四题发现答A者即刻拖出考场。)
    四、完形填空(每题0.5分)
    1、床前( )光, 
    A.台灯  B.秃头  C.明月  D.没有
    2、疑是地上( )。 
    A.筐 B.霜  C.赃  D.缸
    3、举头( )明月, 
    A.望  B.看 C.瞧  D.瞅
    4、低头思( )。  
    A.成双 B.姑娘  C.故乡  D.尿床
    (以上五题答案由判卷老师自行决定。第四题发现答B者立刻送相关部门处理。)
    五、翻译句子(每题四分)
    1、 你丫挺的要是再叫板老子就灭了你!
    2、 多乎哉不多也多亦不多乎实乃少也。 (要求翻译准确无误)
    六、写作(15分)
    以“汉语四、六级真好”为题写一篇作文。要求包括:
    1、汉语四、六级真好;
    2、汉语四、六级怎么就那么好;
    3、汉语四、六级实在是好;
    字数不得少于一百字。

    RNX Studio™ 转载,版权归原作者所有

    7/11/2009

    世博门票入手~yes

    6月定的门票这周总算到了~

     世博会门票

    世博会门票

    RNX Studio™ 版权所有

    世界就是一个班

    1、美国 班长,学习好,家里有钱,人高马大,好打架。班里没几个人敢惹他。和副班长关系不好。
    2、俄罗斯 副班长,成绩优异,全班最高大,上学期光和班长顶着干。后来家里出事:分家!现在做事很消极,但在班级里有一定的影响力。
    3、中国 团支书。幼儿园学习成绩很好。小学时由于体质差常被欺负,没事爱吹牛,由副班长罩着。  
    4、英国 学习委员,学习成绩好。家里也很富。班长的跟屁虫,做事没主见,啥都听班长的。前些天和班长把伊拉克打了一顿。
    5、瑞士 班花。学习成绩好,清高。不跟人勾肩搭背拉帮结派
    6、奥地利 音乐课代表,早熟,在两性观念上特别开放,经常因为乱搞男女关系被同学非议。
    7、阿富汗 职务无。不爱学习。身材矮小。上学期被副班长打,班长帮忙付医药费。前几天把班长家的最高的两个家具砸了,被班长揍个半死,现在失忆中。
    8、伊拉克 无职务。幼儿园时学习好,现在学习差。但人高马大,上学期排全班第四。嘴硬,上学期欺负同桌被群殴。前些天被班长和学习委员冲进他家揍个稀巴烂。
    9、印度 好玩电脑,成了电脑课代表。经常和同桌巴基斯坦为一块课桌吵架。
    10、巴基斯坦 职务无。成绩一般。和团支书关系不错,经常和印度吵架。
    11、德国 班级活跃分子,人高马大,擅长数理化。有野心,由于上学打了2架所以现在暂无职务。但认错态度较好。
    12、日本 无职位,成绩不错。思想品德很差。上学期刚被班长和团支书等人揍。现在又跟在班长屁股后瞎转悠 还老惦记着别人家的鱼缸。
    13、越南 无职位。人品有问题,瘦弱。上学期被班长揍,幸好有副班长和团支书撑腰。后又挑衅团支书,被狂揍。
    14、朝鲜 无职位。有个性。和团支书关系好。近期和班长闹矛盾,班长扬言要揍他。
    15、韩国,无职务,品行比日本还差,样貌丑,整容整了数十次,终于发现原来基因不好,怎么整都没用,于是决定不要脸了.现在班里公认的心灵与长相一样欠扁.喜欢偷团支书东西,偷完了还不知廉耻拿出来炫耀。由班长罩着。
    16、巴西 体育委员,家里杂草丛生。
    17、法国 宣传委员,班级活跃分子,从小喜欢闹事,追求时尚,被班里有钱男生认为是内涵型气质美女。最近他和一帮同学把团支书惹毛了,被团支书当作出头鸟教训。
    18、蒙古 特困生,但刚出生时是个巨婴,曾大哭大闹,弄得还在上幼儿园的全班同学不得安宁。
    19、意大利 上幼儿园时收拾了周围几十个比自己小的骠悍小朋友,后来被众小朋友合伙打残,失忆,醒来后加入了打他的那群骠悍小朋友,大一点后发现自己又能记起一点失忆前的东西,把它们教给众小朋友后,众小朋友变得比自己学习还要好,且大多成为班干部。
    20、希腊 上幼儿园时特聪明,教会了周围一大帮同学数理化政史地,后来被自己教出来的意大利打残,抓到家里,意大利又被打失忆后,希腊为了避免步其后尘,对意大利旁边那群骠悍小朋友躲得远远的,但终于还是被几伙同学联番欺负。
    21、土耳其 小学时骠悍,打了不少人,还不知好歹地收拾了早慧少年希腊,结果被那群更骠悍而且有钱的小朋友收拾了,现在正在乞求那群彪悍小朋友收留他。
    22、格鲁吉亚 副班长的小弟弟,前不久才转进班里,由于投入到班长门下 现在正在挨哥哥揍。
    23、埃及 早慧儿童,可惜幼儿园毕业后失忆,幸好一系列家传古董还在。
    24、以色列 早慧儿童,智商极高,但童年不幸,曾经被很多同学轮番欺负,却都挺过来了,没有失忆。成为班长的铁杆朋友后,开始不那么低调了。
    25、丹麦 小学时很凶,喜欢抢别人钱,后来不耍脾气了,成了人见人爱的娃娃脸。
    26、墨西哥 幼儿园时聪明,但大多数同学不知道,知道后直接把他打残,失忆,醒来后发现原
    来班长住在自己家旁边,后来班长半买半抢拿了他家一半的东西走。
    27、西班牙 幼儿园时全家被人强光,小学时便成专抢别人的,发现了一块新地盘,收保护费时被后来的学习委员狠狠揍个半死,手下人全部走掉。
    28、葡萄牙 经历与西班牙类似,但是体质比较弱,更早就被收拾了,最近的一件大事是把小学一年级时抢的现在团支书的一点东西还给了他。
    29、阿根廷 和墨西哥一样,原来是西班牙的手下,后来溜了,最近为了争一点吃的,跟学习委员打了起来,被打个半死。现在只敢跟巴西争争体委的位置。
    30、委内瑞拉 原西班牙手下,最近突然变得很有个性,自立门户,和几个哥们一起,跟班长对着干。
    31、古巴 班长邻居,有个性,由委内瑞拉等一帮哥们,还有副班长(有时还有团支书)撑腰,跟班长对着干了一个学期。
    32、加拿大 全班第二高大,是班长的邻居,除了最近要和班长、副班长等抢几个冰棍外,基本上是班长的助手。
    33、伊朗 无职位,做事却很高调,引起班长等的极度反感,扬言要好好教训他一顿。
    34、前南斯拉夫诸国 本来自成一派,不听班长话,也不听副班长话,后来分家,各自加入班长或副班长的圈子。其中有不少被认为“不适宜上学”者整天闹着要上学,原来一个叫黑山的小子被同学们接纳了,最近闹的是一个叫科索沃的小P孩,班长带头的十几名同学已经同意他入学,但副班长不肯。
    35、联合国 班主任,穷,身子弱,地位低,没几个学生把自己当一回事,同学们还算有点良知,分摊了他的生活费,但作为交换条件,班主任的管理权交给了五个班干部

    RNX Studio™ 转载,版权归原作者所有

    7/10/2009

    那一年 我们都没有钱

      不知道从什么时候开始穿阿迪 耐克
      也忘记了什么时候开始用香水 唇膏
      以前的冷狗现在叫鲜奶提子
      以前的三色杯现在不知所踪
      你为什么会痴迷于打钩的东西
      你又为什么想要一身产品牌子
      再然后你会知道Prada和Gucci
      然后会用LV的包穿Armani的衣服
      直到你死去的那天
      当你最后微笑着看着你身边哭泣的人们
      然后慢慢回想起自己的过去
      你的回忆里
      是不是会充满这些牌子 牌子 牌子
      还是会想起那一年 我们都没有钱的时候
      我们穿着简单但是干净的衣服
      略带皱褶但是整洁的鞋子
      背着书包
      也许路上会遇到顺路的同学
      会聊起校园里的故事
      那校园里的老槐树
      还有透明的窗户狭窄的走道和嬉闹的孩子们
      会在谈起某个同学的时候莫名地脸红
      然后若无其事地岔开话题
      会在体育课上尽情地欢呼
      会在美术课上自由地涂鸦
      然后
      当班主任从窗口经过的时候赶紧收起抽屉里的漫画
      抱背做好假装很认真但是内心很忐忑
      会在每天做操的时候
      踮起脚尖搜寻某个让自己魂牵梦萦的背影
      然后在错身而过的瞬间
      高傲的扬起头来
      却在离开之后为自己的胆怯懊恼不已
      会在收作业的时候
      假装不经意的翻看检查下她的作业
      其实无非就是想看看她一手漂亮的字
      然后鸡蛋里挑骨头的告诉她
      其实还有个简单的方法
      会在早上进门的时候短暂地停留
      不过就是为了能看见某个下一秒会出现在楼梯口的身影
      又或者是系一系根本没松的鞋带
      理一理没有被风吹乱的头发
      趾高气扬的留下一个仓皇的背影
      会在楼道上悄悄伸出身子
      只为了能看清那个让你心跳停顿的女孩
      然而当有人从你身边经过的时候
      抬起头看远处的风景
      把天边的云想像成她的样子
      那一年 当我们没有钱的时候
      每天只是幻想着某天长大了以后
      背着和身体差不多大的旅行包
      带着心中的那个人
      走遍这个世界的每一个角落
      那一年 我们还都没有钱
      可是在许多年后
      当我们开始注意到周围的人
      他们背着LEVI`S的、REEBOK的书包
      穿G-STAR的衣服
      出没在星巴克或者哈根达斯
      周末的时候不是去打球而是去逛街
      拿到衣服的第一反应不是适不适合
      而是看看是什么牌子
      会去鄙视那些穿干净的却不知道是什么牌子的孩子
      会在手上挂满乱七八糟的丁丁坠坠
      他们不再用激情洋溢到哀伤的情书去诉说一段感情
      甚至他们会不断追求不同的女孩子去寻求刺激
      然后在人群中大谈如何如何
      去换取近乎嘲笑的惊叹
      对DUNK了若指掌却不知道宫保鸡丁的做法
      常常换着不同的发型然后假装自己很低调
      又或者打电话的时候故意说些其实和自己无瓜葛的经济现象
      然后再很正经地说SUPER-STAR黑灰版式多么好看
      心中的对象开始划出价格
      然后送名贵的香水和戒指
      爱情在这个年龄被商品化
      或者 商品被爱情化
      男女孩子开始游弋于众多男女孩子之间
      这样 人们会称之为 成熟
      若当真如此
      我情愿回到那一年
      当我们都没有钱的时候

    RNX Studio™ 转载,版权归原作者所有。

    算算各行业的人为一套房子要奋斗多少年?

    经济新闻又报道房价,72家房地大老板联合起来抵制房价下降;我也是很无意的看了一下,舌头半天没缩回去。沿海的房价又噌噌的上去了一截,现在连西北各地也让人吃惊不小。二手房虽然降了点,但在沿海一带,也可以卖到和新房差不多的价格一万多到两万/平方米。我们的金融大都市的上海很多城乡结合处,比较偏僻的地方也贵的吓死;,假如在沿海一带的城市里如上海、深圳等比较发达的地方想要拥有一套小一点的两房一厅,居然也得要100万,现在就连西部很多城市也要40万到80万。而且现在还出现已经消失几百上千年的字:奴!
      关于金钱,我没什么概念。好在比较喜欢具象思维,赶紧换算一下,算起来比较容易:
      假如我是个纯粹的农民,一个人,有一亩地已经不错了。一年种两次,一次小麦,一次玉米,一年能挣个800块,再加上养一群鸭子,卖点鸭蛋,估计最多也就能挣1000块。想要在上海北京那郊区买套像样的房子,我得不吃不喝地耕种1000年,在西部需要500年。
      假如我是个工人,不能下岗,一个月拿1500块钱,不抽烟,不喝酒,不结婚,不吃饭渴了喝凉水,饿了吃烂菜叶,冷了拣破麻袋穿;总之,一分钱不花,在房价不上涨的前提前,要买那样的房子,得连续工作100年。估计,没什么工厂要这么老的工人。
      假如我是个普通公务员,混得很一般,一个月4000块,也不抽烟,不喝酒,不吃饭,还不贪污,不受贿,不挪用公款,要想买那样的房子(同样,房价不上涨),我得熬上33年。估计刚买了房子,就得退休了,而且极有可能因为营养不良而迅速逝世。
      假如我是个撰稿人,而且混得还不错,每两个字一块钱,我也不抽烟,不喝酒,不吃饭,也不泡文学女青年,要想买那样的房子(同样,房价不上涨),我得连续写2000000字,而且还得保证字字有人要。假如连构思、带写、带修改,每小时可以顺利完成2000字,那么,就得连续写1000个小时,在WORD文档上连续写2000页。我明白了,为什么写字的人容易夭折?
      假如我是妓女,姿色一般,平均每次收获200块,我也不抽烟,不喝酒,不吃饭,不得性病,不养小白脸,要想买那样的房子(同样,房价不上涨),我得连续接5000次客人。假如每天接客两人(含法定节假日),那得连续奋战2500天,费时8年左右。
      假如我是抢劫犯,手段一般,眼神一般,每次出手抢得1000元,我也不抽烟,不喝酒,不吃饭,不找女人,不被抓住,要想买那样的房子(同样,房价不上涨),得连续作案1000次,假如每星期高密度作案一次,那得连续作案18年,还一次不能被抓或者失手。
      假如我是商人,我连吃带喝,也抽好烟,也喝好酒,也上高档餐厅,也得性病,夜夜养小蜜,因为我们是少数人有本事贷到款,在房子刚出来的时候,噼里啪啦的付上头款,和同伙一起哄抬,不出两年,几套房子就都到手。
      我说这些,并不想发牢骚。我只想说,土地这东西,都属于国家资源,首要的功用,是为这个国家的老百姓提供服务。在合法的政策下,再加上自己的手段,利用国家资源为自己挣钱,这并没有太大的罪过。只是,凡是必须有个度。任何一个国家,两极分化得厉害,都不是个太好的兆头。当一个城市里的大多数人被挤到城市的边缘时,这便是罪过的一种,和地主的圈地运动并不两样。
      我们再想一想,两极分化是怎么形成的?看看以上购房的时限,答案就呼之欲出了。一个普通的公民,他辛辛苦苦地工作一辈子,赚得那点可怜的钱,被这里拿去一部分,被房地产商拿去一部分,最后再被炒房者拿去一部分,这两极要想不分化,也很困难。想想那些在城市里奋斗多年的普通人,几乎大部分人都背上沉重的房贷包袱。这就是大多数人的命运。
      我并不是非议国家不可以从土地中获取利益。只是,大众之财,取之于民,用之于民。假如你获取了这些收入,却无法保障大多数人住上满意的房子,那么这“取”,也取得不理直气壮。或许,我这点想法有点愤青,只是看新闻,都说宪法有进步了,要保护公民的私有财产了。我想,这还是有个因果关系――前提是,你首先得保障大多数百姓拥有一定数量的财产。假如大伙为了一套破房子都累得死去活来,你还有什么好保护的?世界上,没有绝对公正的法律,物质控制能力决定了其走向,我不能说普通百姓就不收益了,然而,在这个法令下受益最大的是大多数还是少数人??
      耕者有其田,居者有其所,这历来都是百姓对于一个国家最起码的要求。希望我们的党和政府官员真能处理好,真能看见我们这些最底层老百姓的心声,这也是绝大多数人民的心声。因为这里是中国,是绝对多数中国人自己的祖国,自己的家,我们不可能人人都能携带巨款摇身一变成外国人。

    RNX Studio™ 转载,版权归原作者所有。

    7/8/2009

    第一次看到有人这么写程序的~还是Google的Desktop Search

    谷歌的Desktop Search 文件里面竟然有这样的写法,哈哈哈哈哈~

    image

    经过分析,这些###文件,是用于卸载google desktop search用的~ 真的好雷好寨啊~

    RNX Studio™ 版权所有,转载请注明出处。

    不用代理直接上youtube.com~

    以前一直喜欢上youtube,自从被墙河蟹了以后,每次都要翻墙才能上~ 现在不用了,教大家一招:

    1.用记事本打开此文件 C:\WINDOWS\system32\drivers\etc\hosts   , 这个文件没有后缀名,但是可以直接用记事本打开。

    (如果你的OS装在C盘,如果装在其它盘符,替换那个C就好,就像d:\WINDOWS\system32\drivers\etc\)

    2.你会看到如下内容:

    # Copyright (c) 1993-1999 Microsoft Corp.
    #
    # This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
    #
    # This file contains the mappings of IP addresses to host names. Each
    # entry should be kept on an individual line. The IP address should
    # be placed in the first column followed by the corresponding host name.
    # The IP address and the host name should be separated by at least one
    # space.
    #
    # Additionally, comments (such as these) may be inserted on individual
    # lines or following the machine name denoted by a '#' symbol.
    #
    # For example:
    #
    #      102.54.94.97     rhino.acme.com          # source server
    #       38.25.63.10     x.acme.com              # x client host

    127.0.0.1       localhost

     

    3.在最后一行的下面再添加如下内容:

    203.208.33.100    www.youtube.com
    203.208.33.100    gdata.youtube.com
    203.208.39.99    upload.youtube.com
    203.208.39.99    insight.youtube.com

    4.保存并关闭此文件。

    5.直接浏览器打www.youtube.com

    6.U did it~

    ps:举一反三,以后碰到要翻墙的网站,直接把它的IP和它的域名象上面这样绑定起来,就不用通过河蟹局域网DNS墙了~

    RNX Studio™ 版权所有,转载请注明出处。

    此人能活着写出这贴真不容易

    HCl
    稀:比较酸,感觉嘴里滑溜溜的,典型的呕吐物感,微辣。
    浓:极度的酸,吐掉以后回味苦,然后整个嘴里发凉,10分钟后好转。

    H2SO4
    稀:淡淡的酸味,回味感觉油腻,微热,甜,无任何不适感。
    较浓的(40%左右的):超烫,感觉喝烫稀饭了,然后微甜感和痛感并存,持续2天才退(98%的纯正浓硫酸不敢喝)。

    HNO3
    稀:先是苦,然后整条舌头麻了,然后痛,起了白斑,持续疼痛,3-4天后消退,同时嘴里感觉大吸了一口汽车尾气。
    浓:不敢喝 (猜测是浓硫酸的加强版)。
    NaOH
    稀:基本上同浓的Na2CO3(我尝过,咸的),多一些辣感(对蛋白质腐蚀性强的都会有辣感 )。
    浓:含在嘴里十分的辣(可能是已经反应起来了) 然后舌头烧坏,呈黄色,肉腐烂,1个月不能说话,口里有赤痛感而且舌头麻木 有辛辣感半年后出院,说话变得不准,味觉几乎消失,嘴部留下疤痕(这东西对蛋白质的反应不是闹着玩的……)。

    CuSO4
    一开始没味道,吐出后回味淡淡的苦涩(我的确尝过)。

    BaCl2
    极苦咸,大约相当于MgCl2的加强版

    CCl4
    这个最恐怖了,整个嘴里感到烧塑料的味道,极浓郁,吐掉以后出现说不出的怪异甜味,直感觉全身松软 (的确,闻起来还可以,尝起来就郁闷了)。

    Na2O2
    一般的咸 (Na盐基本都这个味道)。

    无水酒精
    嘴里完全没味道,之后花露水的味道在鼻子里挥之不去。

    FeCl3
    凉,然后酸,与硬币放嘴里感觉差不多(Fe盐都这味道)。

    AgNO3
    没味道。。。

    稀Br2水溶液
    极其浓重味道,感觉像汽车尾气与松节油混合的味(只能如此形容)

    Hg(NO3)2
    很淡的味道,有点像味精和醋混合了 。

    H2O2
    特辣,赶紧吐了,之后就没什么事情了 。

    还有一个百度知道里面的:

    极其微量的氰化物是苦的,宝贵资料啊。

    乙酰水杨酸我试过有点酸,有点涩,最后有点苦尽甘来的那种感觉。
    氯化钾的味道跟氯化钠差不多。

    我尝过溴化氢,一不小心吸进去的。味道上没什么感觉,但是非常呛,吸进去很少,但是咳了一整个下午,一直到吃晚饭都反胃,印象深刻啊!

    从上文看,他至少还尝过硬币、松节油、味精与醋的混合物。另外还吸过一大口汽车尾气…

    RNX Studio™ 转载,版权归原作者所有。

    7/1/2009

    哭笑不得的假货大全

    IVIKE VS NIKE
    哭笑不得的盗版大全[20P]-丁香社区

    HIKE


    康帅博VS康师傅
    哭笑不得的盗版大全[20P]-丁香社区
    汰洁…………
    哭笑不得的盗版大全[20P]-丁香社区
    周住牌洗衣粉VS雕牌洗衣粉
    哭笑不得的盗版大全[20P]-丁香社区
    ADADAS VS ADIDAS
    哭笑不得的盗版大全[20P]-丁香社区
    ADIDOS VS ADIDAS
    哭笑不得的盗版大全[20P]-丁香社区
    PUNK VS PUMA
    哭笑不得的盗版大全[20P]-丁香社区


    OLAY玉兰油 VS OKAY玉兰油
    哭笑不得的盗版大全[20P]-丁香社区
    伊佧璐 VS 伊卡璐
    哭笑不得的盗版大全[20P]-丁香社区
    怎么少了两个粮液
    哭笑不得的盗版大全[20P]-丁香社区
    SQNY VS SONY
    哭笑不得的盗版大全[20P]-丁香社区
    魔法石什么时候成漏斗了呢??
    哭笑不得的盗版大全[20P]-丁香社区
    日猫??
    哭笑不得的盗版大全[20P]-丁香社区
    脉劫……
    哭笑不得的盗版大全[20P]-丁香社区
    SK-D VS SK-Ⅱ
    哭笑不得的盗版大全[20P]-丁香社区
    飘柔VS漂柔
    哭笑不得的盗版大全[20P]-丁香社区
    杏仁≠露
    哭笑不得的盗版大全[20P]-丁香社区
    雪霸...真够霸道的!
    哭笑不得的盗版大全[20P]-丁香社区
    茅合啊??!!不是茅台啊?!
    哭笑不得的盗版大全[20P]-丁香社区
    无语倒地……
    哭笑不得的盗版大全[20P]-丁香社区

    RNX Studio™ 转载,版权归原作者所有。

    测视力啦

    不近视的人看到的是爱因斯坦

    近视的人看到的是玛丽莲梦露

    不近视的人把眼睛眯起来也可以看到玛丽莲梦露

    近视的人戴眼镜看到的是爱因斯坦,取下眼镜看到的是玛丽莲梦露

    image

     

    RNX Studio™ 转载,版权归原作者所有。

    无敌国产汽车人~

    看到煎蛋上有篇贴~转载之~

    1

     2

    3

    4

    5   

    用的还是宝马的车头~

    Technorati 标签: ,,,

    RNX Studio™ 转载,版权归原作者所有。