Sunday, July 6, 2014

立刻提升JQUERY性能的10個技巧

  1. 使用最新版本
  2. 合併、最小化腳本
  3. 用for替代each
  4. 用ID替代class選擇器
  5. 給選擇器指定前後文
  6. 建立緩存
  7. 避免DOM操作
  8. 避免使用concat(),利用join()處理長字串
  9. 返回false值
  10. 利用小抄和參考文檔

http://inspire.twgg.org/programming/jquery/item/48-jquery-to-enhance-the-performance-of-immediate-10-tips-by-tuts.html

8 招讓你優化 MYSQL 查詢性能

本文探討了提高MySQL 數據庫性能的思路,並從8個方面給出了具體的解決方法。

1、選取最適用的字段屬性

MySQL可以很好的支持大數據量的存取,但是一般說來,數據庫中的表越小,在它上面執行的查詢也就會越快。因此,在創建表的時候,為了獲得更 好的性能,我們可以將表中字段的寬度設得儘可能小。例如,在定義郵政編碼這個字段時,如果將其設置為CHAR(255),顯然給數據庫增加了不必要的空 間,甚至使用VARCHAR這種類型也是多餘的,因為CHAR(6)就可以很好的完成任務了。同樣的,如果可以的話,我們應該使用MEDIUMINT而不 是 BIGIN來定義整型字段。

另外一個提高效率的方法是在可能的情況下,應該儘量把字段設置為NOT NULL,這樣在將來執行查詢的時候,數據庫不用去比較NULL值。

對於某些文本字段,例如「省份」或者「性別」,我們可以將它們定義為ENUM類型。因為在MySQL中,ENUM類型被當作數值型數據來處理,而數值型數據被處理起來的速度要比文本類型快得多。這樣,我們又可以提高數據庫的性能。






2、使用連接(JOIN)來代替子查詢(SUB-QUERIES)
MySQL從4.1開始支持SQL的子查詢。這個技術可以使用SELECT語句來創建一個單列的查詢結果,然後把這個結果作為過濾條件用在另一 個查詢中。例如,我們要將客戶基本信息表中沒有任何訂單的客戶刪除掉,就可以利用子查詢先從銷售信息表中將所有發出訂單的客戶ID取出來,然後將結果傳遞 給主查詢,如下所示:

DELETE FROM customerinfo
WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo )
使用子查詢可以一次性的完成很多邏輯上需要多個步驟才能完成的SQL操作,同時也可以避免事務或者表鎖死,並且寫起來也很容易。但是,有些情況 下,子查詢可以被更有效率的連接(JOIN).. 替代。例如,假設我們要將所有沒有訂單記錄的用戶取出來,可以用下面這個查詢完成:

SELECT * FROM customerinfo
WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo )
如果使用連接(JOIN).. 來完成這個查詢工作,速度將會快很多。尤其是當salesinfo表中對CustomerID建有索引的話,性能將會更好,查詢如下:

SELECT * FROM customerinfo
LEFT JOIN salesinfoON customerinfo.CustomerID=salesinfo.
CustomerID
WHERE salesinfo.CustomerID IS NULL
連接(JOIN).. 之所以更有效率一些,是因為 MySQL不需要在內存中創建臨時表來完成這個邏輯上的需要兩個步驟的查詢工作。



3、使用聯合(UNION)來代替手動創建的臨時表
MySQL 從 4.0 的版本開始支持 UNION 查詢,它可以把需要使用臨時表的兩條或更多的 SELECT 查詢合併的一個查詢中。在客戶端的查詢會話結束的時候,臨時表會被自動刪除,從而保證數據庫整齊、高效。使用 UNION 來創建查詢的時候,我們只需要用 UNION作為關鍵字把多個 SELECT 語句連接起來就可以了,要注意的是所有 SELECT 語句中的字段數目要想同。下面的例子就演示了一個使用 UNION的查詢。

SELECT Name, Phone FROM client
UNION
SELECT Name, BirthDate FROM author
UNION
SELECT Name, Supplier FROM product


