2016/9/30

CEH V9 (Certifed Ethical Hacker)

CEH 可粗略意譯為有牌的道德駭客(Certifed Ethical Hacker),是 EC Council 針對從事駭客工作者規劃的「入門級測驗」。目的在給予從事相關作業者基本「觀念」,因此實作門檻難度不高,重點是應試者對入門工具要熟,各種鳥獸草木之名要一把抓,而且得多掌握新興議題。某些公司為了吸引學員上門,將CEH包裝成所謂駭客殺手,本人覺得那實在言過其實。我連自己家的老XP都還打不下來(掩面.......)

上這門課的講師Vincent,對這門CEH的定位有一點點不以為然:要打就要把人家給打爆。嫩嫩的,想耍狠又要扮白道,不是怪怪的嗎?不過,畢竟是入門嘛,來日方長,就別太計較了。

CEH的考試得先上完原廠課程。考試當天到EC Exam網站內註冊後,由監試人員輸入考試碼,開始線上測驗。考題125題2個半小時,要八成以上通過才算通過。答完125題後直接告訴你過還是不過,沒過的話得再繳6000元擇日補考。

以此次應考CEH9的情形而言,應考者可以從下拉式選單瀏覽作答過的題目,檢查答案是否正確,而且只有單選題,算是相當人性。此外,CEH9的題幹比起考古題已經精簡很多,無複選,所以英文熟悉與否,影響作答速度非常多,常見的英文詞彙必須要熟到都能順暢地念得出來。日本考生據說可以選擇日文版,台灣考生就沒有這個特權了。

準備:

  • 上課聽講師的補充很重要。因為講義投影片非常零碎,而CEH LAB的所列的重點,跟實際出題要問的不太一樣。
  • 考古題要念,但功用比較接近高中英文閱讀測驗。

考題分析:
以2016/9/30的考題而言:

1.Nmap是大魔王,接近5-6題;Hping也有1-2題。
考題選項會給出執行結果,讓你判斷下的是哪一種指令。進階題型是請考生判斷,hacker哪裡下錯指令了?沒有實際下過指令的考生,還是乖乖打開命令提示字元吧。

2.網路概念很重要,TCP 三向交握、封包的組成考很多,至少4題。子網路遮罩的算法要熟,至少2題。ACL的設法1題(唉我系統開發組的,哪裡看得懂阿 >.<)
IDS 誤報漏報的概念,Vincent也是一再強調。

3.密碼學、加密演算法的比較,3題以上。

4.防火牆那些情形算 誤報/漏報 2-3題。
5.Wifi入侵至少3題(私架基地台、rogue ap)

6.法規遵循2-3題(HIPPA/PCI,這方面台灣人很吃虧,因為法條不是用)

7.網站攻擊手法考很多題,但很淺。例如XSS跟CSRF怎麼區分。

8.有些很冷僻的,例如怎麼入侵黑莓機?這完全只能靠人品了。

2016/8/19

王先生廟



新竹市區沿著東大路往南寮方向,會經過幾個傳統的大聚落,包括樹林頭、苦苓腳、槺榔等等。在空軍機場北側跑道頭、頭前溪畔的古賢社區,昔日稱為「苦苓腳」。這裡有座有意思的廟,名喚「王先生廟」。廟址就在河畔,昔日居民曾為洪水所苦,王先生廟的傳說,也與水有關。


「王先生廟」重修時,廟址刻有〈王先生顯赫事蹟〉,以下權宜稱之為《沿革碑記》(個人以為,這是篇寫的很好的沿革誌,年代與來龍去脈都交代清楚)。依《沿革碑記》,王先生「原籍福建省泉州,來台定居台中清水。咸豐初年(1850)隻身來竹塹蟄居」,開館童蒙兼算命與行醫為生。去世後頗顯靈異,以墓作廟,展現神蹟,遂有今日之規模。卜葬於何地、顯靈傳說等等,與台灣各地的傳說(如義民廟擇地)多有相似,穿鑿附會,難以究竟其真實。倒是王先生如何展現行醫救世的神通,則嫌敘述未詳。此外,竹塹號稱「北台文學之冠」 ,文風算勝,讀書人不算希罕。王先生雖業儒,但科場並不得意。在當地居民眼中,除了神蹟以外,還有甚麼因素使其地位與眾不同呢?


原來,王先生可不是一般的教書先生。《台灣日日新報》有則報導直截了當的說:咸豐三年閩粵械鬥時,他是「閩人之參謀」。以常識觀之,當地算是閩籍優勢區,閩粵要怎麼個鬥法著實有待深究。不管是記者一知半解搞錯了,還是當時的報導者根本就講錯,但王先生在居民之間,還兼個保衛鄉里時出謀劃策的小諸葛身分,份量自然非一般教書先生可比。另外,網路上有篇一貫道辦道的文章亦提到「王先生」。當中的口碑說,王先生是因為調解「種族衝突」糾紛遭官方殺害。雖然文中年份與時空背景不太相符,令人有張飛打岳飛之感。但其情境與日日新報報導的脈絡相近,不能逕視為無稽。


1927年左右(昭和2年)當地傳染病流行,王先生託夢給當地居民:將其墓前的草取來煎服,便可免去災厄。因為一傳十十傳百,舊港、貓兒錠、十塊寮、白地粉甚至新竹街,每日有近百台灣人跑去參拜,不僅草被拔光,連土都有人拿回家去了。面對這種現象,記者大概是以看待「都市傳說」的角度報導的吧。大概是神威顯赫的效應,不久後,遂有重修之舉。


新竹市政府文化局社造的網頁有云:


大正八年(1919),王先生墓遭頭前溪大水沖燬,苦苓腳居民乃將其遷葬於現址;昭和四年(1929),村民再於墓上蓋小廟,稱王先生廟;


1919這個年份在沿革碑記裡沒提到,只能存疑待日後稽考,但當地水患頻仍,從後來居民向當局請求築堤,可以印證。至於建廟是1927年左右由當地士紳林見舜發起的。林氏是當地大家族,釀酒、米穀、籌組信用組合,對地方事務不遺餘力。幾位家族成員在地方上也頗有份量。沿革碑記稱林見舜為「大舍」,是個霸氣又貼切的稱呼。報載預定於1928年(昭和三年)11月竣工。考量可能略有延遲,依文化局網頁說王先生廟是1929年重建落成也可以,但似嫌不夠精準。


之後,《沿革碑記》又提到築堤與遷廟之事。昭和11年(1936)起,總督府內務局土木課下決心主導河川堤防改建,陸續進行宜蘭濁水溪、下淡水溪、烏溪、曾文溪、頭前溪的河堤改修。另外尚有27條河川預計整治(台日昭和11.6.20,no 13014)。單就頭前溪而言,若工事順利完成,可使頭前溪中游六家乃至湳雅、苦苓腳一路到的聚落,都受到堤防的保護。個人意見,若要談殖民統治對地方社會的影響,這與新竹州沿海的十年防風林計畫,同屬從前課本沒教但應該教的大事。國家機器的大魄力,要改變苦苓腳逢水必淹的「傳統」;築堤對地方生命財產的保護是好事,但卻牽涉拆廟遷墓,實屬兩難,對居民似乎也有若干不便(報紙上有兩則居民先前請願紀錄,但太模糊無法閱讀)。所幸最後上天用一個很「民間傳說」的方式解決問題,將王先生安息之地保留下來。


最後附上它的沿革碑記如下。斷句與原文有些差距,且補正用字,僅供參考。碑文裡的「古蓮家」用閩南語念,變成「摳玲阿鉲」,就是苦苓腳。戰後政府把該地改了個古賢里的雅名,大概作者想要保存鄉音,又不欲違逆「國語」政策吧。附近的槺榔變成「康樂」,道理相近。官方的雅、俗定義,令人發笑。


王先生原籍福建省泉州,來台定居台中清水。咸豐初年(1850)隻身來竹塹蟄居古蓮家【按:應為苦苓腳之音轉】烏瓦窯,即今古賢里,開館童蒙。精歧黃,識星命之數,與村民相處甚洽。行醫濟困解厄,頗得鄰近村民好評與愛戴,均尊呼「王先生」,確有儒醫之風。去世後,埋葬頭前溪邊烏樹林小丘上。曾於某年間溪洪突發,暴風雨暗夜,頻聞有人呼救聲,從林裡發出,卻不見人影;村民奇之,乃集眾查尋,終於發現王先生墓地盡被洪水沖失,棺木畢露在原地未被流走,眾村民更覺奇異。感念王先生在世時愛護村民美德,眾議一決將棺捆牢,群策群力抬移至現廟址,擇吉改葬,廟址亦即墓地。


[當地]本來一遍[片]茂盛樹林,有村民鄧烏財到墓地林內砍柴,豈料僅聞人聲喊止亂砍,回顧無人,鄧某膽壯偏不信邪,繼續再砍不息,回家後竟然病倒,求醫不靈,束手無策。鄧某乃言將[及]砍樹怪異遭遇,全家人恍悟,侵犯「王先生」靈氣,經其兒媳至墓地禱告求宥,病竟霍然痊癒。經此靈異發生後,村民迭求必應,更倍加崇拜如神。


當時交通並未發達,卻有遠自南北部來訪欲酬謝王先生者,不乏其人,不[意]竟然是已作古墓中人。顯靈行醫救世、靈異事蹟遂傳聞遠近,[膾]炙人間,香火隨之鼎盛。


於民國三年(1914),同村林見舜稱「大舍」,捐資在墓前建造六腳亭,方便善男信女祭拜供[品]。民國十六年(1927)再由「大舍」發起籌款,改建為廟堂,在日據台灣總督府登記有案。民國廿七年(1938),日本政府規劃沿頭前溪築堤護岸,廟在堤外必須拆除,村民乃將木雕神像臨時迎請安頓村內奉祀。但墓內遺骸,任何筶求,均不肯允許;全體村民莫敢擅動,只得靜觀變化。堤防工程一直進行,而「王先生」廟宇權充日人監工河內夫婦供作工寮住宿之用,因隨地便溺汙穢,夜半迭起鬨鬧吵鬧,嚇得日人夫婦驚惶失措,一籌莫展,經村民提醒觸怒神靈,大懼,乃能保全原狀。


迨至民國卅四年(1945)台灣重光,王先生之金身遂迎回廟宇,愈次[加]顯赫,既作古人,仍靈異保民佑人,永銘每一位善男信女胸衷。於民國七十一年(1982)村民再度集資第三次改建新廟,至民國七十四年(1985)農曆九月四日竣工落成,特誌之。 .........

2016/7/26

匯入ODS格式的資料 (C# / ODF)



因應國發會推動ODF-CNS15251格式,所有有資料交換的電子文書格式,亦須逐漸改以ODF格式為主。 在ODF中,對應Excel的檔案格式是.ODS。


要讀入資料,流程大概是:

1.將檔案讀入寫到某暫存目錄

2.將該檔案資料流讀出來,解壓縮,提取當中的 content.xml

程式參考自Gunnar Peipman的範例。
http://gunnarpeipman.com/2012/08/reading-opendocument-spreadsheets-using-c/

3.利用Linq to XML 把當中的資料列、儲存格讀出來,轉換格式以供後續使用。

※範例中的Uploader方法只是為了上傳與取得檔名,請用您自己的程式替代,以免無法執行。
※範例最下方 還有一個 class 叫做 ODFParser,用來解析出ODF壓縮檔內的xml,
它用到ICSharpCode.SharpZipLib.Zip 這個套件,但是執行效率似乎不佳。


2016/5/20

C# 在Asp.net 中將DataTable匯出成Excel檔案

將資料庫中的數值匯出Excel,應該是超經典的入門習題之一。
若使用套件有很多方法可達成,這裡討論的是純粹使用oleDB的作法。
手邊以往的程式是從C#改寫成VB.net的版本,但現在改寫為C#,原來的版本卻找不著了,只好重新來過。

在環境部屬上,要考慮.net的應用程式集區必須調整為 32位元,不然會不能執行。

程式上,首先要引入
using System.Data;
using System.Data.OleDb;
using System.Data.SqlClient;

接著是連線字串。
因為使用單位還是用舊版excel,因此用以下的古早寫法。系統會在指定的路徑中產生空白的Excel檔。

string Xlsstr = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=NO\"", path + filename);

