2014年6月23日 星期一

你一定要懂 12 年國教哪裡荒唐

兩年前當姐姐升國二時, 12 年國教緊鑼密鼓在進行, 同事問我孩子是否為會考白老鼠這屆, 我說是啊! 但教改改得亂七八糟看不懂, 我實在不想去了解. 同事馬上警告我, 你一定要懂.

這句話我聽進去了, 但汗顏的是, 雖然學校辦的座談會我去聽了, 還是隔靴抓癢懵懵懂懂. 直到會考快近了, 學校又辦說明會, 這才稍微了解遊戲規則.

會考當天去陪考, 巧遇老同學文壬也來陪考, 他兒子與姐姐同校同年, 聊到這次會考後的填志願, 他說要小心填, 亂填的話可能連一所高中都上不了, 沒學校念. 我一驚, 真的假的? 可見之前的座談會是白搭了, 我根本沒真正了解遊戲規則.

所以會考放榜後那三天, 跟姊姊一起研究如何填志願序時, 我就戒慎恐懼, 生怕像老同學說的一步錯, 全盤輸的局面. 最後一天還打電話向老同學求教, 我該如何幫孩子填志願? 他家寶貝學科優異, 是 5A 級的, 所以不用擔心, 還特地為我向其擔任福山國中老師的教會朋友問問意見.

最後我依據班導提供的前年基測排序, 用 Excel 估計姊姊落點在前鎮, 三民在邊緣, 新莊與中山大學附中都不用想. 所以選最有可能的前鎮為第一志願, 果如所料. 但我是在填志願序截止日前一天才搞懂要怎麼玩這複雜遊戲的啊! 而我是天天要寫程式的人, 自信邏輯能力不差, 但卻搞得筋疲力盡, 到處求救, 其他的家長怎麼辦? 看看底下這幾篇, 我感同身受, 白老鼠第二屆的家長, 一定要提早了解這個荒唐的 12 年國教 :

# 十二年國教 搞懂免試入學
# 12年國教 從頭到尾都在「大豪賭」
# 5科A至A++ 50個志願竟全落榜
# 志願序扣分 高中入學成賭局
# 跌破眼鏡 1A4B進彰中彰女 
# 不滿免試入學 民眾上街怒吼
# 12年國教免試入學混亂 家長上街喊補救
# 免試入學風波不斷 教育部:志願序計分屬地方自治


老同學說的是真的, 5A 的學生竟然通通不錄取. 一個得市長獎會考得 5A 的孩子, 在這個制度下卻沒學校可念, 你說這個政府渾蛋不渾蛋?

教育絕對要改革, 但不是越改越亂. 光是掛羊頭賣狗肉的 "免試升學" 就證明他們在亂搞. 免試啥? 還不是一樣要會考. 還有免學費的政策到最後變成 148 萬門檻. 真正的 12 年國教不就是像小學升國中一樣嗎? 時機還不成熟就硬上架, 難道只是要讓馬英九卸任時, 很自負的說, 我的政見達成率 100% 嗎?

教改說要消滅補習, 但是越改補習班生意越好, 這不是證明他們都在亂搞嗎? 志願序不知道是哪位教育博士想出來的, 那根本是懲罰序. 一個 5A 成績的優秀學生竟然會連一個學校都沒錄取, 讓我這個女兒得 3A2B 的家長都感到荒唐.

我為這個國家將來無可用之材感到悲哀, 與憤怒.



2014年6月22日 星期日

非凡畫室

晚上整理資料時, 找到一張上回姊姊術科考試時收到的 "非凡畫室" 傳單, 在南台路, 找個時間去看看.

# http://www.jyl.url.tw/
# 大學美術術科考試
#
高雄那兒有好的畫室呢?


驚險的美術班分發

昨天 6/20 會考免試放榜, 果然如我所預料, 姐姐錄取前鎮高中, 但放榜前還是忐忑不安, 生怕連前鎮都上不了. 其實, 這是因為我根據姐姐會考分數區間保守估計填前鎮為第一志願的結果, 或許填三民也能上, 但太冒險了, 萬一三民沒上, 志願序扣兩分, 連前鎮都可能上不了. 這就是馬政府十二年國教 "免試免學費" 倉促上路所製造的教育賽局啊! 我相信惡搞的結果很快就會看到效果了.

