2018年11月7日 星期三

Red-Black樹--網路教學文辯正

Red-Black樹網路教學文真濟是中文的,毋過大部份攏加入nil尾點做必要說明,這个圖是網路文掠的,出處是http://cs.lmu.edu/~ray/notes/redblacktrees/


而且定義有5个,實在傷濟矣,歹記!
英語教學文只有3个: 1.  節點紅黑,根是黑。 2. 紅的囝是黑 3. 對根到葉or 1-子節點有平濟的黑節點。按呢毋是加真簡單呢!

推論:上長的路徑是上短的2倍,why?二粒黑的中央插入紅節點,尾脽加紅。

2018年10月1日 星期一

慶祝中國十月初一國慶

唉!欲毋知今仔日是對岸中國的生日嘛無法度,台北街頭五星旗颺颺飛。也拄好後個月咱國家地方首長選舉,in想盡辦法都欲影響咱的選舉結果。假新聞佮內容農場配合真好,莫怪世界講中國毋但是世界工廠嘛是新聞製造業全世界第一名。無寫一首台文詩慶祝一下講袂過!

攏是假退駕

今年選舉真趣味  考驗選民的智慧
奧步盡出假新聞  名單敢有侯友宜

公投死人嘛簽字  名冊抄寫有較緊
深化民主關鍵年  需要你我來支持


2018年9月21日 星期五

google口座session的使用演進

誠久以前,會記咧咱若袂記揤登出,只要關掉瀏覽器嘛是將session擲掉囉。這是足早以前的代誌,因為發展真緊真濟應用攏是採用單一登入,嘛會使個別登入登出。上安全的做法是揤一个鈕仔就登出所有的應用,這个連結就是https://accounts.google.com/logout。
javascript有一段程式碼是登出個別的應用,下跤是部份源碼。
      function signOut() {
        var auth2 = gapi.auth2.getAuthInstance();
        auth2.signOut().then(function () {
          alert('xxxx...');
        });
      }

想欲做牛,免驚無犁通拖。

2018年9月8日 星期六

世界挺台灣

最近中國打壓台灣的現象,歐美嘛看袂過。美國召回三國佮咱斷交的大使,英國發表聲明呼籲世界抵抗中國的壓覇。民進黨政府面對中國毋敢大聲抗議,只有蔡總統講一寡蠓仔釘牛角的聲明。連參加東京奧運的名義都不敢主張,按呢好意思講台灣是自由民主的國家嗎?

2018年8月20日 星期一

檢驗政黨的台灣路線

很多人迷惑於政黨的主張,不知該投給何政黨?
        其實從台灣發展路線來看就很清楚了。從解嚴開始和總統直選以來,台灣的政治成就全世界給了最高評價。當政黨主張尚未成為國家政策和法律的時候,您屬意的政黨主張最後成為國家法律和政策嗎?如果是,您就是台灣發展的貢獻者。如果不是,沒關係,改支持他黨您還有機會成為國家發展的領航員。
        早期農漁民沒有退休金,有人開始主張發老農津貼3千元,這一主張最後成為縮短各行各業的退休保障政策,直到現在約7千多元。
        91年廢除懲治叛亂條例,92年修正刑法100條的和平內亂罪。這是言論自由的最深刻落實,以今天來檢驗您當時看法,您會修正當初的看法嗎?
       總統未直選時,委任直選和全民直選爭得你死我活,最後落實為民主標竿的全民直選,您若年紀大一些,當年您支持的政黨之主張有合乎這一亞洲驕傲嗎?
       台灣承襲中華民國時期的憲法,是多級政府思維,精省時也是吵得不可開交。最後省級政府虚級化,促使行政效率提升。那時您支持之政黨主張是落實了還是槓龜呢?
       核能發電更是爭議得不得了。未民主化前,台灣也建了3座核電廠。到了世界人民了解核能之危險時爭議就開始了。核四是先停建又續建,到14年又封存。當時的主張雖各有成立理由,但最終結果的非核家園是世界各國所追求的。當時您的看法押對寶了嗎?
        公民權年齡下修為普世的18歲,日本已成功達陣。台灣雖尚未成功,同志仍需努力。如果在未來進入大選表決時,您希望您的主張符合普世價值嗎?
        全球暖化問題嚴重,歐盟各國全致力於綠能發展,尤以太陽能為最。台灣日照遠勝歐陸,但目前發展却是落後歐盟。綠能相關法律目前仍在製定中,您的看法正好有落實的機會。到底是以核養綠或是全力發展綠能較得您心呢?
        死刑存廢是更大的意見相左,有人主張嚴刑峻法有人主張仿歐盟廢死。台灣目前極力執行人權公約,已判死儘量不執行。
        政治主張是事後檢驗才能論斷正確與否,太陽花和早期野百合學運,都是年青人純真利國利民的主張,最後也博得社會廣泛認同。年青人一般對國家政策還不太關心,這2學運推進了年青人做為國家主人翁的覺醒,變成了近年來右左政治人物成敗的關鍵力量。
        同性婚姻也不遑多讓,以前沒人敢承認自己是同性戀者。經過民智開竅後,了解這和左慣者相同,都是基因在搞鬼。已沒有家長會強迫小孩改右慣者了,同樣的同性戀者也不避諱承認甚至大方遊行向同志示愛。您主張讓其合法化保障其權益嗎?亦或反對其毒化社會,繼續維持現況呢?現正是大膽說出您的主張的關鍵時刻。
        去年剛完成的軍公教年金改革更是震天價響,一說是世代公平行業平等。另一說是仇視國家貢獻者,無情追殺的政治迫害。雖時間過短未能成為普世認知,您的想法正好有機會成為未來的定論。
        以上簡約列舉,協助您不知該支持誰時做腳印給您依循,也理解了台灣路線的軌跡。

