Amazon Ads

2019年11月14日 星期四

【筆記】Git中用關鍵字刪除本地的分枝(branch)

先在終端機或Git Bash視窗輸入
git branch
來看目前本機的分枝有那些,例如目前在我的電腦中有:
  Dog
  Dog-101
* cat
  dog-123
  master
  video-store
  vv
現在你想刪掉名字中有「dog」,而且不分大小寫的分枝,可以先用下列指令先確認:
git branch | grep -i 'dog'
結果就會列出名字中有「dog」的分技:
  Dog
  Dog-101
  dog-123
確認後,就可以執行下列的指令去刪掉想不需要的分枝:
git branch | grep -i 'dog' | xargs git branch -D
注意!執行上列指令前,請先checkout到你要留下的分枝再執行,執行成功後,就會列出已被刪除的分枝:
Deleted branch Dog (was 21eb956).
Deleted branch Dog-101 (was 21eb956).
Deleted branch dog-123 (was 21eb956).
若你覺得這些指令好用,可以在 .bashrc.bash_profile中自己新增簡單的function:
function git-list-all-match {
    git branch | grep -i $1
}

function git-del-all-match {
    git branch | grep -i $1 | xargs git branch -D
}
建立完成後,執行:
git-list-all-match dog
結果:
* Dog
  Dog-101
  dog-123
接著執行:
git-del-all-match dog
結果:
Deleted branch Dog (was 21eb956).
Deleted branch Dog-101 (was 21eb956).
Deleted branch dog-123 (was 21eb956).
注意!執行上列指令前,請先checkout到你要留下的分枝再執行喔! 你可以參考grep指令的用法,去寫出最適合你自己的指令和function。

參考資料

2019年11月13日 星期三

【筆記】河內塔 - 用Java實作

河內塔的問題是用來學習遞迴(Recursion),之前看了很多例子,寫法都大同小意,前陣子就自己也依樣畫葫蘆,並把註解寫在程式碼中,用意是讓自己可以一目瞭然,若你也曾被這樣的程式碼感到困惑過,希望這個例子可以讓你更明白。
package idv.jk.tryit.algorithm;

public class TowerOfHanoi {
    /**
     * 河內塔實作。在第一根柱子上的n個盤子,搬到第三根柱子上。規則:
     * 1. 一次搬一個盤子
     * 2. 搬運過程中大盤子必需在小盤子之下
     *
     * @param numberOfDisks 要移動的盤子數目
     * @param beginning     盤子的開始位置所在的柱子
     * @param auxiliary     移動過程中做為輔助暫放盤子用的柱子
     * @param destination   盤子的目的地位置所在的柱子
     */
    public void move(int numberOfDisks, 
                        String beginning, 
                        String auxiliary, 
                        String destination) {
        if (numberOfDisks == 1) {
            //遞迴的重點之一在於要有結束條件,就是當條件符合時,
            //就不會再呼叫自身的這個方法(method)
            System.out.println(String.format("Moving disk from %s to %s", 
                                                beginning, 
                                                destination));
        } else {
            
            //第一步,先把 n - 1 塊盤子從第一根柱子(beginning)搬到第二根柱子,
            //此時, 需要使用第三根柱子當做輔助。
            //所以最上面傳進來的 auxiliary 參數當成目的地的柱子, 
            //最上面傳進來的 destination 參數當成輔助的柱子。

            //下面這一行執行完後,在第一根柱子上,除了最下面的盤子以外的盤子,
            //都會被搬到第二根柱子上。
            move(numberOfDisks - 1, beginning, destination, auxiliary);

            
            //第二步,再把第一根柱子上剩下的最下面的盤子從第一根柱子搬到第三根柱子上。
            move(1, beginning, auxiliary, destination);

            //第三步,再把現在在第二根子上 n - 1 塊盤子從第二根柱子搬到第三根柱子,
            //此時, 需要使用第一根柱子當做輔助。
            //所以最上面傳進來的 auxiliary 參數當成開始的柱子, 
            //最上面傳進來的 beginning 參數當成輔助的柱子。
            move(numberOfDisks - 1, auxiliary, beginning, destination);
        }
    }