姊姊得知上前鎮, 彷彿吃了顆定心丸, 雖然不是頂尖學校, 但至少有學校可念了. 不過對於今天 6/21 要去南二中參加南區美術班分發, 仍然緊張萬分, 因為她最想上的是美術班, 但是她術科成績排序第 110 名, 最熱門的鳳新她不能選, 因為鳳新的素描有 80 分的門檻, 姐姐這一項只得 78 分, 只能選新營高中, 南二中, 屏東高中, 鼓山高中, 大同中學, 以及前鎮高中. 屏東與台南太遠, 當然不會選, 鼓山交通不方便, 所以只有前鎮美術班可選. 她跟前鎮還真有緣.

序號 110 名屬第四梯次, 10:10 報到, 但我們還是提早 09:15 到南二中分發現場, 進了禮堂一看, 哇, 最熱門的鳳新高中只剩一半名額, 而前鎮都還沒人選, 太好了, 有希望. 但到第二梯次 (每梯次 30 名) 結束時, 鳳新已額滿, 第三梯次開始往前鎮灌, 我開始焦慮, 這 30 名若全部選前鎮, 那姐姐就沒機會了, 雖然這不太可能 (這 30 人總有台南屏東的吧), 但第四梯次 (90~120) 在姐姐前面的還有 20 人哪! 越估算心越慌, 姊姊在錄取邊緣! 第四梯次 (90-120) 開始選校時前鎮只剩下 14 個名額, 也就是只要姐姐前面有 6 個人不選前鎮, 她就穩上了. 當一個一個上台說選前鎮貼榜時, 我跟姊姊就更緊張一分, 開始計算選他校的人數, 終於, 算到 6 時我告訴她, 別緊張, 應該沒問題了, 果然, 姊姊貼榜時是倒數第 8, 真是驚險啊!

我立刻傳 Line 給國中導師芝勤老師, 感謝她三上時提醒姐姐加強素描. 四月份到南二中參加術科考試時, 當我看到一車車的大型遊覽車載著學生來應考時, 才了解原來國中就有美術班! 姐姐只去黎陽學素描半年怎麼跟國中美術班比呢? 還好老師有提醒, 素描成績沒有太差.

貼榜後立即報到, 繳交畢業證書後, 教務主任交付暑假作業與資料夾, 便提早回高雄. 中午在火車站對面的東川口日式快餐店吃午飯, 姐姐上週去補習時點滑蛋豬肉飯讚不絕口, 所以特地去吃看看. 下午 3:30 坐捷運去前鎮高中參加新生說明會.


2014年6月20日 星期五

ExtJS 4.2.2 版

ExtJS 升版到 v5 後, 好像沒有 GPL 授權的免費版了, 只能下載 45 天試用版, 最便宜的單一授權是 $595 (台幣約 17900 元), 不便宜啊. 我想半年前還在用 4.2.1 版呢! 一不注意就升到 4.2.2, 然後突然變 5 版. 4.2.2 版是 4 版的最後版本.

其實 4 版就很好用了, 只是不知 4.2.2 版與 4.2.1 版有何不同? 根據下列網頁, 4.2.2 版只提供給付費客戶使用 :

# http://docs.sencha.com/extjs/4.2.2/

Oct 1 2013Ext 4.2.2 Released (support subscribers only)
May 22 2013Ext 4.2.1 Released
Mar 13 2013Ext 4.2.0 Released

所以 Sencha 網站不提供 4.2.2 的 CDN, 在我之前的這篇有提到 Sencha 提供 4.2.1 版的 CDN :

# ExtJs 環境部署
# http://cdn.sencha.com/ext/gpl/4.2.1/ext-all.js

試著把網址中的 4.2.1 改為 4.2.2 果真找不到. 所以還是乖乖用 4.2.1 版就好.

4.2.2 版修正了 4.2.1 版許多 bug, 如下列 release note 網頁所示 :

# Release Notes for Ext JS 4.2.2

