2013-09-24

尋找工作中的寶藏

工作佔了我們生活大部分時間,大概30~50%;假如不喜歡工作,當工作是一件苦差,那麼代表有三分一以上的時間,你是苦逼,不開心的;工作是辛苦是事實,而且我們也不能改變工作;但是我們可以改變心思,尋找工作中的寶藏和樂趣,讓生活變得喜樂健康;

這是我們能在工作找到的寶藏:

供應

大部分的工作都是有成果的,成果就可以是金錢,也可以是食物或日用品;這些也是就是我們維持自己和家人生活的東西,沒有工作,就難有這些供應,就讓生活變得困難了;

** 秘訣:當工作的時候,要感恩當刻的生活有一定保障;出糧時候,也記得興祝一番吧!

知識

工作中,為了令任務能夠達成,你的老闆或你自己會讓你會學習很多東西;這些知識,可能對你目前的生活,或下份工作有用;如果能好好地把握,這些知識和技能就是你的價值,你創業或就業的本錢了;

** 秘訣:多多整理和紀錄你工作學習了的知識或技能,當你自己回顧或準備面試,必有意外驚喜!

成就

把工作做好,就能給你成就,自己更能肯定自己,也能得到別人的認同和稱讚;不要把成就看未一件很宏大的事情;例如為公司的產品清理程序BUG, 提升品質,是一項成就;建立一個好的團隊,也是一項成就;

往往我們會忽略了我們成就,失去了那些成就帶給你的滿足感;

** 秘訣:多制定目標,並把它們達成;也可以利用社交工具(微博或Twitter)等,紀錄和分享一下;

友誼

工作中,你會跟很多人合作,那些人是和你有很多時間相處的人;在當中,你可以和你並肩作戰的人,你也可以在當中認識很多志同道合的人;
不過,人與人的關係很複雜的,未必人人能互相投緣的;
假如你的工作,沒有和你價值相同的人,其實應該考慮換換環境,碰上那些最能合作​​的伙伴;

** 秘訣:三人行必有我師,讓你的工作夥伴成為你的良師益友;

經歷神 (信耶穌的人獨有)

困難,挑戰,不可能任務;這些在工作中,必然會出現,越是高薪厚職,越常出現;
這些時候,如果我們相信神,就可以透過禱告,把事件交託給神,讓神介入,神往往給你有意外的驚喜,和給你最好的結果;有些這些寶貴的經歷,就能更確信神和他的供應,我們就能生活得更平靜安穩,不會被困難打垮,面對難處也能安然度過;

** 秘訣:應當仰望神,因他笑臉幫助我;我還要稱讚他(詩篇42:5)



聖經說:”六日要勞碌作你一切的工“;也說“你要吃勞碌得來的;你要享福,事情順利”;
工作是神的設計,雖然工作是付出勞力,但是同時它能帶給我們很多東西;如果單單看著
自己付出的,沒有看和吃所得的,你就可能錯過工作的樂趣了!


2013-09-17

Again?! What's a good game?

My company and I develop games for years; We always say "good games
make good returns"; However, what is a good game? We really don't have an good answer; Actually, I was making several games last few years but they are not good enough.

While I rethink about the definition of "GOOD", I remember the games I enjoyed and loved in my life. They recall me what are the elements of a "GOOD" game!

Here they are:

  • Comfortable to play
  • Attractive Story or Scene
  • Things to unlock
  • Skill to master
  • Make me great!
  • Killing my time happily
  • Beatable Challenges 
  • Wow! That's amazing!
  • My princess is waiting for me!
PS: No more explanation about the points above, it should be straight forward if you play or make games. 

2013-09-12

遊戲製作人需要具备的 5 项特質


1. 視野

遊戲製作是可以一件很複雜的事情,項目週期最少也有半年,最可以花超過五年;所以製作人的你,團隊的頭頭,要有清楚的視野(Vision)是很重要,因為當前做的,是之後收穫的東西;如果自己和團隊不能看不清楚未來,條路會很難很難走得好,而且會團隊會越走越累,越走越沒有信心;

你要給製作團隊一個清晰的景遠,讓他們相信,就能帶動大家一起幹活,把“夢想”變成“現實”

注:沒有異象,民就放肆; (箴言29:18)

2. 魅力

製作人的工作是製作遊戲產品出來;但是你第一樣要面對的,不是他的產品,是投資者,製作團隊,和你的玩家;

面對投資者,你要投資者相信你可以把產品製作出來,可以為他們帶來回報;所以你要發揮你的魅力,把你團隊的景遠和夢想說出來,打動對方投資;

面對製作團隊,其實和麵對投資者一樣,不同的是投資是給錢,團隊是給心力和時間;所以你需要讓團隊喜歡你,喜歡團隊,喜歡團隊的景遠,喜歡團隊做出來的東西,就算一起辛苦和挫敗也可以;

面對玩家,這可能是最重要;如果你是單人團隊,你沒有其他開發者,也沒有投資者,你只有玩家;如果遊戲沒有玩家的話,我建議你還是放棄製作遊戲吧;當然,我們不能接觸每一個玩家,但是作為製作人的你,你的任務是讓玩家喜歡你的作品;
作品未成的時候,怎樣做到?可以很多方法,找你的朋友親人,透過Internet, 社交網絡, ….
最近在 Kickstarter 有2個遊戲項目,Project Phoneix 和 Mighty No.9 就在說吸引玩家投資他們的遊戲;

注:要別人相信,先要建立自信
注:在信的人,凡事都能 (馬可福音9:23)



3. 親和力

製作遊戲時候,會出現這些情況:為了一些決定而爭執,因為進度落後而士氣低落,因為老闆試壓而感到疲累,因為沒有玩家感覺挫折,.... ; 實現夢想的過程,總是苦的;(當然開始時候,感覺很甜);

