Jul 29

1.start red5  0.9.1
2.open this url :  http://localhost:5080/admin/register.html
3. in the form fill your new user and password  and submit
4.restart red5 and enter http://localhost:5080/demos/adminPanel.html
或者http://localhost:5080/admin/index.html

using ”localhost” and the user/pass you define in step 3.

如果还是不能登陆,就把 Red服务重启一下,就可以了。

Jul 29

1、各浏览器下 scrollTop的差异
IE6/7/8:
对于没有doctype声明的页面里可以使用  document.body.scrollTop 来获取 scrollTop高度
对于有doctype声明的页面则可以使用 document.documentElement.scrollTop  ;
Safari:
safari 比较特别,有自己获取scrollTop的函数 : window.pageYOffset ;
Firefox:
火狐等等相对标准些的浏览器就省心多了,直接用 document.documentElement.scrollTop ;
2、获取scrollTop值
完美的获取scrollTop 赋值短语 :
var scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;通过这句赋值就能在任何情况下获得scrollTop 值。
仔细观察这句赋值,你发现啥了没??
没错, 就是 window.pageYOffset  (Safari)   被放置在 || 的中间位置。
因为当 数字0undefine 进行 或运算时,系统默认返回最后一个值。即或运算中 0 == undefine ;
当页面滚动条刚好在最顶端,即scrollTop值为 0 时。  IE 下 window.pageYOffset  (Safari) 返回为 undefine ,此时将 window.pageYOffset  (Safari) 放在或运算最后面时, scrollTop 返回 undefine ,  undefine 用在接下去的运算就会报错咯。
而其他浏览器 无论 scrollTop 赋值或运算顺序如何都不会返回 undefine.  可以安全使用..
所以说到头还是IE的问题咯. 杯具…
精神有点恍惚,不知道有没有表达清楚。
不过最后总结出来这句实验过OK,大家放心使用;
var scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;

Jul 10

javascript是一种解释型语言,性能无法达到和C、C++等编译语言的水平,但还是有一些方法来改进。

    1、循环

          JavaScript中的循环方式有for(;;)、while()、for(in)3种。其中for(in)的效率极差,因为for(in)执行过程中需要查询散列键。for(;;)和while()比较,while循环的效率要优于for(;;)。

    2、局部变量和全局变量

         局部变量的访问速度更快,因为全局变量其实是全局对象的成员,而局部变量是放在函数的堆栈当中的。

    3、不使用eval

        使用eval函数相当于在运行时再次调用解释引擎对内容进行解释运行

     4、减少对象查找

      因为JavaScript的特性,对于类是表达式a.b.c.d.e,需要至少4次查询操作。首先检查a在检查a中的b,如此往下。应尽量避免出现这样的表达式、可以利用局部变量把要访问的最终结果放入一个临时的位置进行查询。

      这一点可以和循环结合起来,例如对一个数组可以先取他的长度 var len = a.length

      ##其实java 中对于列表的循环也是先取size给一个临时变量

    5、字符串连接

      如果是追加字符串,最好使用s+=anotherStr操作,而不要使用s=s+”" 

      但是如果要连接多个字符串,应该少用+=  例如:

java 代码
  1. s+=a;   
  2.   
  3. s+=b;   
  4.   
  5. s+=c;   

     应该写成 s+=a+b+c;

     如果是收集字符串,比如收集字符串,最好使用一个缓存实现。具体的实现思路就是使用Javascript数组来收集每个字符串,最好使用join方法将这些字符串连接起来,如下面代码所示:

  1. var buf = new Array();   
  2. for(var i=0;i<100;i++){   
  3.     buf.push(i.toString());   
  4. }   
  5. var all = buf.join(”");  

       6、类型转换

        类型转换是JavaScript编程中容易出错的地方,因为JavaScript是动态类型语言,即弱类型语言,不能指定变量的具体类型。

      (1)把数字转换成字符串,应用”"+1,虽然比较别扭一点、但效率是最高的

          (”"+)>String()>.toString()>new String()

          String()属于内部函数,所以速度很快,toString()要查询原型中的函数,new String()用于返回一个精确的副本。

      (2)浮点数转换成整型 parseInt()用于将字符串转换成数字,应该使用Math.floor()或者Math.round()来实现浮点型和整型之间的转换。

     (3) 对于自定义的对象,如果定义了toString()方法进行类型转换的话,推荐显示调用toString()

    7、使用直接量

     以往我们都使用new Array(parm,parm1..)等形式,对于直接量的解释JavaScript支持使用[param,param1….]来直接表达一个数组。

     前一种方式调用Array内部构造器,而后一种方式是解释引擎直接解释的,故执行速度要略微快一点。同理var foo = {}比 var foo = new Object()快,var reg=/…./比 var reg=new RegExp()执行的快些。

     8、字符串遍历

     优先使用正则表达式

      9、高级对象

      自定义高级对象和Date、RegExp等对象构造时会消耗大量的时间和资源

      10、插入HTML

      document.write效率较低,innerHTML效率较高

      11、下标查询

       使用直接的下标查找一个对象的属性比通过.name方法要快很多

      12、创建DOM节点

       通常我们可能会使用字符串直接写HTML语句来创建节点,实际上这样有如下缺点:

      无法保证代码的有效性;

       字符串操作效率低。

       应该使用documeng.createElement()方法。如果存在现成的样板节点,应该使用cloneNode()方法。

Jun 25

按这几篇文章配置,基本上就能搞定了。

一、第一篇中文的,开始。。。。

首先不能完全 按照log4j的配置去搞log4j.properties,因为他们是用 log4j+slf4j 搞在一起的

在 classes下面要有个logback-myapp.xml的文件,里面配置

<?xml version=”1.0″ encoding=”UTF-8″?>
<configuration>
    <appender name=”RED5DEMO” class=”ch.qos.logback.core.FileAppender”>
        <File>log/red5demo.log</File>
        <Append>false</Append>
        <Encoding>UTF-8</Encoding>
        <BufferedIO>false</BufferedIO>
        <ImmediateFlush>true</ImmediateFlush>
        <layout class=”ch.qos.logback.classic.PatternLayout”>
            <Pattern>
                %date [%thread] %-5level %logger{35} - %msg%n
            </Pattern>
        </layout>
    </appender>
    <root>
        <level value=”DEBUG” />
        <appender-ref ref=”RED5DEMO” />
    </root>       
    <logger name=”org.red5.demos.red5demo”>
        <level value=”DEBUG” />
    </logger>

</configuration>

重启red5 在 red5/log 下看到一个red5demo.log文件了。
Continue reading »

Jun 21

安裝 Red5服務器後,測試它,我得到連接到本地Red5服務器在http://localhost:5080,或安裝程序頁,http://localhost:5080/installer。 此頁將顯示列表WAR文件提供給安裝,這樣我才可以得到Red5示範運行。

不過,我的防火牆後面,因此不能檢索文件列表。 頁面顯示空白的閃存在數據網格列,即使調試信息展示NetConnection.Connect.Success。 混亂是不是?

為了解決這個問題,我使用TortoiseSVN和獲取所有的戰爭和主機的文件包在我自己的計算機。 這裡是我的歸檔:

步驟一

  1. 創建一個文件夾下的webapps /根/ applns
  2. 通過 TortoiseSVN的下載一切。 結帳時:http://red5.googlecode.com/svn/snapshots/
  3. 把下載的目錄中applns

第二步
有一個文件webapps/installer/WEB-INF/red5-web.properties
使用記事本打開它/寫

這條線的變化
application.repository.url = http://red5.googlecode.com/svn/snapshots/


application.repository.url = http://localhost:5080/applns/

現在再次重新啟動 Red5

第三步
訪問 http://localhost:5080/installer/

現在你可以看到你的戰爭已下載的軟件包(從您的服務器
本身)。 安裝應用程序脫機,在當地!

參考: http://www.pubbs.net/osflash/200908/46089/

Jun 21
  • 用samba共享可读写文件夹

用samba共享可读写文件夹
首先当然是要安装samba了:

sudo apt-get install samba
sudo apt-get install smbfs

下面我们来共享群组可读写文件夹,假设你要共享的文件夹为: /home/csx/share

首先创建这个文件夹

mkdir /home/csx/share
chmod 777 /home/csx/share

备份并编辑smb.conf允许网络用户访问
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf_backup
sudo gedit /etc/samba/smb.conf

搜寻这一行文字

; security = user

用下面这几行取代
security = user

username map = /etc/samba/smbusers

Continue reading »

Jun 14

前些天把Adobe官方的p2p Video phone demo的研究了一遍,了解了这个基于Stratus的video phone是如何工作的。由于Adobe的demo需要运行一个python写的web service才可以运行 — 这个web service用于用户名与peer ID之间的转换,真实项目中我们不可能用256-bit 的 peer ID作为联系人的用户名,所以做一个用户名到Peer ID之间的转换是很用必要的,打电话时只需要知道对方的登陆用户名就可以联系,不需要知道这个超长的不可能记住的Peer ID。可能很多不熟悉python的人没有成功运行源代码,现在我就从我的角度告诉大家如何创建这么一个 P2P 电话。(当然不需要额外的web service)

首先还是了解一些必要的知识

RTMFP — RTMFP是Adobe公司开发的一套新的通信协议,该协议可以让使用Adobe Flash Player的终端用户之间进行直接通信, RTMFP基于UDP而Flash Media Service支持的RTMP是基于TCP的。

Stratus — Adobe Stratus service beta 是支持RTMFP 的服务器。它是一个中转式的服务,它的作用是建立flash player之间的通讯。即使它们位于NATs的后面。与FMS不同,Stratus不支持媒体转播,共享对象,脚本等等,你只能开发客户端之间直接联系的应用程序。

我们的网络电话就是基于上面描述的技术,在开始之前有一些准备工作要做。

确定你安装了 Flex SDK3.2. 这里下载
确定安装了flash payer 10 debug version (开发环境最好用debug version) 这里下载
申请一个 Stratus develper key 这里申请
新建一个项目,名字随意,位置随意,编辑项目属性 — Flex compiler — Require Flash player version 到 10:0:0

Continue reading »

Jun 14

一、设置路由器的端口转发规则 

名称

开始
IP地址
结束

二、开启内网对应机器的防火墙端口
防火墙–>设置–>高级
点一个连接,然后点”设置”,勾选”web服务器(http)”
如果需要端口转换,则可以新填加一个服务,然后设置内外的端口号.

这样,就这样通过外网的ip访问内网的站点了.
blog.51ria.com
通过路由器的DMZ服务器也可以,不过我一直没设置成功.有设置成功的与我交流,我的msn:apex005@hotamil.com

May 14

PV3D虽然没有直接定义接口,但是在org.papervision3d.core.proto包里定义的已Object3D结尾的类,有几个属于顶级基类,其他的类都派生于此。

1。PV3D核心类如下:
1.1 显示对象容器类:
DisplayObjectContainer3D直接继承自flash内部的EventDispatcher类,支持事件派发。

1.2 材质对象类:
MaterialObject3D直接继承自flash内部的EventDispatcher类,支持事件派发。

1.3 场景对象类:
SceneObject3D继承自DisplayObjectContainer3D,是3维场景对象类。
CameraObject3D继承自DisplayObject3D,是摄像机对象类。
PV3D的DisplayObject3D是继承自DisplayObjectContainer3D的,这个容易和flash的内置继承层次混淆,flash内置的DisplayObject不是容器,而PV3D的DisplayObject3D是容器。
flash的内置继承层次是DisplayObjectContainer是继承自InteractiveObject –> DisplayObject,flash的DisplayObjectContainer是支持鼠标交互的。
而PV3D的Mesh3D是不直接支持和鼠标交互的,如果需要和鼠标交互,需要在传给场景构造的参数container上订阅鼠标事件。 Continue reading »

Apr 23

转载自http://www.fireyang.com/blog/?p=646

介绍:

使用这个工具,你可以在不改变原始的swf的情况下,直接在flash里查看幀频,内存使用情况,还结合了MonsterDebugger。
反正一个字:赞
ps:我打算把trace也加到里面,那是不是更爽了,哈哈,往下看吧……

参考:

  1. The Ultimate Debugging And Profiling
  2. Almighty PreloadSWF
  3. Flash Visual Profiler.

后面两篇需要翻墙(提议用googleReader订阅,然后自己慢慢找吧)

方法:

ps:期间涉及到mmcfg的配置,可以参考我以前的文章:《在ubuntu中捕获trace》(用mm.cfg来捕捉trace)

  • 安装Debug Player (如果你已经安装可以跳过)
  • 安装De MonsterDebugger并运行(可选)
  • 下载MicroProfiler.swf 到本地
  • 确认放文件的位置(如. d:/whatever/MicroProfiler.swf)必须在本地信任范围(修改信任范围地址: local trasted scope)
  • 打开你的mm.cfg文件并添加如下内容 (在 XP中 C:\Documents and Settings\username\mm.cfg)
    PreloadSWF=c:\whatever\MicroProfiler.swf
  • 关闭所有flashplayer并重启浏览器

就这样,现在起,如果你访问任何as3编译的.swf文件,你将在flash影片里看到MicroProfiler。如果你用MonsterDebugger来接受数据,你可以修改里面的变量进行测试了,非常cool吧。
我在使用中发现经常报一些错误,可能这个工具还不成熟还不稳定,有源码的,回头看看参考下……

Ps:修改“信任目录”方法:

  • xp:在C:\Documents and Settings\[your name]\Application Data\Macromedia\Flash Player\#Security 新建一个以.cfg为扩展名的文件,写入你MicroProfiler.swf所在目录的路径就可以了

我的截图(xp下成功,但是我这里有些动画出现类似花屏,不知道原因,ubuntu下一直报警告,还没找到原因):

原文截图: