2017年11月26日 星期日

讀台羅--台語學習的第一步

新台羅台語拼音是台語學習上好的入門教材,有程式好練習。因為佮英語發音相仝,學起來無困難。練習網路地址佇遮

2017年11月4日 星期六

google 指令碼編輯器無法度處理unicode第2字面的字

𨑨迌人這3字早就有法度佇各軟體處理了,包括gmail攏無問題。為著欲用程式發批,入去指令碼編輯器,𨑨迌人3字拍會出來,但是徒振動的時,"𨑨"煞加一个才會到"迌"。批發出去的時發批人𨑨迌人只有"𨑨"是亂碼,"迌人"是正常的。進一步查看unicode發現"迌"是佇第0字面,但是"𨑨"是第2字面的字,是毋是google猶無注意著較少用的漢字的問題?

2017年10月27日 星期五

司馬庫斯遊記

司馬庫斯是泰雅族原民部落,1979年才有電火,是上帝號名的部落。巨木林群離社區五里路遠,泰岡溪對面是新光部落。開車對內灣開始足足愛2點半鐘,in是實行共產生活的社區。嘛出名到外國去。

2017年10月8日 星期日

新台羅拼音符號-真正適合咱台灣學生使用的拼音方案

教育部幾冬前整合各種拼音方案做成台羅拼音,做為認證的唯一標準。台語網站嘛用台羅拼音標注。這是妥協之下的結果,毋過煞造成第一線教師教學和學生學習的困難。按怎講?因為咱學生攏有學英語,台羅拼音有差不多有7个是佮英語音標無仝的,學生欲學這種拼音定定拂毋著去,連老師三不五時嘛會出差錯。所以應該將遮仔會出差錯的符號改回佮英語仝款。若按呢學生根本無啥需要另外記無仝的符號,嘛袂定定拂毋著去。經過按呢的修改,大概愛另外學的符號只有3个爾爾。

2017年8月26日 星期六

來點名囉-點名程式android版本發佈試用

下跤是點名程式的原始碼,歡迎有趣味的人掠轉去研究。自由軟體上大精神是開放,完全無藏起來的想法。若干焦試用這个android apk,揤這个連結




package tw.cyc.grid4;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.app.FragmentTransaction;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.DisplayMetrics;
import android.util.Log;
import android.util.TypedValue;
import android.view.GestureDetector;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.AbsListView;
import android.widget.Adapter;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.NumberPicker;
import android.widget.RadioGroup;
import android.widget.SimpleAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.IdentityHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.concurrent.ExecutionException;

public class MainActivity extends Activity implements NumberPicker.OnValueChangeListener {

    ArrayList<HashMap<String, Integer>> location = new ArrayList<HashMap<String, Integer>>();

    public int col = 4;
    public int pos = 0;
    public int num = 0;
    public int selected = 0;
    public int fontSize = 32;

    final int[] color = {Color.argb(255, 153, 51, 0), Color.argb(255, 153, 206, 255), Color.argb(255, 255, 153, 0), Color.argb(255, 194, 194, 214)};
    long startTime = 0;
    long lastClickTime = 0;
    final int CLICK_PERIOD = 400;
    GridView grid;
    static GridAdapter adapter;
    static SharedPreferences spref = null;
    static RadioGroup column;
    static EditText number ;
    static Spinner spinner;
    static RadioGroup direction;
    static String pack = "";
    static public boolean changed = false;
    private final static String MY_MESSAGE = "tw.cyc.sendmessage";
    int monitorWidth = 0;
    int monitorHeight = 0;

    public class GridAdapter extends SimpleAdapter {
        Context context = null;

        public GridAdapter(Context context, List<? extends Map<String, ?>> numbers,
                           int resource, String[] from, int[] to) {
            super(context, numbers, resource, from, to);
            this.context = context;
            monitorWidth = getResources().getDisplayMetrics().widthPixels;
            monitorHeight = getResources().getDisplayMetrics().heightPixels;
        }

