僅改2位元組,WinXP Home即刻變身WinXP Pro
一份名為《C'T》的德國電腦雜誌在一年前的一次報導,它已經成功實現把Windows XP Home的安裝檔變成WinXP Pro。真的不錯。
具體說明看這裏:
http://hk.knowledge.yahoo.com/question/?qid=7007011202727
不過,也有文章說“要小心”了:
http://download.enet.com.cn/blog/index.php?itemid=1519
一虎一席谈:“伪科学”PK
第一次PK,分5段視頻:
http://v.blog.sina.com.cn/b/585710-1192346960.html
第一次PK,分4段視頻:
http://v.blog.sina.com.cn/b/585036-1192346960.html
強,約2個小時,我剛看完,方舟子\司馬南\何祚庥等皆登場,節目現場就差打起來了,有些年紀大的當場都吃高血壓的藥了,這比什麼大專辯論賽強多了.
我正在搜索,如果以後還有的話一定會再推薦給大家.真得非常強,不看可惜了.
机顶盒的flash界面程序GUI
http://www.6rooms.com/watch/18179.html
现在看起来,flash之对于视频应用还是刚刚起步,不要看youtube、56、tudou等现在还没有什么前途可言,但未来可能改变视频媒体的格局,目前互联网新闻和广告已经改变了平面媒体,虽也无法预料到“会发生什么”,但我们可以预料到“可能发生什么”。
加油,Flash!!!!!
Flash和Java结合开发的利器_《Java for Flash动态网站开发手札》_部分章节连载(8)
Flash和PHP結合的方式總結(Flash和PHP通訊的方式)★☆★☆★☆★☆★☆★☆
[2]使用LoadVars類的load、send和sendAndLoad方法可以使用 HTTP 或 HTTPS 協定以URL編碼格式向PHP應用程式伺服器傳遞和接收資料。
[3]使用XML類的XML.send、XML.load和XML.sendAndLoad方法可以以XML格式向PHP應用程式伺服器傳遞和接收資料,這還包括一些基於XML的變種形式,例如WDDX、SOAP等。
[4]使用XMLSocket類的XMLSocket.connect 和 XMLSocket.send方法可以創建和使用TCP/IP套接字連接從而以XML 格式向PHP應用程式伺服器傳遞和接收資料。
[5]使用Connection類或者NetConnection的call方法可以使用AMF協定向PHP應用程式伺服器傳遞和接收資料,這被稱為AMF-RPC的方式,還包括其他的變種形式,但都統稱為AMF-RPC方式。
現在馬上出發
作者邀您訪問他的BLOG: http://blog.csdn.net/zhang_yafei/(簡體)
惊曝!从没有公布的液晶电视天生缺陷!(液晶电视很容易烧毁?)
《Flash ActionScript X》勘误(1)
勘误1(chapter_11简体中文版)、
/**-------------------------------------------------------
*《Flash ActionScript X开发入门》勘误
* @勘误目的 代码补充注释
* @page 188--190
* @version Created on Dec 7, 2006
* @author zhang yafei
* @BLOG http://zhang-yafei.spaces.live.com/
-------------------------------------------------------**/
/**-------------------------------------------------------
*总体的思路是将Sound对象的属性与GUI模块关联起来
*我想无论是何种考虑,都无法躲过使用此方法来实现
*-------------------------------------------------------
*我利用了一系列变量和onEnterFrame事件配合来达到这个目的
*另外一些变量用来控制状态:前进、后退、拖动音轨滑块等
*-------------------------------------------------------
* newPosition Sound对象的播放位置,每次播放都检查这个变量
* advance 前进
* goBack 后退
* dragging 拖动音轨滑块
* playing 是否正处于播放状态
-------------------------------------------------------**/
//stop()是基于时间轴应用程序最常见的命令
//你随处都可以用它,并且不要吝啬
stop();
//首先声明和初始化变量
var newPosition:Number;
var advance:Boolean;
var goBack:Boolean;
var dragging:Boolean;
var playing:Boolean = true;
butt_play.enabled = false;
//创建Sound的一个实例,然后从库中加载并开始播放
var mySound:Sound = new Sound();
mySound.attachSound(varSound);
mySound.start(0, 1);
//声音播放完毕时,一切复原
mySound.onSoundComplete = function() {
mysound.stop();
newPosition = mySound.duration/1000;
playing = false;
butt_play.enabled = true;
};
//初始化变量和属性
//音轨属性,主要是用来控制滑块的拖放范围
//startDrag要用这些变量
var fade_track_top:Number = panel_open.fade_track._y;
var fade_track_bottom:Number = panel_open.fade_track._y;
var fade_track_left:Number = panel_open.fade_track._x;
var fade_track_range:Number = panel_open.fade_track._width-1;
var fade_track_right:Number = panel_open.fade_track._x+fade_track_range;
/**
*GUI按钮的控制事件,主要就是运算几个变量
*其中主要的就是注意newPosition变量
*因为这个变量代表的是当前播放的位置
*/
butt_play.onRelease = function() {
if (!playing && newPosition<mySound.duration) {
mySound.start(newPosition, 1);
playing = true;
}
butt_stop.enabled = true;
butt_pause.enabled = true;
butt_play.enabled = false;
};
butt_pause.onRelease = function() {
if (playing) {
newPosition = mySound.position/1000;
}
mySound.stop();
butt_pause.enabled = false;
butt_stop.enabled = true;
butt_play.enabled = true;
playing = false;
};
butt_rewind.onRelease = function() {
newPosition = 0;
mySound.stop();
playing = false;
panel_open.butt_fade._x = fade_track_left;
butt_play.onRelease();
butt_pause.enabled = true;
butt_stop.enabled = true;
butt_play.enabled = false;
};
butt_fastforward.onRelease = function() {
newPosition = 0;
mySound.stop();
playing = false;
butt_play.enabled = true;
panel_open.butt_fade._x = fade_track_right;
};
butt_stop.onRelease = function() {
newPosition = 0;
mySound.stop();
playing = false;
panel_open.butt_fade._x = fade_track_left;
butt_pause.enabled = false;
butt_stop.enabled = false;
butt_play.enabled = true;
};
butt_stepforward.onPress = function() {
advance = true;
};
butt_stepforward.onRelease = function() {
advance = false;
};
butt_stepforward.onReleaseOutside = function() {
advance = false;
};
butt_stepBack.onPress = function() {
goBack = true;
};
butt_stepBack.onRelease = function() {
goBack = false;
};
butt_stepBack.onReleaseOutside = function() {
goBack = false;
};
//__________________________________________________________
//利用onEnterFrame事件配合快进和快退按钮命令
//在其中,我们定义了一个变量playing用来显示是否正在播放
//从而根据mySound对象属性来和音轨对应
this.onEnterFrame = function() {
//注意这里是根据播放的方向来控制的
//根据不同播放方向来不断改变音轨滑块的位置
if (advance) {
if (mySound.position/1000+1<mySound.duration/1000) {
if (playing) {
newPosition = mySound.position/1000+1;
mySound.stop();
mySound.start(newPosition, 1);
} else if (butt_fade._x<fade_track_right) {
butt_fade._x++;
newPosition = ((panel_open.butt_fade._x/fade_track_range)*mySound.duration)/1000;
}
}
}
if (goBack) {
if (playing) {
newPosition = mySound.position/1000-1;
mySound.stop();
mySound.start(newPosition, 1);
} else if (panel_open.butt_fade._x>fade_track_left) {
panel_open.butt_fade._x--;
newPosition = ((panel_open.butt_fade._x/fade_track_range)*mySound.duration)/1000;
}
}
//拖放移动音轨滑块,两个事件
//开始拖动和停止拖动
panel_open.butt_fade.onPress = function() {
startDrag(panel_open.butt_fade, false, fade_track_left, fade_track_top-5, fade_track_right, fade_track_bottom-5);
dragging = true;
playing = false;
};
panel_open.butt_fade.onRelease = function() {
stopDrag();
mySound.stop();
dragging = false;
if (panel_open.butt_fade._x/fade_track_range == 1) {
playing = false;
panel_open.butt_fade._x = fade_track_right;
newPosition = mySound.duration/1000;
} else {
playing = true;
newPosition = (((panel_open.butt_fade._x-fade_track_left)/fade_track_range)*mySound.duration)/1000;
if (playing) {
mySound.start(newPosition, 1);
}
}
};
//音轨滑块自动移动情况
if (playing) {
panel_open.butt_fade._x = (mySound.position/mySound.duration)*fade_track_range+fade_track_left;
}
};
感谢instanceof的来信。勘误3(第195-199页,增加代码的注释)、/**-------------------------------------------------------
*《Flash ActionScript X开发入门》勘误
* @勘误目的 代码补充注释
* @page 195--199
* @version Created on Dec 7, 2006
* @author zhang yafei
* @BLOG http://zhang-yafei.spaces.live.com/
-------------------------------------------------------**/
/**-------------------------------------------------------
*@总体的思路
*我们使用外部的XML文件来作为MP3文件的数据库
*主要就是MP3文件的的名称和路径
*因此下面来构造一个XML对象来加载和解析XML文件
*目的就是获得MP3文件的的名称和路径
-------------------------------------------------------**/
//soundList是一个列表框组件,用来显示MP3文件
//首先清空组件,也就是一个初始化
//变量myOutSound用来定义是播放库中的声音
//还是播放外部的MP3文件
soundList.removeAll();
_parent._parent.myOutSound = true;
//下面构造一个XML对象来加载和解析XML文件
var xmlSound:XML = new XML();
xmlSound.load("soundlist.xml");
xmlSound.ignoreWhite = true;
function myOnLoad():Void {
var myVar:String = xmlSound.firstChild.nodeName;
var myVar2:String = xmlSound.firstChild.firstChild.attributes.path;
var myVar3:String = xmlSound.firstChild.firstChild.nodeName;
var myVar4:String = xmlSound.firstChild.firstChild.nextSibling.nodeName;
var myVar5:String = xmlSound.firstChild.firstChild.firstChild.nodeValue;
var soundNum:Array = new Array();
soundNum = xmlSound.firstChild.childNodes;
for (i=0; i<=soundNum.length; i++) {
if (soundNum[i].nodeName.substr(0, 5).toLowerCase() == "sound") {
//填充列表框组件
soundList.addItem(soundNum[i].firstChild.nodeValue+" in "+soundNum[i].attributes.path, soundNum[i].attributes.path);
}
}
soundInput = soundList.getItemAt(0).data;
trace(soundList.getItemAt(0).data);
}
xmlSound.onLoad = myOnLoad;
/**-------------------------------------------------------
*处理用户的选择事件**
*1、用户选择复选框,表明他将播放库中的声音元件
*2、用户取消选择复选框,并点击列表框,那么表明将播放外部的MP3文件
**
*我们创建两个监听对象以处理用户对复选框和列表框的选择事件
-------------------------------------------------------**/
var myListBox:Object = new Object();
var myCheckBox:Object = new Object();
//为监听对象定义事件函数
//事件函数中有一些向播放器传递消息和命令的代码
//主要就是播放器按钮的状态、播放状态
//变量myOutSound用来定义是播放库中的声音
//还是播放外部的MP3文件
myListBox.change = function(event_obj:Object) {
soundInput = event_obj.target.selectedItem.data;
trace(event_obj.target.selectedItem.data);
_parent._parent.playing = false;
_parent._parent.mySound.stop();
_parent._parent.butt_rewind.onRelease();
_parent._parent.myOutSound = true;
};
myCheckBox.click = function(event_obj:Object) {
if (event_obj.target.selected) {
soundList.enabled = false;
soundInput = "";
_parent._parent.mySound.stop();
_parent._parent.playing = false;
_parent._parent.myOutSound = false;
_parent._parent.myInSound = true;
_parent._parent.butt_rewind.onRelease();
}
if (!event_obj.target.selected) {
soundList.enabled = true;
_parent._parent.mySound.stop();
_parent._parent.playing = false;
_parent._parent.myOutSound = true;
_parent._parent.myInSound = false;
_parent._parent.butt_rewind.onRelease();
}
};
//将监听事件函数赋给监听对象
soundList.addEventListener("change", myListBox);
soundCheck.addEventListener("click", myCheckBox);
//stop()是基于时间轴应用程序最常见的命令
//你随处都可以用它,并且不要吝啬
stop();感谢instanceof的来信。
Flash和Java结合开发的利器_《Java for Flash动态网站开发手札》_部分章节连载(7)
第21章 AMF-RPC的开源实现OpenAMF
OpenAMF是一个开源的AMF-RPC实现,几乎可以替代Flash Remoting MX for Java。并且也有自己的一些特点,本章我们就来介绍一下怎样使用OpenAMF开发Flash网络应用程序。
21.2嗨!Flash Remoting MX for Java
现在,我们将创建一个最简单的使用OpenAMF的Flash影片应用程序——一个类似传统的 Hello World程序。
从webapps\3JK\WEB-INF\classes目录下将flashRemoting目录复制到webapps\3JK_with_OpenAMF\WEB-INF\classes目录下,实际上这些类都可以被用于OpenAMF。
打开前面我们调用JavaBeans的Flash影片应用程序,只需修改一下网关的地址就可以了。
找到下面的一行代码:
var myService:Service = new Service("http://localhost:8080/3JK/gateway", null, "flashRemoting.javaBeansTest.FlashJavaBeans", null, null);
修改为:
var myService:Service = new Service("http://localhost:8080/3JK_with_OpenAMF/gateway", null, "flashRemoting.javaBeansTest.FlashJavaBeans", null, null);
按Ctrl+Enter键测试Flash影片应用程序,可以看到在“输出”面板中出现我们在JavaBeans中定义的信息。如图21.1所示:
图21.1 “输出”面板中显示返回值
同样也可以调用其它的例子,但是要注意将支持的类(例如rowset.jar)复制到3JK_with_OpenAMF\WEB-INF\lib目录下。
技巧与提示
OpenAMF不支持将Servlet和JSP作为远程服务方法。