4、事務
儘管我們可以使用子查詢(Sub-Queries)、連接(JOIN)和聯合(UNION)來創建各種各樣的查詢,但不是所有的數據庫操作都可 以只用一條或少數幾條SQL語句就可以完成的。更多的時候是需要用到一系列的語句來完成某種工作。但是在這種情況下,當這個語句塊中的某一條語句運行出錯 的時候,整個語句塊的操作就會變得不確定起來。設想一下,要把某個數據同時插入兩個相關聯的表中,可能會出現這樣的情況:第一個表中成功更新後,數據庫突 然出現意外狀況,造成第二個表中的操作沒有完成,這樣,就會造成數據的不完整,甚至會破壞數據庫中的數據。要避免這種情況,就應該使用事務,它的作用是: 要麼語句塊中每條語句都操作成功,要麼都失敗。換句話說,就是可以保持數據庫中數據的一致性和完整性。事物以BEGIN 關鍵字開始,COMMIT關鍵字結束。在這之間的一條SQL操作失敗,那麼,ROLLBACK命令就可以把數據庫恢復到BEGIN開始之前的狀態。

BEGIN;
INSERT INTO salesinfo SET CustomerID=14;
UPDATE inventory SET Quantity=11
WHERE item='book';
COMMIT;
事務的另一個重要作用是當多個用戶同時使用相同的數據源時,它可以利用鎖定數據庫的方法來為用戶提供一種安全的訪問方式,這樣可以保證用戶的操作不被其它的用戶所幹擾。



5、鎖定表
儘管事務是維護數據庫完整性的一個非常好的方法,但卻因為它的獨佔性,有時會影響數據庫的性能,尤其是在很大的應用系統中。由於在事務執行的過程中,數據庫將會被鎖定,因此其它的用戶請求只能暫時等待直到該事務結束。如果一個數據庫系統只有少數幾個用戶
來使用,事務造成的影響不會成為一個太大的問題;但假設有成千上萬的用戶同時訪問一個數據庫系統,例如訪問一個電子商務網站,就會產生比較嚴重的響應延遲。

其實,有些情況下我們可以通過鎖定表的方法來獲得更好的性能。下面的例子就用鎖定表的方法來完成前面一個例子中事務的功能。

LOCK TABLE inventory WRITE
SELECT Quantity FROM inventory
WHEREItem='book';
...
UPDATE inventory SET Quantity=11
WHEREItem='book';
UNLOCK TABLES
這裡,我們用一個 SELECT 語句取出初始數據,通過一些計算,用 UPDATE 語句將新值更新到表中。包含有 WRITE 關鍵字的 LOCK TABLE 語句可以保證在 UNLOCK TABLES 命令被執行之前,不會有其它的訪問來對 inventory 進行插入、更新或者刪除的操作。



6、使用外鍵
鎖定表的方法可以維護數據的完整性,但是它卻不能保證數據的關聯性。這個時候我們就可以使用外鍵。例如,外鍵可以保證每一條銷售記錄都指向某一 個存在的客戶。在這裡,外鍵可以把customerinfo 表中的CustomerID映射到salesinfo表中CustomerID,任何一條沒有合法CustomerID的記錄都不會被更新或插入到 salesinfo中。

CREATE TABLE customerinfo
(
CustomerID INT NOT NULL ,
PRIMARY KEY ( CustomerID )
) TYPE = INNODB;

CREATE TABLE salesinfo
(
SalesID INT NOT NULL,
CustomerID INT NOT NULL,
PRIMARY KEY(CustomerID, SalesID),
FOREIGN KEY (CustomerID) REFERENCES customerinfo
(CustomerID) ON DELETECASCADE
) TYPE = INNODB;
注意例子中的參數「ON DELETE CASCADE」。該參數保證當 customerinfo 表中的一條客戶記錄被刪除的時候,salesinfo 表中所有與該客戶相關的記錄也會被自動刪除。如果要在 MySQL 中使用外鍵,一定要記住在創建表的時候將表的類型定義為事務安全表 InnoDB類型。該類型不是 MySQL 表的默認類型。定義的方法是在 CREATE TABLE 語句中加上 TYPE=INNODB。如例中所示。