        @Override        public View getView(int position, View convertView, ViewGroup parent) {
            convertView = LayoutInflater.from(context).inflate(R.layout.gridview_item, null);
            HashMap<String, Integer> theMap = (HashMap<String, Integer>) getItem(position);
            TextView main_text = (TextView) convertView.findViewById(R.id.main_text);
            TextView second_text = (TextView) convertView.findViewById(R.id.second_text);

            if (theMap.get("note") < 0) {  //note less 0 is virtual                main_text.setText("");
            }
            else if (theMap.get("note") > 0 && theMap.get("note") < 10) {
                main_text.setText("0".concat(theMap.get("note").toString()));
            }
            else {
                main_text.setText(theMap.get("note").toString());
            }
            main_text.setTextSize(fontSize);
            main_text.setTextColor(color[pos]);
            int rowHeight = 0;
            if (location.size()/col <= 10) {
                rowHeight = monitorHeight / ((location.size()/col + 4));
            }
            else rowHeight = monitorHeight / 14;
            ListView.LayoutParams param = new ListView.LayoutParams((int) ((monitorWidth - 100) / col), rowHeight);
            convertView.setLayoutParams(param);

            if (theMap.get("second") < 0) {
                second_text.setText("");
            }
            else if (theMap.get("second") == 0) {
                second_text.setText("");
            }
            else {
                main_text.setTextColor(Color.argb(255, 0, 153, 0));
                second_text.setText(" ".concat(theMap.get("second").toString()));
                second_text.setTextColor(Color.argb(255, 218, 179, 255));
                second_text.setTextSize(fontSize - 8);
            }

            return convertView;
        }

    }

    public int getVirtualNumber(ArrayList<HashMap<String, Integer>> location) {
        int virtualNumber = 0;
        for (int j=0; j<location.size(); j++) {
            if (location.get(j).get("second") < 0) {
                virtualNumber++ ;
            }
        }
        return virtualNumber;
    }