    public static void main(final String[] argv) {
        /*
            第一根柱子標註為 A,
            第二根柱子標註為 B,
            第三根柱子標註為 C。
            現在要從 A 柱上的 3 個盤子搬到 C 柱上
         */
        new TowerOfHanoi().move(3, "A", "B", "C");
    }
}

2016年3月7日 星期一

【分享】安全地清理升級Windows 10後的舊安裝檔

在升級至Windows 10之後,無意間在C槽發現了一個「Windows.old」的資料夾,Google了一下後,才發現是之前Windows 8遺留下的資料夾,因為C槽快爆了,所以有必要將其刪除。

首先找到「磁碟清理」這個工具:


點選後,在開啟中,會先看到一個「計算中」的小視窗:


開啟後,再選擇要清理的磁碟機,因為之前是安裝在C槽,所以選擇如下:


再來,不要急著勾選要清理的項目,而是先點按【清理系統檔】:


之後,會需要再次選擇要清理的磁碟機:


點按【確定】後,會再出現「計算中」的小視窗,耐心地等它執行完。

再來找到要移除的「之前的Windows安裝」,再點按【確定】:


再來會再次確定是否要刪除檔案,務必請三思後並確認要刪除,再點按【刪除檔案】:


當磁碟清理程式發現刪除的是先前舊的安裝檔時,會再提示一次,請再次確認真的要刪除後,再點按【是】


下列小視窗會顯示目前的作業內容,等它關閉後,清理就完成了。


參考資料

2015年11月18日 星期三

【分享】收集個人覺得不錯的英文教學影片

經過朋友的介紹,知道這位Rachel老師的Youtube,最近很愛看這個,也著實學到很多美國人道地的說話方式,獲益匪淺。
來看賴世雄老師談如何學英文,我大概在高二開始(二十年前)每天聽半時他的常春藤解析英語,一直到大學聯考,幫助是不管期中考試,或大學聯考,英文這科拜歐其實都不太需要準備,聯考也考了個還可以的89分。

現在還會推薦賴世雄老師演講的原因在於,拜歐自己聽了一遍這影片一次,有點感慨,發現自己真能在前面的二十年前利用自己零星,虛渡過的那些時間,照影片中的方式去學習,現在英語無論在聽、說、讀、寫,跟現在比較,一定是雲泥之別。

PS.若時間不多,你可以跳過前一小時,XD


【IDIOM 100】昰介紹一百個英語中的常用語,雖然字幕是日文和英文,但片中全部都是用英語講說,加上這個老師發音很標準,所以講的速度對拜歐來講,是適中且易懂的。

她的講解都會搭配個情境小卡來幫助理解的,是個來學英語中慣用語很棒的教學影片。



TED對拜歐來講,有些演講者講得速度太快,而且有些主題是比較專業,可能會有很多不熟的單字出現,聽起來會很吃力,很難跟上。

拜歐的方法是挑一些熟悉的主題,而且講者的速度是比較慢一點的,多看幾次,應該對聽力有所幫助。

像下面這個講者的主題跟教育有關,而且速度比較慢且發音很標準,是拜歐比較聽得懂的。


【秧秧教英語】是拜歐無意間看到的影片,一系列用大家所熟悉的美國熱門影集來教大家美國日常會用到的慣用詞等,趣味性是一百分,也讓人覺得學英語是很有意思的,更一進步貼近生活。

應該因為是滿久前的影片了,大部份影片的畫質也不是很理想,還有拜歐喜歡的六人行,也只有這幾部,令人只覺得可惜,但也不失為一個學習英文的好地方。

2015年10月16日 星期五

【筆記】使用Java練習觀察者模式(Observer pattern)

Subject.java
package idv.jk.study.designpattern.observer;

import java.util.ArrayList;
import java.util.List;

public abstract class Subject
{
    private String mMessage;
    List mObserverList = new ArrayList();

    public void add(Observer observer)
    {
        mObserverList.add(observer);
    }

    public void remove(Observer observer)
    {
        mObserverList.remove(observer);
    }

    public void broadcast()
    {
        for(Observer o : mObserverList)
        {
            o.update();
        }
    }

