2007年8月26日 星期日

Nightwish -Sleepwalker ( EP 只有7min, 買不下去 ... )

 

 

Close your eyes
Feel the ocean where passion lies
Silently the senses
Abandon all defenses

A place between sleep and awake
End of innocence, unending masquerade
That's where I'll wait for you

Hold me near you
So close I sear you
Seeing, believing
Dreaming, deceiving

A place between sleep and awake
End of innocence, unending masquerade
That's where I'll wait for you

Sleepwalker seducing me
I dare to enter your ecstacy
Lay yourself now down to sleep
In my dreams you're mine to keep

Sleepwalker,
Sleepwalker

Sleepwalker seducing me...

2007年7月8日 星期日

Lost Horizon



我最喜歡的一段歌詞.. 

What about the life...
that shined so bright once in your eyes?
What about the death... faith you lost...
so that was your quest?
What about the dreams...
there where no visions in your grief?
What about the fight...
that graced your life?


Water, fire, wind and soil
My soul came to be reborn
As the lightning thrashes black skies
The spirit fills my mind

Welcome back, to the days of thunder!
Welcome back, to the days where you were born!
Welcome back, to break the spell you're under!
Welcome back, to the days of thunder!
Welcome back, to the days where you were born!
Welcome back, to raise again your honour!

What about the life...
It shines so bright now in my eyes!
What about the death...
Faith I found, now life's my quest!
What about the dreams...
There're new visions in my grief!
What about the fight...
It graces my life!

Scene Tree

很久沒貼程式碼了,據說blog 要注重單一話題做定時更新才會有人氣,這對我來說還蠻難的~

 

Scene Tree,很多人討厭這東西。但是對我而言, 大型 3D 程式沒有 tree 根本活不下去。

 

在這邊貼出我的 Scene Tree,感覺上還有些 bug,如果有誰發現就請告知一下。

 

主體可使用 map 或 hash_map,blog 上沒辦法縮排,有興趣看的人請自便吧。

 

順便一提,用 hash_map 是 47 號同學的主意。

 

#ifndef SceneTreeNode_H
#define SceneTreeNode_H

#pragma once

#ifndef _XBOX
#include <windows.h>
#endif

#ifdef _XBOX
#include <xtl.h>
#endif


#include <d3dx9math.h>
#include <string>


#include "safemacro.h"
//#include "SceneTreeNode.h"
/*
use std::map for now,
we can change it into hash_map later
*/
#include <map>

class CSceneTreeNode;

typedef std::map<std::string, CSceneTreeNode*> SceneTreeMap;
typedef std::map<std::string, CSceneTreeNode*>::iterator SceneTreeMapIterator;
typedef std::pair<std::string, CSceneTreeNode*> SceneTreePair;
typedef std::pair<SceneTreeMapIterator,bool> SceneTreeOperationReturnValue;

class CSceneTreeNode
{
public:
 CSceneTreeNode();
 virtual ~CSceneTreeNode();
 ///////////////////////////////////////////////////////////////////////////
 //scene tree operation
 ///////////////////////////////////////////////////////////////////////////

 //And new node, return new node pointer, return NULL if fail
 CSceneTreeNode* AddNewChildNode(std::string* pName);
 //And kill all it's child node
 HRESULT DeleteChildNode(std::string* pName);
 // If this node's parent isn't NULL, call DisAttachThisNodeFromParent() automatically
 HRESULT AttachThisNodeToNewParent(CSceneTreeNode* pNewParent);
 // split node from parent , this node will be new tree root
 HRESULT DisAttachThisNodeFromParent();
 void DeleteAllChild();

 CSceneTreeNode* FindChildNodeByName(std::string* pName);
 CSceneTreeNode* GetParentNode();
 ///////////////////////////////////////////////////////////////////////////
 //node matrix operation
 ///////////////////////////////////////////////////////////////////////////