7、使用索引
索引是提高數據庫性能的常用方法,它可以令數據庫服務器以比沒有索引快得多的速度檢索特定的行,尤其是在查詢語句當中包含有MAX(), MIN()和ORDERBY這些命令的時候,性能提高更為明顯。那該對哪些字段建立索引呢?一般說來,索引應建立在那些將用於JOIN, WHERE判斷和ORDER BY排序的字段上。儘量不要對數據庫中某個含有大量重複的值的字段建立索引。對於一個ENUM類型的字段來說,出現大量重複值是很有可能的情況,例如 customerinfo中的「province」.. 字段,在這樣的字段上建立索引將不會有什麼幫助;相反,還有可能降低數據庫的性能。我們在創建表的時候可以同時創建合適的索引,也可以使用ALTER TABLE或CREATE INDEX在以後創建索引。此外,MySQL
從版本3.23.23開始支持全文索引和搜索。全文索引在MySQL 中是一個FULLTEXT類型索引,但僅能用於MyISAM 類型的表。對於一個大的數據庫,將數據裝載到一個沒有FULLTEXT索引的表中,然後再使用ALTER TABLE或CREATE INDEX創建索引,將是非常快的。但如果將數據裝載到一個已經有FULLTEXT索引的表中,執行過程將會非常慢。



8、優化的查詢語句
絕大多數情況下,使用索引可以提高查詢的速度,但如果SQL語句使用不恰當的話,索引將無法發揮它應有的作用。下面是應該注意的幾個方面。首 先,最好是在相同類型的字段間進行比較的操作。在MySQL 3.23版之前,這甚至是一個必須的條件。例如不能將一個建有索引的INT字段和BIGINT字段進行比較;但是作為特殊的情況,在CHAR類型的字段和 VARCHAR類型字段的字段大小相同的時候,可以將它們進行比較。其次,在建有索引的字段上儘量不要使用函數進行操作。

例如,在一個DATE類型的字段上使用YEAE()函數時,將會使索引不能發揮應有的作用。所以,下面的兩個查詢雖然返回的結果一樣,但後者要比前者快得多。

SELECT * FROM order WHERE YEAR(OrderDate)<2001;
SELECT * FROM order WHERE OrderDate< "2001-01-01"; 同樣的情形也會發生在對數值型字段進行計算的時候: SELECT * FROM inventory WHERE Amount / 7 < 24; SELECT * FROM inventory WHERE Amount < 24 * 7; 上面的兩個查詢也是返回相同的結果,但後面的查詢將比前面的一個快很多。第三,在搜索字符型字段時,我們有時會使用 LIKE 關鍵字和通配符,這種做法雖然簡單,但卻也是以犧牲系統性能為代價的。例如下面的查詢將會比較表中的每一條記錄。 SELECT * FROM books WHERE name like "MySQL%" 但是如果換用下面的查詢,返回的結果一樣,但速度就要快上很多:.. SELECT * FROM books WHERE name >= "MySQL"and name < "MySQM" 最後,應該注意避免在查詢中讓MySQL進行自動類型轉換,因為轉換過程也會使索引變得不起作用。 http://inspire.twgg.org/programming/mysql/item/360-8-strokes-allows-you-to-optimize-query-performance-mysql.html

年輕人啊,你們要有這樣的工作倫理

最近看到實習生工作上的一些問題。所以特地寫這一篇提醒大家工作上的基本態度。這也是實習的目的 — 提早體驗真正職場的狀況。以後上班時,就不會有人像這樣耳提面命提醒你了。

Sir, Yes Sir!

先講個真實故事,我在美國律師事務所上班時,有一天在電梯裡碰到一個事務所的資深合夥人 Bill。Bill 說:『Michael 啊,我手上有一個上訴案的法律問題,需要有人幫我找案例。你可以幫忙嗎?』

那時我剛接手兩個案子,有點忙。於是我說:『Bill 我剛接了 Roche 的案子,怕忙不過來。我可以問他之後再回你嗎?』

看到這裡,你應該覺得我的回應很合理吧?Bill 神色古怪的點點頭。

等我進了自己的辦公室不久,兩位較資淺的合夥人 Roger 跟 Jim 就衝進我的辦公室,問我:『Michael ,你真的跟 Bill 說要先問別人再回他嗎?』

我說:『對啊,怎麼了?』

他們說:『你太資淺,這次犯錯就算了。Bill 問你的想法,只是禮貌,並不是他真的想知道你的時間。』

『我們這裡奉行軍隊的執行力。上面交代工作,下面就該回答:「Sir, Yes Sir!」至於你要回頭跟 Roche 改時間、找別的同事幫忙、熬夜、甚至出錢外包給別人做,那都是你自己的問題。老闆的存在是為了解決客戶的問題,你的存在是為了解決老闆的問題。』