看來 4.2.2 版還是有些進步的, 但 Sencha 官網已找不到下載點, 還好我在論壇中找到在下列網頁中有提供 4.2.2 整份文件 :

# why i can not down ExtJs 4.2.2 ?
# Download the extjs 4.2.2 full documentation (約 72MB)

解開後在 extjs-builds 目錄下就可以找到運行 ExtJS 所需的必要檔案與目錄了, 參考舊作 :

# ExtJS 4 測試 (二) : 主題佈景切換 (Look and Feel)

只要下列目錄與檔案就夠了 :

extjs-4.2.2
    |___ ext-all.js
    |___ locale
    |___ resources
                 |___ css
                 |___ ext-theme-classic
                 |___ ext-theme-classic-sandbox
                 |___ ext-theme-neptune
                 |___ ext-theme-gray
                 |___ ext-theme-access
                 |___ theme

大約 16.7 MB 左右, 3079 個檔案, 233 個目錄. 如果不須更換主題背景, 只要留下 css 與 ext-theme-classic 即可, 所需容量會更小. 其 API 見 :

# http://docs.sencha.com/extjs/4.2.2/#!/api


2014年6月19日 星期四

不愉快的特力屋消費經驗

昨天跑去特力屋想要買吊扇, 順便把上回買 LED 燈泡與水龍頭送的 600 元折價券用掉, 結果要結帳時拿出折價券, 櫃台說已過期 2 天, 不能用了. 卡好, 原來上面有印使用期限, 頓時讓我心情非常差, 完全不想買任何東西了, 全部退掉.

平心而論, 沒注意到上面有印有效期限是自己的疏忽, 怪不得人, 但是反過來想, 作為一個服務業, 如果能要求結帳小姐在遞交折價券時, 能貼心地提醒客戶這是有使用期限的 (這叫做感動服務), 不就能讓客戶愉快消費, 避免因為折價券過期而心情變差, 停止交易的機會了嗎?

回家後到特力屋網站客戶留言區寫了一封信, 希望特力屋將來能注意這樣的細節, 要不然, 像我這樣收到折價券就塞在皮夾的糊塗蟲 (這種人應該不少吧), 只要一想到特力屋, 就想起那張沒注意就過期兩天的折價券, 你想我還會快樂去消費嗎? 過條街轉角的小北就買得到的東西幹嘛大老遠跑到特力屋 ?

服務的秘訣不只是禮貌而已, 還要周到.


ExtJS 5

昨天找 ExtJS 資料時在 Sencha 發現 ExtJS 已升版到 v5, 天啊, 我第四版還沒學會呢! 瀏覽了一下新增功能, 加入了對 tablet 支援, 那與 Secha Touch 如何區分呢?  IT 的東西真的永遠學不完.

因為目前還沒有 5 版的書可看, 所以還是乖乖把 ExtJS 4 學完再說吧.

# Announcing Public Beta of Ext JS 5 (翻譯)
# 对于ExtJS 5,你准备好了吗?
# 下載 Ext JS 5 public beta
# ExtJS 5.0 範例
# What's New in Ext JS 5
# extjs 4 系列 2/5


Big Data 書摘

以下是從左新借的 "Big Data-看見真實慾望" 讀書筆記, 本周要還了, 不記不行.