 HRESULT SetLocalMatrix(D3DXMATRIX* pMatrix);
 HRESULT SetGlobalMatrix(D3DXMATRIX* pMatrix);
 const D3DXMATRIX* GetLocalMatrix();
 const D3DXMATRIX* GetGlobalMatrix();

 // flag == true 才 update
 HRESULT UpdateChildNode();
 // flag == false 就 recursive , flag == true 就呼叫 UpdateChildNode();
 HRESULT UpdateChildNodeFromSceneRoot();

protected:
 //flag operation  (self dirty)
 HRESULT SetAllChildNeedUpdateFlag(bool bFlag);
 //flag operation  (some child dirty)
 HRESULT SetAllParentSomeChildNeedUpdate(bool bFlag);

 std::string m_Name;
 SceneTreeMap m_ChildNodeMap;
 D3DXMATRIX m_LocalMatrix;
 D3DXMATRIX m_GlobalMatrix;

 /*
  m_bSomeChildNeedUpdateFlag => reduce recursive pass
  m_bNeedUpdateFlag => reduce matrix multiplication
 */
 bool m_bNeedUpdateFlag;
 bool m_bSomeChildNeedUpdateFlag;
 CSceneTreeNode* m_pParent;

 

};

#endif

 

// 上面是 h , 下面是 cpp

 

 

#include "SceneTreeNode.h"

CSceneTreeNode::CSceneTreeNode()
{
 m_Name = "";
 m_pParent = NULL;
 m_bNeedUpdateFlag = false;
 m_bSomeChildNeedUpdateFlag = false;
 D3DXMatrixIdentity(&m_LocalMatrix);
 D3DXMatrixIdentity(&m_GlobalMatrix);
}

CSceneTreeNode::~CSceneTreeNode()
{
 if(m_ChildNodeMap.empty() == false)
 {
  DeleteAllChild();
 }
 m_pParent = NULL;
}
///////////////////////////////////////////////////////////////////////////
//scene tree operation
///////////////////////////////////////////////////////////////////////////

CSceneTreeNode* CSceneTreeNode::AddNewChildNode(std::string* pName)
{
 SceneTreeMapIterator pos;
 pos = m_ChildNodeMap.find(*pName);
 if( pos == m_ChildNodeMap.end() )
 {
  CSceneTreeNode* pNewSceneTreeNode = new CSceneTreeNode;
  m_ChildNodeMap.insert(SceneTreePair(*pName, pNewSceneTreeNode));
  pNewSceneTreeNode->SetGlobalMatrix(&m_GlobalMatrix);
  pNewSceneTreeNode->m_pParent = this;

  return pNewSceneTreeNode;
 }
 return NULL;
}
HRESULT CSceneTreeNode::DeleteChildNode(std::string* pName)
{
 SceneTreeMapIterator pos;
 pos = m_ChildNodeMap.find(*pName);
 if( pos != m_ChildNodeMap.end() )
 {
  SAFE_DELETE(pos->second);
  return S_OK;
 }
 return E_FAIL;

}
HRESULT CSceneTreeNode::AttachThisNodeToNewParent(CSceneTreeNode* pNewParent)
{
 if(m_pParent != NULL)
  DisAttachThisNodeFromParent();
 
 SceneTreeOperationReturnValue result;
 result = (pNewParent->m_ChildNodeMap).insert(SceneTreePair(m_Name, this));
 if(result.second ==false)
  return E_FAIL;
 m_pParent = pNewParent;
 return S_OK;
}
HRESULT CSceneTreeNode::DisAttachThisNodeFromParent()
{
 if(!m_pParent)
  return E_FAIL;

 SceneTreeMapIterator pos;
 pos = (m_pParent->m_ChildNodeMap).find(m_Name);
 if(pos == (m_pParent->m_ChildNodeMap).end())
  return E_FAIL;

 pos->second = NULL;
 (m_pParent->m_ChildNodeMap).erase(pos);
 m_pParent = NULL;

 return S_OK;
}
void CSceneTreeNode::DeleteAllChild()
{
 SceneTreeMapIterator pos;
 //DeleteAllChild recursive
 for(pos = m_ChildNodeMap.begin(); pos!=m_ChildNodeMap.end(); ++pos)
 {
  pos->second->DeleteAllChild();
  SAFE_DELETE(pos->second);
  //m_ChildNodeMap.~map();
 }
 //clean the Node Map
 if(m_ChildNodeMap.begin() != m_ChildNodeMap.end())
  m_ChildNodeMap.erase(m_ChildNodeMap.begin(),m_ChildNodeMap.end());
  
}