『當你跟 Bill 說你要先問過 Roche 後才能回覆他,等於 Bill 還要煩心你的時間分配。這是增加老闆的問題。以後有任務,先嘗試解決。真的不行,再反應。』

老闆沒有老闆

我後來上班也印證,這家事務所真的是遵循軍隊風格的執行力。但這也不是什麼特例。等各位將來做到高層,頭上的上司越來越少、開始無法依賴 SOP 也時,也會發現大部分的任務的答案只有「Sir, Yes Sir!」

假如 Steve Jobs 問 Tim Cook:『提姆啊,本季 iPhone 的出貨可以再增加 20% 嗎?』

Tim Cook:『這個 . . . 我要問一下鴻海,還要看員工要不要加班,還有海運跟關稅 . . . 老闆你看怎麼辦?』

如果這樣回答,Jobs 就不可能讓 Tim Cook 接蘋果的執行長了。他的回答當然是:『Sir, Yes Sir!』

假如歐巴馬問國務卿 John Kerry:『約翰啊,我希望今年底看到 10 個國家宣告加入 TPP(註:跨太平洋夥伴協議)。』

John Kerry:『這個 . . . 可行嗎?不但大陸阻撓,日本人拒絕開放農業,泰國政亂中,台灣又傾向中國 . . . . 這要怎麼做啊?』

如果得到這種回覆,那歐巴馬來當國務卿就好了,還要 John Kerry 幹嘛。John Kerry 的回答當然也是:『Sir, Yes Sir!』

Mission Impossible

當然,這裡不是在討論不可能的任務。不可能的就是不可能。我也不是在討論任務錯誤與否,那是另一個議題。更何況錯誤常常是事後才知道。重點是,交給你的任務就是你的。You own it。一切由你想像指揮。

以上述歐巴馬的例子,John Kerry 比較好的回答是:『Sir, Yes Sir!我會提出三種方案出來。跟一個時間表。可能需要一些人手,以及老歐你跟我去亞洲四國巡迴一次。』既然這是你的任務,當然我(老闆)是你的資源。告訴我該去哪裡、做什麼,我的腦袋能少想一件事,就是解決我的問題。

記住:想要有朝一日成為老闆,就要用老闆的思維想事情。老闆跟員工的最大差別,就是老闆沒有老闆。沒有人可以問「怎麼辦?」「可行嗎?」「可是我要上健身房」「可是我要接小孩」「可是我手上還有別的案子」. . . . 你就是一切的答案。你就是一切的可行性。

Anyways, 轉入正題。

一切都是團隊合作問題

既然能來我們公司,你的能力一定足夠。學歷、經驗、成績,絕對都超越一般人。

你也不會有態度問題。畢竟實習沒有薪水;你是為了學習而來。真的不想來、懶得來,那也不用來。別人的眼光一點都不重要,不想來絕對不要勉強。

一群才智之士聚集,而且都有心做好,如果無法順暢合作,那只可能是因為團隊合作問題。以下是正確的團隊合作方法。

正確的團隊合作方法

1. 準時上班

很驚訝嗎?我們規定的辦公室時間很少,因此大家面對面的時間更寶貴。你一遲到也許就影響到別人工作的進度。準時是自我要求(這跟公司無關),也是尊重同事(跟公司有關)。

2. 不能來要提前請假

很驚訝嗎?理由同上。

3. 任務要按時完成

每一份任務都應該有期限。沒有期限,就不是任務。

有些工作是例行的,每天互相給意見、編輯等。有些是 project-based,製作海報、辦活動等。接了就要完成。同樣的,你無法按時完成就會影響別人。用行事曆、checklist 等工具提醒自己,提早分配時間。

學生都很忙 — 報告、論文、比賽等等。但比你們忙很多倍的「大人」為何都可以按時完成工作(讓你養個小孩試試)?因為我們會安排整天、整週、整月的時間,不會拖到最後一刻啊。

4. 主動找工作

如果你有空,主動詢問同事是否有幫得上忙的地方。特別是在國外遠距實習的人。總有需要妳的地方。

5. 要回覆

大家要讓同事好做事。如果有人在 email、FB、LINE、hackpad 上詢問會不會參加活動?想不想去採訪?對這篇文章有沒有意見?請回覆。

這是上班,不是約下午茶。拖拖拉拉、猶猶豫豫、「如果他去我就去,如果她不去我就不去。如果他去她不去那我可能晚半個鐘頭到再看看囉」在生活中叫隨性,在工作上會造成同事困擾。