然後建立一個 OldDB的連線,組出 Create Table 的語法,將TableSchema塞進去。
using (OleDbConnection XlsConn = new OleDbConnection(Xlsstr)) {
....
//組合出strCreate字串

OleDbCommand command = new OleDbCommand(strCreate, XlsConn);
command.ExecuteNonQuery();
}

這當中有一些要注意的細節:
(1) 如果要對欄位動手腳、客製化欄位名稱,一定要在建立Table字串的這個地方處理。很奇怪,在後面的程式碼無法再改欄位名稱。

此外,資料庫欄位一般是存英文欄位名稱,但客戶要求的卻是顯示中文表頭。
當然也可以用Select sid as [學號]的方式處裡,但是程式碼不容易維護。
這裡嘗試的方法,是另外去抓資料表欄位內預先定義好的擴充屬性。範例程式碼中是用迴圈一筆筆去找,日後應該可以整個抓回來放在DT或陣列裡,用更節省資源的方法處理。

 @"SELECT   value
            FROM   ::fn_listextendedproperty (NULL, 'user', 'dbo', 'table',  @table, 'column', default)
            where objname = @colunm ";


想要呈現的欄位名稱,如果名稱較長或有保留字,應該加上左右角括號,如 [field] ,避免建立失敗。


(2)宣告一個DataAdapter 作為中介,逐筆從來源的DataTable讀出資料,新增資料列,將資料列資料加入,最後將資料更新回Excel文件。
這部分比較偏向Dataset的操作,反而單純些。在網路上的範例中,常常都是用具體的DataTable名稱或欄位名稱操作,但常常容易失敗。這裡會建議用DsXls.Tables[0]、dr[j] = Dt.Rows[i][j];之類的方法處理,比較不容易有錯。

(3)確定檔案存在之後,另外用讀檔的方式將資料流導到前端網頁,供使用者下載。
為免資料外流,筆者習慣將檔案放在專案目錄以外的地方,或是App/data之下。總之,不能讓檔案在未經授權的情形下遭到下載。不過,這是另外一回事了。


 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.OleDb;
using System.Data.SqlClient;
/// <summary>
/// excel 的摘要描述
/// </summary>
public class excel
{
    public excel()
    {
        //
        // TODO: 在這裡新增建構函式邏輯
        //
    }
    
/// <summary>
/// 
/// </summary>
    /// <param name="Dt">資料來源</param>
/// <param name="MainTableName">讀取Schema的主要工作表</param>
    /// <param name="SheetName">工作表名稱</param>
    /// <param name="filename">檔名</param>
    /// <param name="path">路徑</param>
    /// <param name="readColName">抓取延伸屬性當作欄位名稱</param>
    public void DataTableToExcel(DataTable Dt, string MainTableName, string SheetName, string filename, string path, bool  readColName = false)
    {

        string Xlsstr = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=NO\"", path + filename);

        DataSet DsXls = new DataSet();