CSceneTreeNode* CSceneTreeNode::FindChildNodeByName(std::string* pName)
{
 SceneTreeMapIterator pos;
 pos = m_ChildNodeMap.find(*pName);
 if(pos != m_ChildNodeMap.end())
 {
  return pos->second;
 }
 else
  return NULL;

}
CSceneTreeNode* CSceneTreeNode::GetParentNode()
{
 return m_pParent;
}

///////////////////////////////////////////////////////////////////////////
//node matrix operation
///////////////////////////////////////////////////////////////////////////

HRESULT CSceneTreeNode::SetLocalMatrix(D3DXMATRIX* pMatrix)
{
 if(pMatrix)
 {
  m_LocalMatrix = *pMatrix;
  SetAllChildNeedUpdateFlag(true);
  SetAllParentSomeChildNeedUpdate(true);
  return S_OK;
 }

 return E_FAIL;
}
HRESULT CSceneTreeNode::SetGlobalMatrix(D3DXMATRIX* pMatrix)
{
 //注意矩陣乘法順序
 //[L] * [Par_G] = [G]
 //[L] = [G] * [Par_G]^-1
 if(pMatrix)
 {
  m_GlobalMatrix = *pMatrix;
  SetAllChildNeedUpdateFlag(true);
  SetAllParentSomeChildNeedUpdate(true);
  if(m_pParent != NULL)
  {
   D3DXMATRIX ParentGlobalMatrixInverse;
   D3DXMatrixInverse( &ParentGlobalMatrixInverse, NULL, &(m_pParent->m_GlobalMatrix));
   D3DXMatrixMultiply( &m_LocalMatrix, &m_GlobalMatrix, &ParentGlobalMatrixInverse);
  }
  else
  {
   m_LocalMatrix = m_GlobalMatrix;
  }

  m_bNeedUpdateFlag = false;
  return S_OK;
 }
 return E_FAIL;
}
const D3DXMATRIX* CSceneTreeNode::GetLocalMatrix()
{
 return &m_LocalMatrix;
}
const D3DXMATRIX* CSceneTreeNode::GetGlobalMatrix()
{
 return &m_GlobalMatrix;
}

HRESULT CSceneTreeNode::UpdateChildNode()
{
 //注意矩陣乘法順序
 //[L] * [Par_G] = [G]
 if(m_bNeedUpdateFlag == true)
 {
  if(m_pParent != NULL)
  {
   D3DXMatrixMultiply( &m_GlobalMatrix, &m_LocalMatrix, &(m_pParent->m_GlobalMatrix));
  }
  else
  {
   m_GlobalMatrix = m_LocalMatrix;
  }
  
  m_bNeedUpdateFlag = false;
  m_bSomeChildNeedUpdateFlag = false;
  SceneTreeMapIterator pos;
  for(pos = m_ChildNodeMap.begin(); pos!=m_ChildNodeMap.end(); ++pos)
  {
   pos->second->UpdateChildNode();
  }
  return S_OK;
 }

 return E_FAIL;

}
HRESULT CSceneTreeNode::UpdateChildNodeFromSceneRoot()
{
 // keep on looking, while some child dirty
 if(m_bSomeChildNeedUpdateFlag == false)
 {
  return S_OK;
 }

 if(m_bNeedUpdateFlag == true)
 {
  UpdateChildNode();
  return S_OK;
 }

 SceneTreeMapIterator pos;
 for(pos = m_ChildNodeMap.begin(); pos!=m_ChildNodeMap.end(); ++pos)
 {
  pos->second->UpdateChildNodeFromSceneRoot();
  m_bSomeChildNeedUpdateFlag = false;
 }
 return S_OK;
}

