談談我的自我傷害(自殘)傾向

老實說我不知道醫學是怎樣斷定我的自我傷害或所謂的自殘傾向,也不知道醫學是怎樣解釋,因為我沒有心理學背景。

以我的智力想要去念好一個心理學,尤其是變態心理學這塊,應該是沒問題,但老實說它不是我的興趣,我時間能使用的又太有限,也許未來會自修心理學相關。

我寫這篇只能解釋有些人進行自殘的時候,心中是如何的想的,為何會想要做那樣的行為,寧可事後還要貼著一堆藥,然後洗澡痛得要死。

我從國中二年級就出現第一次的自殘行為,那時候是我喜歡一個轉學過來我們班的女生,而那個女生在很開心的跟一個我討厭的人聊天,這個情境下。

那時候湧出來的念頭我有點忘了,第一個念頭是想要做點事情吸引人注意,第二個念頭是因為內心很痛苦想要轉移痛苦的焦點,我會自殘多半都是基於以上兩者理由。

我當時用手捏碎光碟片,然後用光碟片碎片在我左手臂割了一個相當長與寬的傷口,那個傷口的疤痕到現在都還在。最後傷口化膿貼了好幾週的藥才好。

割完的當下只有一種痛快感,即使我手很痛,但心中有一種莫名的滿足感,然後在意的事也因為傷口的痛楚被轉移了。

我很不諒解當時的班導師,他知道我是自殘卻完全忽略不管,我實在很想回去義正嚴詞的修理他但他幾年前自己過勞死了,我沒辦法跟死人對話,但即使他死了我也不會原諒他。

之後第二次的自殘是在我16歲松山高中二年級剛開始躁鬱症發病,但被已自殺的陳國華判定為過動,開錯藥物讓我相當難受,我想要引人注意,所以用刀片及衣架子的尖端在手上劃X型。

我也不會原諒陳國華,收了那麼多錢判斷錯疾病開錯藥最後還自殺,但死人又沒辦法揍他,所以只好作罷。

通常不會選太銳利的刀片,因為製造出來的痛苦相當少,那種行為的時候必須伴隨著相當強烈的肉體上痛苦,精神才會得到滿足。我刀片只割了一刀就嫌不過癮,去拿隨手可得的衣架還確定沒生鏽。

自殘通常不會希望自己死掉,自殘與自殺不一樣,我的自殘只是精神痛苦與肉體痛苦的互相轉移與滿足而已,還有部分的引人注意。死了怎麼引人注意?不小心讓自己破傷風去醫院躺不是好玩的事。

如果是有引人注意目的,我都會選擇在顯眼的位置,如手的前臂,手掌不會是目標因為常常要動到會痛,會選一眼看的到但幾乎不會用到的地方。

但在23歲左右開始的自殘就不想讓我媽知道了,因為我媽會心痛,所以改成在胸口或肩膀衣服遮住的地方。

或改由吞過量但不致死的藥物,並且那藥物會造成強烈的昏睡,我常使用的藥物有得安緒及意妥明,這兩個在藥房都不須處方也沒有管制,政府真的應該好好管管精神疾病類的藥物。

那種自殘的感覺就只有單純想要透過傷害自己獲得某種的滿足感,或透過痛楚轉移精神的痛苦。

不過一旦自殘行為引起注意對別人是有效的時候,偶爾還是會用這種方式希望引起別人的注意,讓別人知道自己的嚴重性。

像最近精神年齡嚴重退化,焦慮及恐慌很嚴重,尤其對我媽的依賴變得很強的時候,就會用這種方式引起她對我的危機意識,讓她知道我狀況很嚴重。

不過如果單純只是引起注意加威脅性質,通常說的比做的多,會說但不一定真的會去做。然後威脅完可能還會加個道歉…

因為我個性本善,很多舉動真的都是精神疾病導致控制不住這樣做的。

程式設計生涯暫停或終止

要說為什麼暫停,我想是我找不到熱情了,我不像14歲的時候整天抱著一本厚厚的中文書,或18歲去抓一堆盜版的英文ebook來自修,且我對寫專案沒興趣了。

寫專案,是非常麻煩的一件事,必須不斷跟客戶溝通,客戶又有時相當不理性,要求幾乎做不到的東西,然後金額因為同業競爭導致也沒有多高。

寫專案完全只是為了錢,那我就實在不是太想寫了。如果今天公司接了一個相當困難,讓我沒把握完成,又有興趣足以讓我躍躍欲試的專案,也許我會繼續在程式設計這條路。