        using (OleDbConnection XlsConn = new OleDbConnection(Xlsstr))
        {
            //Step1: 建立Excel空檔案
            XlsConn.Open();
            string strCreate = String.Empty;
            int limit = Dt.Columns.Count;
            for (Int32 i = 0; i < limit; i++)
            {
                string vNameOriginal = Dt.Columns[i].ColumnName;

                //預設用原來名稱,若有延伸屬性抓延伸屬性
                if (readColName == true) { 
                    string vCname1 = GetColumnName(vNameOriginal, MainTableName); ;

                    if (vCname1 != "" && vCname1 != null)
                    {
                        vNameOriginal = vCname1;
                    }
                }


                strCreate += String.Format(",[{0}] Text(255)", vNameOriginal);
            }
            strCreate = String.Format("Create Table [{0}] ({1})", SheetName, strCreate.Substring(1));
            OleDbCommand command = new OleDbCommand(strCreate, XlsConn);

            try
            {
                command.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw new Exception("建立Excel檔案時發生錯誤:"+ ex.Message );
            }
            


            //Step2: 讀出該空白xls,以SheetName寫成一個DataTable
           String queryString  = String.Format("Select * From [{0}]", SheetName);

           OleDbDataAdapter Da = new  OleDbDataAdapter();
           Da.SelectCommand = new OleDbCommand(queryString, XlsConn);
           OleDbCommandBuilder builder  = new  OleDbCommandBuilder(Da);
           Da.Fill(DsXls, SheetName);

            //需加入第二標題列時
            /*
           DataRow dr0 = DsXls.Tables[0].NewRow();
           for (Int32 j = 0; j < (Dt.Columns.Count); j++)
           {
               dr0[j] = "test";
           }
           DsXls.Tables[0].Rows.Add(dr0);
            */


            for (Int32 i = 0 ; i < (Dt.Rows.Count) ; i++) {
                //新增一列
                DataRow dr = DsXls.Tables[0].NewRow();

 

                for (Int32 j = 0; j < (Dt.Columns.Count) ; j++ ){
                    //name
                    //dr[Dt.Columns[j].ColumnName] = Dt.Rows[i][j];

                    if (Dt.Rows[i][j] == DBNull.Value)
                    {
                        dr[j] = null;
                    }
                    else
                    {
                        dr[j] = Dt.Rows[i][j];
                    }
                }
                DsXls.Tables[0].Rows.Add(dr);
            }
      
            builder.GetInsertCommand();

            //執行新增語法 
            Da.Update(DsXls, DsXls.Tables[0].TableName);
       

 
        }




    }

    protected string GetColumnName(string name, string Tablename)
    {
        string result = string.Empty;
        string query_str = @"SELECT   value
            FROM   ::fn_listextendedproperty (NULL, 'user', 'dbo', 'table',  @table, 'column', default)
            where objname = @colunm ";
        using (SqlConnection conn1 = ConnFactory.ManageConn)
        {
            using (SqlCommand cmd = new SqlCommand(query_str, conn1))
            {
                conn1.Open();
                cmd.Parameters.AddWithValue("@colunm", name);
                cmd.Parameters.AddWithValue("@table", Tablename);
                result = (String)cmd.ExecuteScalar();
            }

        }
        return result;


    }

}

2016/2/11

料理屋塚乃家與鐵路便當

昔日新竹有一處饒富盛名的日式料理屋塚乃家(又作塚迺家) ,最遲於明治31年就已營業。它開在新竹火車站對面,在鐵道運輸取代以往南北往來的官道之後,可謂位於新竹的玄關;官吏送往迎來不用長途跋涉,佔有地利之便。再加上供應的是地方上為數不多的純日本式料理,又有正港日本來的內地女侍,可能也是來往的日本人,消解鄉愁的管道吧。可以讓日本人心情很好,無怪乎生意很好。

明治36年「旅團對抗」(類似後來我們的師對抗,我一直很懷疑這是不是「白團」後來教給國軍....),報紙講得很明白,此時的大演習就是刻意演給台灣人看的,要顯示帝國的威光。當時演習統監部(今日的統裁部)很妙,就設在塚乃家 。

五年理「番」計畫打得如火如荼(灰頭土臉),討蕃凱旋,要在塚乃家請吃飯 。

開股東會(新竹製腦),毫不意外要在塚乃家辦。

有總督府局長(含)以上等級人員來訪,更是得在塚乃家。否則若是無法賓主盡歡,就慘了。