狀況出現時候,製作人作為團隊的老大,需要站出來,平息紛爭,安慰,鼓勵;簡單來說,要維持團隊對《遊戲夢》的愛和熱情;

包容,忍耐和團隊合一是很重要,所以要在團隊提倡和建立互相專重,互相包容,互相體諒的文化,讓團隊可以一直;

注:喜樂和笑容很重要
注:溫柔的人有福了,因為他們必承受地土 (馬太福音5:5)


4. 胸襟

這個特質其實不用多說了;這個世界,沒用全能的人,有人美術強,有人寫代碼強,有人數理邏輯好;製作出好的遊戲,就是需要這麼多人一起努力;如果你沒有胸襟,老是覺得別人做得不夠你好,別人的意見是無謂;那麼你的團隊,就會越來越少發聲的人,這樣好的意見和點子也會隨後消失;

注:將能,而君不御者,勝! (孫子,謀攻篇)

5. 毅力

夢想成為現實的過程,是一個需要花大量能量的過程,好像水從液體變成氣體那樣,需要很多熱能;製作人就帶動團隊釋放能力,把夢想實現的人;產品目標清楚,團隊和資金準備好了,那麼最後一大步,就是默默把產品做出來和做好;要有不到黃河心不死的精神,把產品完成;

未完成的作品,不算一件作品,作為製作人的你,需要帶頭髮揮毅力和努力,讓團隊也知道這樣做的好處和成果;

注:殷勤籌劃的、足致豐裕(箴言21:5)

2013-09-05

对与错

終於申請離職了,下個月轉去新的公司; 這次的決定是對,但是執行上卻很錯,需要好好記得這次的經歷和教訓; 決定是對,因為我配合不了公司的情況,留下來發揮也不大,鍛煉機會也不多,而且核心價值和自己有點不同; 執行的時間和做法不對,其實我可以先辭職,後找機會;這樣雖然冒險一點,但是這樣不會得失現在的公司,離職時間可更有彈性, 而且在找機會時候,也能順便休息,整頓一下自己,未未來重現出發; 不過事情既然決定了,就不能回頭,我要繼續好好工作,好好生活,依靠神積極面對困難和挑戰! ! !

2013-09-03

C++ Study: Implements String trim()

This code snippet show how to trim a string (remove whitespace at the beginning and end of the string);
The implementation is inspired by Poco Library

std::string trim(std::string input) 
{
 int first = 0;
 int last = input.size() - 1;
 
 while (first <= last && isspace(input[first])) { first++; }
 while (last >= first && isspace(input[last])) { last--; }

   return input.substr(first, (last - first + 1));
}

Testing for Syntax Highlighter

This article shows my testing or Syntax Highlighter in Blogger

Thanks to:


void testSimple()  
{   
        queue q;
        setupQueue(q);

        while(! q.empty()){
                string str =  q.front();
                cout << "data=" << str << "\n";
                q.pop();
        }
}



2013-08-31

7 things to be done when start making an APP


1. Version Control System (VCS) ready 

Version Control System is a very important things for every APP developers, it helps to keep track of the development history and changes; It is not a MUST, but you may be regret if not adopt any VCS; 

The two famous VCS are GIT and SVN; And the two famous public repositories are GitHub and BitBucket;  

Related Links:
  • GIT: http://git-scm.com/
  • SVN: http://subversion.tigris.org/ 
  • Repository: 
    • https://github.com/
    • https://bitbucket.org/

2. KM and PM Tools Ready

KM and PM are Knowledge Management and Project Management respectively; The tools for these two are important because, During the APP development, you need know the Road Map, which are what is the stuff to going to do, and when should be done right now. 

I am using MediaWiki for KM and Redmine for PM 

Related Links:
  • http://www.mediawiki.org/wiki/MediaWiki
  • http://www.redmine.org/ 
 

3. Code style

Code Style is a important thing for program; A consistent style can help coders code efficiently because they can understand other codes quickly (no need to ask or check docs). 

Related Links:
  • http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml
  • http://www.oracle.com/technetwork/java/codeconvtoc-136057.html

4. Naming Convention

Naming Convention (or called Naming Rules) are the rules how coders names the variable, class, package, ….; It is important because we are all humans not machines; If the "java.util.Random" class named as "java.xx.AA", you are hardly guess the behaviours of the class. It is also an important section inside the Code Style; 

The followings are the parts should be defined:
  • Namespace (named as Package in java)
  • Class Prefix, Suffix
      (for example: GL Prefix mean Graphics Library module, View suffix mean this is a view class) 
  • Variable Prefix, Suffix
     (for example: str Prefix mean it is a string)
Related Links:
http://en.wikipedia.org/wiki/Naming_convention_(programming)


5. Program structure and folder structure

Folder structure is that clarifying how different kinds of files should be placed; To make a good program, we need to organise the source and project files properly; The more chaotic it is, the harder 
to manage the program project. 

This is an example of program structure
  • log.txt - development logs
  • docs/ - documents related to the project
  • src/ - source code folder
  • res/ - resource folder
  • res/gui/ - resource related to GUI
  • res/sound/ - sound resource

6. Make a very simple runnable program

This is my practice of start a software project. I make a very short and simple program so that I can make sure compile, build and run doing properly. This can make sure the development environment is setup successfully. "Build and run" is a good starting point of the coding activities;

7. Setup TDD coding facility

Once a program can be built and run. I will immediate add unit test related sources and library, such as  JUnit. For project involving graphics stuff, I will write some codes help testing the some graphics modules. Once it is done, it let you to write and test small pieces of code, which is the TDD practice;