6. 有困難時求援

台灣人常被說不懂團隊合作,反過來說就是喜歡單打獨鬥。有困難時請馬上提出,其他人才能跳進來幫忙,不延誤事情。John Kerry 也需要分配歐巴馬工作才談得成 TPP。

好的領袖不是能力最強的人,而是懂得分工合作的人。

7. 不要問「怎麼辦」

遇到未知的狀況時,千萬不要問我「怎麼辦」。而是要描述問題之後,提出一個建議的解決方案。

例如:不要問『我的採訪寫不出來怎麼辦?』,而要說『我的採訪現在寫不出來,可能是因為我一直鑽牛角尖鑽不出來。我打算找幾位作者討論討論,然後去採訪相關的人員,在 XX 日前給老闆草稿。這樣可以嗎?』

前者只提出問題,等於把問題丟回給老闆。後者 (1) 提出問題,(2) 提出數種可能解決方案,(3) 給時間表。這是幫助解決問題。

當然,你的建議很可能不被採用,或是被大幅度的調整。但至少你已想過解決方案,是用老闆的思維想事情,老闆會很感激的。

蜘蛛人的叔叔說的

這些都是最基本的專業態度。從學生進入職場,變化最大的不是有薪水或是生活作息的改變,而是意識到你的行為開始造成對他人的影響(of consequence)。

被你影響的人增加了,你的責任就增加了;然後不斷循環放大。最後你就成為一個影響超大,責任也超大的蜘蛛人。共勉之。

http://www.managertoday.com.tw/?p=41561

Saturday, July 5, 2014

3套免費虛擬化備份工具介紹

當虛擬平臺伺服器故障,或者需要停機維修時,原本運作其上的虛擬機器就必須移轉到其他的伺服器,才能繼續提供服務。然而,在規模較小的環境,你可能因為沒有儲存池(如SAN、iSCSI)可供VMware的VMotion、微軟的Live Migration等線上移轉技術,而無法手動或者自動搬移虛擬機器,這個時候,便有需要借助原廠,或者第3方廠商的工具程式,先將虛擬機器備份,再重新部署,以完成這項工作。

市面上有不少產品具備這樣的功能,如Vizioncore的vRanger Pro DPP、Novell的PlateSpin PowerConvert等,使用上皆需付費購買。而我們這次所要介紹的對象,則是3套同類型的免費備份工具。

徹底了解3套免費虛擬化備份工具
我們這次使用的平臺是VMware的vSphere,另外,還部署了一臺已建立多份快照(Snapshot)的Windows XP SP2虛擬機器,以此測試免費虛擬化備份工具的功能。它們分別是Trilead的VM Explorer、vcbMounter及vCenter Converter,其中後2套皆是VMware原廠所開發的備份工具。

和一般的備份軟體不同的是,虛擬化的備份工具對於虛擬機器的備份,主要是以檔案備份的層級為主,連接到虛擬平臺伺服器後,會將儲存在硬碟的虛擬機器檔案匯出到其他電腦。



vcbMounter
不同於其他2套工具,vcbMounter是內建於vSphere/ESXi的備份指令,而非由廠商額外提供的軟體套件。透過該指令,我們可以在SSH或者是本機的文字介面,將虛擬機器備份於本機磁碟,或者是內部網路的共享磁碟存放。

vcbMounter可以在虛擬機器仍然運作的情況下,執行備份的工作,對於先前所建立的快照,預設是全部備份;也可以視需求,設定僅備份當前所使用的虛擬機器組態。而在備份同時,我們可以同時啟用壓縮和分割的功能,減少備份工具對於企業環境造成的影響。

由於是文字指令,因此vcbMounter可搭配vSphere/ESXi內建的Linux排程工具,於特定時間,啟動備份虛擬機器的功能。

不過,該指令並不具備部署虛擬機器的能力,因此必須借助vcbRestore指令,才能將先前備份下來的虛擬機器部署到vSphere/ESXi伺服器。

VMware vCenter Converter
它是目前所有VMware平臺備份工具中,使用率最高的一款產品。除了免費的Standalone版本外,這套工具也推出內含在vCenter Server內的付費版本。2者相較下,Standalone版本可以將一般備份軟體,如Acronis True Image Backup、StorageCraft ShadowProtect等所製作出來的影像檔,轉換成為VMware格式的虛擬機器檔案,然後再傳送到vSphere(含ESX)/ESXi伺服器,或者掛載於VMware Server/Workstation等同一廠牌的全虛擬化平臺部署。