當時視察行程的定番(如大正四年 內田嘉吉到訪),大約是從新竹車站下車後,先參觀若干特色產業(通草帽席、芳源製酒),優先拚經濟,然後下榻塚乃家。一天以上行程,會到醫院或其他官署參訪,或去學校講講話。然後到地方首屈一指的豪門北門鄭家參訪,或至鄭家位在樹林頭的佛堂─淨業院禮佛。參拜者是否虔誠,無從得知,重點是跟老鄭小鄭交關交關。當事人若無演講或其他行程,則趕往下一站。

參訪者本身不單純是觀看者或是接受招待,也扮演地方當局強有力攏絡體系的一環。鄭家時時有要人貴客到訪,讓鄭家維持自己是高門的「身分感覺」,官方也才能藉此動員鄭家看似近乎無窮的財力。雙方高來高去。

塚迺家就這樣扮演著地方日本人南來北往的樞紐,也是官員與有力者之間的社交空間。

大正十五年,塚迺家發生火災,付之一炬。正好之後鐵道部要整頓火車便當的販售業務(驛弁),新任站長發現前任站長形同特許塚迺家永久營業,要把它換掉。塚迺家的女將很妙,大為不滿:

鐵道草創之初,本店做便當給大家吃,沒有功勞也有苦勞,姐的店剛燒掉手頭緊,需要這筆錢啊。

上面的說法當然是筆者koso後的結果。不過,撇開加油添醋的部分,這論點還是怪怪的對不對?妙的是還有部分「新竹市民」(應該是日本人)跳出來護航。因為,塚乃家對他們而言有特殊的情感,不能讓他倒。事情鬧到新竹警務部長也感覺尷尬,出面協調,後面是否真的換人經營,不得而知。

塚乃家,後來據說在大空襲中燒掉了。不然,目前雜亂無章像大雜院的火車站門口,起碼可以多一些梗向來往的遊人述說。鐵路局還可以多幾種「百年口味」的便當可以賣。

文創產業嘛。科科。

2016/1/16

呂棗娘

阿公阿媽來家裡幫忙顧小孩。為了符合老人家的口味,晚間收視節目也得有所調整,從打打殺殺變成溫馨晨間劇(誤)。

今天重播糸子的洋裝店第一集,女主角對修身教科書中女人要當好媳婦那一套超級賭爛。拜編劇之賜,糸子會像風之谷的Nausicaa姬一樣開外掛,後面有N集可以讓她大展鴻圖揚眉吐氣。可是,每看到這種劇情,我總會忍不住想起《新竹縣採訪冊》裡的呂棗娘,以及她的不幸。

* * * * * *

新竹北門街上的呂家一家有三姊妹,每個都美豔絕倫;棗娘排行老三,特別正。

呂家可收百餘石的租穀,父親卻要姊妹們給人家倚門賣笑,當作搖錢樹。北門大街的富(蒼)戶(蠅)跟老色鬼絡繹不絕前來詢價,這老爹泰然自若還感覺相當良好。想不到連媽媽也加入推入火坑行列。x!這火坑在自己家!

棗娘不肯,哭著說:「別人家的女兒忍辱做所謂「無恥」的事,是迫於生計。可是我們家生活過得去,為什麼非要我像姐姐一樣做那種事?這種孝順,我做不到!」結果當然是被家暴,可是,那年代沒有婦幼保護專線啊。

呂棗娘保護自己的方法,是把自己弄得很可怕(讓我想到金庸小說《連城訣》裡凌知府的女兒....,但我真心希望別那麼慘),然後茹素奉佛閉門不出。結果靠北的是他媽媽雖然表面上百依百順陪著誦經,但仍不放棄對女兒拼命洗腦,早日大賺一筆。我們的主人翁無計可施,最後只能在二十三歲那一年,投繯結束自己的生命。

呂棗娘出殯之日,北門大街上德高望重的李祖琛老杯杯出人意表,特別派家中子侄去上香致意。任何年代都有鄉民,那個年代的也不在話下。大家議論紛紛指指點點,簪纓滿門的士紳之家,跟事主的身分差那麼多,去拈香多怪啊?