// protected functions
HRESULT CSceneTreeNode::SetAllChildNeedUpdateFlag(bool bFlag)
{
 if( bFlag == m_bNeedUpdateFlag)
 {
  return E_FAIL;
 }

 m_bNeedUpdateFlag = bFlag;
 SceneTreeMapIterator pos;
 for(pos = m_ChildNodeMap.begin(); pos!=m_ChildNodeMap.end(); ++pos)
 {
  pos->second->SetAllChildNeedUpdateFlag(bFlag);
 }
 return S_OK;
}

HRESULT CSceneTreeNode::SetAllParentSomeChildNeedUpdate(bool bFlag)
{
 if(bFlag == m_bSomeChildNeedUpdateFlag)
 {
  return E_FAIL;
 }
 m_bSomeChildNeedUpdateFlag = bFlag;
 if(m_pParent != NULL)
  m_pParent->SetAllParentSomeChildNeedUpdate(bFlag);
 return S_OK;
}

 

2007年7月1日 星期日

Interview 的感覺就像?

去 Interview 的感覺就像路不熟的宅急便,鈴響三聲內本人服務。

 

而且我們可以發現,公司越大一棟,門牌號碼越不知道寫在哪裡。

2007年6月19日 星期二

英文自傳

寫履歷表有一欄是英文自傳,通常看到這欄就是頭大。

於是我想到我在網路上看到過最好的biography,可以拿來當範本。

 

以下是 Lost Horizon 樂團史


 

The old Millennium reaches it's end. The year is 1998. A sudden mighty gust of the Metal wind fills up the hearts of the three pure ones. Wojtek, Martin and Christian are their names.

 

舊世紀結束了,時為1998年。突然颳起的神聖金屬強風充滿了三個純潔的心靈,他們的名字是 Wojtek  Martin 及 Christian 。

That sacred call, that final cry, breeds a spiritual aspiration, which leads to the great gathering of the three.

 

那神聖的呼叫,最後的吶喊,蘊育著一個精神上的志向,領導這三人偉大的聚首。

Under a prodigious influence of the same, shared flame, baptised in Metal and the restored will, they interlace their faiths and conclude their goals. Transcendental Protagonist, Cosmic Antagonist and Preternatural Transmogrifyer are born.

 

在同樣的巨大的影響之下,共有的火焰,在金屬和被恢復的意志洗禮中,他們交織他們的信念和締結他們的目標。

超越倡導者,宇宙對立者,臨死變形者誕生了。

During two years, the reunited companions consequently prepare a great manifestation for the world - their first album of power. About a year later, when the adjusting of the thoughts is almost finished, another shape turns up on the horizon. The singer Daniel joins the brave ones, embellishing the music by his divine voice. Shortly thereafter, two demonstration songs are recorded. Also he, listening to his deepest ego, finds his real identity. The new, fourth warrior is born. His name is Ethereal Magnanimus.

在二年期間,團聚的同伴準備為世界做個巨大的證明 - 第一張力量的專輯。一年後,思想的調整將結束,另一個形態在地平線上現身了,主唱 Daniel 加入這群勇者,用神聖的歌聲裝飾音樂。不一會,兩首展示用的歌錄好了,主唱 Daniel聆聽自我的深處,發現了自己的真實身份。第四個戰士誕生了,他的名字叫做飄逸的高尚者。


In June 1999, the demonstration CDs are sent out to several record labels. By the end of the summer, the formation receives very positive feedback and interest from most of them. Yet, only one of them proves itself worthy enough. It's Music For Nations. In March 17th, 2000, both parties finally signs a covenant, and the collaboration begins. Shortly after, a music studio is entered and the recording begins. Like in a trance, with no rest and no mercy, from late March through mid August, the album "Awakening The World" is being created. Only the walls of the several studios know the pain and the suffering that is being experienced. But nothing can stop this enterprise.

