Anaconda在win10上啟動時出現psutil.AccessDenied


久沒使用windows 10了,安裝Anaconda3-5.0.1,啟動anaconda-navigator時出現:
psutil.AccessDenied: psutil.AccessDenied (pid=2556)


1.啟動 Anaconda-Prompt (以系統管理員身份執行)
2. 先試著更新: (不一定需要)
>conda update anaconda
>conda update anaconda-navigator

3. 重設anaconda-navigator
>anaconda-navigator --reset

出現:
Anaconda Navigator configuration reset...
Anaconda Navigator configuration reset successful!

4. 執行
(C:\Users\xx\Anaconda3) C:\>anaconda-navigator

如此便可啟動。

Wacom CTH-480在ubuntu 12.04上的安裝


卡了一陣子,終於解決。

下載input-wacom-0.20.0
http://sourceforge.net/projects/linuxwacom/files/xf86-input-wacom/input-wacom/input-wacom-0.20.0.tar.bz2/download

解開壓縮,目錄下執行> ./configure

出現
BUILD ENVIRONMENT:
       linux kernel - yes 2.6.38
      kernel source - yes /lib/modules/3.2.0-68-generic/build

Your wacom.ko is available under
    /home/krilo/downloads/input-wacom-0.20.0/2.6.38
If you have an USB device, you can copy the driver by:
    cp 2.6.38/wacom.ko /lib/modules/3.2.0-68-generic/kernel/drivers/input/tablet
If you have a serial device, please copy the driver by:
    cp 2.6.38/wacom_w8001.ko /lib/modules/3.2.0-68-generic/kernel/drivers/input/touchscreen

執行:

sudo cp 2.6.38/wacom.ko /lib/modules/3.2.0-68-generic/kernel/drivers/input/tablet
sudo cp 2.6.38/wacom_w8001.ko /lib/modules/3.2.0-68-generic/kernel/drivers/input/touchscreen
sudo depmod -a

接著依照http://linuxwacom.sourceforge.net/wiki/index.php/Input-wacom的指示,執行 :

立即載入:
sudo modprobe -r wacom
sudo modprobe -r wacom_w8001
sudo insmod /lib/modules/`uname -r`/kernel/drivers/input/tablet/wacom.ko
sudo insmod /lib/modules/`uname -r`/kernel/drivers/input/touchscreen/wacom_w8001.ko

(或是重開機。)

再去設定wacom 繪圖板,會出現:
Wacom .jpeg

大功告成。

Mantisbt + Mylyn 3


可以顯示中文了.

工具使用版本:

設定

Eclipse上選擇View為:Task List

1.新增repository:

3

2.若plugin有安裝好,可看到mantis的選項:

3.設定Repository

2

image Server

記得加入mantisconnect.php

imageLabel

這會顯示在Eclipse的repository上的名稱.

頁面呈現

1

image status

注意要是英語,若此處status呈現中文,則在submit時會出現問題.

image Attributes

注意要是英語,若此處status呈現中文,則在submit時會出現問題.

Hello , PyQt4


使用Python寫複雜GUI是件麻煩的事,縱使之前使用了wxPython,沒有drag & drop 的IDE,就總是不想用Python來寫Windows Application。
還好,遇見了PyQt4。
不過,使用PyQt4的人確實是少眾,我目前使用的參考資料有:
More about Rapid GUI Programming with Python and Qt
不過書跟資料都是寫hard code的,下面就示範使用Qt拉UI畫面,再用Python來寫code的方式。

安裝:
PuQt安裝時建議文件跟範例要選取,裡面的Document只有Reference Guide。
裝完的預設目錄是 Python25\Lib\site-packages\PyQt4。
QT4_1
開發步驟為:
1. 使用QT Designer 畫UI
QT4_2
可以看到Qt Designer已經具備了大部份的UI元件。
我們首先選擇Dialog without Button。
將Label 及Push Button 拖曳至dialog上。(元件上的文字請自行決定)
 QT4_6