    public int randomSelect(View v) {    //no need to check transpose
        startTime = System.currentTimeMillis();
        if (startTime - lastClickTime < CLICK_PERIOD && lastClickView == v) {
            int realSize = location.size() - getVirtualNumber(location);
            if (realSize - selected == 0) {
                Toast.makeText(MainActivity.this, " 無免點囉!", Toast.LENGTH_SHORT).show();
                return 0;
            }
            int random = (new Random()).nextInt(realSize - selected);
            int count = 0;  //0 is most low value            for (int j=0; j<location.size(); j++) {
                if (location.get(j).get("second") == 0) {
                    if (count == random) {
                        selected = selected + 1;
                        location.get(j).put("second", Integer.valueOf(selected));
                        AlertDialog.Builder builder = new AlertDialog.Builder(this);
                        TextView msg = new TextView(this); msg.setTextSize(50);
                        msg.setTextColor(Color.RED);msg.setHeight(400);
                        msg.setText(location.get(j).get("note").toString());
                        msg.setGravity(Gravity.CENTER);
                        builder.setView(msg);
                        AlertDialog dialog = builder.create();
                        dialog.show();

                        WindowManager.LayoutParams params = dialog.getWindow().getAttributes();
                        params.width = monitorWidth / 3;
                        dialog.getWindow().setAttributes(params);

                        break;
                    }
                    else count++;
                }
            }
            adapter.notifyDataSetChanged();
            return random;
        }
        lastClickTime = startTime;
        lastClickView = v;
        return 0;
    }

   public int getTrow() {
       return ((int) (location.size()/col)) + 1;
   }

    @Override    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) { // 攔截返回鍵            AlertDialog adialog = new AlertDialog.Builder(this)
                    .setTitle("欲走矣嗎?")
                    .setPositiveButton("確定",
                            new DialogInterface.OnClickListener() {
                                @Override                                public void onClick(DialogInterface dialog, int which) {
                                    finish();
                                }
                            })
                    .setNegativeButton("取消",
                            new DialogInterface.OnClickListener() {
                                @Override                                public void onClick(DialogInterface dialog,
                                                    int which) {  }
                            }).show();
            adialog.getButton(DialogInterface.BUTTON_POSITIVE).setTextColor(Color.argb(255, 0, 153, 0));
            adialog.getButton(DialogInterface.BUTTON_POSITIVE).setTextSize(20);
            adialog.getButton(DialogInterface.BUTTON_NEGATIVE).setTextColor(Color.argb(255, 0, 0, 153));
            adialog.getButton(DialogInterface.BUTTON_NEGATIVE).setTextSize(20);
        }
        return true;
    }

    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        pack = getPackageName(); //backup for use after ending fragment        spref = getSharedPreferences("settings", Context.MODE_PRIVATE);
        if (spref.getInt("column",0) == R.id.three) { col = 3; }
        else if (spref.getInt("column", 0) == R.id.four) { col = 4; }
        else if (spref.getInt("column", 0) == R.id.five) { col = 5; }

        num = spref.getInt("number", 32);
        pos = spref.getInt("pos", 0);

        fontSize = fontSize - (col-3)*4; //袂用float運算??若無會當掉,但是模擬器袂。
        for (int j=0; j<num; j++) {
            HashMap<String, Integer> map = new HashMap<String, Integer>();
            map.put("note", new Integer(j+1));
            map.put("second", new Integer(0));
            location.add(j, map);
        }

        grid = (GridView) findViewById(R.id.grid);
        DisplayMetrics metrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metrics);
        int height = metrics.heightPixels;
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(metrics.widthPixels, (int)(height*0.75));
        grid.setLayoutParams(params);

        grid.setNumColumns(col);

        if (spref.getInt("direction",0) == R.id.verticle) location = transpose(location, col);

        adapter = new GridAdapter(this.getBaseContext(), location, R.layout.gridview_item,
                new String[] {"note", "second"}, new int[] {R.id.main_text, R.id.second_text});

        grid.setAdapter(adapter);
        //grid.setOnTouchListener(new View.OnTouchListener() cannot handle position        grid.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            long startTime = 0;
            long lastClickTime = 0;
            final int CLICK_PERIOD = 400;

            int lastPos = 0;
            @Override            public void onItemClick(AdapterView parent, View view, int position, long s) {
                startTime = System.currentTimeMillis();

                if (startTime - lastClickTime < CLICK_PERIOD && position == lastPos) {
                    TextView main_text = (TextView) view.findViewById(R.id.main_text);
                    TextView second_text = (TextView) view.findViewById(R.id.second_text);

                    if (location.get(position).get("second") == -1) {
                        // just skip virtual item                    }

                    else if (location.get(position).get("second") == 0) {
                        selected ++;
                        location.get(position).put("second", Integer.valueOf(selected));
                    }

                    else  {
                        selected--;
                        for ( int j=0; j<location.size(); j++) {
                            if (location.get(j).get("second") > location.get(position).get("second")) {
                                location.get(j).put("second", location.get(j).get("second")-1);
                            }
                        }
                        location.get(position).put("second", Integer.valueOf(0));
                    }
                    adapter.notifyDataSetChanged();

                }

                lastClickTime = startTime;
                lastPos = position;
            }
        });
        registerReceiver(mBroadcast, new IntentFilter(MY_MESSAGE));
    }

    @Override    protected void onDestroy() {
        super.onDestroy();
        this.unregisterReceiver(this.mBroadcast);
    }

    static private BroadcastReceiver mBroadcast =  new BroadcastReceiver() {
        private final static String MY_MESSAGE = "tw.cyc.sendmessage";
        @Override        public void onReceive(Context mContext, Intent mIntent) {

            if(MY_MESSAGE.equals(mIntent.getAction())) {
                adapter.notifyDataSetChanged();
                Toast.makeText(mContext, "設定值變更了後APP愛重開才有作用。", Toast.LENGTH_LONG).show();
            }
        }
    };

    @Override    public boolean onCreateOptionsMenu(Menu menu) {
        //參數1:群組id, 參數2:itemId, 參數3:item順序, 參數4:item名稱        menu.add(Menu.NONE, 0, 0, "基本設定");
        menu.add(Menu.NONE, 2, 0, "臨時設定");
        menu.add(Menu.NONE, 1, 0, "使用說明");
        return super.onCreateOptionsMenu(menu);
    }

    public boolean onOptionsItemSelected(MenuItem item) {
        //依據itemId來判斷使用者點選哪一個item        switch(item.getItemId()) {
            case 0:
                FragmentTransaction ft = getFragmentManager().beginTransaction();
                MyDialogFragment frag = new MyDialogFragment();
                frag.show(ft, "tx");
                break;
            case 1:
                help();
                break;
            case 2:
                setNumber();
                break;
            default:
        }

        return super.onOptionsItemSelected(item);
    }

    public ArrayList<HashMap<String, Integer>> transpose(ArrayList<HashMap<String, Integer>> old, int column) {
        ArrayList<HashMap<String, Integer>> trans = new ArrayList<HashMap<String, Integer>>();
        int trow = (int) Math.ceil((double) old.size()/column);
        int moverableRow = (int) Math.ceil((double) old.size()/column) - 2;
        int newnum = old.size();
        int remainder = old.size() % column;    //remainder is 1  first        if ( remainder != 0 && (column - remainder - 1) <= moverableRow) {  //            newnum = num + (column-2 - (remainder-1));
        }
        if (newnum > num) {
            for (int j = 0; j < newnum; j++) {
                HashMap<String, Integer> temp = new HashMap<String, Integer>();
                temp.put("note", Integer.valueOf(trow * (j % column) + (j / column)));
                temp.put("second", Integer.valueOf(0));
                trans.add(j, temp);
                trans.get(j).put("note", Integer.valueOf(trans.get(j).get("note") + 1));
            }
        }
        else {
            int mustChCol = 0;  //zero is first            if (newnum % column == 0) mustChCol = 0;
            else mustChCol = newnum % column + 1;  //0 first            for (int j=0 ; j< newnum; j++) {
                HashMap<String, Integer> temp = new HashMap<String, Integer>();
                if (mustChCol != 0 && j%column >= mustChCol) {  //mustChCol is 0 first, j is 0 first                    //temp.put("note", Integer.valueOf(trow * (j % column) + (j / column) - (j % column - (mustChCol-1)  -  ));                    temp.put("note", Integer.valueOf(trow * (j % column) + (j / column) - (j % column - mustChCol) - 1));
                } else temp.put("note", Integer.valueOf(trow*(j % column) + (j / column)));
                temp.put("second", Integer.valueOf(0));
                trans.add(j, temp);
                trans.get(j).put("note", Integer.valueOf(trans.get(j).get("note") + 1));
            }
        }

        if (remainder > 0 && newnum > num) {
            for (int j = 1; j <= column-1 - remainder; j++) {
                int change = ((trow - 1) - j) * column + (column - 1);  // index 0 begin                trans.get(change).put("note", Integer.valueOf(-1));
                trans.get(change).put("second", Integer.valueOf(-1));
            }
        }

        return trans;
    }

View lastClickView = null;
    public void clear(View v) {
        startTime = System.currentTimeMillis();
        if (startTime - lastClickTime < CLICK_PERIOD && lastClickView == v) {
            for (int j=0; j<location.size(); j++) {  //check if cleared do nothing                if (location.get(j).get("second") > 0) {
                    AlertDialog adialog = new AlertDialog.Builder(this)
                            .setTitle("確定欲總清掉?")
                            .setPositiveButton("確定",
                                    new DialogInterface.OnClickListener() {
                                        @Override                                        public void onClick(DialogInterface dialog, int which) {
                                            selected = 0;
                                            for (int j = 0; j < location.size(); j++) {
                                                if (location.get(j).get("second") != -1)  // -1 is virtual , reserved                                                    location.get(j).put("second", Integer.valueOf(0));
                                            }
                                            adapter.notifyDataSetChanged();
                                        }
                                    })
                            .setNegativeButton("取消",
                                    new DialogInterface.OnClickListener() {
                                        @Override                                        public void onClick(DialogInterface dialog, int which) {
                                        }
                                    }).show();
                    adialog.getButton(DialogInterface.BUTTON_POSITIVE).setTextColor(Color.argb(255, 0, 153, 0));
                    adialog.getButton(DialogInterface.BUTTON_POSITIVE).setTextSize(20);
                    adialog.getButton(DialogInterface.BUTTON_NEGATIVE).setTextColor(Color.argb(255, 0, 0, 153));
                    adialog.getButton(DialogInterface.BUTTON_NEGATIVE).setTextSize(20);

                    break;
                }
            }
        }
        lastClickTime = startTime;
        lastClickView = v;

    }

    @Override    public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
        //Log.i("value is",""+newVal);
    }

    public void setNumber() {
        final Dialog d = new Dialog(MainActivity.this);
        d.setTitle("NumberPicker");
        d.setContentView(R.layout.dialogview);
        Button b1 = (Button) d.findViewById(R.id.button1);
        Button b2 = (Button) d.findViewById(R.id.button2);
        final NumberPicker np = (NumberPicker) d.findViewById(R.id.numberPicker1);
        np.setMaxValue(50); // max value 100        np.setMinValue(3);   // min value 0        np.setValue(30);
        np.setWrapSelectorWheel(false);
        np.setOnValueChangedListener(this);
        b1.setOnClickListener(new View.OnClickListener()
        {
            @Override            public void onClick(View v) {
                int num = np.getValue();
                location.clear();
                for (int j=0; j<num; j++) {
                    HashMap<String, Integer> map = new HashMap<String, Integer>();
                    map.put("note", new Integer(j+1));
                    map.put("second", new Integer(0));
                    location.add(j, map); selected = 0;
                }
                adapter.notifyDataSetChanged();
                d.dismiss();
            }
        });
        b2.setOnClickListener(new View.OnClickListener()
        {
            @Override            public void onClick(View v) {
                d.dismiss(); // dismiss the dialog            }
        });
        d.show();
    }

    public void help() {
        AlertDialog adialog = new AlertDialog.Builder(this)
                .setTitle("來點名囉--版權佮使用說明")
                .setMessage("1.連紲點才有作用,為防止無小心揤著。\n" +
                        "2.點了的閣點會取消,後壁的攏進一名。\n" +
                        "3.本軟體是自由軟體,歡迎散佈使用。\n" +
                        "4.軟體版本2017.08,適用 android4.3以上。\n" +
                        "台灣軟體自由協會。")
                .setPositiveButton("確定",
                        new DialogInterface.OnClickListener() {
                            @Override                            public void onClick(DialogInterface dialog, int which) {
                            }
                        }).show();

        adialog.getButton(DialogInterface.BUTTON_POSITIVE).setTextColor(Color.argb(255, 0, 153, 0));
        adialog.getButton(DialogInterface.BUTTON_POSITIVE).setTextSize(20);
    }


    public class MyDialogFragment extends DialogFragment {

        @Override        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setStyle(DialogFragment.STYLE_NORMAL, R.style.MY_DIALOG);
        }

        @Override        public void onPause() {
            Intent intent = new Intent();
            intent.setAction(MY_MESSAGE);
            sendBroadcast(intent);
            super.onPause();
        }


        @Override        public void onStart() {
            super.onStart();
            Dialog d = getDialog();
            if (d!=null){
                int width = ViewGroup.LayoutParams.MATCH_PARENT;
                int height = ViewGroup.LayoutParams.MATCH_PARENT;
                d.getWindow().setLayout(width, height);
            }
        }

        @Override        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View root = inflater.inflate(R.layout.my_fragment, container, false);

            column = (RadioGroup) root.findViewById(R.id.column);
            column.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
                @Override                public void onCheckedChanged(RadioGroup group, int checkedId) {
                    spref.edit().putInt("column", checkedId).apply();
                    changed = true;
                }
            });
            column.check(spref.getInt("column", 0));

            number = (EditText) root.findViewById(R.id.number);
            number.setText(Integer.toString(spref.getInt("number", 0)));
            number.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    spref.edit().putInt("number", Integer.parseInt(number.getText().toString())).apply();
                    changed = true;
                }
            });

            spinner = (Spinner) root.findViewById(R.id.spinner);
            ArrayAdapter colorList = ArrayAdapter.createFromResource(root.getContext(),
                    R.array.color, android.R.layout.simple_dropdown_item_1line);
            spinner.setAdapter(colorList);
            spinner.setSelection(spref.getInt("pos", 0));
            spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override                public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                    spref.edit().putInt("pos", position).apply();
                    changed = true;
                }
                @Override                public void onNothingSelected(AdapterView<?> parent) { }
            });

            direction = (RadioGroup) root.findViewById(R.id.direction);
            direction.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
                @Override                public void onCheckedChanged(RadioGroup group, int checkedId) {
                    spref.edit().putInt("direction", checkedId).apply();
                    changed = true;
                }
            });
            direction.check(spref.getInt("direction", 0));

            return root;
        }

    }

2017年7月10日 星期一

2017蔡琴台中演唱

頂個月月中的時蔡琴佇台中舉辦個人演唱會,地點選佇台中中興大學的惠蓀堂。也就是中興大學的大禮堂。規場人滿滿是無空位,台文詩一首記錄個人感受。

蔡琴演唱會
百萬精華演唱會 四個月前票先買
民歌時代聽蔡琴 惠蓀堂內憶往過
中興湖邊雺霧雨 增添詩意不忍回

2017年6月19日 星期一

蒜頭的國中-六嘉出業禮

這篇應該是第一篇加上台羅注音的台文詩,台羅音會曉的人愈來愈濟。毋過猶是無夠,昨昏200若个本土社團去行政院要求設立台語電視台,就是欲搶救冗欲死去的台語啦!蔡英文的民進黨政府加油!

2017年6月1日 星期四

台灣手機支付方案差不多完整囉

今仔日google的android pay出來囉,雖然是目前line pay,apple pay,samsung pay攏佇伊的頭前出來,但是我想android pay可能會是台灣上普遍的支付方案。理由真簡單,apple機仔台灣只佔15%至20%爾爾,samsung pay限定三星的機仔,只有android pay無遮仔問題,而且去燦坤攄android pay的時嘛是用samsung pay彼隻接收。line pay有1萬箍的限制,種種問題會造成android pay佇台灣時到是上普遍的支付方案!附圖是android pay佇北港燦坤完成支付的手機畫面。