在1999 年6月,示範CDs 被送去幾個唱片公司。在夏天將盡,收到很正面的回響和大多數公司的興趣。然而,他們的當中只有一個證明自己足夠資格。就是Music For Nations。在2000 年3月17 日,兩方最後簽署契約,並且合作開始。之後進入錄音室開始錄音,就像進入恍惚狀態,不用休息也沒有憐憫,從三月底到八月中,專輯"震醒世界"被創造出來了。只有錄音室的牆壁知道其中的痛苦和磨難,但是沒有任何東西能阻止這冒險事業。


And now the work is finished. The first ritual is over. The second begins. And out of nowhere the fifth and the sixth warrior are on their way to take their place at the round table, where two of the thrones that surround it have been waiting to be ascended. The new dawn is born and is here to stay. Once lost. Now brought back.

工作現在已完成。第一儀式結束。第二開始了。並且突然出現第五個和第六個戰士將在圓桌上取得一席, 二王位圍繞園桌等待傳人。新黎明出生了並停留在此。一度失去的,現在帶回來了。


The LOST HORIZON.

 

好的自傳就是要這麼屌,必須與宇宙力量相結合,才能達到天人合一的境界啊。

 

樂團目標.. 這更了不起~  以致難以翻譯~ 立志當如是~

 

Our wish is to help all those whose existence have gradually turned to complete misery through the interference and affection of extremely negative powers in different shapes, that through, among other things, misleading, corruption, confusion, indoctrination, rottenness, creating of guilt and fear, have poisoned the individual. The ones who are victims of lies, stupidity, primitivism, blindness, limitation, weakness, self-destruction, low self-esteem, goallesness, etcetera. Those who have fallen into the darkest abyss and stumble in darkness.


We want to help them find the voice of their inner self, which by help of the inner Force will bring the awakening. The awakening will be a new start. A way back, followed by the redintegration. The person will never turn the same, but strengthened by pain - seeing, hearing, feeling, thinking and sensing in a much better way. The dark experiences will turn into an advantage. The bright knowledge will mix with the dark in a perfect composition, the golden combination, the natural balance, harmony and understanding of things, knowledge and strength, the point and the self. To happiness.

For all of what we are, this means an opportunity to change things on a larger scale. Not only to play our music and hope that people like it, but rather to actually say something with what we do and make people take a step back and open their eyes, thus contributing to a change not only in their lives, but also to the world.

 

2007年6月14日 星期四

待業無限好 只是不賺錢

六月份因應消費者物價指數的提高,身為老百姓應付政府的剝削,及保險費用的支出,於近日內將提高約會預算中的女友自付額部份。

2007年5月6日 星期日

非常討厭麥當勞的廣告

厭惡某女星裝可愛的樣子。要讓人喜歡吃勁辣雞腿堡,就應該找 KISS 的 Gene Simons來拍廣告,展現出過辣而口吐鮮血的模樣。同時Gene 的舌頭也練過,能伸得更長。

2007年4月9日 星期一

五月二十二日 Dragonforce 演唱會!

 

Tue May 22 - Taiwan, Taipei - Armed Forces Cultural Center
Online Ticketing Link: http://www.rockempire.com.tw/index1.php

 

雖然最近沒心情寫 blog, 可是Dragonforce 要來台灣演唱是一定要預告的.

Armed Forces Cultural Center, 字面看起來是裝甲兵文化中心,

實際上就是國軍文藝中心. 可以說是台北最爛的表演場地.

 

場地爛歸爛還是要去看, 建議主辦單位下次直接去西門町跟胖歌神借變電箱,

要省的話這樣最省, 音質也會比較好.

2007年2月6日 星期二

莊子是這樣教導的

莊子行於山中,見大木,枝葉盛茂。伐木者止其旁而不取也。問其故,曰:旡所可用。

 