接著編輯信號如下:
QT4_4
這信號的用途是指,等等按下button後,label上的文字就會更改。
將檔案儲存為hello.ui。
2.轉檔
首先要將ui檔轉成py file,使用下面的指令:
pyuic4 -o hello.py hello.ui
3.用python寫code
產生出來的hello.py程式碼為:
from PyQt4 import QtCore, QtGui
class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(179, 152)
        self.pushButton = QtGui.QPushButton(Dialog)
        self.pushButton.setGeometry(QtCore.QRect(30, 100, 75, 23))
        self.pushButton.setObjectName("pushButton")
        self.label = QtGui.QLabel(Dialog)
        self.label.setGeometry(QtCore.QRect(40, 60, 47, 14))
        self.label.setObjectName("label")
        self.retranslateUi(Dialog)
        #QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL("clicked()"), self.label.update)
        QtCore.QMetaObject.connectSlotsByName(Dialog)
    def retranslateUi(self, Dialog):
        Dialog.setWindowTitle(QtGui.QApplication.translate("Dialog", "Dialog", None, QtGui.QApplication.UnicodeUTF8))
        self.pushButton.setText(QtGui.QApplication.translate("Dialog", "Click me!", None, QtGui.QApplication.UnicodeUTF8))
        self.label.setText(QtGui.QApplication.translate("Dialog", "Hello", None, QtGui.QApplication.UnicodeUTF8))
上面藍色那行,記得先mark掉。
接著我們寫一個Hellomain.py來引用UI 的class:
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtCore, QtGui
from hello import Ui_Dialog
class StartQT4(QtGui.QDialog):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        QtCore.QObject.connect(self.ui.pushButton, QtCore.SIGNAL("clicked()"), self.label_change)     def label_change(self):
        self.ui.label.setText('hello pyqt4')
if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    myapp = StartQT4()
    myapp.show()
    sys.exit(app.exec_())
程式說明:
1.記得將引用的UI格式(QtGui.QDialog)放入,否則在init時就不會過。
2.指定self.ui,就是將QtDesigner所產生的UI指定給self。
3.將hello.py中的藍字,copy到這兒更改,基本上connect就是將A元件的某個事件跟B元件要執行的動作綁在一起。
因為我將label的事件處理放在StartQT4的class中處理,所以事件定義(label_change)放在下面;要注意,原來hello.py中的self.pushButton在這兒就變成self.ui.pushButton。
(self.label.update改成self.label_change,沒什麼特別的意思;還有,不懂self的小朋友,請自行解決。)
4.使用show()將UI呈現出。
最後執行 Hellomain.py就可以了。
QT4_5
中文問題:
若將self.ui.label.setText('hello pyqt4') 中的文字改成中文,使用dos command時勢必會出現亂碼,這不是unicode的問題,所以,不管你用decode或是加個u,問題一樣無法解決,這是因為dos command預設的語系是MS950,所以要將decode改成如下:
str = '中文 pyqt4'.decode('MS950')
self.ui.label.setText(str)
會出現這樣的問題是因為,若你用pydev開發時跑都沒有問題,但用py2exe包好後,在執行程式時會先呼叫的是dos command,所以就會發生這樣的狀況,要注意。

軟體架構文件(SAD)實戰 – 1.排版與畫圖


因為最近在教如何寫:軟體架構文件 software architecture document(SAD),所以開始寫這一系列的文章。(不知道寫不寫得完……)

我一直認為,好的工程師是會寫文件的,SA/SD要很會寫,軟體架構師更是要超會寫,但要寫得有組織架構,條理分明,面面俱到的文件,卻是不容易的,在此將個人的寫文件經驗分享出來。

在這邊不用去爭論什麼文件無用論,無用是因為你不會用,你說文件內容與實際執行不準確,那是因為:
1.組織中沒有技術主編,或是專門人員在review文件內容。
2.沒有文件管理流程,導致文件與現實差距過大。

但我還是建議要學會寫文件的技巧,寫文件的過程本身就是一種設計或是review的過程。

你更要學的是:如何避免寫出沒有用的文件。

開始前的準備:

工具:這是一致性的問題。

選擇.doc或是.html;繪圖工具使用Visio還是Word/PowerPoint;UML使用Enterprise Architecture還是StarUML;單獨用或是混和用?

除了文件格式是一開始就要決定的,其他的越早決定越好。

排版:Word樣式/ CSS

這真的很重要,使用.doc的話,請一開始就提供 dot的範本檔,其中標題一、二、三、四的字體大小、格式、顏色都是一開始就要訂的,寫程式的通常還要來個程式碼的樣式,像下面的範例:
01