至於付費版的好處則是具備原廠的完整技術支援(Standalone版本需另購授權,才能得到此項服務)。

vCenter Converter也能將其他虛擬化平臺,如微軟Virtual PC的虛擬磁碟檔案,轉換為VMware的VMDK相容格式,另外,它也支援Open Virtualization Format(OVF)的開放虛擬機器檔案格式。轉檔能力在同類型的產品中,算是相當不錯。

在我們這次測試的3款工具中,vCenter Converter是唯一支援P2V移轉的產品,除了最為常見的微軟Windows平臺外,對於Linux,也同樣可以透過這套產品,將實體主機上的系統,移植到虛擬化的使用環境。

不過相較於其他虛擬化的備份工具,vCenter Converter必須在虛擬機器停機的情況下,才能啟動備份的工作,而且先前所建立的快照檔,也無法一同備份,是本套工具較為不便之處。


vCenter Converter提供多種轉換功能,便於轉換VMware格式的虛擬機器檔案。

Trilead VM Explorer 1.6
也稱為VMX的VM Explorer,是一套搭配vSphere/ESXi使用的備份工具。和先前介紹的vCenter Converter一樣,這套工具也有免費及付費版本的區別。就功能而言,免費版本的產品主要刪減了排程備份,以及將虛擬機器直接從目前的虛擬平臺伺服器,備份移轉到另外一臺伺服器的能力,因此必須備份到管理者的電腦本機,或者內部網路的共享磁碟後,才可以執行重新部署虛擬機器的工作。

和vCenter Converter相比,VM Explorer的功能較為單純,僅提供備份及重新部署的功能,不過它可以在虛擬機器啟動的情況下採取備份的動作,同時備份的範圍也涵蓋到先前所建立的各版本快照檔。

虛擬機器備份完成後,在備份檔所在的資料夾會多出一個XML格式的設定檔,日後我們可以透過VM Explorer執行此一檔案,將虛擬機器部署到所指定的vSphere/ESXi伺服器。

備份過程中,我們可以同時啟動壓縮的功能,減少備份工作對於網路頻寬所造成的影響。


透過VM Explorer的右鍵選單,可以直接啟動虛擬機器的備份程序。

需考量線上應用的程度來選擇
由於這次做為測試平臺的VMware vSphere,大多是用於伺服器虛擬化的操作環境,因此,如果不是做為測試用途,而是正式上線之用,最好是可以在不影響正常服務,也就是在不關機的前提下進行備份。

在我們這次測試的這3款工具中,除了功能偏重於格式轉換的VMware vCenter Converter,其餘2套工具皆具備這項能力,並能將備份範圍涵括到快照檔,有效保存虛擬機器的運作組態。文⊙楊啟倫



將現有環境轉換為虛擬機器的幾個注意事項

根據經驗,企業建置虛擬化環境時,大多是透過工具將現有的伺服器直接轉換為虛擬機器,而非重新架設,在轉換的 過程中,下列幾件事情值得我們多加注意,可避免虛擬機器產生運作異常的狀況。

1. 移除原有驅動程式:在虛擬化的環境中,所有硬體皆是以軟體方式虛擬而成,不需要額外安裝驅動程式就可以正常運作,而原有的驅動程式一般建議最好是能加以移除,可避免使用不到的應用程式浪費有限的硬體資源,以及發生軟體衝突的狀況。

2. 移除前版虛擬化產品的代理程式:如果要將建置在既有虛擬化平臺的虛擬機器部署到新版或不同的虛擬化平臺,原有產品的代理程式須以手動方式移除,如此就不會在移植後導致與新平臺的代理程式發生衝突的狀況,進而讓虛擬平臺的管理功能無法使用。

3. 適度調整虛擬機器的硬體資源:即使是強調效能的半虛擬化平臺,當伺服器由實體架構轉換為虛擬機器部署後,仍然會產生一些效能的減損,這時可以適度調整虛擬機器的硬體參數,給予更多的記憶體,或者增加虛擬處理器的核心數,讓虛擬機器可以更加穩定地運作。

http://www.ithome.com.tw/node/58582

蘊藏在言語中的力量