作者 : 宋吉永 悅知文化出版
  1. 何謂趨勢 ? (1) 持續不斷累積 (2) 擁有特定方向 (3) 多數人分享的流行方向
  2. 對東方人來說, 幸福的時態是未來式, 因為對未來感到不安, 所以當下無法感到幸福.
  3. 社會氛圍隱藏人民對未來的展望與洞察. 當一個國家的社會氛圍不好, 便是政黨輪替的時候.
  4. 由於統計學的發達, 預測未來不再是一種迷信, 而是科學.
  5. 凱文貝肯 (Kevin Bacon) 的六度分隔理論, 因為臉書的出現, 原本的六度已經下降到四度, 即在人際網絡中, 要認識一位陌生的朋友, 中間需要通過的朋友數, 已經從原本的六人降為四人.
  6. 社群網路讓我們看到群體, 而非少數樣本.
  7. 巨量資料分析的技術核心在自然語言處理技術, 網路上的資料有 90% 都是文字, 照片, 影片等非結構化資料, 透過自然語言處理就可以從中擷取出可量化 (scalble) 與結構化的資料.
  8. 發現趨勢的方法 : 計算社群網站中關鍵字出現次數的增減量, 以及與其他關鍵字的相關性.
  9. 社群網站能讓我們看到客戶內心真正的慾望, 而且讓我們立刻看到結果, 其分析速度非常驚人. 社群網路分析之所以存在, 無非是其速度的優勢. 
  10. 將社群網站的主觀客觀化是巨量資料分析的特點, 可以讓我們透過現在看到未來.
  11. Oreilly Media 對 data scientist 的定義 :
    想要成為資料科學家,就需學習 Python 語言, 並設立可通過 R 的迴歸統計分析的假說, 再用簡單易懂的語言與全體成員溝通. 
  12. 比起技術能力, 更重要的是擁有看到整體的洞察力, 也必須知道如何創造並傳播故事. 
  13. 想要讓自動化成為可能, 必須先定義什麼是可以重複的工作.
  14. 巨量資料的特性可以用 3P+1P 說明 : Problem+People+Platform=Productivity, 其中問題才是本質, 因為它無法自動化.
  15. 巨量資料分析步驟 : 觀察 - 量化 - 演繹 - 推論.
  16. 分析人類產生的資料, 須結合語言學家, IT 專家, 甚至人類學家. 
  17. 巨量分析的特點是它是面對一般人進行分析, 而非特定一群人.
  18. IT 技術最重要的不是方法, 而是成效.
  19. 資料分析的重點不是什麼, 而是為什麼.
  20. 若只是不斷強調商品的好處, 那就是無用的廣告. 行銷要做的工作是刺激消費者的欲望.
  21. 餐飲業創業成功率僅 8%, 創業前必須深入了解大部分人的飲食偏好.
  22. 巨量資料分析可以用來掌握社會動向. 目前網路資料已經巨大到足以讓我們透過觀察過去與現在, 成功預測未來的方向. 例如分析手錶屬性關鍵字 (品牌, 禮物, 價格, 代言人等) 在主要部落格出現的頻率變化 (每月, 每季, 每年), 可以看出
  23. 要成為巨量資料分析專家, 首先必須瞭解如何發問, 並分析該問題能透過何種資料來分析與解決.
  24. 知識均等讓專業職業 (醫生, 會計師等) 的重要性開始下降, 資訊平均化也使得要在這個時代謀生店得越來越困難.



2014年6月17日 星期二

核取方塊 Checkbox 的存取方法

昨天在改 project_v3 程式時, 為了如何存取一個 checkbox 竟然腦中一片空白 (我看是老了), 連 jQuery 與 ExtJS 要怎麼用也太久沒用生鏽了. 這裡就做個總整理, 以備不時之需.

首先是原始的 Javascript 作法, 在下列範例 1 中, 有一個 checkbox 群組, 要成為群組必須 name 相同, 這樣用 form 來取得此名稱時, 是取得一個 checkbox 物件陣列的參考, 因此可用 for 迴圈判斷哪一個 checkbox 被選取了 (checked 屬性為 true).

測試範例 1 : http://tony1966.xyz/test/jstest/checkbox_1.htm [看原始碼]

  <form>
    喜歡的水果 : <br>
    <input type="checkbox" name="fruit" value="蘋果" checked>蘋果
    <input type="checkbox" name="fruit" value="香蕉">香蕉
    <input type="checkbox" name="fruit" value="櫻桃">櫻桃<br>
    <input type="button" value="確定" onclick="check(this.form)">
  </form>
  <script language="Javascript">
    function check(formObj) {
      var obj=formObj.fruit;
      var selected=[];
      for (var i=0; i<obj.length; i++) {
        if (obj[i].checked) {
          selected.push(obj[i].value);
          }
        }
      alert("您喜歡的水果 : " + selected.join());
      }
  </script>