頁首頁尾、圖/表書寫格式也通通不能少,請認真地去看侯大師的word排版藝術,若是你是一個架構師,請注意,你必然少不掉要review很多文件,賞心悅目的排版會讓你比較好review下去。

CSS 當然也是比照辦理。

繪圖:圖的格式 / 顏色

這個很難,你很難教導大家的圖解都是乾淨俐落,言之有物的,所謂的意圖這件事,我稍後會講到。

不過最基本的格式、顏色總是要規範的,我最常遇到的就是,這張圖示中的黃色是表示A系統,但同一層級的B系統卻是使用綠色之類的,這樣會讓人混淆的,顏色也不要使用太多,像下圖所示:
Concept1
注意到圖中下面的一個重點就是,你有將使用的顏色代表的涵義說明出來;當然若是使用不同的圖形(圓形/三角形),也請記得做圖示說明。

另外很多類似的表示圖示,也需統一用的時機,像表示人的圖像可能有下列幾種:

Concept1 但不要一張圖出現好幾種人示,可以用文字或顏色分辨即可。
為求統一,也必須說明什麼圖形什麼顏色是表示什麼。

當然,習慣法 / 專用語也是必然要一致的,有機會我們在說明SA時會在Glossary章節再講。

文件版本控制:這是一個大問題,文件交換通常都是copy來copy去的,結果大家在溝通時,常常牛頭不對馬嘴,因為看到的是不同的版本;當然我們可以使用CVS、SVN之類的版本控管,或是KM、目錄分享的方式,做到”盡量”大家拿到的都是同一版本的文件,可是merge時又是一個大問題。

但要秉持一個原則:文件的reference只有一個。

也就是大家都說好,不管怎麼copy,反正就是以那個位置的文件為主要參考。未更新則是個人的責任。

像我們使用Google docs來處理這個問題,永遠只有一份參考,也只共同編輯這一份。

建議要有一個技術主編(同常也是架構師啦),可以由主編指派個人寫的每一小章節,再予以統合,這樣才能保證文件的一致性以及品質。

繪圖

技術文件中,畫圖是一件困難的事,因為,我們從未被好好地教導過如何畫圖這件事。

也因此,一張圖當中常常顯示了太多的訊息,這樣導致看圖的人不見得能清楚地接收你在圖中想傳達的訊息。

一圖勝千言。

沒經驗的人通常就是想到什麼畫什麼,一張圖塞得滿滿的,好像全部都說到了,就自以為交待清楚了。

那看圖的人就很可憐了,全部都在一張圖裡面找線索;這也不是說不行,反正最後大家都有得到所要的資訊就是了,只是溝通成本會增加很多。

這跟藝術上構圖是相同的,盡可能讓一張圖只有 1~2個要凸顯的目的。

要記得,說太多等於沒說。

所以第一件要做的就是:分類

不同的訊息放在不同的圖。

搞過房子裝潢的就知道,通常除了隔間的圖外,還有插座配置、燈具配置、水管口……好幾張圖,都是分開畫,給不同的師傅看的時候用。

之後我們會提到,這就是”View”的用法。

注意,我們需要從不同的視野來看同一件事,不同的圖給不同的相關者看。

01接這就是分層

原則就是由大而小。

相同level的組件就放在同一張圖講,也就是要去定義這張圖要說明到level幾。

要就統一到level 2 ,那麼A組件的level3相關部分,再有一張A組件的全圖去看。

不要A組件顯示到level3的層級,B組件卻只到level 2;當然這不是絕對的,有的時候因為有的東西太重要,所以有跳層級被凸顯的必要。

但一層層的寫法是寫文件的必要思考。

最後就是要使用對的圖來表達。

善用各種圖示法,UML沒有想像中的神,如果UML很難表達,就換個圖。

不是說你多會畫,而是這張圖的”意圖”是否被表達出了。

相同含意的圖,用visio的小人頭流程圖可能會比activity diagram好讀,但不是每個team member都懂 UML的,且還要再考慮到一個domain因素:也就是大家剛開始做這案子的時候,對domain都是不熟的。

很快進入狀況是比較重要的事,圖的重點是拿來溝通用的,也就是可能剛開始先用visio劃出比較大流程之類的圖,之後在SA/SD的文件部分再改成使用AD。

當然,若是團隊中的每個人都熟悉UML的意含了,就統一使用更好。(有機會我們再來講畫 UML的規範,有興趣的可以先去看The Elements of UML 2.0 Style)