2018年6月3日 星期日

世界潮流咧變,中國民主化了後的地圖。

目前中國地圖包括圖博(西藏)佮東土耳其斯坦(新疆),這二个地區是硬併的,民族嘛佮中國完全無仝。世界潮流是民主化,全球只賰中國佮朝鮮是共產國家了,大概幾冬後現有政權倒台了後,西藏佮東土耳其斯坦會獨立。按呢中國地圖就變做下跤的模樣了。

2018年5月11日 星期五

遊宜蘭太平山--日本時代三大林場之一

遊太平山
三大林場太平山   五八梅雨陪遊覽
石碇桔山食午餐   林尾溪邊步石磐
見晴秘徑走鐵道   翠峰湖畔柏檜辨
磘東校長來會面   期待來年再相見

2018年4月15日 星期日

python的SimpleHTTPServer毋是真好用

最近有需要臨時開HTTPServer,第一个想著的是python simplehttpserver,因為方便,所以真濟人咧用,我嘛無例外。毋過,用 localhost去提一寡資料煞出問題,揣真久攏毋知問題出佇佗?無張持將localhost改轉來127.0.0.1竟然好矣!誠實予伊拍敗了。

2018年3月10日 星期六

台羅音輸入法--一逝編輯器

推捒台語一向是台語陣營的目標,台羅音音調輸入目前有一寡困難。網路目前嘛可能無會當輸入2,3,5,7,8音調的羅馬符號的方法。下跤的javascript是一个小小的試驗,有需要的人會當掠轉去家己電腦內面試用。連去試用
用法:拍著2,3,5,7,8的時,會將進前5字以內的字母判斷自動轉做台語羅馬音符號。進前若無字好轉,遮仔袂刣掉。