此例在按鈕元素中直接以 onclick 屬性處理動作事件, 強調 MVC 架構者不會建議這麼寫, 認為 View (網頁) 跟 Control (程式) 應該分開來. 另外, 我們用 this.form 當參數, 把表單物件傳給 check() 函式, 這樣在函式中用 formObj.fruit 便可取得 checkbox 群組陣列物件了. 若表單要傳給後端伺服器, 表單元件一定要用 form 元素包起來, 這樣瀏覽器才能將表單元件的內容放到 HTTP 協定裏傳給伺服器. 但若只是本地執行的網頁程式, 事實上是不需要用 form 元素包裹的, 如下面範例 2 所示 :

測試範例 2 : http://tony1966.xyz/test/jstest/checkbox_2.htm [看原始碼]

喜歡的水果 : <br>
<input type="checkbox" name="fruit" value="蘋果" checked>蘋果
<input type="checkbox" name="fruit" value="香蕉">香蕉
<input type="checkbox" name="fruit" value="櫻桃">櫻桃<br>
<input type="button" name="ok" id="ok" value="確定">
  <script language="Javascript">
    var btn=document.getElementById("ok");
    btn.onclick=function(){
      var obj=document.getElementsByName("fruit");
      var selected=[];
      for (var i=0; i<obj.length; i++) {
        if (obj[i].checked) {
          selected.push(obj[i].value);
          }
        }
      alert("您喜歡的水果 : " + selected.join());
      };
  </script>

此例我們使用 DOM 中 document 物件的  getElementById(), getElementsByName(), getElementsByTagName 等又臭又長的方法來取得網頁元件, 要注意以 Name 或 TagName 取得的可能是多個元件, 因此是用複數的 Elements, 而以 Id 取得的則是獨一無二的元件, 用單數 Element. 此例的 ok 按鈕也可以用 getElementsByName() 取得, 但因為它一律傳回一個陣列參考, 因此雖然名稱為 ok 者只有一個, 但仍必須用 btn[0] 才能正確取得 ok 按鈕, 此例也可改為 :

    var btn=document.getElementsByName("ok");
    btn[0].onclick=function(){ ... }

接下來看看 jQuery 怎麼做? 如下列範例 3 所示 :

測試範例 3 : http://tony1966.xyz/test/jstest/checkbox_3.htm [看原始碼]

  喜歡的水果 : <br>
  <input type="checkbox" name="fruit" value="蘋果" checked>蘋果
  <input type="checkbox" name="fruit" value="香蕉">香蕉
  <input type="checkbox" name="fruit" value="櫻桃">櫻桃<br>
  <input type="button" id="ok" value="確定">
  <script language="Javascript">
    $(document).ready(function(){
      $("#ok").click(function(){
        var selected=[];
        $("[name=fruit]:checkbox:checked").each(function(){
          selected.push($(this).val());
          });
        alert("您喜歡的水果 : " + selected.join());
        });
      });
  </script>

jQuery 只要用 [name=fruit]:checkbox:checked 這個過濾器就可以抓出被選取的 checkbox 了, 非常簡潔. 選取後得到包裹物件集合, 便可用 each() 公用函式來拜訪集合中的每一個包裹物件 $(this), 呼叫其 val() 方法便能取得其 value 屬性之值. 注意, 在 jQuery 中 $(this) 表示目前的包裹物件 (或稱為 jQuery 物件), 而 this 則為其相對之 DOM 物件.

新聞英語網站

姊姊要上高中了, 據補習班老師說, 高中英文很重視課外雜誌, 課內只佔 20%, 新聞英語我不陌生, 因此想每日註解一篇新聞英語給姊姊加強這部分. 下面這網站很細心羅列了許多媒體網站 :

# 新聞英文網站

我大概會從下面六個網站取材, 註解於 Google 雲端硬碟 :
  1. http://www.bbc.com/news/ 
  2. http://time.com/
  3. http://edition.cnn.com/
  4. http://www.newsweek.com/ 
  5. http://www.taipeitimes.com/News/ 
  6. http://www.chinapost.com.tw/ 
訂三年的 Readers Digest 姊姊也看得懂, 我目前沒時間看, 所以鼓勵她拿去看. Readers Digest 的文章比較不具新聞性, 慢一些看無妨.



2014年6月16日 星期一

Praat 大量語音處理套件改版