其他還有DFD、flowchart、ERD、fishbone、process…… ,當然,不要什麼圖都拿來用,要因時、因材使用。


轉載請註明出處。 krilo cheng

System Architecture Book


一本好書,佛心來著:
http://www.gaudisite.nl/SystemArchitectureBook.pdf
受教了不少,裡面的圖解都相當不錯。
架構師成長模型(by chuck kilmer):1
2
Map of the System Architecture Process and neighboring processes:
6 
值得參考的一份文件。

online mindmap and online UML


終於等到:
free 線上心智圖:http://mind42.com/
註冊後,點擊launch mind42即可進入 心智圖的線上程式。
  新增節點只要按 Tab鍵即可。(或者在主節點的下方,點擊一向右的綠箭頭。)
缺點是,沒有Fishbone圖或其他圖形可選。
線上 UML Tool :http://creately.com/features
其實比較接近是線上Visio啦!(下圖為選板型)
1
Many more smart shapes for UML including KObject sets for: (注意:目前沒有Sequence diagram)
  • Class Diagrams
  • Activity Diagrams
  • Collaboration Diagrams
  • Component Diagrams
  • Deployment Diagrams
  • Entity Relationship Diagrams (ERD)
  • Object Diagrams
  • State Chart
  • Use Case Diagrams
不過申請Creately要2-3天,而且有些功能還不完善。

可怕的 Naked Objects on .NET


這一切都是由InfoQ “使用面向.NET的Naked Objects進行快速應用程序開發” 這篇文章開始的。
然後先看看An Introduction to Naked Objects,對所謂Naked Object就會比較了解。
可看完文章,其實心中還有不少疑惑,於是決定先去下載Naked Objects for .NET - Express Edition來玩玩。
安裝完之後,開啟其C#的範例:expenses-csharp。
compile之後,執行,因為範例是帶有User Authentication的,所以密碼輸入”pass”。
接著就會出現只有menu的空白畫面,隨便點選幾個menu:
1
這個範例是for creating, submitting and approving expense claims.
所以我們可以看到員工 , 對應的經費, 項目 ……
接著就可以看看方案結構了。
Standalone可以先不去看它,主要在Domain這個專案上。
扣去recordedAction跟services先不看,就可以發現NOF(Naked Object Framework)確實的可怕了。
No UI ,No Persistence Layer。
是的,上面的畫面是Naked Objects用WPF自行產生的,DB在Expression版則是用'xml object store' 替代,Enterprise則是會使用ADO.NET Entity Framework去實作的。
DDD(Domain Driven Design)開發的極致在此展露無遺,真是太可怕了。An Introduction to Naked Objects中所說的到此完全明白。
其中的We refer to this as creating 'behaviourally-rich' domain objects.則為其主要精神。
NOF 試圖提出一個簡化的方式,將 UI 和 DB 抽取出來,不要干擾系統的開發和維護。
誠如Richard Pawson所說:Naked Objects引人入勝之處是你可以只使用它就能夠支持開發過程中的領域驅動設計:Naked Objects不會強迫你必須要實現整個系統。

要從頭自己實作一個sample的話,只要參照Naked Objects developement manual的Part III. Running the model as a standalone prototype,以及跟expenses-csharp裡面的sample code比對,就可以做出一個簡單的範例了。
要熟悉使用NOF,對其Attributes要仔細研究。
不過我好奇的是,在模擬完Domain model之後,NOF可以匯出乾淨的domain.dll之類的嗎?
不然裡面就會有一堆attributes以及,像是遵守其編碼約定:
Employee employee = new Employee();
    須改成
  Employee employee = Container.NewTransientInstance< Employee>(); 
這樣在專案實際應用時,就還要包含一堆 NOF 的 library 了。
關於這點,若是有人有答案,請告訴我。

Gallio MbUnit 3


Gallio MbUnit 3

Gallio是一個開放的、可擴展的、(測試框架)中立的自動化測試平台,它提供了.NET上的公共模型、運行時和工具(例如測試運行工具),任何測試框架都可以使用這個平台。

安裝

先下載3.0.6版本,http://www.mbunit.com/Downloads.aspx。
(建議下載msi檔,安裝時會與VS2008自行整合。)

執行

完成後在桌面執行"Gallio Icarus"。

右邊的區域都是測試結果與報告。