結果,老杯杯當街開示:貞節牌坊那套遊戲規則大家都懂,是家族半強迫呢還是當事人貪圖旌表的好處,大家自己心裡有數。老實說,根本也沒甚麼人做得到啦。可是這女孩兒的處境何其艱難,在這麼圈圈叉叉的家庭裡,還要能堅持原則,豈不連七呎大漢也要慚愧嗎?
這是,光緒十九年的事。再沒幾年,日本人就來了。事主後來有沒有獲得旌表,恐怕也無人聞問。

---------------
呂棗娘,她的堅持是什麼,今日的我們無從得知。不過,貞節牌坊是世家大族的專利。以他的出身,也許她根本從不貪戀甚麼可坊可表、「完大璞以無暇」的考語。

她只是想跟晨間劇的糸子一樣,不想被貼標籤、不想被看笑話,想要有尊嚴,好好的做一回自己。

「竹塹音樂隊」事件

1938年(昭和13年9月21日),新竹火車站前正以隆重儀式歡送某要人。從報紙報導內文以○○○塗銷人名來看,應該是與軍方關係密切的有力人士。

 當時,空氣中流洩的應該是「代蒼天伐不義」之類的軍歌才對。結果現場幫忙伴奏的民間團體「竹塹音樂隊」,卻吹了一首「台灣行進曲」。新竹高女的江頭桑發現矛頭不對,但也許是怕場面騷動,也沒有馬上打斷。最後巡查出動,有六名樂隊成員遭到警察調查。照報紙的說法,他們在時局敏感時做出不當舉動,太可惡了。 他們是張萬來、戴順天、林有本、蔡火森、藍慶超,另一名姓名不詳,全是不滿三十歲的年輕人。報紙說他們「抱持著反抗的態度」。

 事情有這麼嚴重嗎?「台灣行進曲」並不是甚麼靡靡之音,它可是總督府國民精神總動員本部辦理「海選」挑出來的作品,作者是嘉義大林的三栗谷櫻, 作曲者則是在竹南郡役所上班的作曲素人陳炎興。內容雖未直接提到士兵上場殺敵,但該到山邊海岸當海草、為大君領便當,光榮大東亞,該有的「教化意涵」可是一點不會少。可是,戰爭至上的年代,不論是他們故意、Kuso或搞錯,即使這一點小小的偏差值,也是不被允許的。

 這「竹塹音樂隊」跟官方可能還有點小淵源。從前的新竹州教育課長矢野,當過洋樂同好會的(名譽)會長,之前還辦過巡迴推廣。或許這些青年,當時就是講習會的一員,為音樂所著迷。由於「竹塹音樂隊」是新竹唯一的樂隊,在地方各種場合無役不與。這回出事之後,因為樂器是跟市政府借的,這下樂器勢必回收,後續無以為繼;結果六萬新竹市民之中,竟沒有其他表演團體可茲取代。這下換新竹市教育課長傷腦筋了,因為「慶祝」占領漢口、壯行會等儀式,都得要有人吹奏國歌。這種場合若無熟習洋樂而且吹得不錯的人,恐怕會出更大的包。臨時要找樂器湊咖,沒那麼簡單.... 

拜今日有Google之賜,尋找同名同姓者,張萬來可能是新竹有樂館(即今日影像博物館)的技手,戴順天則跟北門聖教會有淵源。兩者跟西洋文化都有那麼一點關係。日後如有機會,很想再深入了解,這新竹街的六個人,如何喜歡上音樂,又為何敢在那敏感的時機點「一起吹錯」?或是根本是主辦單位給錯曲目,弄巧成拙。 若是好事之徒編出煽情狗血小說,也可以唬爛他們「為了純粹的音樂,鬥魂燃燒而挺身奮戰」,

 可是,這樣就不叫歷史了啊。

2016/1/3

殖民地台灣近代教育的鏡像─一九三○台灣的教育與社會

殖民地台灣近代教育的鏡像─一九三○台灣的教育與社會