2017年4月1日 星期六

嘉義縣深山林內的遊樂園-寒溪呢

坐落阿里山來吉佮梅山豐山村之間的”寒溪呢“,屬於梅山太和村。附近清水溪向雲林佮南投流去,我簡單用下跤華文詩說明大概情況。

佇macbook內裝硬碟裝arch linux

蘋果電腦好用無毌著,但是效能無蓋好。為著平常拍拍字看新聞爾根本無需要開macos,所以想辦法閣裝arch linux入去。作法真簡單,首先用Time machine備份mac系統,繼來將分區縮小,縮小了後有空間增加二个分區。分別是boot佮linux檔案系統。boot愛是fat32格式,linux愛用ext4。arch linux裝好了後重開機就有通選了。毌夠,可能這時陣macos 顛倒是開袂起來囉,因為進前動著macos的分區囉,只要開機的時揤command+R來回復就OK了。

2017年2月17日 星期五

一卡通佮悠遊卡雙卡NFC手機化

行動支付進入2017年,雖然完備矣煞嘛有無方便的所在。佇sim卡方面愛先換有nfc功能的卡,但是悠遊卡猶無法度像一卡通仝款直接OTA下載來用,愛先去中華電信換電信悠遊sim卡才有法度用喔!筆者就是前年先請一卡通,今仔日閣去換電信悠遊sim卡造成舊的一卡通無法度繼續用,只好請新的囉!