一開始先行增加要測試的Assemblies,可直接選取NUnit測試的dll檔:


使用 NUnit中的samples中的範例做測試。
單獨選擇Assemblie或是選Root,按下Start即可。

我們可以針對不同的Assemblies分開做測試,測試結果可以直接看到。
也因此,可將所需要的測試放在一個Project中,做好測試管理。


也可以對測試的class按右鍵,就可以直接view source code。

Reports

若要看Reports,則在Executing Log中可觀看,並可以使用 Report / View As / HTML 輸出成html report.
(這是我們主要要用它的理由......)


若要看舊的reports,選擇 View / Project Explorer/ ,裡面就可看到之前產出的Report。

其他的功能:待續......


InfoQ 上的部分內容擷取:

3.0.6版包括以下改進:

  • 並行運行

    MbUnit3.0.6可以充分利用你的多核處理器。只要給測試用例(test)加上[Parallelizable]屬性,這個測試用例就可以和同一個
    測試套件(fixture)中其他擁有該屬性的測試用例並行運行。測試套件也可以被標記為[Parallelizable],這樣測試套件也可以和其他擁
    有該屬性的測試套件並行運行。需要注意的是,如果你希望一個測試套件中的所有測試用例都能並行運行,仍然需要手動為每個測試用例添加
    [Paralleizable]屬性(我們可能會跟據用戶的反饋,在晚些時候添加測試套件或程序集級別的屬性)。特別需要注意的是,僅僅為測試用例或測試
    套件添加[Parallelizable]屬性,並不意味著它一定會和其他的測試並行運行。基於效率的考慮,我們限制了同時運行測試的線程數量,你可以通
    過配置並發度來修改這個數量。如果你想讓一個測試用例同時運行多個實例,可以考慮使用[ThreadedRepeat]屬性。
  • 並發度
    並發度控制MbUnit最多能同時運行多少個測試。默認情況下,這個數值與你的CPU個數相同,最小值是2。

  • Xml數據源
CSV數據源已經非常流行了。你可能還不知道,在CSV的數據行中可以關聯元數據,只要添加一列並在該列的第一行寫上[ExpectedException]、[Description]或者其他的元數據就行了。在3.0.6中我們還支持XML數據源。

Ubuntu 8.1 + Mono 1.9.1 淺嚐


在ubuntu上使用synaptic,選擇mono-2.0-devel安裝(裡面會包含mono-gmcs及其他必要的套件)。
這樣就可以使用基本的compile了。
若有需要,也可安裝monodevelop,不過在ubuntu 8.1.0上只有1.0+dfsg-3的版本。
The following official versions are available:
Ubuntu Dapper (6.06): 1.1.13.6
Ubuntu Gutsy (7.10): 1.2.4
Ubuntu Hardy (8.04): 1.2.6
Ubuntu Intrepid (8.10):1.9.1
Ubuntu Jaunty (9.04): 2.0.1
MonoDevelop 2.0可讓開發人員針對Linux操作系統編寫桌面和ASP.NET Web應用程序、將Microsoft Visual Studio開發的各種.NET應用程序移植到Linux與Mac OS X操作系統,並能在這三種操作系統中保持統一的程序代碼。
不過MonoDevelop2.0目前僅支援Ubuntu/9.04的package。(殘念……)

按照慣例,寫個Hello吧!

Console Hello World

using System;   public class HelloWorld
{
static public void Main ()
{
Console.WriteLine ("Hello Mono World");
}  
}
編譯:gmcs hello.cs
執行:mono hello.exe

看看結果吧!

將hello.exe複製到windows上,也是可以直接執行喔。
有興趣的可看原始教學:http://mono-project.com/Mono_Basics

IronPython 試用小記


這兩天不知道為了什麼,突然被一隻鐵莽纏身。
(真的,原來一點也沒有study的意思,只是不知在google著什麼時,link…link…link…,然後就被一隻蟒蛇圈住了……)
IronPython是.NET平台上的Pyhhon語言,目前stable版本2.0.1(另有IronPython 2.6 Alpha 1, was released on March 26, 2009)。
IronPython 2.X 最重要的改進就是它是運行在動態語言運行時(DLR)之上。
官方是這樣介紹的:
It is well integrated with the rest of the .NET Framework and makes all .NET libraries easily available to Python programmers, while maintaining full compatibility with the Python language.
其中的full compatibility 要解釋一下,IronPython 2.0.1 目前僅能適合CPython 2.5,.NET環境則需要 .NET 2.0 sp1。
IronPython 2.6 Alpha 1. 則支持CPython 2.6 (這是Python目前較穩定的版本,但Python 3.1 alpha 2 released,Python 3與2的差異聽說不小)。
為什麼要注意版本呢?
看看下面這張圖 (from “IronPython in action” Ch01):
1
IronPython 是可以使用 CPython 及 .NET framework的lib的,所以要注意版本,否則在呼叫libs時會出問題。