    public String getMessage()
    {
        return mMessage;
    }

    public void setMessage(String message)
    {
        this.mMessage = message;
    }
}
Observer.java
package idv.jk.study.designpattern.observer;

public abstract class Observer
{
    protected String mName;
    protected Subject mSubject;

    public abstract void update();
}
Sheep.java
package idv.jk.study.designpattern.observer;

public class Sheep extends Observer
{
    public Sheep(String name, Subject subject)
    {
        this.mName = name;
        this.mSubject = subject;
        subject.add(this);
    }

    @Override
    public void update()
    {
        System.out.printf("通知 %s:%s%n", mName, mSubject.getMessage());
    }
}
SheepDog.java
package idv.jk.study.designpattern.observer;

public class SheepDog extends Subject
{
}
Main.java
package idv.jk.study.designpattern.observer;

public class Main
{
    public static void main(String[] args)
    {
        //Shaun the sheep中的那隻牧羊犬
        SheepDog bitzer = new SheepDog();

        //chief actor
        Sheep shaun = new Sheep("Shaun", bitzer);

        //Shaun's cousin, is the flock's only lamb,
        Sheep timmy = new Sheep("Timmy", bitzer);

        //Shirley is the largest member of the flock
        Sheep shirley = new Sheep("Shirley", bitzer);

        //Nuts, is quite an eccentric, but useful sheep and usually like the rest of the flock, accompanies and helps Shaun.
        Sheep nuts = new Sheep("Nuts", bitzer);

        bitzer.setMessage("主人回來了,快點恢復正常羊的樣子");
        bitzer.broadcast();

        System.out.println("晚上了...");
        //晚上了,Timmy比較早睡,Bitzer就不通知他
        bitzer.remove(timmy);
        bitzer.setMessage("星星出來了,大家快來看啊");
        bitzer.broadcast();
    }
}

2015年10月13日 星期二

【筆記】使用Java來做快速排序(quick sort)的簡單範例

上次真正去接觸、實作快速排序,想想是當年上職訓課,老實講,當時也是一知半解,XD
package idv.jk.study.algorithm.sort;

/**
 * Created by bioyang on 2015/10/10.
 */
public class QuickSort
{
    public static void main(String[] args)
    {
        int[] numberArray = new int[]{6, 1, 2, 7, 9, 3, 4, 5, 10, 8};

        new QuickSort().quickSort(0, numberArray.length - 1, numberArray);

        for(int n : numberArray)
        {
            System.out.print(n + "\t");
        }
    }

     /**
     *
     * @param left 最左邊那個數字的index
     * @param right 最右邊那個數字的index
     * @param numberArray 要排序的整數陣列
     */
    public void quickSort(int left, int right, int[] numberArray)
    {
        if(left > right)
        {
            //代表排序已結束
            return;
        }
        int startIndex = left; //代表最左邊那個數字的起始index
        int endIndex = right;   //代表最右邊那個數字的起始index
        int baseValue = numberArray[left]; //用來儲存要排序的數字陣列最左邊的數字
        int temp;   //用來暫存交換時的值

        while (startIndex != endIndex)
        {
            //要先從右往左找
            while (numberArray[endIndex] >= baseValue && startIndex < endIndex)
            {
                endIndex--;
            }

            while (numberArray[startIndex] <= baseValue && startIndex < endIndex)
            {
                startIndex++;
            }

            if (startIndex < endIndex)
            {
                temp = numberArray[startIndex];
                numberArray[startIndex] = numberArray[endIndex];
                numberArray[endIndex] = temp;
            }
        }

        numberArray[left] = numberArray[startIndex];
        numberArray[startIndex] = baseValue;

        //這裡會叫用遞迴,想起有次聽到良葛格說;「遞迴只應天上有,人間只能用迴圈」,XD
        //將原本最左邊的數字歸位後,開始排序以比這個數小的那群數字
        quickSort(left, startIndex - 1, numberArray);
        //將原本最左邊的數字歸位後,開始排序以比這個數大的那群數字
        quickSort(startIndex + 1, right, numberArray);

    }
}