(1)系統(tǒng)的復(fù)雜性。
(2)程序員的差異因素。
(3)代碼的維護(hù)工作。
(4)缺乏天才程序員的參與。
(5)項(xiàng)目管理方面的問(wèn)題。
2009年1月14日 #
曲:顧嘉輝 詞:黃沾
浪奔浪流
萬(wàn)里滔滔江水永不休
淘盡了世間事
混作滔滔一片潮流
是喜是愁
浪里分不清歡笑悲憂
成功失敗
浪里看不出有未有
愛(ài)你恨你
問(wèn)君知否
似大江一發(fā)不收轉(zhuǎn)千彎轉(zhuǎn)千灘
亦未平復(fù)此中爭(zhēng)斗
又有喜又有愁
就算分不清歡笑悲憂仍愿翻百千浪
在我心中起伏夠
這是一個(gè)關(guān)于鷹的故事。
鷹是世界上壽命最長(zhǎng)的鳥(niǎo)類(lèi),它一生的年齡可達(dá)70歲。
要活那么長(zhǎng)的壽命,它在40歲時(shí)必須做出困難卻重要的決定。這時(shí),它的喙變得又長(zhǎng)又彎,幾乎碰到胸脯;它的爪子開(kāi)始老化,無(wú)法有效地捕捉獵物;它的羽毛長(zhǎng)得又濃又厚,翅膀變得十分沉重,使得飛翔十分吃力。
此時(shí)的鷹只有兩種選擇:要么等死,要么經(jīng)過(guò)一個(gè)十分痛苦的更新過(guò)程——150天漫長(zhǎng)的蛻變。它必須很努力地飛到山頂,在懸崖上筑巢,并停留在那里,不得飛翔。
鷹首先用它的喙擊打巖石,直到其完全脫落,然后靜靜地等待新的喙長(zhǎng)出來(lái)。鷹會(huì)用新長(zhǎng)出的喙把爪子上老化的趾甲一根一根拔掉,鮮血一滴滴灑落。當(dāng)新的趾甲長(zhǎng)出來(lái)后,鷹便用新的趾甲把身上的羽毛一根一根拔掉。
5個(gè)月以后,新的羽毛長(zhǎng)出來(lái)了,鷹重新開(kāi)始飛翔,重新再度過(guò)30年的歲月!
We also introduced some core JBI concepts:
SLD(Style Layer Descriptor)樣式層描述符
基于XML語(yǔ)言
創(chuàng)建樣式,相對(duì)比較簡(jiǎn)單。
1. SLD Hello World
1.1 Create the SLD File----OK
1.2 Load Your New SLD ----OK
1.3 Give a FeatureType Your New SLD---OK
View the Style---OK
2. SLD Text Symbolizers 文本符號(hào)----OK 存在問(wèn)題:使用中國(guó)地圖顯示異常,請(qǐng)求樣式不適用于圖層,進(jìn)一步操作??????
Modify the SLD File to Include Text Symbolizers
<Label>: What label to give each rendered object. Here we use an attribute of the object, "TYPE". The property name is case sensitive. 標(biāo)簽
<Font>: The font and size the label will have. 字體
<Fill>: The color that we will fill the font with 填充
3. Outlines and Filters -----OK
<ogc:Filter>
<ogc:Not>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>TYPE</ogc:PropertyName>
<ogc:Literal>highway</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Not>
</ogc:Filter>
<ogc:PropertyIsLessThan>
<ogc:PropertyIsGreaterThan>
The halo is essentially a buffer outline of the text. halo文本的暈環(huán)
4. What SLDs are, a text approach
SLD (Styled Layer Descriptor) is a specification put out by the OGC, that defines an XML language to allow users to define symbolization of their feature data. It was written to be a complement to their Web Map Service (WMS) specification, by extending it to allow users a way to define how they want to visualize their features.
Then there are 5 types of symbolizers you can use to actually portray the features,
(1)line, 線
(2)polygon, 多邊形
A Polygon Symbolizer has a geometry and a stroke, just like a line symbolizer, but also has a 'fill', defining what color to put in the center. Can be straight color, or a graphic, of varying opacity and the like.
(3)point, 點(diǎn)
A point symbolizer is made up of a geometry and a Graphic. A graphic is made of either an External Graphic, or a Mark, and has an opacity, a size, and a rotation. Opacity is the same as for the other symbolizers, Size is the absolute size of the graphic in pixels (default is to be dynamic), and rotation defines the rotation of the graphic in the clockwise dimension in decimal degrees. A Mark has a well known name (like square, circle, star, ect.), and a fill and a stroke. An External Graphic uses an xlink to refer to the location of an resource on the web to use to represent the point.
(4)text, 文本
A text symbolizer is made up of a Geometry, a Label, a Font, a LabelPlacement, a Halo, and a Fill.
(5)and raster. 光柵
A raster symbolizer consists of a Geometry(幾何學(xué)), opacity(透明度), channel selection(路線選擇), overlap behavior(交疊事件), color map(顏色地圖), contrast enhancement(對(duì)照增強(qiáng)), shaded relief(陰影浮雕) and image outline(圖像輪廓).
STEP 1. Start GeoServer and Login---- OK
用戶(hù)名:amdin
密 碼:geoserver
STEP 2. Create a DataStore -------OK
STEP 3. Create The FeatureType---- OK
3415 PROJCS["WGS 72BE / South China Sea Lambert",
GEOGCS["WGS 72BE",
DATUM["WGS 72 Transit Broadcast Ephemeris",
SPHEROID["WGS 72", 6378135.0, 298.26, AUTHORITY["EPSG","7043"]],
TOWGS84[0.0, 0.0, 1.9, 0.0, 0.0, 0.814, -0.07838062637389662],
AUTHORITY["EPSG","6324"]],
PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"]],
UNIT["degree", 0.017453292519943295],
AXIS["Geodetic longitude", EAST],
AXIS["Geodetic latitude", NORTH],
AUTHORITY["EPSG","4324"]],
PROJECTION["Lambert Conic Conformal (2SP)", AUTHORITY["EPSG","9802"]],
PARAMETER["central_meridian", 114.0],
PARAMETER["latitude_of_origin", 21.0],
PARAMETER["standard_parallel_1", 18.0],
PARAMETER["false_easting", 500000.0],
PARAMETER["false_northing", 500000.0],
PARAMETER["standard_parallel_2", 24.0],
UNIT["m", 1.0],
AXIS["Easting", EAST],
AXIS["Northing", NORTH],
AUTHORITY["EPSG","3415"]]
STEP 4. Try It Out----Exception
出現(xiàn)問(wèn)題,出現(xiàn)異常
java.lang.reflect.UndeclaredThrowableException
繼續(xù)努力===========|||||||||
嘗試變化地圖的文件-----
嘗試修改樣式----失敗
(1)The requested Style can not be used with this layer. The style specifies an attribute of PERSONS and the layer is: topp:world_adm0
提示樣式不正確。
(2)重新新增樣式
樣式表的問(wèn)題-----修改為系統(tǒng)原有樣式。系統(tǒng)正常。
Geoserver 下載后運(yùn)行有比較弱智的問(wèn)題:
在運(yùn)行startup.bat后,系統(tǒng)沒(méi)有正常運(yùn)行起來(lái)。原因是因?yàn)閖ava_home的放在Program Files下,郁悶了小半天,移動(dòng)了一下位置,終于運(yùn)行起來(lái)了。
面對(duì)未來(lái)充滿憧憬與向往,但是一定要面對(duì)現(xiàn)實(shí),腳踏實(shí)地,將理想轉(zhuǎn)化為理性的可以操作的實(shí)際行動(dòng)。
從理想主義到實(shí)用主義的轉(zhuǎn)變。
變革是痛苦的,但同時(shí)也是必要的。企業(yè)要想獲得相應(yīng)的持續(xù)發(fā)展,必須要拿出相應(yīng)的措施和手段來(lái)促進(jìn)相應(yīng)的發(fā)展。
作為個(gè)人也是一樣的,要隨著企業(yè)環(huán)境和外在環(huán)境的變化,不斷調(diào)整自己的角色,適應(yīng)相應(yīng)的發(fā)展。
從一個(gè)資深的軟件工程師轉(zhuǎn)變成項(xiàng)目經(jīng)理,從一個(gè)項(xiàng)目經(jīng)理到項(xiàng)目管理辦公室,從項(xiàng)目辦公室到相應(yīng)的市場(chǎng)營(yíng)銷(xiāo)管理,從市場(chǎng)營(yíng)銷(xiāo)管理到公司整個(gè)研發(fā)、市場(chǎng)、測(cè)試實(shí)施、銷(xiāo)售、財(cái)務(wù)、行政、人事等等方面的全面管理,需要不斷的提升自己,自我充電,方能實(shí)現(xiàn)一步步的調(diào)整。
整個(gè)過(guò)程是痛苦的,也是艱辛的。
今天看了對(duì)話視頻中糧集團(tuán)的董事長(zhǎng)說(shuō),最終活下來(lái),或者說(shuō)生存下來(lái)的,不是最強(qiáng)大的,也不是最聰明的,而是最適應(yīng)外界環(huán)境的。物競(jìng)天擇,適者生存。
不知不覺(jué)公司又剩下最后一天的時(shí)間,可是事情卻依然很多沒(méi)有處理掉。溝通很重要,很多事情寧愿多打幾個(gè)電話,短信不可靠。時(shí)間是不等人的,時(shí)間一點(diǎn)點(diǎn)過(guò)去,不依賴(lài)于人的意志,可是人這個(gè)主觀的動(dòng)物總也不能擺脫懶惰、散漫的本性。
辦事情的人總也很少,而人總是有這樣那樣的缺陷,如何進(jìn)行有效利用更好?用還是不用?都會(huì)成為難題。
(1)事情越來(lái)越多,在項(xiàng)目中的有N多To Do List的,如何靜心?
//不要情緒化,理性,做事情能平和的處理每一件事情。
(2)如何以最快的速度進(jìn)入進(jìn)入狀態(tài)非常關(guān)鍵?
//拿到的事情能快速進(jìn)入到思維中。
(3)因?yàn)樘幚硪患虑楹螅焖龠M(jìn)入到相應(yīng)的其他事情的處理;How?
//退出機(jī)制,一旦退出后,就不再進(jìn)入。
(4)另外很多事情做到一半打斷,如何做?
//除非很重要很緊急的事情,否則一律擋掉,一心不能兩用。
最后,不要隨心所欲的處理事情,要有計(jì)劃性,否則如野馬在荒原中馳騁永遠(yuǎn)找不到相應(yīng)的目標(biāo)。
需求變更控制
前面已經(jīng)說(shuō)過(guò)了,在軟件開(kāi)發(fā)項(xiàng)目開(kāi)始之前,就要消除“絕不允許發(fā)生需求變更”的思想。在項(xiàng)目進(jìn)行,一旦發(fā)生需求變更,更不要不一味的抱怨,也不要去一味地迎合客戶(hù)的“新需求”,而是要管理和控制需求變更。
1、 分級(jí)管理客戶(hù)需求
軟件開(kāi)發(fā)項(xiàng)目中,“客戶(hù)永遠(yuǎn)是對(duì)的”和“客戶(hù)是上帝”并不完全的正確,因?yàn)樵谝呀?jīng)簽定的項(xiàng)目合同中,任何新需求的變更和增加除了影響項(xiàng)目的正常進(jìn)行以外,還影響到了客戶(hù)的投入收益,所以有的時(shí)候項(xiàng)目經(jīng)理反倒應(yīng)該為客戶(hù)著想。
對(duì)于項(xiàng)目中的需求,可以實(shí)行分級(jí)管理,以達(dá)到對(duì)需求變更的控制和管理。
一級(jí)需求(或變更)是關(guān)鍵性的需求,這種需求如果不滿足,意味著整個(gè)項(xiàng)目不能正常交付使用,前期工作也會(huì)被全部否定。這個(gè)級(jí)別的需求是必須滿足的,否則就意味著否定自已的項(xiàng)目成員和成員的所有努力,所以定為“Urgent”。 這通常是屬于補(bǔ)救性的debug類(lèi)型,要救火。
二級(jí)需求(或變更)是后續(xù)關(guān)鍵性需求,它不影響前面工作內(nèi)容的交付,但不加以滿足,新的項(xiàng)目?jī)?nèi)容無(wú)法提交或繼續(xù),所以是“Necessary”。一般新模塊關(guān)鍵性的基礎(chǔ)組件,屬于這個(gè)級(jí)別。
三級(jí)需求是后續(xù)重要的需求,如果不被滿足會(huì)令整體項(xiàng)目工作的價(jià)值下降,為了體現(xiàn)項(xiàng)目?jī)r(jià)值,也是開(kāi)發(fā)人員自已的技術(shù)價(jià)值的證明,所以定為“Needed”。一般性的重大的有價(jià)值的全新模塊開(kāi)發(fā),屬于這個(gè)級(jí)別。 項(xiàng)目管理者聯(lián)盟,項(xiàng)目管理問(wèn)題。
以上三個(gè)等級(jí)是應(yīng)該實(shí)施的,但時(shí)間性上可以作優(yōu)先級(jí)的排列。
四級(jí)需求是改良性需求,沒(méi)有滿足這類(lèi)需求并不影響已有功能的使用,但如果實(shí)現(xiàn)了則會(huì)更好,定級(jí)為“Better”。界面和使用方式的需求,一般在這個(gè)檔次。
五級(jí)需求是可選性需求,更多的是偶是一種設(shè)想,以及一種可能,通常只是客戶(hù)的的一種個(gè)人喜好而已,定級(jí)為“Maybe”。
對(duì)于四級(jí)需求,如果時(shí)間和資源條件都允許的話,不妨做下去。對(duì)于五級(jí)需求,正如對(duì)它的描述一樣,做與不做是“Maybe”。
2、全生命周期的需求變更管理
各種規(guī)模和類(lèi)型的軟件項(xiàng)目的生命周期大致可以分為三個(gè)階段,即項(xiàng)目啟動(dòng)、項(xiàng)目實(shí)施、項(xiàng)目收尾。不要以為需求變更的管理和控制只是發(fā)生在項(xiàng)目實(shí)施階段,而是要貫穿在整個(gè)項(xiàng)目生命周期的全過(guò)程中。
站在全局角度的需求變更管理,需要采用綜合變更控制的方法。
(1) 項(xiàng)目啟動(dòng)階段的變更預(yù)防
正如前面強(qiáng)調(diào)的,對(duì)于任何軟件項(xiàng)目,需求變更都無(wú)可避免,也無(wú)從逃避,無(wú)論是項(xiàng)目經(jīng)理還是開(kāi)發(fā)人員只能積極應(yīng)對(duì),而這個(gè)應(yīng)對(duì)應(yīng)該是從項(xiàng)目啟動(dòng)的需求分析階段就開(kāi)始了。
對(duì)一個(gè)需求分析做得很好的項(xiàng)目來(lái)說(shuō),基準(zhǔn)文件定義的范圍越詳細(xì)清晰,用戶(hù)跟項(xiàng)目經(jīng)理提出需求變更的幾率就越小。如果需求沒(méi)做好,基準(zhǔn)文件里的范圍含糊不清,被客戶(hù)發(fā)現(xiàn)還有很大的“新需求空間”,這時(shí)候項(xiàng)目組往往要付出許多無(wú)謂的犧牲。
如果需求分析做得好,文檔清晰且又有客戶(hù)簽字,那么后期客戶(hù)提出的變更就超出了合同范圍,需要另外收費(fèi)。這個(gè)時(shí)候,項(xiàng)目經(jīng)理一定要據(jù)理力爭(zhēng),此時(shí)這并非要刻意賺取客戶(hù)的錢(qián)財(cái),而是不能讓客戶(hù)養(yǎng)成經(jīng)常變更的習(xí)慣,否則后患無(wú)窮。
(2) 項(xiàng)目實(shí)施階段的需求變更
成功的軟件項(xiàng)目和失敗項(xiàng)目的區(qū)別就在于項(xiàng)目的整個(gè)過(guò)程是否是可控的。
項(xiàng)目經(jīng)理應(yīng)該樹(shù)立一個(gè)理念,即“需求變更是必然的、可控的,并且是有益的”。項(xiàng)目實(shí)施階段的變更控制需要做的是分析變更請(qǐng)求,評(píng)估變更可能帶來(lái)的風(fēng)險(xiǎn)和修改基準(zhǔn)文件。
控制需求漸變需要注意以下幾點(diǎn):
需求一定要與投入有聯(lián)系,如果需求變更的成本由開(kāi)發(fā)方來(lái)承擔(dān),則項(xiàng)目需求的變更就成為必然了。所以,在項(xiàng)目的開(kāi)始,無(wú)論是開(kāi)發(fā)方還是出資方都要明確這一條:需求變,軟件開(kāi)發(fā)的投人也要變。
需求的變更要經(jīng)過(guò)出資者的認(rèn)可,這樣才會(huì)對(duì)需求的變更有成本的概念,能夠慎重地對(duì)待需求的變更。
小的需求變更也要經(jīng)過(guò)正規(guī)的需求管理流程,否則會(huì)積少成多。
在實(shí)踐中,人們往往不愿意為小的需求變更去執(zhí)行正規(guī)的需求管理過(guò)程,認(rèn)為降低了開(kāi)發(fā)效率,浪費(fèi)了時(shí)間。但正是由于這種觀念才使需求逐漸變?yōu)椴豢煽兀罱K導(dǎo)致項(xiàng)目的失敗。
精確的需求與范圍定義并不會(huì)阻止需求的變更。
并非對(duì)需求定義得越細(xì),就越能避免需求的漸變,這是兩個(gè)層面的問(wèn)題。太細(xì)的需求定義對(duì)需求漸變沒(méi)有任何效果。因?yàn)樾枨蟮淖兓怯篮愕模⒎切枨髮?xiě)細(xì)了,它就不會(huì)變化了。
注意溝通的技巧。
項(xiàng)目開(kāi)發(fā)過(guò)程中的實(shí)際情況是用戶(hù)、開(kāi)發(fā)者都認(rèn)識(shí)到了上面的幾點(diǎn)間題,但是由于需求的變更可能來(lái)自客戶(hù)方,也可能來(lái)自開(kāi)發(fā)方,因此,作為需求管理者,項(xiàng)目經(jīng)理需要采用各種溝通技巧來(lái)使項(xiàng)目的各方各得其所。