莊子曰:此木以不材得終其天年。

夫子出於山,舍於故人之家。故人喜,命豎子殺雁而烹之。

豎子請曰:其一能鳴,其一不能鳴,請奚殺?

主人曰:殺不能鳴者。

明日,弟子問於莊子曰:昨日山中之木,以不材得終其天年﹔今主人之雁,以不材死。先生將何處?

莊子笑曰:周將處乎材與不材之間。材與不材之間,似之而非也,故未免乎累。若夫乘道德而浮遊不然,旡譽旡訾,一龍一蛇,與時俱化,而旡肯專為。一上一下,以和為量,浮遊乎萬物之祖。物物而不物於物,胡可得而累邪!此神農黃帝之法則也。若夫萬物之情,人倫之傳,不然。合離,成毀,廉挫,尊則議,有為虧,賢謀,不肖欺。胡可得而必乎哉!悲夫,弟子志之,其唯道德之鄉乎!

 

繼孟子的教導之後,我們也要向莊子好好得學習人生的哲理。

首先來翻譯這段文章

匠伯(木匠領袖)率弟子入山實地觀察木材,見路旁有大樹,其蔭可蔽數千牛,觀者如市,猶如一景點,眾弟子以為美材,匠伯卻一路行去不回頭,莊子追問何不砍伐,匠伯說此木是散木,即樹中心會軸解的樹,是不材之木。莊子聽了,當機指點弟子道:「大木無用,故不被砍伐。」莊子下山後,宿於老友家,老友命僕人殺鵝待客,僕人請示主人:「一鵝會叫,一鵝不會叫,殺哪一隻?」主人說:「殺不會叫的。」次日,弟子於途中問道:「昨日山中大木,因不材而不被砍伐,今日主人之雁,卻因不會叫而被殺,請問夫子將處於哪一種狀況?」莊子說:「我一定處在材與不材之間。 

處於成材與不成材之間,好像合于大道卻並非真正與大道相合,所以這樣不能免於拘束與勞累。假如能順應自然而自由自在地遊樂也就不是這樣。沒有讚譽沒有詆毀,時而像龍一樣騰飛時而像蛇一樣蜇伏,跟隨時間的推移而變化,而不願偏滯於某一方面;時而進取時而退縮,一切以順和作為度量,優遊自得地生活在萬物的初始狀態,役使外物,卻不被外物所役使,那麼,怎麼會受到外物的拘束和勞累呢?這就是神農、黃帝的處世原則。至於說到萬物的真情,人類的傳習,就不是這樣的。有聚合也就有離析,有成功也就有毀敗;棱角銳利就會受到挫折,尊顯就會受到傾覆,有為就會受到虧損,賢能就會受到謀算,而無能也會受到欺侮,怎麼可以一定要偏滯於某一方面呢!可悲啊!弟子們記住了,恐怕還只有歸向于自然吧!」

 

 

孟子認為早上起床不想上班,就不要去。換一份能發揮所長的工作。這是出於儒家"用之則行,捨之則藏"的精神。就是如果環境能讓我發揮所長,就好好地一展長才。如果環境不允許,就退守山林養精蓄銳,以待時清。

 

莊子則認為,早上不想上班,就晚點去。有工作可做就做,無工作做就擺爛。太認真做,以後事情全部攬到自己身上,容易過勞死。瘋狂地擺爛,讓人一看就討厭,遲早遭報應。在公司裡,有時老闆口若懸河般地宛如先知,但仔細剖析之後,才發現交辦的事項有多少累贅。此時就要像龍一樣地騰飛,像蛇一樣蟄伏,知道甚麼事值得好好做,甚麼事情要應付了事。如此才會悠遊於辦公室之間,不被末名奇妙的 SPEC 勞累,此神農黃帝之法則也

 

莊子此言甚是,所謂無用之用,才與不才,在"完全沒有軟體工程規範的公司"裡才能完全地體會到合於大道的人生哲理。

 