所以,我寫暫停,或終止。

公司是我爸開的,老實說也是間小公司,現在我爸年紀大不知道大腦為什麼想法變了,完全沒有打算讓我接手公司,打算公司做到他退休就好。

這樣我實在被他耍了,他在我18歲(我第一次高二發病休學一年)猶豫要不要接受松山高中嚴格的高三生活的時候,因為高二下唸完休學滿兩年就可以考大學,他要我到公司工作。

導致我現在沒高中畢業證書,大學我去考了,政大哲學、東吳哲學、輔大企管、銘傳企管都正取,我因為對英美哲學有興趣選擇東吳哲學,最後因為遭同學霸凌而自行退學。

導致我沒大學畢業證書,現在要去找工作沒有一家公司會要我,當初規劃要讓我接手公司,結果現在不了了之。

我現在沒有正規的工作收入。

現在一個月平均5萬的收入來自於我19歲躁症發作時去研究的選擇權,當時的躁症失控程度相當高,曾經連勝12個月,但沒辦法長長久久的使用現在的策略下去,因為第十三個月失控亂下單導致嚴重虧損。

現在躁症的發作病況有點變動,我情緒波濤洶湧,但理智卻維持在最後的一絲底線,規定的原則該遵守的就是會遵守,所以似乎可以靠選擇權維生。

既然可以靠選擇權維生,那我為什麼要去寫專案讓客戶在那邊煩我。

所以我就把音樂及電影的部落格轉為選擇權日記持續追蹤我的操作狀況,程式設計宣告到這次的公司網站寫完就歇業。

然後,這個部落格就是紀錄我痛苦的日常與回憶(但很多人覺得我很幸福)。

部落格轉向-罕見型別躁鬱症病患的故事

我這個部落格原本是打算做程式設計相關心得,軟體使用相關介紹的。但在最近我的程式設計職業生涯快要畫下句點,也沒心情寫些軟體的介紹了。

但我想寫文章,我想寫些只有我知道的事,有什麼可以寫的?那就是我身為無法判定型別的躁鬱症併發強迫症與關係妄想症,並經歷了扭曲的求學過程導致的幾項人格違常的這樣人的日常與回憶。

我想每個人都是獨一無二,但我卻與其他人相異甚遠。我是個令人「無法理解為何會有這樣的人」的人?我究竟是怎樣活到三十歲?這樣的人,生存下去有什麼樣的目的?我對於這世界與人生的價值判斷又是什麼?

我想我把我快滿三十以前記得的,之後發生的,全部記錄下來,我不求太多,只希望也許有人會看,也許對這社會能造成一點歷史的刻痕,不要兩手空空而來兩手空空而去。

我曾想過我要不要公開我精神病患甚至領有身心障礙手冊的身分,老實說這在台灣社會是一件有點難為情的事情,也是會遭到歧視的事情,但我想有時候也許需要有些人有勇氣,做一些別人不敢做的事情,我是躁鬱症病患,我不會砍人,我沒有憂鬱症但我自殺四次未遂,我的生活的大概輪廓在我的部落格網路可以看得一清二楚,我和一般人大多時候沒差別,我甚至比別人大腦更高功能。

我先條列把我經過專業醫師認定有的幾項疾病寫出來

  • 雙極型情感性疾病 無判定型別
  • 強迫症
  • 妥瑞氏症
  • 關係妄想症
  • 自戀性人格違常
  • 劇化性人格違常

最近又多了焦慮和恐慌這兩樣但我認為只是這個春天精神不太穩,短暫的問題,前列的問題有的是從我出生就困擾我,有些很小便發作,有些到16歲才發作。

以後我也想寫寫我被全班九成的人霸凌,家庭又剛好經歷事業最忙的時期沒空理我,學校的輔導室老師他媽的只知道看成績,看到我成績是松山高中以上的分數還說是我運氣好。

然後再來寫寫我一次又一次躁症發作,在極度躁狂導致大腦異常的高功能卻又失去平時理性的時候,我到底做錯了那些事,我人生三十年該懺悔的事已經用一本六百頁的書都寫不下了。

其他部落格理論上想到就會繼續經營,想要創一個部落格網路是我在躁症的時候做的決定,現在看起來真是愚蠢,一個人維持五個部落格根本是不太可能的事,但這就是我躁症會做的事。