<!doctype html>
<head>
<meta charset="utf-8">
<title>一逝編輯器</title>
<script>
  var cArr = new Array(); var cur = 0, front = 0;
  var tones = [2, 3, 5, 7, 8]; var mothers = ['a', 'e', 'o', 'i', 'u'];
  var a = ["á", "à", "â", "ā", "a̍"],
      e = [" é", "è", "ê", "ē", "e̍"],
      o = ["ó", "ò", "ô", "ō", "o̍"],
      i = ["í", "ì", "î", "ī", "i̍"],
      u = ["ú", "ù", "û", "ū", "u̍"],
      n = ["ń", "ǹ", "n̂", "n̄", "n"],
      m = ["ḿ", "m", "m", "m̄", "m"];
  var rel = {'2': 0, '3': 1, '5': 2, '7': 3, '8': 4};  //調號關連到array
  var strtofunc = {'a': a, 'e': e, 'o': o, 'i': i, 'u': u };
  var ntofunc   = {'n': n}; var mtofunc = {'m': m};
  var token_len = 5;
  var key;

  function getString(start, end) {
    var str = '';
    for (var j = start; j < end; j++) {
      str = str.concat(cArr[j]);
    }
    return str;
  }

  function subStr(curr) {
    substr = '';
    if ( (curr - token_len) < 0) substr = cArr.slice(0, curr);
    else substr = cArr.slice(curr - token_len, curr);  // at most 5
    return substr.join('');  //join 用''連接每一个元素
  }

  function getMoIndex(arr) {  //if no mother letter , return length of arr
    var count = 0;
    for (var j = 0; j < arr.length; j++) {
      if (isMother(arr[j])) {
        if ( arr[j] == 'a' || arr[j] == 'e' || arr[j] == 'o') {
          return count;
        }
        else {  //i, u
          if (isMother(arr[j+1])) return count+1;
          else return count;
        }
      }
      else count++;
    }
    return count;
  }
  /*
  function getTokenMoIndex(curr) {
    var index = subStr(curr).indexOf(' ');
    substr = substr.slice(index+1);
    var len = substr.length;
    return curr - len + getMoIndex(substr);
  }
*/
  function getTokenMoIndex(curr) {
    var substr = subStr(curr);
    var len = substr.length;
    var index = substr.indexOf(' ');
    substr = substr.slice(index+1);
    return curr - len + index + 1 + getMoIndex(substr);
  }

  function isTone(key) {
    for (var j = 0; j < tones.length; j++) {
      if (key == tones[j]) {
        return true;
      }
    }
    return false;
  }

  function isMother(key) {
    for (var j = 0; j < mothers.length; j++) {
      if (key == mothers[j]) {
        return true;
      }
    }
    return false;
  }

  document.onkeypress = function(event) {
    if (event.keyCode >= 32 && event.keyCode <= 127) {
      key = String.fromCharCode(event.keyCode);

      var num = getTokenMoIndex(cur);

      if ( isTone(key) && num < cur) {  //本字母有tone數字
        cArr[num] = strtofunc[cArr[num]][rel[key]];
      }
      else {
        if (isTone(key) && subStr(cur).indexOf('ng') >= 0) {
          var len = subStr(cur).length;
          var loc = cur - (len - subStr(cur).indexOf('ng'));
          cArr[loc] = ntofunc[cArr[loc]][rel[key]];
        }
        else if (isTone(key) && (subStr(cur) == 'm' || subStr(cur).indexOf(' m') >=0)) {
          var len = subStr(cur).length;
          var loc = cur - (len - subStr(cur).indexOf(' m'));
          cArr[loc+1] = mtofunc[cArr[loc+1]][rel[key]];
        }
        else {
          cArr.splice(cur, 0, key);
          front++; cur++;
        }
      }
    }
    else return;
    str.value = getString(0, cur) + '|' + getString(cur, front);
  }

  document.onkeydown = function(event) {
    if (event.keyCode == 8) {
      if (cur >= 1) {
        cArr.splice(cur-1, 1);
        cur--; front--;
      }
    }
    else if (event.keyCode == 37) { // left arrow
        if (cur >= 1) cur--;
    }
    else if (event.keyCode == 39) { //right arrow
      if (cur < front) cur++;
    }
    else if (event.keyCode == 13) {
      cur = front;
      //str.value = getString(0, front) + '|';
    }
    str.value = getString(0, cur) + '|' + getString(cur, front);
  }
</script>
</head>

<body>
  <span style="color: orange">瀏覽器執行台羅音一逝編輯器</span><br>
  <textarea id="str" style="font-size: 24px; border: 2px solid #336600;color:#800000;"
  disabled rows="1" cols="50">sin dâi lô tsi̍ tsuā bpian tsi̍p kgì|</textarea><br>
  <span style="color: blue">說明:音調數字拍出了後揣前5字的token共台羅韻母注音。</span>
  <script>
    var str = document.getElementById("str");
  </script>
</body>
</html>

2018年1月7日 星期日

ubuntu 17.10 作伺服器用

linux變化真緊,canonical放棄家己的display server綴wayland行嘍。桌面版是第一个採用wayland的版本,雖然離實用階段猶有一寡時間,但是試用開發無問題了。17.10網路設定嘛改用systemd-networkd嘍。以早設定/etc/default/interface的方式無效了。下跤是本校的設定值。 /etc/systemd/network/10=static-enp1s0.network
[Match]
Name=enp1s0

[Network]
Address=163.27.115.22/26
Gateway=163.27.115.62
DNS=8.8.8.8

實測是愛重開機才有效喔!