有很多如我一般理科出身的朋友,對國學不太瞭解,所以我試著把孟子及莊子的微言大義簡化如下:

 

bool 孟子上班認真度;   // 認真度 = true or false

float 莊子上班認真度;   //  0 < 認真度 < 1

 

if(早上不爽上班)

{

        孟子上班認真度 = false;

        莊子上班認真度 =  1- 擺爛度 ;   // 通常   擺爛度 < 1

}

 

 


2007年1月29日 星期一

孟子也覺得換工作比較好

孟子在寓言中提到一句話,叫做"夜氣不足以存"。

甚麼是夜氣呢,就是夜晚睡覺時所累積的正氣。在早晨起床未被一天的雜念影響的時候,最能反映出內心的良知。

 

原文如下:


孟 子 曰 : 「 牛 山 之 木 嘗 美 矣 , 以 其 郊 於 大 國 也 , 斧 斤 伐 之 , 可 以 為 美 乎 ? 是 其 日 夜 之 所 息 , 雨 露 之 所 潤 , 非 無 萌 櫱 之 生 焉 , 牛 羊 又 從 而 牧 之 , 是 以 若 彼 濯 濯 也 . 人 見 其 濯 濯 也 , 以 為 未 嘗 有 材 焉 , 此 豈 山 之 性 也 哉 ?

雖 存 乎 人 者 , 豈 無 仁 義 之 心 哉 ? 其 所 以 放 其 良 心 者 , 亦 猶 斧 斤 之 於 木 也 , 旦 旦 而 伐 之 , 可 以 為 美 乎 ? 其 日 夜 之 所 息 , 平 旦 之 氣 , 其 好 惡 與 人 相 近 也 者 幾 希 , 則 其 旦 晝 之 所 為 , 有 梏 亡 之 矣 . 梏 之 反 覆 , 則 其 夜 氣 不 足 以 存 ; 夜 氣 不 足 以 存 , 則 其 違 禽 獸 不 遠 矣 . 人 見 其 禽 獸 也 , 而 以 為 未 嘗 有 才 焉 者 , 是 豈 人 之 情 也 哉 ?

故 苟 得 其 養 , 無 物 不 長 ; 苟 失 其 養 , 無 物 不 消 . 孔 子 曰 : 『 操 則 存 , 舍 則 亡 ; 出 入 無 時 , 莫 知 其 鄉 . 』 惟 心 之 謂 與 ? 」


大意就是:

        牛山的木頭很漂亮,不過旁邊就是大國,每天有人來砍樹,還會美嗎?  雖然草木是日夜成長,可是被砍伐放牧,終究是光禿禿的。

人都看到牛山光禿禿的,以為那就是寸草不生的地方,可是那不是牛山的本貌。

        就像人一樣,也不是一開始就沒有仁義良心。每天仁義良心都像樹木一樣被砍伐,久而久之就沒良心了。每天睡眠中所養的正義之氣都沒有保存下來,人就會越來越像禽獸一樣。

 

       每天早上起床,就想到自己幹麻去上班,陪一堆人盲目亂搞,一點可以奮鬥的目標都沒有,趕快辭職吧。可是去公司以後,又查覺到找工作麻煩,景氣如何的差,有薪水拿就好。所以過一會又打消主意了,想說明天再看看吧。這就是"夜氣不足以存",久而久之就像禽獸一樣頹廢,所以一個人要變成廢材也不是一朝一夕的,是大環境砍伐良知而造成的。

 

       所以,早上起床不想上班的話,是符合仁義良知的。這種情況下,孟子也覺得換工作比較好。

2007年1月18日 星期四

由痛右手轉為痛左手

像我這種長期坐電腦桌前工作的人,很容易得滑鼠腕,右手碗不時會酸痛。

可是工作進入一種 EQ 爆裂狀態的時候酸痛會轉到左手。

主因是出於無奈,右手操滑鼠改為用左手撐頭的緣故。

 

 

果然在 Career 雜誌心理測驗,取得了莒光號車票。