第一篇:關于在美拓的簡短的總結與體會
關于在美拓的簡短的總結與體會
概要:
這僅僅是個人的一點心得體會與總結,本登不得大雅之堂,然而我作為一個對于手機開發完全的零起點對于其中的艱難與痛苦有著切膚的體會,這一切促使我不敢身藏淺陋將一些零星瑣碎公之于眾,即作為自己在美拓的簡短人生經歷的一個總結,如果能給后來者提供一點點地借鑒也心滿意足了。
1. 關于編譯環境的認識體會
首先面對程序員的就是相對復雜的編譯環境及其繁瑣的配置工作。高通平臺分為仿真和實際的arm編譯兩個截然不同的編譯環境,其中有些相同有些不兼容。
a)仿真編譯
仿真完全使用vc6的編譯機制,高通的例子是把一個個小applet編譯成為dll動態庫,我們的工程應該是把brew的模擬器作為靜態庫鏈接到meta的工程里面,模擬器的配置在win32/bin/brew_emu.dat中,在其中可以指定外觀即devicepack配置文件,以及applet運行的文件系統路徑,及其相應的mif文件所在路徑。PhoneFile=H:CDMAL200Win32DevicePack1L200DevicePack1.dpk
AppletDir=H:CDMAL600-newResourceFileSystem
MIFDir=H:CDMAL600-newResourceFileSystem
Vc6能夠自動解析源文件的相應的依賴關系省卻了程序員寫makefile的痛苦,但是如何創建vc6的工程文件是一個很繁瑣的工作。
美拓的代碼統統使用cfg文件管理機制可以很方便地依靠gendsp.cmd工具加入工程組,也就是說每個源代碼模塊都定義了一個.cfg文件,里面列明了模塊的頭文件.h,源文件.c/.cpp,以及鏈接庫.lib/.a。
[IncludeFiles]
$(METAMMI)/apps/Java/jblendia_jvm/include/settings/Meta_Java_Settings.h
[SourceFiles]
$(METAMMI)/apps/Java/jblendia_jvm/port/amsui/Meta_AmsUI.c
[LinkFiles]
!ifeq($(META_TARGET),Arm)
$(METAMMI)/3Parts/JBlend/library/ajsc/ajsc_arm_ads.a
!else
$(METAMMI)/3Parts/JBlend/library/ajsc/ajsc_win32_msvc.lib
以上就是.cfg文件的格式,于是,運行win32/build目錄下的gendsp.cmd就會運行一個perl的腳本gencfgmin.pl來讀取metammi.cfg文件,這個文件列表了所有工程要包含的meta的模塊cfg文件,然后通過這些cfg文件列明的.h,.c,.lib文件就被加入了工程,也就是加入了simulator.dsp的vc6的工程文件。
但是代碼里面的include頭文件是一個很麻煩的事情,首先,有些工程人員喜歡把其中的頭文件名前面加上相對的路徑,但是這個對于編譯確實很麻煩的事情,因為編譯器尋找這些路徑是從一個運行的相對路徑開始,然后按照編譯設定的搜索路徑和系統環境變量比如/include項下的路徑搜索,一旦工程文件位置變動就有可能搜索不到,同時過多的設定搜索路徑會減慢編譯速度,因為編譯器會不停在各個路徑下搜索,而在系統環境變量中設置弊端更多因為有可能把不同項目的同名頭文件包含進來,這才是程序員的噩夢。因此
美拓的做法是include統統使用雙引號并且不帶路徑,并在遍歷.cfg的時候把這些相應的頭文件都拷貝到win32/build/include目錄下,所以,你在vc6的工程里面看到的頭文件在編譯器看來卻是在使用另外一個在build/include目錄下的同名頭文件,你要改動必須修改工程原路徑下的重新編譯才能更新拷貝,否則修改build/include下的拷貝都被覆蓋掉了。
cfg機制對于非高通的meta的代碼很方便,但是高通是采用一個min文件的方式來建立makefile的,添加到vc6工程就沒有那么方便了,幸好不是很經常修改高通代碼,因此,我們可以在simulator.dsp的源頭template.dsp里面修改,就是把需要應用的高通的.c文件加到template.dsp文件里面,運行gendsp.cmd就更新了simlator.dsp。但是頭文件是不能拷貝進來的,只能使用vc6的頭文件搜索路徑添加:ADD BASE CPP /nologo /MD /W3 /GX /O2 /I “....binstore”
這里的/I就是搜索頭文件的路徑,頭文件的名字自然是在代碼里面的了。
鏈接的鏈接庫也是類似的使用# ADD LINK32 libjpeg_win32_msvc.lib /LIBPATH:“....SourceMeta3PartsJBlendlibrarylibjpeglib”
其中的/LIBPATH就是指示編譯器搜索庫的路徑。
因此,如果要添加一個新的代碼文件模塊或者鏈接庫,使用高通的方式很麻繁,不如使用meta的辦法在cfg里面定義,同時這個方式是仿真和arm通用的,不需要再手動修改template.dsp。(即便是高通的代碼我們也可以使用cfg方式,只不過高通自己有一套編譯順序我們不應該干擾他。)
我們要添加定義的宏怎么辦呢?原本meta的設計是在一系列的custXX.h文件里面作,這個cust頭文件在source/qualcomm/build/ms目錄下主要是定義了一系列的所謂feature的開關,其中的XX原本被設計成項目代號,這樣就可以在不同項目打開不同的所謂feature開關編譯,但是我對這個方法是有保留意見的,因為他的宏定義有一個小問題,他的所謂FEATURE_OFF/FEATURE_ON被定義為了0/1,在代碼中的宏判斷是#if(FEATURE_STATUSBAR_ONLYIDLE == FEATURE_OFF)可是使用宏最危險的就是它有可能因為編譯順序或遺漏include還沒有定義,如果FEATURE_OFF還沒有定義,默認也是0,所以這個宏就可能被誤讀。還有一個仿真添加宏定義比如至關重要的META_EDIT宏的定義,這個也可以放在template.dsp里面# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D “FEATURE_BREW_DOWNLOAD” 其中的/D就是宏定義的開關。
搜索template.dsp有如下
# Begin Custom Build-Checking all include files...InputPath=.resSimulator.ico
“copy.log” : $(SOURCE)“$(INTDIR)” “$(OUTDIR)”
call....SourceQualcommbuildmsads12.batmake-f gendsp.mak copyincfile
# End Custom Build
這里就是以上提及的copy include代碼到我們的build/include目錄的地方,這是利用了vc6的custom-build的機制,在編譯前調用perl腳本。
這里要順便提一下ads12.bat的重要性,因為高通的編譯機制大量地使用perl腳本因此如何初始化perl的運行環境至關重要,因此在所有調用perl腳本前都要先調用這個批命令。同時perl運行于linux/unix環境依靠cygwin才得以運行于windows環境,所以也需要初始化cygwin的環境變量,然而linux/window畢竟有很大區別,比如文件系統就還是有區別,如果你在運行arm編譯看到類似于什么as.exe不能正確執行的錯誤即便你的ads12.bat已經正確運行了很有可能是因為你沒有把as.exe的文件屬性加上system,比如attrib +s as.exe
b)arm編譯
arm編譯和仿真編譯有著巨大的差別,要復雜的多。首先要從編譯資源做起。資源包括圖片,文字存放在resource/meta下的image,string,theme目錄下,給每個資源編寫資源id是一件很繁瑣的事情,這里也是依靠了工具運行ImageResConv.bat把image下的所有圖片都編篡相應的資源id,比如一個圖片文件input_123.png最后就在MetaImg.brh里面變成了
#define IDI_PNG_INPUT_123 8145
命名的原則就是IDI_TYPE_FILENAME,其中type應該是文件類型即擴展名,8145是程序順序產生無關緊要。這樣程序員在代碼中按照這個命名原則就省卻了更新命名資源id的煩惱了。這個metaImg.brh最終被放在source/meta/res/project目錄下,其中project未當前的項目代號,這個必須要在build_res.bat里面設定了比如 @set PROJECT=0803_L201。最終這個metaimg.brh成為metammi.cfg的一欄。文字和圖片稍有不同,就是把中文字串資源“T_Yes是”和英文資源“T_YesYes”進行統一編號為metaStr.brh里的“#define T_Yes 3”而相應的實際資源文件則是#define CHINESE_RES_FILE “Chinese.bar”變成了高通的資源文件。
這一切的編譯工作都是在一個resource/meta/Build_Res.bat下完成的。
需要提醒注意的是,image路徑下任何文件都回被搜羅當作資源圖片文件,因此如果使用svn需要刪除svn文件或者把圖片拷貝出來編譯。
編譯完資源后就可以開始編譯了,但是首先要做的還是設置好ads12.bat,這個的重要性前面已經講過了,每個人都有可能不同要根據自己的安裝路徑來設置。運行arm/prj_code.bat其中prj_code代表當前的項目代號,因此相應的在/source/qualcomm/build/ms目錄下你要有相同項目代號的prj_code.cmd, prj_code.mak,cust_prj_code.h,同時在/source/meta/res/prj_code/下要有相應的資源文件以便鏈接。正是編譯同樣使用meta的收集cfg的方式生成實際的makefile,高通的編譯器是支持c++編譯的,比如tcpp.exe就是c++編譯器,在dmss_rules.min里面有perl腳本根據代碼文件擴展名自動選擇編譯器的規則,因此你也完全可以寫c++代碼只要你使用.cpp文件擴展名。
高通使用min文件來定義每個小模塊包含的源文件,其中還包含了.s文件,這個是一個對大多數pc程序員的巨大的surprise,這里要從程序運行談起。因為pc的程序的運行地址一般都是relocable的,也就是說運行起在哪里是不需要關心的,是由操作系統的loader加載同時修改代碼的偏移地址完成在任意物理地址運行的,但是手機程序的靜態加載模塊地址卻是定死的,當然各個模塊的地址可以依靠.scl的文件來調整,這個是linker的一個配置文件,它規定了各個模塊的boot內存地址的相對關系,比如以/source/qualcomm/build/ms/q60x0a_rom.scl為例,BB_RAM +0x0
{
dloadarm.o(+RW)
dloadusb.o(+RW)
}
/////////////////////////////////////////////
// added by nick for jvm
//Add liaohs.amoi.com.cn for JAVA
JBLEND_RAM +0x0
{
jblend_*.o(+RW)
}
//End liaohs for JAVA
// added by nick for jvm
/////////////////////////////////////////////
這里實際上規定了dloadarm.o和dloadusb.o的模塊的相對位置,同時也隱含著輸出了一個地址symbol BB_RAM,同樣的java虛擬機的起始地址JBLEND_RAM會在回編碼里編成兩個symbol: Image$$JBLEND_RAM$$Base和Image$$JBLEND_RAM$$Length,注意這里使用的$$符號是arm編譯器內部使用的,和普通的c程序變量名不兼容,為了能夠讓c程序在鏈接時候引用這兩個地址相關的變量名,需要一個所謂的.s文件來轉換。在source/qualcomm/driver/boot目錄下的bootmem.c里面可以使用extern來聲明
extern byte *Image__ JBLEND_RAM __Base;
extern byte *Image__ JBLEND_RAM __Length;
在boot_data.s文件里面把這些變量名從匯編碼的”$“形式轉換為”_”:
IMPORT |Image$$JBLEND_RAM$$Base|
IMPORT |Image$$JBLEND_RAM$$Length|
EXPORT Load__JBLEND_RAM__Base
EXPORT Image__JBLEND_RAM__Length
他們的定義是這樣子的:
Image__JBLEND_RAM__Base
Image__JBLEND_RAM__Length
而這個所謂的.s文件是在相應的boot.min文件里包含了。這種機制的核心就是為了能夠讓java虛擬機在起始運行階段記錄相應的內存地址,而這一切都是由于靜態加載的地址在編譯器就決定了。
b)關于組鍵編程
高通的組鍵模型編程基本上和微軟的COM機制類似,只不過搞通為了方便嵌入式程序員大多不熟悉c++語法以及某些效率的考慮才使用純c語法模擬實現,但是微軟的COM機制博大精深,高通僅僅借用了其中內存資源釋放管理與組建創建的很小一部分。
任何一個組鍵一定要實現最基本的三個接口方法,即AddRef,Release,QueryInterface,這三個方法看似簡單,但是meta的代碼的寫法似乎都有不妥之處。
第一,這三個方法都應該是完全對外調用的不應該隨隨便便當作內部方法來使用,比如有的人在組件的constructor,也就是所謂component_new方法里面不設定nRef計數為1,卻調用QueryInterface來
增加引用計數,雖然效果看上去一樣,實際卻是有令人混淆的嫌疑,我以為在constructor里面直
接設定引用計數為1是最自然的,因為邏輯上一個組件的創建者也就是它的擁有者當然應該增加
計數為1。
第二,queryInterface另一個被濫用的例子是meta的程序組件不論classid為何都一律最后返回SUCCESS,這個從原理上肯定是不對的,原本一個組件有可能支持多個接口方法,取決于傳進來的classid是
有可能不支持而返回失敗的。這些都為將來的可能的擴展埋下了隱患。
DCD |Image$$JBLEND_RAM$$Length|DCD |Image$$JBLEND_RAM$$Base|
高通的組件機制提供的內存資源管理還是一種非強制的模式,也就時說這個機制需要程序員自覺遵守,一旦有人違反了這個規則那么資源就不能被自動回收,比如,你在調用了queryinterface或者通過createinstance獲得了這個接口指針,但是忘記調用release,或者別的模塊傳遞給你一個參數你調用了addref卻沒有在結束調用release,那么這個資源就再也不會被釋放。
有鑒于此,高通還有一套類似于java的垃圾回收機制強制資源的回收,這個應該是在IModule里面的一個實現,也就是說在一個module創建的時候就建立了某種上下文(AEEAppContext,按照高通的代碼說明就是所謂的一個不透明的32位長整數,我們可以想象很可能就是module的起始地址,當然這個純屬猜測無關緊要。)于是在這個所謂上下文中所有調用內存分配函數malloc都會在內存的起始處被加上這么一個上下文標志,于是在這個module結束的時候,brew會強制把所有在heap里有這個標志的內存回收,這個就是所謂的垃圾回收機制。這個本來是好事可以讓程序員不用操心資源回收有缺漏,比如象上邊提到的組建的引用計數錯誤,忘記release的情況,但是對于一些跨模塊使用的資源卻有可能是一個災難。
案例1:一個組件作為參數從模塊A傳遞到了模塊B,模塊B的程序也正確的addref表明他還要繼續使用這個對象。但是當模塊A結束的時候,在組建的destructor里面的release方法檢查到了引用計數不為0也正確的不做釋放內存的調用,看上去挺好,但是brew的垃圾回收機制卻是無條件執行的,他不管三七二十一會把所有模塊A上下文的內存統統釋放。于是模塊B雖然進行了正確的addref以為組件還存在繼續調用結果訪問的卻是錯誤的內容,因為很有可能brew把回收的內存已經分配給了新生成的組件或者模塊。針對這個情形要求程序員對于可能跨模塊使用的對象的內存分配使用所謂的系統上下文,也就是調用AEEEnterAppContext的時候使用NULL參數,然后再分配內存,隨后在AeeLeaveAppContext,這個方法要保證的一個前提是該組件在所有的內存分配時候都要采用這種系統上下文。一旦在初始化之外也有分配內存的做法或者使用別的函數分配的內存也還有可能有問題。比如筆者在使用sqlite的組件中的一個所謂DBManager接口時就遇到這個問題,當時考慮把這個manager接口做成singleton以便節省資源,這就要求這個對象獨立于創建的模塊始終存在于系統中,于是在他的初始化在系統上下文內進行,但是沒有想到隨后每次當創建的模塊關閉后再打開新的模塊調用這個manager接口都會發生訪問錯誤,后來分析高通很有可能為了加快初始化manager的進度不把所有的內存分配一次性地在初始化做完,而是在實際產生新的database實例的時候分配了一些內存,而這個時候沒有在系統上下文處理,屬于當前的模塊上下文,于是當前模塊解體其中的內存自然變成非法了。
案例2:一個組件注冊了一個timer的回調事件,但隨后就再回調發生之前結束運行被釋放了。
Timer的event注冊要兩個參數都匹配才行,也就是說一個是回調函數指針還有一個是用戶自定義的數據指針,所以你要canceltimerevent的時候必須把兩個參數都傳遞正確才行,筆者對于這一點已開始比較吃驚,因為這個和PC上的一些習慣不一致。后來注意到了高通的說明就是你可以把回調函數指針傳遞null,這個CancelTimerEvent就把所有綁定這個數據結構的event都取消了,所以,鑒于此,我覺得不如自行規定所有的setTimerEvent都把當前的組件指針作為用戶數據傳遞,因為所有的數據都是定義在實現結構里面的,那么在組建的destructor里面無條件調用AEECancelTimerEvent(NULL,pThis)確保取消一切的事件。
案例3:筆者在撰寫sqlite的組件時候,需求要求用戶可以注冊一個eventNotifier以便通知數據庫數據的變化,這個要求關心者注冊一個回調函數以便在數據表數據變化的時候回調來處理。因為數據庫組件很有可能是跨模塊使用,比如媒體播放其播放的mp3列表在被資源瀏覽器刪除了文件之后得到通知以便修訂播放列表。但是在這個回調函數里面筆者已開始并沒有意識到也需要切換到不同的模塊上下文,這因為當初設計回調通知機制的時候要求注冊信息包括三個要素:感興趣者的模塊上下文,感興趣的數據表,以及使用的數據庫接口指針。那么在數據庫組件注意到數據變化調用通知的回調函數的時候是在誰的上下文呢?這里我們沒有使用異步通知,而是所謂的同步通知就是說數據已修改立刻通知,因此現在的代碼是在數據修
改者的模塊上下文,他的通知函數里面的參數調用的數據卻很有可能是被通知者的上下文產生的,一旦回調函數有分配內存的動作并且保存到了被通知模塊內,就意味著通知者上下文下的內存被保存在了通知者的模塊中,將來程序crash也就不足為奇了。
組件的創建以來與所謂的createInstance機制,在windows,這個是緊密以來與GUID和windows的注冊表來共同實現的,GUID保證了組建的唯一性,注冊表則記錄了組件的相關信息幫助系統實例化組件。高通的機制與此類似,使用了一個所謂的以組件模型開發的一個重要原因是仰仗于c++在代碼實現上的繼承性,而純c語法僅僅能夠模仿c++的某些語法卻不能夠完全替代。而高通在這個方面也做得不是很嚴格,但最起碼還是有遵守基本的原則,不過amoi的程序員卻不是很有意識這樣做,以UTKForm與由此繼承而來的UTKListForm為例,后者從前者繼承而來,大部分的方法都是一樣的,可是后者不僅僅是把這些臃瘀的代碼拷貝了一遍,而且增加了今后擴展的難度。比如,筆者在設計一個對于所有form都通用的特效方法時候需要找到一個所有form的共性,即在其處于topvisible的時候進行某種特效處理,假如所有的form對于通用的方法比如show,沒有特別的實現都調用自己繼承而來的實現(比如都應該調用IForm的show方法,因為并沒有什么特別的做法,都不過時拷貝了高通的實現),那么可以很容易的在IForm一級做一個處理,可是由于很多從UtkForm“繼承”而來的各式各樣的form有都把相同的方法的相同的實現都拷貝了一遍,變成我需要把我的修改再一級級的修改。
第二篇:161教師體會-美與殘酷
美與殘酷
去年我過生日的那天,正忙著報一份材料,忙得暈頭暈腦的,在辦公室的那面書架有些蒙塵的檔案袋里翻找有效的證件,抬頭的瞬間就看到了抱著一束百合花在校園甬路走得搖曳多姿的漂亮女子。她的頭發在早春的風里飄呀飄,修長的雙腿每一步都是節奏韻律彈性,甚至是陽光。
我一眼就認出了她:“關荔荔!”“荔荔,2005年畢業的關荔荔。”
她那自信得甚至有幾分任性的那份獨特的氣質感染了那一路的綠,一樹的花。
她滿面春風地闖進了我的辦公室,就好像我們昨天剛剛分別,就好像我們從未分離。
“生日快樂!”她和她的花一起問候了我。
“把這絲巾戴上,我挑選了好久才令我滿意,你必須喜歡。”荔荔的笑眼就像星星。我以為只有這個比喻是恰當的,星星般地明亮高遠純凈甚至有點浩渺。
“你怎么知道我今天過生日?”
“我想知道就知道唄!”
“還是那個樣子,不見老,挺好!”她打量著我,并給予溫和的鼓勵。
“荔荔,兩年前我做了一個手術。荔荔,我好像不太健康,算是殘疾人嗎?”我充滿期待又好像在等待她的安慰。
“太不算什么了.美麗就是殘酷的。這你都不知道啊?對啦,老師,我去年剛剛又生了一個寶寶,是個男孩,又是剖腹產。”你看我還好吧!”
“當然啦!當然啦!”看著苗條而又充滿青春氣息的荔荔.我說,“你完全可充美少女并蒙混過關。”
“我女兒都四歲了。”荔荔不無得意,“其實有點兒小傷小病的真的沒有什么?反倒會讓我們更美麗。”
“怎么會?”我在心里想。
荔荔說:“其實你肯定猜不到,我也剛剛做了一個手術,甲狀腺腫瘤,惡性的。”
“什么?!”我以為我是聽錯了。她小小的年紀,她一臉的青春與陽光。“別怕,別怕,不是說天妒紅顏嗎?像你我這么漂亮的人,患點兒小病挨上一刀,真的不算什么,只能讓我們更美麗,不是相由心生嗎?我們的氣質里會多一份勇敢和淡定。”
“來,讓我再仔細地看看我,這不是嗎?你的手術部分地起到了外科美容手術的作用。看,抬頭紋淡了,川字紋沒有了,年輕了嘛!你再看看我。”說著,她優雅地轉了一個圈。是呵,她的美麗中是多了一份說不出的迷人的風韻,那是她這個年齡的人所沒有的。
我曾經以為自己很達觀,我也被親友贊嘆為堅強勇敢,卻不及眼前這個只有二十幾歲的荔荔,她讓我再一次審視我的病痛甚至生命。
“你還記得我們上中學的時候,你給我們講的澳大利亞女作家考林
麥卡洛的小說《荊棘鳥》嗎?我們都記得那個開頭的寓言故事:
有一個傳說,說的是有那么一只鳥兒,它一生只唱一次,那歌聲比世上所有一切生靈的歌聲都更加優美動聽,從離開巢窩的那一刻起,它就在尋找著荊棘,直到如愿以償,才歇息下來,然后,它把自己的身體扎進最長最尖的荊棘上,便在荒蠻的枝條之間放開了喉嚨,在奄奄一息的時刻,它超脫了自身的痛苦,而那歌聲竟然使云雀和夜鶯都黯然失色??上帝也在蒼穹中微笑,因為最美好的東西只能用最深痛的巨創來換取。”
年輕的時候讀《荊棘鳥》一定都為這美麗而殘酷的寓言而打動,所驚艷,所震撼。
是呵,那句多么富有哲理的話卻被我遺忘,遺忘在歲月里,遺忘在匆匆的步履和紅塵的瑣事中,所有的經典都是用生命寫就的:
“最美好的東西只能用最深痛的巨創來換取。”
那天很戲劇很傳奇,一個年輕人,一個我曾經的學生結結實實地給我上了一課。改變了我對病痛甚至活著的態度。
去年冬天去臺灣,聽導游講宋美齡。竟意外地得知,這個美麗智慧優雅的第一夫人晚年竟得了令人痛苦難言的免疫系統疾病,嚴重的蕁麻疹糾纏了她后半生。
總以為宋氏姐妹宛如仙女,集聰慧美貌財富權力長壽于一身,抗戰時期蔣夫人在美國的極具煽動性的演講震動了世界。宋美齡活了整整106歲,直到生命的最后一刻,仍畫精致的妝容,梳理及腰的長發。
宋美齡壽高106歲,橫跨三個世紀,在中國近代女性中極為少見,歷經三個世紀并且永遠保持優雅。
而據過去曾經陪同宋美齡到白宮做客的孔令侃透露:“宋美齡到白宮做客,隨身還帶著絲綢床單,因為宋美齡患有蕁麻疹與帶狀皰疹,會對棉織品過敏。”孔令侃還曾經以“癢起來的時候,一百只手抓都來不及。”
這種痛苦真的是難以想象,更令人難以想象的是宋美齡居然有這樣的病史病歷:
1905年在上海漢口路馬克諦耶女子教會小學讀書的時候得過一場很重的肺病甚至因體弱而輟學。
抗戰時期在重慶就患上了嚴重的蕁麻疹。
1974年宋美齡在美國被診斷出患有乳腺癌,次年做了乳房切割手術,在躺在病榻上的蔣介石問宋美齡為什么不像往常一樣每天探望他兩次,他被告知,她去美國進行了一次簡短的旅行。
不可想象的是如此優雅的女人做過兩次乳腺癌切除手術。
在臺北的士林官邸,我們看宋美齡的花園西式的,寧靜的,宗教情結濃郁的,據說她吸煙,熬夜,喝濃咖啡,還有重大的眾多的社交與應酬。
有著106歲高壽的宋美齡并非健康順遂。
同樣是在她80多歲時,陽明山的一場車禍,外科和骨科醫生為她在受傷的頭骨上加了鋼釘和鋼片,并且膝關節留下嚴重的疾病,終身疼痛難忍。
宋美齡跨越三個世紀的美麗的后面有著這樣常人難以忍受的殘酷。
而也許對于宋美齡來說最大的殘酷是蔣介石去世后,與蔣經國的不睦使得她無法在臺灣立足,孤身在美國地生活了十一年。
十一年,宋慶齡始終保持著她慣有的精神狀態,樂觀安靜。
也許生命只有遇見險灘暗礁的時候才會綻放出迷人的美麗,也許生命只有跨越過險灘暗礁才會變得如此強大和美麗。
民國時期的宋史三姐妹,以她們的美麗智慧學養絢爛成神話和傳說。而苦難病痛孤獨??人生諸多殘酷又使得宋美齡的生命獨特而芬芳。
看過冰凌花,開在冰雪中,以為它是碩大而強勢的,而冰凌花卻是以一抹嬌艷的黃,含羞的笑,征服了冰雪,瞬間映照了萬丈冰天。
美麗與殘酷交映。
生老病死是人生無奈的緣與結。無憂無懼無喜地面對,要知道,這是我們的必答題。而保持生命的美麗是我們今生的責任。
第三篇:拓客總結與心得
拓客總結與心得
一、項目如何設定合理的拓客目標?
拓客目標的設立:
1、項目開始階段的營銷目標,倒推認籌目標、蓄客目標等,根據蓄客目標設定拓客計劃,摸底建立作戰地圖,建立項目營銷團隊的組織架構及PK激勵計劃,打有準備之仗;一般在設立總目標后,分配給各個團隊,各個團隊再分配到個人,進而細化到前期蓄客期、強拓期等階段。
2、制定目標及分解目標的過程會驗證合理性;同時每周每日進行盤點時調整指標。
二、拓客區域一般怎么劃分?
每個項目一般都會有營銷策略及拓客策略,整盤的項目屬性及客戶定位決定了我們的客戶在哪里,項目組制定策略及樣板驗證后安排各個小組按戰區進行作戰指導。甚至針對核心戰區的商超等人流旺的場所,可以要求各分隊進行拍賣,按指標最高者拍得主要客戶點,更高的完成拓客目標。指標與費用掛鉤,優勢資源傾斜化,爭取做到整體平衡。
因此,有組織、有計劃、有指標、有PK競爭淘汰的拓客,才是有序的。
三、目前看來什么樣的拓客方式最有效果?
碧桂園習慣于線下拓客,有八大拓客方式:派單、電營、展點、競品截流、大客戶拜訪、圈層營銷、組織看房團、編外經紀人(一二手聯動)。
如何平衡一二手聯動?建議一碗水端平,效果付費,當然2個月以后的評判,效果更好的可以資源傾斜。
四、拓客收網是什么形式,散客隨到隨收,還是集中在一起通過活動優惠殺定? 8大拓客方式是拓客的形式,通常組織收客我要求按節點進行。三部曲:白天拓客,晚上收客;工作日拓客,周末集中收客;最后按集中的大節點組織大活動進行大規模收客。拓客、收客的關鍵詞:禮品+活動。
第一步,白天帶項目各種禮品出動拜訪,晚上集中約訪客戶及回訪客戶,確定拓客指標下的有效客戶有多少;
第二步,周末組織暖場活動(客戶需要的活動),約訪本周客戶參加,二次盤點有多少有效客戶;
第三步,大型節日,項目重大節點等組織大型活動進行辦卡認籌等鎖定客戶。總之,通過不斷的互動加深客戶粘度并不斷洗客,組織合理貨源并做到開盤必勝。
五、在互聯網思維下,線上如何配合線下拓客?
互動。同一個項目營銷策略,同一份節點計劃,線上線下一定是組合拳。比如項目實景展示區開放,組織一個游園活動,同時線下還邀請了當地的婚紗攝影店、法拉利車展(都是免費贊助),這時可以在線上推廣上進行客戶互動。
六、拓客費用是單獨列支還是算營銷費用,比例有限制嗎?
所有營銷發生的費用都算營銷費用,然后再分為推廣費用、銷售管理費用(包括拓客費用)、營銷設施費用等。每個大項根據項目情況營銷總進行分配。
七、拓客需要高激勵,高淘汰,這個前提條件是有充足的后備人員,對于項目不多,人才儲備不足的小公司來說,又如何去做?
對于小型公司兩種辦法:
1、組件外拓小蜜蜂團隊,為了專業,可以固定一些大學生兼職,長期培訓,按效果付費,每天來訪指標下100元,有效來訪一組獎勵多少,成交獎勵多少。
2、適度超配人員,每月固定淘汰比如10-20%,同時不停招人,保持良性循環,效果付傭。成交才會付傭金,整盤計算好固定的傭金比例,適當從營銷費用中出,何樂不為。對于拓客人員有沒有保底?如果是學生,已經有每天的80-100元,夠生活了,記住別讓他們太飽。如果是自己的團隊,我們的習慣是外拓設立指標,當天外拓人員完成指標可以有補助,要考核的,好的獎勵,差的懲罰。
代理公司要業績,拿錢出業績是他們該做的,如果糧餉充足的情況下,那是他們自己的問題,我們只要結果;但如果本身項目難賣,傭金點又不高,為了代理的積極性,適當給些激勵補貼是可以的。
營銷團隊跟軍隊一樣,目標性的物質刺激可以刺激到他們。
八、企業拜訪開拓,應該注意哪些細節?
企業拓客,關鍵在于人脈及資源。我的習慣每到一個城市,首先利用身邊的資源進行滲透。供應商、政府各部門、銀行、員工親朋等,你總能從自己公司的部門找到他們關聯的客戶,所以全員營銷就來了。
企業可以從當地管委會及各大工會,員工親屬在企業任職等進行先期滲透。我的經驗通過政府公益性活動組織(政府主辦我協辦)及企業需要的活動組織最有效。
比如政府消防知識展,與政府企業組織員工交流舞會、街舞大賽、園區好聲音等,有了這樣的活動以后,一來可以提升企業美譽度,二來可以提高項目知名度。這樣可以進行第二步,企業大客戶拜訪(PPT)及駐點(比如食堂加餐),最主要的是線下的大規模圈層活動,以點爆面。有些企業引進城市搞關系往往只是重視開發報建,沒有把客戶拓展重視起來。建議可以把各部門的對外聯絡組織起來。
九、針對鄉鎮如何拓客,因為鄉鎮比較分散特別是鄉?
目前的三四線城市項目,主要的客群除了縣城,大約有40-60%的客戶來自目標鄉鎮,拓客是可行的。我們根據前期的客戶地圖,分出城市及鄉鎮的主要一二級戰區,按客戶密集度進行有效的階段性拓客。
大部分鄉鎮客戶關注進城結婚(戶口)、教育學區、價格等關鍵點,我們拿一個目標鄉鎮分析。
線上線下的配合來舉例,首先是到達項目的主要道口戶外等資源,其次是鎮上的超市、政府、銀行、主流餐飲等人流集中地的廣告植入(橫幅、臺簽、展點等),同時啟動當地政府商會辦公室主任等的人脈圈層開拓,這里可以用編外經紀人。
銷售團隊有調集40號人以上的項目可以利用周末3天打鄉鎮,先線上廣告轟炸近一個月,然后鎮上主要點的全鎮派單2天,晚上再進行集中的活動進行收客,一次搞定,一個月可以打4個重點鄉鎮。
十、拓客中發展了經紀人,其資源充足,但傭金高于置業顧問3倍以上,在合作中,如何防止置業顧問將客戶轉移到經紀人處,損害公司利益?
跳單主要靠監控和懲罰。如果是非中介做的編外經紀人,先訂立游戲規則,對編外約定必須是他的渠道找來的客戶成交,否則不付傭金甚至追償(協議中體現,具體溝通還是以調動積極性為主)。而防范通常從內部入手,日防夜防家賊難防,內部的紅線所有人要清楚,一旦發現扣罰傭金并開除,沒有余地。
第四篇:素拓委員工作計劃與總結
教育科學系12級小學教育三班素拓委員2012-2013學年
第二學期工作總結
回想2012第二學期的點點滴滴,所有的事情還歷歷在目,仿佛發生在昨天。從一名懵懂的大一新生到初涉工作本質的團支部委員,從稚嫩到成熟,從一無所知到明明白白,在這兩年的時間里,也許丟失了一些東西,但學到的經驗道理遠遠超過了這些丟失,這將成為我一生的寶藏。
做為我們班的素拓委員,我本著求實、創新、積極、靈活的工作態度做好了我的本職工作。工作是忙碌而又充實的,通過歷次活動,我與其他班干部間的聯系加強了,關系更加融洽了。在常規工作方面,首先,我能夠以認真的態度對待與完成學校團委,系里布置的工作任務,每項工作都盡最大努力完成。
在完成中心一些工作的過程中,由于剛開始對工作的不熟悉,我有時候會遇到很多困難,但每次當我遇到困難的時候,我都會鼓勵自己,有時候也會去請教別人,盡力去完成每項工作。工作是枯燥的,但每次想到自己加入班委會正是為了服務同學,磨練自己和鍛煉自己,我都會把一切阻力化為動力,盡力地圓滿完成每次工作。
在個人思想方面,個人對班委的宗旨“讓優秀成為一種習慣”這句話有了更深的理解,在這學期的工作中,我學會了更好更合理地安排班委的活動與自己的學習時間,變被動學習為主動學習;學會了冷靜地思考問題,能正確的認識自己的不足,彌補過失,同時也在參與各項工作中增強了自己的團隊協作能力,使自己更優秀,更努力讓優秀成為自己的一種習慣。
回顧過去是為了更好的展望未來,不是停留在過去,而是要給自己施加壓力,讓自己更加有動力,這一學期中,總的說來,時間有限,能力有限,條件有限,成績有限,但是班級的每個成員都努力付出了時間和汗水,這是值得肯定的。
教育科學系12級小學教育三班團支部
2013年6月18日
教育科學系12級小學教育三班素拓委員2013-2014學年
第一學期工作計劃
新學期伊始,作為素拓部委員,為新學年的工作展開一番構想,做了一份新學年工作計劃,促進本班同學素質的提高,具體活動日再做詳細安排。
一、明確目標服從安排
我班始終圍繞團委工作目標,完善“學生綜合素質考核體系”以綜合素質培養主線,引各班素拓委員從思想道德文化素質、綜合閱歷等方面開展工作。堅決服從上級組織安排,認真完成院團委及系團總支安排各項工作。舉科學旗幟,提倡科學民主開展科技創新活動工作做有特色活動。
二、做好本份工作
組織策劃“素質拓展知識競賽”活動,完善素質拓展認證體系。每月組織一項活動,比如接下來的三加二籃球賽,?齊心協力向前沖?,?心連心?活動等,利用這些活動來提高同學們的班級榮譽感和責任心,以及培養同學們互幫互助的團結意識,融洽同學們的關系。
三、促進班級成員感情
適時開展一些戶外活動,如唱歌,野炊,登山等,通過娛樂的形式,輕松的氛圍在無形中增進班級同學之間,班級與班級成員之間的溝通與交流,為今后的開展工作奠定良好的工作基礎。
對于本學期制定的一些活動工作,我們會盡力做得更好,同時我們不斷吸取別人寶貴意見建議,虛心學習、認真工作,共同把各項工作開展得更出色!你的心,我的心,萬眾一心;你的力,我的力,千鈞之力。我相信只要我們同心協力就一定能夠把班級素拓建的更好。
教育科學系12級小學教育三班團支部
2013年10月11日
教育科學系12級小學教育三班素拓委員2013-2014學年
第一學期工作總結
光陰似箭,歲月如梭,轉眼間大二的生活已經過了一半,回顧自己在這半學期的素拓委員任職,很多的體會浮現在眼前。
首先,從思想上來說,這半年工作中,我的思想得到了很大的提高,看著很多班級活動搞得有聲有色,看到那些學弟學妹的激情與才華,我深深的感受到其實大學是一個一切皆有可能的地方,只要自己勤奮,只要自己敢于動手,很多機會就會向你說可以。
其次,在工作方面,半年的任職,我體會到,其實作為素拓委員是比較累的,很多事情要在班上宣傳,有的時候為了鼓勵班上同學積極參加相關活動,還得各個擊破,一個一個的去做思想工作。在生活方面,通過一年的工作,我逐步發現自己和班上的很多同學關系變好了,這充分說明了作為班上的一個小干部,做事雖然是很累的,但其中還是有很多好處的,其實不僅如此,而且,在工作中,我逐步認清楚了自己,發現了自己的不足,這也為自己揚長避短,以后更好工作著了很好的鋪墊。
時間是擠出來的,半年的工作,半年的學習,不僅沒有影響我的學習,而且給我學習增添了很多動力,我開始學會了正確處理學習和工作二者之間的關系,在工作中擴寬自己的視野,在學習中提高自己的文化水平。
當然,自己還有很多缺點和不足,比如說,今年沒有很好的把有的小活動給班上的同學宣傳,不過我一定會正視自己的不足,明年更加積極的工作,為開展好班上同學素質拓展工作而盡心盡力的。
教育科學系12級小學教育三班團支部
2014年1月4日
教育科學系12級小學教育三班素拓委員2013-2014學年
第二學期工作計劃
在這個生機勃勃的夏天,我們踏進了大二下學期的生活。回想大二一學期的學習和工作的點點滴滴,我們不知不覺的成熟了很多,對生活和工作都有了新的看法和態度。新的學年,新的開始,正像這個夏天一樣,一切都是嶄新的,充滿了希望和生機。新學期伊始,做了一份新學期工作計劃。
一、明確目標服從安排
始終圍繞團委工作目標,完善“學生綜合素質考核體系”以綜合素質培養主線,引班級同學從思想道德文化素質、綜合閱歷等方面開展工作,堅決服從上級組織安排,認真完成班級團總支安排各項工作高舉科學旗幟,提倡科學民主開展科技創新活動工作做有特色活動。
二、做好本份工作
組織策劃組織活動,“齊心協力向前沖”,”心連心”活動等,利用這些活動來提高同學們的班級榮譽感和責任心,以及培養同學們互幫互助的團結意識,融洽同學們的關系。
三、促進同學感情
適時開展一些戶外活動,如唱歌,野炊,登山等,通過娛樂的形式,輕松的氛圍在無形中增進本同學之間的溝通與交流,為今后的開展工作奠定良好的工作基礎。
對于本學期制定的一些活動工作,我們會盡力做得更好,同時我們不斷吸取別人寶貴意見建議,逐步完善學生會制度體系,虛心學習、認真工作,共同把各項工作開展得更出色。你的心,我的心,萬眾一心;你的力,我的力,千鈞之力。相信能把班級活動建設得很好。
教育科學系12級小學教育三班團支部
2014年3月6日
第五篇:素拓總結
華南理工大學廣州學院招生宣傳服務中心 人力資源部第一次破冰素拓活動總結
2014年 04 月 18日,我們部門組織策劃了第一次破冰素拓活動,經過大家的努力與積極配合,此次活動圓滿結束并取得了很好的效果。這也為我們中心以后工作的正常有序進行奠定了良好基礎。素質拓展活動的目的在于培養中心成員的團結精神和集體榮譽感,增強勇氣和自信心,消除心理上的隔閡和障礙。顯然,我們做的不錯,多數人都玩開了。
本次活動有以下成功之處:
1、學習到團結合作的重要性。
2、認識到,世界上的一些事是需要開動腦筋,集合大家的智慧才能完成的。
3、認識到,男生和女生是需要互補合作的,這樣才能更好的完成任務。
4、培養集體榮譽感是十分重要的。
5、每個人都很認真完成自己的工作。
雖然活動取得了圓滿成功,但活動過程中仍存在著許多不足:
1、由于活動時間多次變動,且選定的時間和參與人員的空閑時間不符,出 現到場人員比原定人數少的情況。
2、由于本次活動地點的確認上出現偏差,導致錯失最佳的活動時間。
3、前期準備時間很長,但效率很低,開了多次會議但沒有成效。
4、多數工作人員沒有時間緊湊感,工作效率低。
5、設置游戲時思想不夠開放,出來的游戲一半易冷場。
6、規則變動多次而復雜,多數工作人員不清楚規則。
從本次活動中得到的經驗教訓:
1、應提前做好活動規劃,做好各種準備工作,保證活動有始有終。
2、應依據中心成員的特點,對活動細則進行更改,適當放松對他們的要求,使活動順利進行。
3、在活動出現意外情況時,要學會變通,積極應對。
4、注意活動與時間的合理安排。
5、提高工作效率,完善細節,更多創新。
6、正式活動前,應把整個流程演練一遍,找出問題,進行完善。
感嘆:思維創新與細節完善兩難全,想的與做的很大差別。
素質拓展活動帶給了我們快樂,更多的是新的收獲。這些經驗、教訓對我們以后工作,是一筆不小的財富。我們要吸取經驗教訓,也要更加的努力,爭取把我們的活動越辦越好。
凌茜
2014年 4 月 24 日