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

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

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

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

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

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

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

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

最近又多了焦慮和恐慌這兩樣但我認為只是這個春天精神不太穩,短暫的問題,前列的問題有的是從我出生就困擾我,有些很小便發作,有些到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的計畫就終止了,改用別的解決方案。

希望能幫到需要的人。

程式碼下載

 

程式設計與電腦應用相關部落格完成

這個部落格是我部落格網路裡面,分工是程式設計與電腦應用相關的部落格,裡面的內容也會盡量合乎主題。

我想這個部落格應該會很多跟我工作相關的文章,因為我主要職業是.NET程式設計師,所以如果有哪些程式設計相關的資訊我也會放上來,可能會因此幫助到一些人。

電腦軟體應用的部分,我可能會列出一些我覺得不錯的軟體,及它們的教學,我想應該也會幫助到有需要的人。

關於我的介紹請到About Me裡面,我就不在貼文裡面多寫,這是我部落格網路第四個完成的,總共預計要有五個站,之後還會有一個音樂、影集與電影相關的部落格。

全部完成後,會在右方新增一個區塊是我的部落格網路的全部連結,把五個站全部連結起來。

總之以後請多指教!