為什麼要五個站,因為搜尋引擎優化同一個站不能太頻繁,我用的是黑帽手法,當時的想法是我可以同時進行五個網站的搜尋引擎優化在同一段期間內把網站推到不同領域關鍵字的第一頁。

那為什麼是五?因為根據我躁症時期的體力與每天可以產生的文字數,和打字速度及搜尋引擎優化需要的時間,五個網站剛剛好是極限,躁症時期的極限,因為躁症時期我睡眠極少體力極好,我當時規畫一天要在其中兩個網站各發一篇文。

總之今後這個網站的主題就是一個罕見精神病患的日常與回憶,可能加點省思,也許會把哲學與佛學相關加在這個部落格。

今天是處於平穩時期,四月底才躁症發作完,現在又偏躁症快要發作。

軟體介紹-AnyDesk-一個很好用的遠端協助工具

大家想到遠端協助工具第一個會想到誰?我想大概都是Teamviewer,因為它是第一個做到很多功能然後又在一開始提供很多人免費使用的遠端協助工具。

但我想介紹的是我上次去客戶公司它們的MIS公司介紹給我的一款遠端協助工具AnyDesk。

這款工具也有中文介面,但官方網站只有英文。它有支援各個平台,但我主要是Windows領域的工程師,就只寫Windows。

它在網路的流量上比Teamviewer省很多,所以操作的速度相對的快很多,然後同步化剪貼簿,所以傳檔案只要複製貼上就可以了。

然後它最棒的一個功能是它可以常駐在系統中,然後設定一個密碼就可以取代Remote Desktop。

當然設定密碼,就要小心密碼被別人知道別人可以在不注意的時候控制電腦。

它商用版本收費是用歐元計費的,一年合約要180EUR,終身授權750EUR,是Teamviewer價格的約1/4。

我現在還是在用免費版本,因為我不是MIS公司,不需要幫人管理Server,頂多偶而連到客戶Server看看。

大家可以用免費版本試看看,我是覺得比Teamviewer好用。

網頁在平板或手機的瀏覽器阻止下拉重新整理

雖然現在有Xamarin這種可以用C#寫Native App的方法,但我有一個專案是以網頁來做訂貨單的輸入。

但就會遇到一個問題是,網頁要用瀏覽器開,瀏覽器滑到頂後再往下拉就會重新整理要怎麼辦?

我在Google找到了一段JavaScript,它的原理是在load事件觸發的時候執行增加兩個事件處理函數,那兩個事件一個是判斷是否網站已經到頂,一個是如果到頂將觸控的移動取消。

<script>
window.addEventListener(‘load’, function () {

var isWindowTop = false;
var lastTouchY = 0;

var touchStartHandler = function (e) {
if (e.touches.length !== 1) return;
lastTouchY = e.touches[0].clientY;
isWindowTop = (window.pageYOffset === 0);
};

var touchMoveHandler = function (e) {
var touchY = e.touches[0].clientY;
var touchYmove = touchY – lastTouchY;
lastTouchY = touchY;

if (isWindowTop) {
isWindowTop = false;
if (touchYmove > 0) {
e.preventDefault();
return;
}
}

};

document.addEventListener(‘touchstart’, touchStartHandler, false);
document.addEventListener(‘touchmove’, touchMoveHandler, false);

});
</script>

這個直接放在<Body>裡面就行了。這樣網頁就只能用點重新整理按鈕重整了。

Telerik教學-RadGrid的另類DataSource

其實Telerik的RadGrid讓我很喜歡用的原因是,它的DataSouce可以是一個Class,這相當方便在物件導向的使用上。

用法很簡單,先宣告一個Class,定義一些Private 變數,然後為這些變數建立一些Public Property,這就算在定義資料結構,如:

public class Columns{

Private int _Col1;
Private string _Col2;

public int Col1
{
get
{
return this._Col1;
}
set
{
this._Col1= value;
}
}

/*Col2一樣*/

}

然後這樣等同於有兩個Columns的Table的一個Row。接著就是做一個List<Columns> LC= new List<Columns>();的物件,這樣就等於可以有很多個Row的Table。

接著把資料填入LC,List物件是我最喜歡用的.NET物件,因為操作起來超級便利,速度又不會輸給Array太多。有時候排序只要一個list.Sort();就自動排好。

然後RadGrid1.DataSource=LC;RadGrid1.DataBind();