李維修·2016年1月2日

 許佩賢教授新付梓的專書《殖民地台灣近代教育的鏡像》(衛城,2015)收錄八篇論文,主題圍繞著日本時代的教育課題而展開。全書內容可概括區分成兩部分:殖民體制下「下對上」與「上對下」的教育想望。全書的下半部四篇文章,探討上對下的殖民地教育力學,以及規訓、教化、整合的體制,也就是「統治技術」的層面。諸如總督府文教政策的外圍功能組織─台灣教育會,以及收音機體操、身體動員與健民運動,乃至於義務教育政策的研擬與實施。但是以魯蛇個人的興趣而言,更關心「下對上」的層面,亦即被統治者求生存的藝術。向來在相關研究中,台灣人的動向模糊難尋,一不小心就會寫成統治者的歷史。礙於文獻中可引申處相當有限,研究者必須「動手動腳找東西」。作者從很零碎的材料中,極力拓展相關研究的深度與廣度,這也是這本書格外可貴之處。 

 第一篇探討公學校教師的發達之路,講的是一名新竹的公學校教師─張式穀,如何接受新學、逐步蛻變為地方要人的過程 (就筆者自身的認知,若非二二八事件以及之後政治環境的驟變,打亂了地方的生態,張式穀的政壇之路,發展絕對不止於如此)。值得注意的是,張式穀並非紳商出身,但卻有強大的「文化象徵資本」─其父是新竹最有名的塾師張麟書,北門大街的富室大族子弟全是他的同窗,連日本官員也不得不另眼相看。本文訴說一名青年從年少懵懂,接受師範教育後獲提拔為香山庄長,繼而成為實業家、合縱連橫,在「協力」與「反抗」之間走出自己的第三路線。張式穀從學理上雖為殖民當局的「功能性協力者」,但就地方角度而言,他也展現了地方精英追尋社會進步、爭取(教育)資源的自主意識與積極面。 

 第二篇與第三篇,探討公學校與實業學校畢業生的社會意義。從殖民當局而言,大力整備公學校、提供入學機會,是以最低成本培育農事人才的如意算盤。對一般讀者而言,印象中覺得日本時代的教育「很厲害」、十分普及;事實上,台灣人的就學率,至一九三○年代,也才勉強超過不到五成。這些相對有能力就學的台灣人,心中其實另有盤算:念書是為了「脫農」或擺脫勞動工作,與當局的規劃可說頗有差距。公學校畢業生雖然只具基本學力,但在當時已可算是與眾不同,逐漸成為轉換為受薪階級的入場券。此外,公學校畢業生就讀中學受到諸多限制,反倒是進入高等科甚至再投入實業補習學校的比例逐年提高。對官方而言,設置實業學校的成本較低,對民眾而言,進入實業學校錄取率高又利於就業,相對而言中學校入學困難,畢業後前景難測;實業學校的存在意義,實應予以重視。反觀今日,升學主義釀成技職體系萎縮、綜合型大學過度膨脹。以此與過去相比,令人不無感觸。

 第四篇談的是鄉土教育。1927年起日本文部省開始鼓勵地方展開鄉土教材與鄉土教學,但在台灣的文教當局,卻對鄉土教育不很積極,似乎是有意避免鄉土=台灣的連結,引發以台灣為單位的認同。真正實作教育的是州以下的層級。本書從台中州的案例,提到基層教師從不同角度界定與實作鄉土。但鄉土是台灣人家鄉共同記憶的鄉土呢?還是為了建立少國民對母國的愛慕與崇敬,作為由下而上堆疊概念基礎的抽象「鄉土」呢?針這種重層矛盾的現象,作者在此文展現層層細密探討的分析功力,非常值得一讀。 

 另外,本書針對統治技術面的最後一篇,係透過新史料─茗荷谷文書,重建了日本時代義務教育政策成型的過程。一九三○年代,台灣人有受教育的迫切需求,日本官方則想推動涵養國民性格,且為即將到來的戰爭動員做準備。以雙方動向的會合為契機,義務教育議題浮上檯面且付諸實行。但是可想而知的沉重財政負擔,始終是無法實施的關鍵原因。最後義務教育於1939年拍板定案,1943年實行。但諸多學校得以成立,還是仰賴台灣人自己的荷包買單。