上回修正了 project_v3 套件的檔名大小寫與 ACCESS 資料表太多問題後, 學姊說還是有問題, 跑 formant 共振峰擷取時仍然失敗. 前幾天看原始碼, 終於恢復記憶, 原來我寫的三支自動擷取 formant 的 script 不是 general 的, 而是必須視受試者性別去修改程式碼, 因為太久沒用了, 我忘記了這點 (我看了以前做的簡報以及原始碼才想起來). 但這週忙著幫姐姐找補習班, 所以沒空改程式.

為了一勞永逸, 索性修改了 formant 的執行架構, 在第一步時必須指定有哪些受試者是女性或兒童 (參數用 5500Hz), 其餘為男性不需指定 (程式內部參數會套用 5000 Hz), 這些女性/兒童受試者用逗號隔開, 中間不要有空格, 例如 :

33,36,38,41,46

在執行完第一步時, 會多產生一個 gender_list.txt 檔, 標示與 subject_list.txt 對應之性別, 0 表女性/兒童, 1 表男性. 同時也修改了三個 fetch_formant 程式, 執行時會自動根據 gender_list.txt 的內容套用 5500Hz 或 5000 Hz 參數, 以後做不同的研究計畫時就不必每次都要去修改這三個抓取 formant 的程式了.

以下紀錄修改的部分, 以免又忘記. 這三個共振峰擷取程式為 :

fetch_formant_list.praat
fetch_formant_mean_max_min.praat
fetch_percent_formant.praat

改的地方都一樣, 就是添加讀取 gender_list.txt, 以及剖析其內容的部分 :

#定義受試者目錄檔
subjectFileName$=working_directory$ + "\subject_list.txt"
genderFileName$=working_directory$ + "\gender_list.txt"   (添加)
#讀取受試者目錄名稱檔,轉成陣列
if fileReadable (subjectFileName$)
   #讀取受試者目錄名稱檔與性別檔至一字串
   subjectList$ < 'subjectFileName$'
   genderList$ < 'genderFileName$'   (添加)
   ...
   ...
       #取得目前受試者性別字串總字元長度
       listLength=length(genderList$)
       #找出受試者性別字串中的第一個空白位置之索引值,到檔尾時找不到的話會得到 0
       i=index(genderList$," ")
       #從受試者性別字串中取出受試者性別 (空白字元左側)
       if i=0
          g$=genderList$
 #去除已取出之受試者性別,更新受試者性別字串
          genderList$=right$(genderList$,0)
       else 
          g$=left$(genderList$,'i'-1)
 #去除已取出之受試者性別,更新受試者性別字串
          genderList$=right$(genderList$,'listLength'-'i')
       endif
       #紀錄目前處理中之受試者目錄至檔案
       fileappend "'info_out$'" subject='k$' gender='g$''newline$'  (修改)
       newListLength=length(subjectList$)
       ...
       ...
  #產生 formant 物件 (女:g$=0,用 5500, 男:g$=1,用 5000)
  if g$="0" 
     To Formant (burg)... 0 5 5500 0.025 50
  else 
     To Formant (burg)... 0 5 5000 0.025 50
  endif   (修改)
    #選取該 formant 物件
  select Formant 'majorFileName$'
       ...
       ...
else
   echo "'subjectFileName$' not found"   (修改)
endif

以上最重要的部分是產生 formant 物件的那個 if-else, 就是這裡依據 g$ 這個性別字元來套用 5500Hz 還是 5000Hz 的最高頻率.


等七月份評鑑完, 再來想辦法用 Java Swing 改寫, 這樣才不會受限於 IE 或 Windows, 或許介面也要做些改變, 直接呼叫 praatcon.exe 去執行, 以盡量減少人工操作步驟.

# 下載 project_v3.zip (無語料)
# 下載 project_v3.zip (有語料)

2018-02-16 :

為了與玉蓉學姊討論語音分析問題, 加上了有語料版本下載連結, 語料來源為淑蓉學妹的碩士論文中的其中兩個受試者. 另外, Win10 上的 IE11 瀏覽器無法執行此網頁程式, 但可以降級為 IE10 來跑, 參考 :

# Praat 大量語音資料處理套件在 IE11 上的執行問題