ivaneeo's blog

          自由的力量,自由的生活。

            BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
            669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks

          #

          正常的網(wǎng)絡(luò)連接中很少會(huì)出現(xiàn)多個(gè)包丟失的現(xiàn)象,每成功接收或轉(zhuǎn)發(fā)100,000個(gè)數(shù)據(jù)包最多只會(huì)有幾個(gè)包丟失(如圖1)。在Linux虛擬機(jī)中,通過(guò)ifconfig命令可以很輕松地監(jiān)控到這種狀態(tài)。

            圖1. 通常以太網(wǎng)卡是不會(huì)丟包的

            當(dāng)虛擬機(jī)的網(wǎng)絡(luò)在突發(fā)大量訪問(wèn)的情況下,可能會(huì)發(fā)生多個(gè)包丟失,這樣就需要調(diào)整虛擬機(jī)的網(wǎng)絡(luò)設(shè)置。首先,確認(rèn)虛擬機(jī)使用了VMXNET3虛擬網(wǎng) 卡驅(qū)動(dòng)。這樣,在Linux宿主機(jī)的特定情況下,當(dāng)大數(shù)據(jù)文件在高帶寬的網(wǎng)絡(luò)上傳輸時(shí)會(huì)發(fā)生多數(shù)據(jù)包丟失。關(guān)閉接收和轉(zhuǎn)發(fā)校驗(yàn)總和可以解決這種情況。因?yàn)?校驗(yàn)總和的作用是停止錯(cuò)誤包的發(fā)送,這樣做會(huì)增加風(fēng)險(xiǎn)。考慮到以太網(wǎng)卡的錯(cuò)誤率通常低于百萬(wàn)分之一,風(fēng)險(xiǎn)的級(jí)別并不高。

            使用Linux ethtool工具來(lái)關(guān)閉VMware網(wǎng)絡(luò)設(shè)置中的接收和轉(zhuǎn)發(fā)校驗(yàn)總和,在命令行窗口中以root賬戶登錄ethtool。例如關(guān)閉網(wǎng)卡eth0的校驗(yàn)總 和命令如下:readethtool --offload eth0 rx off tx off;

            命令生效后,打開相應(yīng)網(wǎng)卡的配置文件:

            /etc/sysconfig/network/ifcfg-eth0 ( SUSE) 或 /etc/sysconfig/network-scripts/ifcfg-eth0 (Red Hat )

            同時(shí)把ETHTOOL_OPTIONS參數(shù)變?yōu)镋THTOOL_OPTIONS='--offload eth0 rx off tx off'

            如果依然存在丟包問(wèn)題,嘗試用ethtool工具增加接收隊(duì)列的緩沖區(qū)大小。默認(rèn)情況下,緩存設(shè)為256,可以設(shè)置的最大值為4096。重新設(shè)置緩存大小為512,使用命令ethtool -G eth0 512。如果結(jié)果不理想,嘗試更大的值。

            遇到Windows虛擬機(jī)的高丟包率就需要調(diào)整VMXNET3驅(qū)動(dòng)的網(wǎng)絡(luò)設(shè)置。在Device Manager中右鍵單擊VMXNET3驅(qū)動(dòng)并選擇Properties。在Advanced頁(yè)中有兩個(gè)參數(shù):Small RX Buffers和RX Ring #1 Size。適當(dāng)增加這些參數(shù)的值然后測(cè)試能否有改善。逐步加大該值直到問(wèn)題解決。

            多數(shù)情況下,這些設(shè)置可以降低虛擬機(jī)的丟包率。如果調(diào)整網(wǎng)絡(luò)參數(shù)失敗,或許就需要解決虛擬機(jī)其它的一些性能相關(guān)問(wèn)題,而不是虛擬機(jī)和ESXi平 臺(tái)之間的VMware網(wǎng)絡(luò)設(shè)置。咨詢宿主機(jī)OS 的相關(guān)專家,應(yīng)該有很多可以調(diào)整性能的相關(guān)參數(shù)。當(dāng)心更改了錯(cuò)誤的參數(shù)可能會(huì)對(duì)虛擬機(jī)帶來(lái)明顯的負(fù)面影響。

          posted @ 2014-07-15 22:53 ivaneeo 閱讀(509) | 評(píng)論 (0)編輯 收藏

          http://code4app.net/category/cocos2d
          http://www.cocos2d-x.org/hub/all?category=5
          http://blog.makeapp.co/
          posted @ 2014-06-04 17:09 ivaneeo 閱讀(293) | 評(píng)論 (0)編輯 收藏

          http://ricston.com/blog/mule-image-hosting-raml-mulerequester/
          posted @ 2014-05-28 23:32 ivaneeo 閱讀(333) | 評(píng)論 (0)編輯 收藏

          什么東西可以監(jiān)控OpenStack呢?OpenStack對(duì)監(jiān)控的需求起碼有以下這些:

           

          • 不僅要能監(jiān)控物理機(jī),也能監(jiān)控虛機(jī)
          • 監(jiān)控信息也必須是tenant隔離的
          • 監(jiān)控項(xiàng)的收集應(yīng)該是自動(dòng)地
          • 監(jiān)控工具應(yīng)該一般化以監(jiān)控任何設(shè)備
          • 監(jiān)控工具必須提供API

          下面是監(jiān)控工具的一般架構(gòu):

           

          zhjk

           

          網(wǎng)上搜索了一下,現(xiàn)在主流的監(jiān)控工具有:Nagios, cacti, Zabbix, Muni, Zenoss。我不是做運(yùn)維的對(duì)這些工具都不熟,以前不熟,現(xiàn)在也不熟。下面是一些理解,不一定準(zhǔn)。

          Nagios,最老牌了,比較通用的監(jiān)控工具。特大的特點(diǎn)是報(bào)警。圖形化功能一般般。一般要安裝Agent,配置起來(lái)看網(wǎng)上的說(shuō)法是比較復(fù)雜的,沒(méi)用過(guò),沒(méi)實(shí)際發(fā)言權(quán)。

          cacti,圖形化功能不錯(cuò),所以Nagios一般結(jié)合它來(lái)使用。

          Zabbix,監(jiān)控和圖形化功能都還可以了,尤其有一本電子書 zabbix 1.8 network monitoring

          Zenoss, 監(jiān)控新貴,它使用無(wú)Agent的通用技術(shù)如SNMP和SSL來(lái)監(jiān)控,部署起來(lái)會(huì)比較方便。尤其是Zenoss公司有人現(xiàn)在也加入OpenStack社區(qū)了,專門開發(fā)了一個(gè)OpenStack特有的擴(kuò)展(

          https://github.com/zenoss/ZenPacks.zenoss.OpenStack)不幸的是,目前只支持Nova API 1.1,且它只能收集單個(gè)tenant的數(shù)據(jù),不利于rating和billing。

          OpenStack Ceilometer工程主要監(jiān)控的是tenant下虛機(jī)的數(shù)據(jù),用來(lái)做billing的,物理機(jī)的監(jiān)控支持不大好。

          比較來(lái)比較去,如果是我,可能會(huì)做如下選型決定,不一定正確 :

          Nagios 或者 Zenoss (視情況)

           

          下面內(nèi)容來(lái)自:http://docs.openstack.org/developer/ceilometer/, 我們看一下Ceilometer工程的現(xiàn)狀, 架構(gòu)如下:

           

          zhjk2

           

          運(yùn)行OpenStack各組件的節(jié)點(diǎn)上一般有Agent來(lái)收集信息,收集后發(fā)給MQ,Ceilometer的Collector進(jìn)程監(jiān)控到數(shù)據(jù)之后存儲(chǔ)到DB之中。從http://docs.openstack.org/developer/ceilometer/measurements.html 這頁(yè)顯示的監(jiān)控項(xiàng)來(lái)看,目前Ceilometer監(jiān)控來(lái)的數(shù)據(jù)主要來(lái)只是用來(lái)做billing的

           

          文章來(lái)源:http://blog.csdn.net/quqi99/article/details/9400747
          文章作者:張華 http://blog.csdn.net/quqi99

          posted @ 2014-05-28 01:01 ivaneeo 閱讀(440) | 評(píng)論 (0)編輯 收藏

          使用truelicense實(shí)現(xiàn)用于JAVA工程license機(jī)制(包括license生成和驗(yàn),有需要的朋友可以參考下。


          開發(fā)的軟件產(chǎn)品在交付使用的時(shí)候,往往會(huì)授權(quán)一段時(shí)間的試用期,這個(gè)時(shí)候license就派上用場(chǎng)了。不同于在代碼中直接加上時(shí)間約束,需要重新授權(quán)的時(shí)候使用license可以避免修改源碼,改動(dòng)部署,授權(quán)方直接生成一個(gè)新的license發(fā)送給使用方替換掉原來(lái)的license文件即可。下面將講述使用truelicense來(lái)實(shí)現(xiàn)license的生成和使用。Truelicense是一個(gè)開源的證書管理引擎,詳細(xì)介紹見(jiàn)https://truelicense.java.net/

          一、首先介紹下license授權(quán)機(jī)制的原理:

          1、 生成密鑰對(duì),方法有很多。

          2、 授權(quán)者保留私鑰,使用私鑰對(duì)包含授權(quán)信息(如使用截止日期,MAC地址等)的license進(jìn)行數(shù)字簽名。

          3、 公鑰給使用者(放在驗(yàn)證的代碼中使用),用于驗(yàn)證license是否符合使用條件。

          接下來(lái)是本例制作license的具體步驟:

          二、第一步:使用keytool生成密鑰對(duì)

          以下命令在dos命令行執(zhí)行,注意當(dāng)前執(zhí)行目錄,最后生成的密鑰對(duì)即在該目錄下:

          1、首先要用KeyTool工具來(lái)生成私匙庫(kù):(-alias別名 –validity 3650表示10年有效)

          keytool -genkey -alias privatekey -keystoreprivateKeys.store -validity 3650

          2、然后把私匙庫(kù)內(nèi)的公匙導(dǎo)出到一個(gè)文件當(dāng)中:

          keytool -export -alias privatekey -file certfile.cer -keystore privateKeys.store

          3、然后再把這個(gè)證書文件導(dǎo)入到公匙庫(kù):

          keytool -import -alias publiccert -file certfile.cer -keystore publicCerts.store

          最后生成文件privateKeys.store、publicCerts.store拷貝出來(lái)備用。

          三、第二步:生成證書(該部分代碼由授權(quán)者獨(dú)立保管執(zhí)行)

          1、 首先LicenseManagerHolder.java類:

          package cn.melina.license; import de.schlichtherle.license.LicenseManager; import de.schlichtherle.license.LicenseParam;  /**  * LicenseManager??????  * @author melina  */ public class LicenseManagerHolder { 	 	private static LicenseManager licenseManager;   	public static synchronized LicenseManager getLicenseManager(LicenseParam licenseParams) {     	if (licenseManager == null) {     		licenseManager = new LicenseManager(licenseParams);     	}     	return licenseManager;     } } 

          2、 然后是主要生成license的代碼CreateLicense.java:

          package cn.melina.license;  import java.io.File; import java.io.IOException; import java.io.InputStream; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Properties; import java.util.prefs.Preferences; import javax.security.auth.x500.X500Principal; import de.schlichtherle.license.CipherParam; import de.schlichtherle.license.DefaultCipherParam; import de.schlichtherle.license.DefaultKeyStoreParam; import de.schlichtherle.license.DefaultLicenseParam; import de.schlichtherle.license.KeyStoreParam; import de.schlichtherle.license.LicenseContent; import de.schlichtherle.license.LicenseParam; import de.schlichtherle.license.LicenseManager;  /**  * CreateLicense  * @author melina  */ public class CreateLicense { 	//common param 	private static String PRIVATEALIAS = ""; 	private static String KEYPWD = ""; 	private static String STOREPWD = ""; 	private static String SUBJECT = ""; 	private static String licPath = ""; 	private static String priPath = ""; 	//license content 	private static String issuedTime = ""; 	private static String notBefore = ""; 	private static String notAfter = ""; 	private static String consumerType = ""; 	private static int consumerAmount = 0; 	private static String info = ""; 	// 為了方便直接用的API里的例子 	// X500Princal是一個(gè)證書文件的固有格式,詳見(jiàn)API 	private final static X500Principal DEFAULTHOLDERANDISSUER = new X500Principal( 			"CN=Duke、OU=JavaSoft、O=Sun Microsystems、C=US"); 	 	public void setParam(String propertiesPath) { 		// 獲取參數(shù) 		Properties prop = new Properties(); 		InputStream in = getClass().getResourceAsStream(propertiesPath); 		try { 			prop.load(in); 		} catch (IOException e) { 			// TODO Auto-generated catch block 			e.printStackTrace(); 		} 		PRIVATEALIAS = prop.getProperty("PRIVATEALIAS"); 		KEYPWD = prop.getProperty("KEYPWD"); 		STOREPWD = prop.getProperty("STOREPWD"); 		SUBJECT = prop.getProperty("SUBJECT"); 		KEYPWD = prop.getProperty("KEYPWD"); 		licPath = prop.getProperty("licPath"); 		priPath = prop.getProperty("priPath"); 		//license content 		issuedTime = prop.getProperty("issuedTime"); 		notBefore = prop.getProperty("notBefore"); 		notAfter = prop.getProperty("notAfter"); 		consumerType = prop.getProperty("consumerType"); 		consumerAmount = Integer.valueOf(prop.getProperty("consumerAmount")); 		info = prop.getProperty("info"); 		 	}  	public boolean create() {		 		try { 			/************** 證書發(fā)布者端執(zhí)行 ******************/ 			LicenseManager licenseManager = LicenseManagerHolder 					.getLicenseManager(initLicenseParams0()); 			licenseManager.store((createLicenseContent()), new File(licPath));	 		} catch (Exception e) { 			e.printStackTrace(); 			System.out.println("客戶端證書生成失敗!"); 			return false; 		} 		System.out.println("服務(wù)器端生成證書成功!"); 		return true; 	}  	// 返回生成證書時(shí)需要的參數(shù) 	private static LicenseParam initLicenseParams0() { 		Preferences preference = Preferences 				.userNodeForPackage(CreateLicense.class); 		// 設(shè)置對(duì)證書內(nèi)容加密的對(duì)稱密碼 		CipherParam cipherParam = new DefaultCipherParam(STOREPWD); 		// 參數(shù)1,2從哪個(gè)Class.getResource()獲得密鑰庫(kù);參數(shù)3密鑰庫(kù)的別名;參數(shù)4密鑰庫(kù)存儲(chǔ)密碼;參數(shù)5密鑰庫(kù)密碼 		KeyStoreParam privateStoreParam = new DefaultKeyStoreParam( 				CreateLicense.class, priPath, PRIVATEALIAS, STOREPWD, KEYPWD); 		LicenseParam licenseParams = new DefaultLicenseParam(SUBJECT, 				preference, privateStoreParam, cipherParam); 		return licenseParams; 	}  	// 從外部表單拿到證書的內(nèi)容 		public final static LicenseContent createLicenseContent() { 			DateFormat format = new SimpleDateFormat("yyyy-MM-dd"); 			LicenseContent content = null; 			content = new LicenseContent(); 			content.setSubject(SUBJECT); 			content.setHolder(DEFAULTHOLDERANDISSUER); 			content.setIssuer(DEFAULTHOLDERANDISSUER); 			try { 				content.setIssued(format.parse(issuedTime)); 				content.setNotBefore(format.parse(notBefore)); 				content.setNotAfter(format.parse(notAfter)); 			} catch (ParseException e) { 				// TODO Auto-generated catch block 				e.printStackTrace(); 			} 			content.setConsumerType(consumerType); 			content.setConsumerAmount(consumerAmount); 			content.setInfo(info); 			// 擴(kuò)展 			content.setExtra(new Object()); 			return content; 		} } 

          3、 測(cè)試程序licenseCreateTest.java:

          package cn.melina.license; import cn.melina.license.CreateLicense; public class licenseCreateTest { 	public static void main(String[] args){ 		CreateLicense cLicense = new CreateLicense(); 		//獲取參數(shù) 		cLicense.setParam("./param.properties"); 		//生成證書 		cLicense.create(); 	} } 

          4、 生成時(shí)使用到的param.properties文件如下:

          ##########common parameters########### #alias PRIVATEALIAS=privatekey #key(該密碼生成密鑰對(duì)的密碼,需要妥善保管,不能讓使用者知道) KEYPWD=bigdata123456 #STOREPWD(該密碼是在使用keytool生成密鑰對(duì)時(shí)設(shè)置的密鑰庫(kù)的訪問(wèn)密碼) STOREPWD=abc123456 #SUBJECT SUBJECT=bigdata #licPath licPath=bigdata.lic #priPath priPath=privateKeys.store ##########license content########### #issuedTime issuedTime=2014-04-01 #notBeforeTime notBefore=2014-04-01 #notAfterTime notAfter=2014-05-01 #consumerType consumerType=user #ConsumerAmount consumerAmount=1 #info info=this is a license 

          根據(jù)properties文件可以看出,這里只簡(jiǎn)單設(shè)置了使用時(shí)間的限制,當(dāng)然可以自定義添加更多限制。該文件中表示授權(quán)者擁有私鑰,并且知道生成密鑰對(duì)的密碼。并且設(shè)置license的內(nèi)容。

          四、第三步:驗(yàn)證證書(使用證書)(該部分代碼結(jié)合需要授權(quán)的程序使用)

          1、 首先LicenseManagerHolder.java類,同上。

          2、 然后是主要驗(yàn)證license的代碼VerifyLicense.java:

          package cn.melina.license;  import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.Properties; import java.util.prefs.Preferences;  import de.schlichtherle.license.CipherParam; import de.schlichtherle.license.DefaultCipherParam; import de.schlichtherle.license.DefaultKeyStoreParam; import de.schlichtherle.license.DefaultLicenseParam; import de.schlichtherle.license.KeyStoreParam; import de.schlichtherle.license.LicenseParam; import de.schlichtherle.license.LicenseManager;  /**  * VerifyLicense  * @author melina  */ public class VerifyLicense { 	//common param 	private static String PUBLICALIAS = ""; 	private static String STOREPWD = ""; 	private static String SUBJECT = ""; 	private static String licPath = ""; 	private static String pubPath = ""; 	 	public void setParam(String propertiesPath) { 		// 獲取參數(shù) 		Properties prop = new Properties(); 		InputStream in = getClass().getResourceAsStream(propertiesPath); 		try { 			prop.load(in); 		} catch (IOException e) { 			// TODO Auto-generated catch block 			e.printStackTrace(); 		} 		PUBLICALIAS = prop.getProperty("PUBLICALIAS"); 		STOREPWD = prop.getProperty("STOREPWD"); 		SUBJECT = prop.getProperty("SUBJECT"); 		licPath = prop.getProperty("licPath"); 		pubPath = prop.getProperty("pubPath"); 	}  	public boolean verify() {		 		/************** 證書使用者端執(zhí)行 ******************/  		LicenseManager licenseManager = LicenseManagerHolder 				.getLicenseManager(initLicenseParams()); 		// 安裝證書 		try { 			licenseManager.install(new File(licPath)); 			System.out.println("客戶端安裝證書成功!"); 		} catch (Exception e) { 			e.printStackTrace(); 			System.out.println("客戶端證書安裝失敗!"); 			return false; 		} 		// 驗(yàn)證證書 		try { 			licenseManager.verify(); 			System.out.println("客戶端驗(yàn)證證書成功!"); 		} catch (Exception e) { 			e.printStackTrace(); 			System.out.println("客戶端證書驗(yàn)證失效!"); 			return false; 		} 		return true; 	}  	// 返回驗(yàn)證證書需要的參數(shù) 	private static LicenseParam initLicenseParams() { 		Preferences preference = Preferences 				.userNodeForPackage(VerifyLicense.class); 		CipherParam cipherParam = new DefaultCipherParam(STOREPWD);  		KeyStoreParam privateStoreParam = new DefaultKeyStoreParam( 				VerifyLicense.class, pubPath, PUBLICALIAS, STOREPWD, null); 		LicenseParam licenseParams = new DefaultLicenseParam(SUBJECT, 				preference, privateStoreParam, cipherParam); 		return licenseParams; 	} } 

          3、 測(cè)試程序licenseVerifyTest.java:

          package cn.melina.license;  public class licenseVerifyTest { 	public static void main(String[] args){ 		VerifyLicense vLicense = new VerifyLicense(); 		//獲取參數(shù) 		vLicense.setParam("./param.properties"); 		//驗(yàn)證證書 		vLicense.verify(); 	} } 

          4、 驗(yàn)證時(shí)使用到的Properties文件如下:

          ##########common parameters########### #alias PUBLICALIAS=publiccert #STOREPWD(該密碼是在使用keytool生成密鑰對(duì)時(shí)設(shè)置的密鑰庫(kù)的訪問(wèn)密碼) STOREPWD=abc123456 #SUBJECT SUBJECT=bigdata #licPath licPath=bigdata.lic #pubPath pubPath=publicCerts.store 

          根據(jù)該驗(yàn)證的properties可以看出,使用者只擁有公鑰,沒(méi)有私鑰,并且也只知道訪問(wèn)密鑰庫(kù)的密碼,而不能知道生成密鑰對(duì)的密碼。

          五、說(shuō)明:

          注意實(shí)際操作中,公鑰、私鑰、證書等文件的存放路徑。

          以上代碼需要用到truelicense的一些包,可以自行網(wǎng)上搜,也可以下載我的完整工程,里面附帶了所需的jar包。

          以上兩個(gè)完整工程提供下載:http://download.csdn.net/detail/luckymelina/7141131

          GOOD LUCK!小伙伴們加油!歡迎與我交流。

          posted @ 2014-04-30 03:32 ivaneeo 閱讀(6578) | 評(píng)論 (0)編輯 收藏

               摘要: 之前做了一個(gè)web項(xiàng)目的時(shí)候,好好的網(wǎng)站第二天總是會(huì)提示using the Connector/J connection property 'autoReconnect=true' to avoid this problem.  這樣的錯(cuò)誤1com.mysql.jdbc.CommunicationsException: The last packet successfully recei...  閱讀全文
          posted @ 2014-04-28 13:32 ivaneeo 閱讀(480) | 評(píng)論 (0)編輯 收藏

          /etc/rabbitmq.conf:

          [
              {rabbit, [{loopback_users, []}]}
          ].
          posted @ 2014-04-04 21:28 ivaneeo 閱讀(1653) | 評(píng)論 (0)編輯 收藏

          http://outofmemory.cn/code-snippet/4079/java-usage-Xuggler-get-video-shichang-fen-bianlv-high-kuan-kind-information
          posted @ 2014-04-01 00:44 ivaneeo 閱讀(1230) | 評(píng)論 (0)編輯 收藏

          Canvas里的globalCompositeOperation是個(gè)很少用到的函數(shù),不太熟悉程序繪圖的同學(xué)們估計(jì)壓根都不知道這玩意是干什么的.

          簡(jiǎn)單來(lái)說(shuō),Composite(組合),就是對(duì)你在繪圖中,后繪制的圖形與先繪制的圖形之間的組合顯示效果,比如在國(guó)畫中,你先畫一筆紅色,再來(lái)一筆綠色,相交的部分是一種混色,而在油畫中,綠色就會(huì)覆蓋掉相交部分的紅色,這在程序繪圖中的處理就是Composite,Canvas API中對(duì)應(yīng)的函數(shù)就是globalCompositeOperation,跟globalAlpha一樣,這個(gè)屬性是全局的,所以在使用的時(shí)候要注意save和restore.

          我在練習(xí)這個(gè)函數(shù)的時(shí)候,用的是chrome瀏覽器,但是測(cè)試結(jié)果卻跟實(shí)際應(yīng)該出現(xiàn)的結(jié)果不太一致,開始我以為是寫錯(cuò)了,檢查數(shù)遍卻沒(méi)有問(wèn)題,疑惑之下?lián)Q了各種瀏覽器來(lái)測(cè)試,真是囧啊,每個(gè)瀏覽器居然都不一樣,連同核心的chrome和safari都不一樣...下面是測(cè)試結(jié)果.


          chrome


          firefox


          opera


          safari


          firefox官方網(wǎng)站給的實(shí)際效果圖

          下面是每一個(gè)選項(xiàng)的說(shuō)明(我表達(dá)的可能不太明白,看圖吧):

          source-over 默認(rèn),相交部分由后繪制圖形的填充(顏色,漸變,紋理)覆蓋,全部瀏覽器通過(guò)

          source-in 只繪制相交部分,由后繪制圖形的填充覆蓋,其余部分透明,webkit兩兄弟沒(méi)有通過(guò)

          source-out 只繪制后繪制圖形不相交的部分,由后繪制圖形的填充覆蓋,其余部分透明,webkit兩兄弟沒(méi)有通過(guò)

          source-atop 后繪制圖形不相交的部分透明,相交部分由后繪制圖形的填充覆蓋,全部瀏覽器通過(guò)

          destination-over 相交部分由先繪制圖形的填充(顏色,漸變,紋理)覆蓋,全部瀏覽器通過(guò)

          destination-in 只繪制相交部分,由先繪制圖形的填充覆蓋,其余部分透明,webkit兩兄弟沒(méi)有通過(guò)

          destination-out 只繪制先繪制圖形不相交的部分,由先繪制圖形的填充覆蓋,其余部分透明,全部瀏覽器通過(guò)

          destination-atop 先繪制圖形不相交的部分透明,相交部分由先繪制圖形的填充覆蓋,webkit兩兄弟沒(méi)有通過(guò)

          lighter 相交部分由根據(jù)先后圖形填充來(lái)增加亮度,全部瀏覽器通過(guò)

          darker 相交部分由根據(jù)先后圖形填充來(lái)降低亮度,chrome通過(guò),firefox官方說(shuō)Firefox 3.6 / Thunderbird 3.1 / Fennec 1.0以后版本移除這個(gè)效果-0-,why?safari看似可以,但是無(wú)論你什么顏色,它都給填充成黑色,opera無(wú)效果

          copy 只繪制后繪制圖形,只有opera通過(guò)

          xor 相交部分透明,全部瀏覽器通過(guò)

          結(jié)果太令人無(wú)語(yǔ)了,特別是firefox那個(gè)新版本移除,我靠,為嘛啊?chrome和safari難兄難弟,成績(jī)一塌糊涂,難道是webkit核心的問(wèn)題?safari那個(gè)填充黑色很有IE6-中png透明問(wèn)題的風(fēng)范...opera表現(xiàn)很搶眼,只有一個(gè)效果未實(shí)現(xiàn),繼續(xù)努力!

          評(píng)分及瀏覽器版本:
          Chrome dev 7.0.503.0 : 7/12
          Firefox 3.6.6 : 10/12
          Opera 10.53 : 11/12
          Safari 4.0.3(531.9.1) : 6/12
          posted @ 2014-03-28 15:48 ivaneeo 閱讀(284) | 評(píng)論 (0)編輯 收藏

           Logging In to Guacamole

          You can access the web login screen for Guacamole from the server at http://127.0.0.1:8080/guacamole

          The default user is "guacadmin", with the default password of "guacadmin". You can change your password by editing your own user in the administration screen.

          With everything configured correctly you should be able to access the web login screen through Amahi at http://guacamole.yourhdaname.com:8080/guacamole/

          posted @ 2014-03-25 18:36 ivaneeo 閱讀(611) | 評(píng)論 (0)編輯 收藏

          僅列出標(biāo)題
          共67頁(yè): First 上一頁(yè) 4 5 6 7 8 9 10 11 12 下一頁(yè) Last 
          主站蜘蛛池模板: 沭阳县| 宕昌县| 老河口市| 方山县| 平乡县| 旬邑县| 光泽县| 鹤庆县| 资兴市| 格尔木市| 宁国市| 长沙市| 斗六市| 望都县| 莱西市| 河南省| 祁门县| 虎林市| 克山县| 太原市| 喀喇沁旗| 阿坝| 都江堰市| 英吉沙县| 吴川市| 东乌珠穆沁旗| 濮阳县| 大连市| 湾仔区| 益阳市| 卢龙县| 恩施市| 玛纳斯县| 枞阳县| 武胜县| 莎车县| 简阳市| 湖南省| 晴隆县| 康马县| 镇赉县|