Sipo Blog

宁静致远

删掉这个迅雷绝不偷偷上传了c:\windows\system32\cid_store.dat

我狂晕,今天晚上手机上cnbeta不知道文章被谁投递到cnbeta了。狂晕。狂狂晕。我这个万年cb潜水员竟然也被人转了...
---------------
还是一年前那句话,我支持上传,反对偷偷上传,请在悬浮窗中光明正大显示上传速率,让我们知道你在传什么,多少速率。这样就不会有人骂你了。
---------------

c:\windows\system32\cid_store.dat

不用删除迅雷文件列表,不用清空迅雷垃圾箱,迅雷也不会扫描整个磁盘。
只不过迅雷很阴险地把所有的你以前下载过的文件都存储到了c:\windows\system32\cid_store.dat里面
这样你每一次启动迅雷之后,立刻他就会从这个数据库里面读取内容,然后展开上传攻势。
你只需要在桌面建立一个批处理
d.bat(建立方法是用记事本另存为)
里面写上一句话,

del c:\windows\system32\cid_store.dat

记得每一次用完迅雷,运行一下这个就可以了。
尽管如此,我发现迅雷在没有
c:\windows\system32\cid_store.dat
的时候仍然每1秒钟疯狂下载一次广告,我不明白他为什么每隔一秒下一次!!
所以用完关了最好。

【教程】教你怒看迅雷在偷偷上传你盘上什么文件?占多少带宽?

我狂晕,今天晚上手机上cnbeta不知道被谁投递到cnbeta了。狂晕。狂狂晕。我这个万年cb潜水员竟然也被人转了...
---------------
还是一年前那句话,我支持上传,反对偷偷上传,请在悬浮窗中光明正大显示上传速率,让我们知道你在传什么,多少速率。这样就不会有人骂你了。
---------------


前几个礼拜我看到Cnbeta上有一个迅雷盗窃文件的文章,我开始看的时候对这个文章的看法并不认同,首先我觉得他并不可能扫描全盘,一定是在偷偷上传你曾经下载过的文件。你如果把文件删除就不会上传了。
并且我觉得那片文章里面好多地方说的也不是很对。
刚才找到了原文,http://www.cnbeta.com/articles/48566.htm
直到我写了下面的文章,我才对部分观点采取了认同。


注意了,你开着迅雷,不管已下载列表框是否有文件(是否已经被你删除),迅雷都会自动发现可以上传的文件,并且上传。
开始我认为是由于迅雷自己偷偷保留历史下载文件列表(C:\Program Files\Thunder Network\Thunder\Profiles\history.dat),所以从中发现可以上传的文件,后来我发现根本不是这样!!!history.dat这里面有你的下载记录,开始我估计是他上传的根据。后来我证实了我的估计是错误的。我把这文件删除了。重新启动。
再开迅雷做监视,发现他仍然在偷偷上传我硬盘上的文件。我愤怒了!我真的愤怒了!!!我不知道他怎么知道我的硬盘里面有那些可以上传的文件。我估计还有什么临时文件没有删除干净!!但是我不知道是什么临时文件。这个我查明白了再写出来。我估计他并不是扫描我的整个硬盘。



好了,下面教你如何怒看。
1,首先去微软官方网站去下载Process Monitor这个进程监视器:
[URL=http://technet.microsoft.com/zh-cn/sysinternals/bb896645(en-us).aspx]http://technet.microsoft.com/zh-cn/sysinternals/bb896645(en-us).aspx[/URL]
下载这个软件。
我用的是汉化版。
2,下载网络流量检测软件ByteOmeter
http://www.byteometer.com/
或者在gg上搜索盗版的。ByteOmeter汉化。

3,打开迅雷5,打开ByteOmeter,打开Process Monitor(我用的汉化版),点击“过滤器”->"过滤器"->选择"进程名"->“是”->thunder5.exe->增加
然后就等着吧,你可以选择自动滚动。

4,1分钟后,你就会看到下面的图的内容:
第一个图你能看到他在上传我d盘下的风色幻想游戏,和一个电影,还有vs2008
第二个图你能看到他每秒钟打开关闭你的文件多次,为什么这么做?因为他怕锁定文件句柄然后被用户发现。这样做的结果就是毁你的硬盘!没别的。不多说了。




2008/2/15后记

迅雷很阴险地把所有的你以前下载过的文件都存储到了c:\windows\system32\cid_store.dat里面
这样你每一次启动迅雷之后,立刻他就会从这个数据库里面读取内容,然后上传。
你只需要在桌面建立一个批处理
d.bat(建立方法是用记事本另存为)
里面写上一句话,

del c:\windows\system32\cid_store.dat

记得每一次用完迅雷,运行一下这个就可以了。目的就是自动删除该数据库。记住,删除这个没有性能影响。
尽管如此,我发现迅雷在没有
c:\windows\system32\cid_store.dat
的时候仍然每1秒钟疯狂下载一次广告,我不明白他为什么每隔一秒下一次!!
所以用完关了最好。

SET NAMES utf8不管用了怎么办?

MYSQL总是乱码,创建数据库连接时连接字符串加入charset=utf8就可以了,根本不需要set names utf8
例 "server = localhost; databasse = test; user id = root; password = 123; charset=utf8"

告诉你到底什么是crossdomain.xml

http://www.crossdomainxml.org/
别的废话不多说了,上面的网址很全。
为还存在疑惑“怎么不起作用呀”的网友补充几句话。
首先,crossdomain.xml是放在服务器端的文件,什么叫做放在服务器端,就是放在你要获取的文件的所在的那台机器的那个域名下面。比如我自己的网站是xxx.me.com,我的网站上有一个swf要获取xxx.you.com上的文件,那么crossdomain.xml要放在xxx.you.com上才可以。crossdomain.xml里面的内容就是

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
   <allow-access-from domain="*.me.com" />
</cross-domain-policy>

明白了吧。

解析indexToItemRenderer为什么有时候取到null

好啦,一句话,这是一个BUG?
也可以说不是。也可以说是。
有的人认为是,有道理。有的认为不是也有道理。慢慢听我说。
如果list很长,需要scroll的时候,flex仅仅缓存可见部分,也就是说在debug的时候我们可以看到renderArray只有scroll显示的部分。也就是说,flex可能为了某种效率需要(我猜的),因此把其他的行不缓存?或者不放在可以支配的itemrenderer里面.
我想这是好的,以后希望他能提供另外一个方法,让我们可以支配那些list很长,或者grid中的数据很长的不可见部分。
我想,这还是算是一个bug毕竟你没有提供如何支配不可见行部分的数据的方法!
http://www.actionscripts.org/forums/showthread.php3?p=647717

原来要用indexToItemRenderer实现对ItemRenderer中内容的修改!

狂晕!
我被Flex搞得狂晕,被ActionScript折腾了1个小时。就是找不到方法!我说不可能呀!
开始我从DataGridColumn入手,毕竟我的ItemRenderer是DataGridColumn的一个属性,但是这家伙的itemRenderer属性是奶奶的一个IFactory接口,这玩意咋弄类。要命了。我于是试呀,搜呀。一个小时过去了,debug了无数次。几乎绝望了。在最后的关头,我看了一下DataGridColumn的owner==>伟大的DataGrid~我就看他有没有什么方法看着就觉得是的!看呀看呀,突然灵光一现,突然看到了indexToItemRenderer这个方法,绝对是突然看到的,我的第6感告诉我,这就是Mr Right!于是Google了一下,果然不出所料,很像。然后突然蹦出一个网页就是这根救命稻草了!看!
http://tech.groups.yahoo.com/group/flexcoders/messages/94076?threaded=1&m=e&var=1&tidx=1
答案就在这个页面的1/3的位置!
哈哈

LIST_ID.indexToItemRenderer(NUMBER_OF_INDEX).document.ID_FROM_MY_TEXTBOX.text

真复杂呀!
我知道有一个document是肯定的,因为我在ItemRenderer里面需要调用this.parentDocument才能访问到外面的主程序的函数,但是我不知道是谁的document。现在知道了!太伟大了。GG真神奇。
有一点疑惑的是,为什么indexToItemRenderer是一个一维的数组呢?我怎么觉得应该是2维呀,但是2维我测试过不对哦。所以说NUMBER_OF_INDEX是行坐标。那么,怎么确定列呢?难道是LIST_ID?不可能吧?DataGridColumn没有indexToItemRenderer方法呀,我迷惑了,超级迷惑。不过好在我就用了1列,能用就成了!呜呼哀哉~~
顺便说一句网上有个杜XX的网站,排名还挺高,都是转载的抄E文的,狂晕,本来还想请教他,后来发现都是抄的转载的,想想还是算鸟。也不知道是不是蓝色的。晕死。

用ActionScript3实现了Flex与Javascript之间的双向通信调用

这个超简单的。因为太简单不好意思写。还是写吧。。。。
首先呢,在HTML模板里面添加一个JS函数:${application}实际上就是object那个flex的id,只不过呢,flex的模板文件里面用这个字符代替了。恩。你换成id也一样。

function sendToActionScript(value) {
        alert(value+"http://www.dc9.cn");
         document.getElementById("${application}").sendToActionScript(value);
     }

然后类,在flex里面添加一个启动注册钩子函数:这个在application initial的时候执行,前面的参数是js的函数名,后面参数是flex的函数名。

ExternalInterface.addCallback("sendToActionScript", receivedFromJavaScript);

然后类,在flex里面加入这个函数

private function receivedFromJavaScript(value:String):void {
    mx.controls.Alert.show("JavaScript says: " + value + "\n");
}

然后类,你随便找个什么玩意儿触发一下就可以啦:

<mx:Label click="ExternalInterface.call('sendToActionScript', 'http://www.dc9.cn');" text="http://www.dc9.cn" buttonMode="true" color="#CCCCCC"/>


就这样咯。刷牙去。我觉得flex从人性化程度上和易用性角度来看还是比silverlight好,唯一的缺点就是功能相同条件下size有点大.
另外,flex比sl的blend2设计人性很多!我用blend觉得怎么这么别扭呀!而且好多东西要自己下,最开始什么都没有。我晕。你集成一些usercontrol不就完了,我知道哪找去呀!还是flex好些。好用多了。
但是,我想实现的功能用mxml project实现比用as project更方便,可是mxml编译出来的体积很大.
我表达清楚了么有呀?
真乱。。
。。。
有几个问题没有弄明白。vbox,hbox,hdividebox,vdividebox,canvas都在什么场合用呀?
我乱用就乱了。。。
不知道有没有这方面的教学资料。
我现在全部用grid代替了。
看看人家vs2008就是做的好,我是指UI设计方面,人性化多了。这点比flex强多了。
说句公平话sl的发展不容小视。不过有一点sl的重大缺点我很不满意的就是,sl与ie结合太紧密,downloader下载个什么都在ie状态栏显示,还不能屏蔽。显示个鸟啊,显示不用你类~~

总算在C#.NET,Python,Ruby上实现了php的zlib的gzcompress函数

<?php
$s = "http://www.dc9.cn";
$z = gzcompress($s, 9);
echo $z;
$file_name = "dc9.cn.zip"; 
$file_pointer = fopen($file_name,"wb"); 
fwrite($file_pointer,$z); 
fclose($file_pointer);
@chmod($file_name,0777);
?>


别看上面这点代码东西少,后面蕴含的道理真不少。php用了zlib库里面的gzcompress函数,开始不知道这个函数是没有head data的,我傻不垃圾的弄了很多程序,最后都不成功,后来到www.php.net上面一查,原来如此,人家写着呢!!

This is not the same as gzip compression, which includes some header data. See gzencode() for gzip compression


gzcompress
(PHP 4 >= 4.0.1, PHP 5)

gzcompress -- Compress a string
说明
string gzcompress ( string data [, int level] )


This function compress the given string using the ZLIB data format. 

For details on the ZLIB compression algorithm see the document "ZLIB Compressed Data Format Specification version 3.3" (RFC 1950). 

注: This is not the same as gzip compression, which includes some header data. See gzencode() for gzip compression. 

难怪1字节的数字"1",压缩出来的玩意儿就9个字节,然而包含头数据的结果有21个字节,有时候又120个字节,有时候187个字节,有时候210个字节。当然是用不同的函数与方法压缩的,后面再说。反正9个字节那个才是对的。恩。
言归正传,如何在C#里面实现gzcompress压缩呢?
著名的压缩库ICSharpCode.SharpZipLib.GZip我是没有试出来,我认为他没有提供这种不包含头的压缩功能。我压缩出来的都是包含头的。于是我再次寻找到了zlib.net.dll这个是从http://www.zlib.net/官方网站找到的,果然什么东西都得用官方的!
那么代码就是这样的

            byte[] byteData = System.Text.Encoding.UTF8.GetBytes("http://www.dc9.cn");
            MemoryStream ms = new MemoryStream();
            Stream s = new ZOutputStream(ms, 9);
            
            s.Write(byteData, 0, byteData.Length);
            s.Close();
            byte[] compressData = (byte[])ms.ToArray();
            ms.Flush();
            ms.Close();

            FileStream fileStream = new FileStream("C:\\dc9.cn.zip", FileMode.Create, FileAccess.Write);
            Console.Write(System.Convert.ToBase64String(compressData, 0, compressData.Length));
            fileStream.Write(compressData, 0, compressData.Length);
            fileStream.Flush();
            fileStream.Close();


这次这个正确了,我突然很想尝试一下python压缩效果,这个没费多大劲。我觉得python就是简单,没得说,可惜不够普及。难怪人家google这么青睐他,我还想用lua试试,没准也很有意思,过两天再说了。。。。

这个是python的。

print
print 'Status: 200 OK'
print 'Content-type: text/html'
print
import zlib
import os, sys
import msvcrt
msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
f = open("dc9.cn.zip","wb")
deflate = zlib.compressobj(9)
buf = "http://www.dc9.cn";
sys.stdout.write(deflate.compress(buf))
sys.stdout.write(deflate.flush(zlib.Z_FINISH));
deflate2 = zlib.compressobj(9)
f.write(deflate2.compress(buf))
f.write(deflate2.flush())


写完这篇博客之后我又下载了ruby,然后也写了一段,现在把代码插在这里!
这个真他妈的简单。我有点爱上ruby了!!!!!!!!!!!!!!!!!!!!!!!!!
ruby比其他的多一个字节(回车)不过一样用。

z = Zlib::Deflate.new(9)
aFile = File.new("C:\\dc9.cn.txt","wb")
aFile.puts z.deflate("http://www.dc9.cn", Zlib::FINISH)
aFile.close
z.close


最后说说浪费时间的其他代码,放在这别浪费了。

我最先想到的是.net framework2.0以来新加入的一个System.IO.Compression;这里面的GZipStream 不提供level,不提供无头压缩。很郁闷。这个压缩出来是直接能用winrar解压的。带头的才能winrar/winzip解压。

            FileStream fileStream = new FileStream("C:\\dc9.cn.zip",FileMode.Create,FileAccess.Write);
            MemoryStream ms = new MemoryStream();
            GZipStream compressionStream = new GZipStream(ms,CompressionMode.Compress);
            StreamWriter writer = new StreamWriter(compressionStream);
            writer.Write("http://www.dc9.cn");
            writer.Close();

            fileStream.Write(ms.ToArray(), 0, ms.ToArray().Length);
            fileStream.Flush();
            fileStream.Close();


using ICSharpCode.SharpZipLib.GZip;这个我懒得说了,也是带头的
关键就是

FileStream destinationStream = new FileStream("C:\\dc9.cn.zip",FileMode.OpenOrCreate);
GZipOutputStream outStream = new GZipOutputStream(destinationStream);
outStream.Write(buffer, 0, buffer.Length);
outStream.Flush();
outStream.Finish();


就这些了。
什么?有什么用?
不带头东东在网络中传输不是更快么?对吧。嘻嘻。

ActionScript Project的swf果然比Flex Project小一半儿

记得当年参加嵌入式竞赛的时候肖轶翔Yx.Shawn说as的project能比flex小很多。我今天下载了一个AsWingA3编译了一下,在ActionScript Project里面加入了一个JButton:

package
{
  import flash.display.Sprite;
  import org.aswing.JButton;
  public class t2 extends Sprite
  {
    private var button:JButton;
    public function t2()
    {
      super(); 
        button = new JButton;
        button.setLocationXY(0,0);
        button.setSizeWH(666,888);
          addChild(button);

    }

  }
}

然后用在Flex Project里面也做了一个Button

version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" viewSourceURL="srcview/index.html">
  <mx:Button x="0" y="0" label="Button" width="732" height="380"/>
  
</mx:Application>

然后分别输出Release Build
前一个87KB(也tm挺大的)
后一个147KB
果然aS弄出来的很小啊,半年之后我才验证了他的话。啊,伟大。还能不能再小呢?我就一个Button啊!

于是我发现真的还能再小。。。。。用最原始的SimpleButton就可以了-_____-||||

package {
    import flash.display.Sprite;

    public class Test4 extends Sprite {
        public function Test4() {
            var button:CustomSimpleButton = new CustomSimpleButton();
            addChild(button);
        }
    }
}

import flash.display.DisplayObject;
import flash.display.Shape;
import flash.display.SimpleButton;

class CustomSimpleButton extends SimpleButton {
    private var upColor:uint   = 0xFFCC00;
    private var overColor:uint = 0xCCFF00;
    private var downColor:uint = 0x00CCFF;
    private var size:uint      = 80;

    public function CustomSimpleButton() {
        downState      = new ButtonDisplayState(downColor, size);
        overState      = new ButtonDisplayState(overColor, size);
        upState        = new ButtonDisplayState(upColor, size);
        hitTestState   = new ButtonDisplayState(upColor, size * 2);
        hitTestState.x = -(size / 4);
        hitTestState.y = hitTestState.x;
        useHandCursor  = true;
    }
}

class ButtonDisplayState extends Shape {
    private var bgColor:uint;
    private var size:uint;

    public function ButtonDisplayState(bgColor:uint, size:uint) {
        this.bgColor = bgColor;
        this.size    = size;
        draw();
    }

    private function draw():void {
        graphics.beginFill(bgColor);
        graphics.drawRect(0, 0, size, size);
        graphics.endFill();
    }
}


这玩意realease出来只有1KB
已经最小了。我喜欢。
不知道AsWingA3为啥搞这么大呢???
不知道osFlash.org有没有一些占用空间更小的控件???
准备去蓝色问问。。。
我要小小小小小...................

Silverlight1.1中令人费解的Image控件的DownloadProgress问题

silverlight1.1中的Image控件很奇怪地有一个DownloadProgress属性,但是却没有DownloadProgressChanged句柄。
因此,无法像可爱的Flex里面的ActionScript那样DownloadProgress.所以很郁闷。
只能通过Timer控件来实现这个功能了。也许你会问为什么不用Downloader控件?因为这个控件太恶心,走Socket竟然没法跨域。我X。所以从某种意义上说,我觉得Flex还是比SilverLight更完善一些在某些特定的应用上。
有意思的是

HtmlTimer timer = new HtmlTimer();
            timer.Interval = 200; //200毫秒
            timer.Tick += new EventHandler(timer_Tick);
            timer.Start();

这段代码里面的HtmlTimer 竟然还是obsolete: 'This is not a high resolution timer and is not suitable for short-interval animations. A new timer type will be available in a future release.'
呵呵,可见,果然是处于beta阶段的SilverLight太不完善了。
«121314151617181920212223242526»

Powered By Z-Blog 1.8 Walle Build 100427
Copyright Sipo.