同樣一件事情,就看你怎麼表述。用了錯誤的表述方式只有自討苦吃,適度的言語包裝大家都歡喜。

有一位工程師在回覆使用者的妹嚕當中說道:『關於您提出的程式問題,我們在上週已經發現,並且已經修改好了,隨信附上更新後的程式』。經過數分鐘之後,這位工程師接到使用者的投訴。到底發生了甚麼事,為什麼工程師會被投訴呢?

使用者指控工程師:你上週就知道程式有問題,為什麼不主動通知我更新,讓我浪費時間使用錯誤的程式。一位認真負責的工程師,在接到問題的第一時間立即回覆問題卻被投訴…,這是甚麼世界啊?

工程師痛定思痛,深刻反省自己哪裡做錯了。有一天相同的故事案例又來了,工程師提醒自己不可以再被投訴,他在妹嚕當中回覆道:『關於您提出的程式問題,因為比較複雜,我今天晚上會加班處理,一有最新的結果會立刻通知您』,然後他就快快樂樂的下班去了,過兩天後他再回覆道:『關於這個程式問題,我發了一些時間針對貴單位使用者的特殊操作習慣,做了程式稍大幅度的調整,因此耽擱了一些時間,造成您工作上的不便深感抱歉,隨信附上更新後的程式』。

果然,工程師沒有接到投訴。過了數月之後,他又從同事間接的轉述當中,聽到使用者非常稱讚他,說他是一位認真負責,會站在使用者角度思考問題的工程師,要我們全部門都應該跟他學習。

如何適度包裝言語?工程師第一次的妹嚕講的都是真實的,但也都是從自己的角度來講的話,完全忽略了使用者的感受。學壞之後呢,工程師完全從使用者感受的角度來包裝言語,雖然違背了一些事實,降低了問題解決的效率,但是大家都愛聽,大家都歡喜。在快快樂樂的合作氣氛下,自然的形成了正向循環的互動能量。

http://myblog-erp.blogspot.tw/2014/05/blog-post.html

What is the most efficient way to generate all the multiset, combinations, probability, dispositions and permutations of an array in PHP?

What is the most efficient way to generate all the multiset, combinations, probability, dispositions and permutations of an array in PHP?

Here is code to get all permutations:

http://www.php.net/manual/en/function.shuffle.php#90615

With the code to get the power set, permutations are those of maximal length, the power set should be all combinations. I have no idea what dispositions are, so if you can explain them, that would help.

You can use this class: http://pear.php.net/package/Math_Combinatorics

combination with repetitions
統計學
組合排列

http://en.wikipedia.org/wiki/All-pairs_testing
http://rosettacode.org/wiki/Combinations_with_repetitions
http://en.wikipedia.org/wiki/Multiset
http://en.wikipedia.org/wiki/Probability
http://en.wikipedia.org/wiki/Combination
http://en.wikipedia.org/wiki/Permutations

Tuesday, July 1, 2014

Windows Update cannot currently check for updates because the service is not running

http://answers.microsoft.com/en-us/windows/forum/windows_7-windows_update/windows-update-failing-0xc8000222/6d55c63a-316c-4e9d-97b2-538bc783cdad

I had the same problem while installing Visual Studio 2010. It was failing in .net framework 4.0. I tried downloading .net framework 4.0 separately and install but problem persisted.

The problem was basically of Windows Update. Windows update was not working properly and asking for "check for updates" was giving error "service not running" where service was running properly.

So to sort out that issue I ran following commands and windows update problem sorted out and in turn visual studio 2010 problem also.

Click Start
Type: cmd
Right click on cmd in start menu and select 'Run as Administrator'
Type: net stop wuauserv
Hit Enter
Type: ren c:\windows\SoftwareDistribution softwaredistribution.old
Hit Enter
Type: net start wuauserv
Hit Enter
Type: exit
Hit Enter

There have been reported issues with users who user Intel rapid storage drivers, causing issues with windows update, mostly on x64 machines. If you are using them, try updating the driver is Device Manager, or alternatively, temporarily uninstalling the drivers, update windows, then reinstall the intel driver.

ref: http://answers.microsoft.com/en-us/windows/forum/windows_7-windows_update/windows-update-cannot-currently-check-for-updates/b250e431-cdfc-46ac-a044-eaaee17491cf?page=3&tm=1356850698161#LastReply