這樣等於是用一個List<T>的Class做DataSource,而可以額外寫一個Class是List<T>然後在那個Class裡面寫很多方法,這樣比起用DataTable更加的方便。

引用JavaScript外部檔案中文亂碼

今天在寫網站的時候遇到一個小問題,我把一些很長的JavaScript放到一個.js檔,外部引用它,如:

<script type=”text/javascript” src=”js/custom.js”></script>

結果原本沒問題的中文全部變成亂碼。

如果有人出現這個問題的話,解決方法就是在<script>tag裡增加它的編碼如Big5:

<script type=”text/javascript” src=”js/custom.js” charset=”big5″></script>

這樣亂碼的問題就解決了!

以後我盡量有些小問題就寫上來,也許可以幫到一些人。

C#教學-SqlDataAdapter及SqlCommandBuilder簡單用法

這篇主要要教怎樣用程式更改DataTable然後用讓SqlDataAdapter回存資料庫,這是很簡便的用法,我沒有要寫SqlDataAdapter的很多Command,只要寫一條Select Command其中包含Table的主索引就可以了。

首先一定是要定義一個SqlConnection:

SqlConnection connection = new SqlConnection(ConnectionString);

然後定義SqlDataAdapter、SqlCommandBuilder和DataTable:

SqlDataAdapter sda = new SqlDataAdapter(“select * from [a table] where blablabla“, connection);
DataTable dt=new DataTable();
SqlCommandBuilder scb = new SqlCommandBuilder(da);

這樣宣告完sda的另外三個command都會被自動產生,會產生的很不漂亮,但比手寫輕鬆,如果只是要做一點很簡單的批次性操作,這樣可以節省很多Coding時間。

最後要填入DataTable,然後操作,然後回存:

sda.Fill(dt);
/*Some operations*/
sda.Update(dt);

DataTable會去記錄哪個Row有修正,哪個Row是新增,哪個Row是刪除,所以直接呼叫一個Update,他就批次寫回資料庫,夠簡單吧!

最近年底,有幾個專案要結案,所以部落格的更新很慢,希望明年可以寫更多東西,謝謝觀看,下次再會!

 

C#教學-SqlConnection的Transaction功能

這篇要教C#怎樣使用SqlTransaction物件的方法,這在複雜一點的資料庫程式設計相當重要,C#也有一個物件能讓我們輕易的達到這樣的功能:

如果資料庫的操作不只一個SqlCommand,需要多個的時候,就有可能會發生其中一個錯誤,導致部分的有執行到,部分的沒執行到。這樣資料庫裡面的資料就會亂掉,有時會導致很嚴重的後果。

所以SqlTransaction的目的是在全部的SqlCommand都沒錯誤的執行完後,做一個Commit()動作全部送出,或在出錯的時候,做一個Rollback()的動作讓所有動作都沒發生。

基本上定義很簡單:

SqlConnection connection = new SqlConnection(ConnectionString);
SqlTransaction transaction;

然後要使用的時候:

connection.Open();
transaction = connection.BeginTransaction(“SampleTransaction”);

之後把每個要歸類到這個transaction的SqlCommand都設定:

SqlCommand cmd = new SqlCommand(“…”,connection);
cmd.Transaction = transaction;

這樣全部的SqlCommand執行完都沒發生錯誤,呼叫一個:

transaction.Commit();

有錯誤的話呼叫一個:

transaction.Rollback();

這樣就不會出現中途錯誤而只有部分影響資料庫的狀況,這我今天寫程式的時候突然遇到,因為偷懶沒寫transaction導致有一個Bug,所以特地發文上來。

程式設計範例-C#讀取RSS

這是最近客戶提到網站可能需要的功能,我在凌晨2~3點睡不著花了一小時做了一個範例。客戶的要求是讀取Pixnet的RSS。

說真的Pixnet的RSS的Content一解析出來,天啊!怎麼HTML碼這麼亂?我以為只有Word會產生這麼亂七八糟的HTML碼….

為了不要有什麼資訊安全的疑慮我直接把程式碼壓縮,裡面沒有編譯過的檔案。

寫得很簡單,只是單純運用SyndicationFeed這個物件,然後把讀取到的Feed用XmlReader存取。

只是要注意一下,直接調用SyndicationFeed的Content在Pixnet會是Null,所以多寫了一段代碼用StringBuilder讀取Content的部分。

不過因為Pixnet的Code太亂了,所以調用RSS的計畫就終止了,改用別的解決方案。

希望能幫到需要的人。

程式碼下載