1. 去easy hami請手機用悠遊卡

2. 當然愛同意
3. 添個人資料
4. 送出了竟然就好勢了

5. 完成的畫面
6. 換請一卡通
 7. 離開easy hami入去一卡通網站
 8. 目前有2種卡好選,台南市民真好命直接用,一般人選普通卡
 9. 約定條款愛同意
 10. 添個人資料
 11. 繼續添
 12. 成功了,認證碼4碼送到手機了
 13. OTA記名完成
 14. 送出身份證正反面,用翕相的方式喔。
 15. 會當下載囉
 16. 選下載一卡通
 17. 繼續
 18. 認證碼添入去
 19. 下載中
 20. 完成了
 21. 會當用了
 22. 無半箍,愛去7-11全家等加值喔。
 23. easy hami顯示NFC一卡通已安裝
按呢就會當將這2張卡擲掉了,勞力!

2017年2月12日 星期日

問題報告-LibreOffice5.3.0.3蘋果版的小可問題

昨昏裝好LibreOffice5.3.0.3的蘋果版,煞發現傢俬的文字變磚了,但是閣有一寡是正常的。重開機試幾遍相仝。換裝Linux 版本顛倒無問題,毋知是毋是語言檔出問題或者其他問題?這个小小問題我想反應出去較適合吧!

2017年1月21日 星期六

哭枵聯盟--唐鳳喙講的"同溫層"

有一寡人明明就食甲傷過飽,煞喙飽目睭枵一直說in干焦領18%的人若可憐閣若可憐,完全是靠18%咧過生活。政府講咧幾落遍,年金無分18%只要上少2萬5以下攏袂振動,嘛有可能是3萬2千若以下就無改變。遮仔人攏是講替低層的人出聲,其實是欲顧全家己的退休金。若無是按怎無看著真正是年金領誠萬箍的人出來呢。聽說in明仔載又閣欲出來抗議,下跤這首台文詩做一个仔陪綴。台灣有3百若萬上班的人月給無夠3萬,愛出來抗議的是遮仔才著。

2017年1月12日 星期四

總統經國先生作忌記念台文詩一首

報導自由時報董仔吳阿明先生過身。才過三工爾爾就火化安座了,連傳統頭七都無辦,閣較免講講究排場大官文化的花箍白包等等細項了。誠實是台灣觀念進步的先行者。今仔日是總統蔣經國的作忌日子,最近國民黨的破病情形,毋知地下有靈赦一世人反共的經國先生按怎想?小小一首台文詩紀念嘛是台灣人的這个總統了。
關店中國黨
百年老店國民黨  血管硬掙氣袂通
黨產欲放喙咧講  可憐黨工捒來擋
明明上愛是一中  選舉個個抱經國
恭請阿共治中風  恐驚愈治愈嚴重

2017年1月10日 星期二

踅圓潭--雲潭瀑布一日遊


踅圓潭
太興岩頂泰興嚴  正月梅花鬥爭艶
圓潭溪邊圓潭谿  中晝午餐來啖糝
軁踅磅空火車探  音聲廻盪內山站
茶樹步道茶味芳  三層瀑布看雲潭

2017年1月1日 星期日

2017新年到--逐家痟跨年

每一冬欲結束的時,世界各國包括台灣在內攏會放煙火。佇台灣閣較痟,痟甲縣市政府嘛插一跤。嘉義小小的所在,竟然分做二个行政單位辦二場迎接新年的活動,趣味嘛笑詼!

跨年2017
島嶼天光滅火器  市府邀請𦲷嘉義
縣府日出阿里山  相招一七來跨年
故宮南院八月止  諸羅民眾攏免錢
連絡大道名高鐵  行政何必分縣市