學習IronPython

下載IronPython 2.0.1後,找到其Tutorial目錄,C:\Program Files\IronPython 2.0.1\Tutorial。
1.開啟Tutorial.htm,照著打裡面的範例就對了。(看不熟英文沒關係,範例總是看得懂的。)
     這樣基礎功大概就有了。 (我也沒有 Python經驗,C# 倒是懂一點。)
2.去IronPython in Action網站,下載其Source code ( 33 MB ),一個個解析就是了(也可以照目錄找到想要的章節試試)。可以的話,買一本原文書,K完應該就差不多會了。
3.去看 Python的書。(不要問我看哪本……)

其他

網路上有人推薦:IronPython Studio,使用前請記得要先看pre-requisites,不過就算按照步驟,ㄟˇ,我裝好後在VS2008上也只能產生 WPF 的 Project,FAQ上有各式的問題。
IronPython Cookbook :這是需要參考的網站。
IronPython程式設計 - Python與.Net Framework整合實作:這是2007年日本人寫的,所以有些東西都舊了,但對入門而言,還是具有參考價值啦。(去圖書館或跟朋友借就好了)
Pro IronPython :還沒出,預計今年 6月底出,有看的人再跟我說。
什麼時候可以用 IronPython ?
這種問題就不用問我了,可用時自當用,以DLR的觀念而言,試試鐵莽還頗有趣的,有機會到是看能不能在實際專案中使用。

State of the Computer Book Market 2008, part 4 -- The Languages


原文鏈結

從O’reilly radar 中Mike Hendrickson的2008程式語言類書市場報告,我們可以看到,Java的書仍然在下滑,C#則持平微幅成長。

較令人有興趣的是actionscript3的後勁仍不可忽視,但要注意的是,使用AS3的後端平台仍是以Java為主,不知是否因為如此,所以Java並未衰退的太厲害。

還有ruby的熱潮是否在下滑中?

TM_qtr_py_Prog_Lang 

從下面這圖中,C#已經在2008超越Java了,不過,不太確定WPF,WCF,WF之類的書籍是否放在其中的”.net languages”中;另外,可以看到actionscript是呈現大幅度的成長的。
languages_all_5yrs

Project Management Lessons from NASA


  1. Most managers succeed on the strength and skill of their staff.
    絕大多數經理的成功都是憑借手下職員的能力。
  2. Never ask management to make a decision that you can make. Assume you have the authority to make decisions unless you know there is a document that states unequivocally that you cannot.
  3. Never make excuses; instead, present plans of actions to be taken. 永遠不要找藉口;只需要把執行計劃拿出來。
  4. Not all successful managers are competent and not all failed managers are incompetent. Luck still plays a part in success or failure, but luck favors the competent, hard-working manager.
    不是所有成功的經理都能勝任工作,也不是所有失敗的經理都無能。運氣還是佔了一定成分,不過運氣偏向於那些有能力、勤懇工作的經理。
  5. Documentation does not take the place of knowledge. There is a great difference in what is supposed to be, what is thought to have been, and what the reality is. Documents are normally a static picture in time which is outdated rapidly.
  6. Remember the boss has the right to make decisions, even if you think they are wrong. Tell the boss what you think but, if he still wants it done his way, do your best to make sure the outcome is successful.
    牢記,即便你認為老闆是錯的,他也有權利做出決定。告訴老闆你的想法,但是如果他依然堅持己見,你就要盡全力保證事情能有個好的結果。
  7. Management principles are still the same. It is just the tools that have changed. You still should find the right people to do the work and get out of the way so they can do it.
    管理原則始終未曾變過,變的只是工具而已。你仍然要找到適當的人做事,而且不要擋他們的路。
  8. Whoever you deal with, deal fairly. You may be surprised how often you have to work with the same people. Better they respect you than carry a grudge.
  9. Mistakes are all right, but failure is not. Failure is just a mistake you can't recover from; therefore, try to create contingency plans and alternate approaches for the items or plans that have high risk.
    犯錯無可避免,失敗則不然;你可以彌補錯誤,但無法彌補失敗。所以,為你那些高風險的計劃或是任務準備應急預案和備選方案吧。
  10. A working meeting has about six people attending. Meetings larger than this are for information transfer.
  11. Running does not take the place of thinking. For yourself, you must take time to smell the roses. For your work, you must take time to understand the consequences of your actions.
  12. Sometimes the best thing to do is nothing. It is also occasionally the best help you can give. Just listening is all that is needed on many occasions. You may be the boss but, if you constantly have to solve someone's problems, you are working for him.
  13. Know your management — some like a good joke; others only like a joke if they tell it.
  14. Integrity means your subordinates trust you.
  15. Never assume someone knows something or has done something unless you have asked them. Even the obvious is overlooked or ignored on occasion — especially in a high-stress activity.
  16. Don't assume you know why senior management has done something. If you feel you need to know, ask. You get some amazing answers that will dumbfound you.
  17. A person's time is very important. You must be careful as a manager that you realize the value of other people's time, i.e., work you hand out and meetings should be necessary. You must, where possible, shield your staff from unnecessary work, i.e., some requests should be ignored or a refusal sent to the requester.
  18. There is only one solution to a weak project manager in industry — get rid of him fast. The main job of a project manager in industry is to keep the customer happy. Make sure the one working with you knows that "on schedule, on cost, and a good product" — not flattery — is all that makes you happy.
  19. Projects require teamwork to succeed. Remember most teams have a coach and not a boss, but the coach still has to call some of the plays.
  20. There are still some individuals who think important decisions are made in meetings. This is rarely the case. Normally, the decision-makers meet over lunch or have a brief meeting to decide the issue and than (at a meeting called to discuss the issue) make it appear that the decision is made as a result of this discussion.
  21. In political decisions, do not look for logic — look for politics.
  22. Meetings, meetings — A Projects Manager's staff meeting should last 5 minutes minimum — 1 hour max — less than 5 minutes and you probably didn't need the meeting — longer than 1 hour, it becomes a bull session.
  23. Too many project managers think a spoken agreement carries the same weight as one put in writing. It doesn't. People vanish and change positions. Important decisions must be documented.
  24. The project manager who is the smartest man on his project has done a lousy job of recruitment.
原文於此:http://www.mariosalexandrou.com/blog/?p=69

smart software development


在CSDN上看到孟岩這篇Jacobson的演講,激動不已。

明智软件开发——Ivar Jacobson博士上海英雄会演讲的主要思想

在我眾多projects中實驗了不少開發理論,3年來,一直認為,光一個開發論(RUP , XP , SCrum... )是很難完全實現的,必須因時因地因人而作流程取捨。
開發流程取捨如此,文件取捨亦是如此。
其中重要的就是架構,必須要專案開始不久,就要有中央堅定的骨幹。
大師畢竟是大師,PPT如此淺顯易懂,也消彌了我心中的搖動(偶而,總是會問問自己這樣是否是對的?)。
以下轉載孟岩的文章(不過圖片為我自行穿插):
在演講的一開始,Ivar首先革了舊思想的命。他回顧了軟件開發思想從過程化,到面向對象,再到組件化、UML、UP、RUP、XP的沿革,然後說這些思想都曾經自以為銀彈,但是都被證明並非銀彈。事實上,銀彈不存在,我們需要的僅僅是明智的軟件開發方法(smart software development)。那麼到底什麼是smart呢?Ivar認為要搞清楚這個問題,就必須想現在一些流行的unsmart觀念開火。比如,很多大型組織相信過程而不相信人,這就是unsmart。過程不能開發軟件,只有人才能開發軟件。所以軟件開發以人為本就是smart。有的人相信工具,但是工具本身只是放大器。如果落在了笨蛋手裡,「A fool with tools is still a fool, but a dangerous fool.」有些人以文檔為中心,但是文檔並不能執行,而且最重要的是,沒有人願意讀文檔。機器讀不懂文檔,人又不願意讀文檔,那麼製造大量的文檔有什麼意義呢?還有人使用瀑布模型,相信事前能夠產生完整的設計,甚至細節都能考慮清楚,但是隨著開發的推進,越來越多的paperware最終把開發工作壓垮。這些都是 unsmart的觀念。
01
而所謂smart,則是以人為本的,承認軟件需求變化的不可避免和不可預知。在這一認識的基礎之上,Ivar拋出了他的觀念,即軟件必須從一個小的可運行的skinny system開始,逐漸充實生長稱為full-fledge的成熟系統。在PPT上,Ivar 用一隻小羊骨架表示 skinny system,而這隻小羊最後將長成又大又肥毛又多的澳洲美利奴羊,這就是成熟系統,相信很多在場的朋友印象深刻。Ivar強調,skinny system必須是skinny,拋棄一切細節,但是又必須可執行。在成長為成熟系統的整個過程中,都必須確保系統是可執行的。隨著細節不斷地被認識,系統逐漸充實完整。
02
(Ivar 講到這裡,我在腦子裡問了一個問題:「這與我們熟知的非拋棄原型系統有何分別呢?後者不也是強調從一個原型出發,逐漸完善稱為產品嗎?而且就原型系統而言,實踐證明拋棄原型效果比非拋棄原型要好,難道大師的smart就是指這個?另外,這跟敏捷思想有什麼不同嗎?敏捷不也是強調盡早交付可執行代碼,並不斷重構嗎?」果然緊接著,Ivar就回答了這個問題。)
Ivar緊跟著提到了系統架構,他問在場聽眾,有多少人認為系統架構很重要,不少人舉了手,他滿意地說,不錯不錯,「China is fantastic!」,他在其他國家問這個問題,只有一小部分人認為架構很重要。他認為,對於架構的態度,人們容易走極端。要麼認為完全不必要,要麼就追求恢宏的企業架構,實際上都不是正確的態度。他認為基本而簡單的架構是非常重要的,這是區別smart方法與敏捷方法的關鍵。他認為,儘管smart方法與敏捷方法共享很多相似的部分,比如重構,增量式的前進,程序員測試,但是在對待skinny system的態度是截然不同的。Agile認為,應盡快產生可執行代碼,架構可以隨後重構出來,而他認為,skinny system就是架構,開發skinny system的過程也就是確定架構的過程。而架構是一個系統中最重要的部分,對質量要求不折不扣的部分,因此必須精心設計,絲毫馬虎不得,也別指望事後能夠通過重構產生好的架構。另外一方面,也不要執迷於那些通用的龐大的企業級架構。正如skinny system暗示的,好的架構都是小而簡單的。Ivar認為,軟件各部分對於質量的要求是不一樣的,與架構無關的部分,適當降低質量要求以求得開發效率的提升可以的,事後也完全可以通過重構等手段改善之。然而架構卻是必須從一開始就認真對待的,Ivar甚至說,「唯一重要的質量就是架構的質量」,茲事體大,不可不察。在這一點上,Ivar還是堅持他在UP中 「Elaboration」 的思想,也即是說,系統早期設計階段(skinny system)必須力求深思熟慮、精心設計,為後面的敏捷式開發提供良好的支撐。
由此可見,Smart方法,基本上可以看做是 UP 與 Agile 的一個有機組合。我沒有實踐經驗,但是從道理上講,這應該是一種好的方法。聽 Ivar 說,他的得力合作者黃邦偉博士已經在多個重大項目中實踐此方法,取得非常出色的成果。至於更進一步的細節,我也就不瞭解了。
(PPT請上CSDN去下載)

編譯器錯誤訊息: CS0016


太久沒摸 ASP.NET , 這次用 IIS 7+ VS 2008 , 一開始竟然無法設定 ASP.NET 的環境.
會出現:
編譯錯誤
編譯器錯誤訊息: CS0016: 無法寫入輸出檔 'c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\asp\3431bdf7\e3641c1\App_Web_default.aspx.cdcab7d2.rsphwbc0.dll' -- '存取被拒。 '

試了幾個步驟:
執行:aspnet_regiis -i (在 XP 的 IIS 5 + VS2008 執行完這個 , 完全性的問題就處理掉了.)
在 VISTA 上不行,查了些資料後,更改 C:\WINDOWS\TEMP 目錄的安全性即可。
temp找到安全性中的 IIS_ISURS 使用者,更改其權限 (按"進階..."設定),允許完全控制。
接著重啟 IIS 即可。