2018年12月4日 星期二

[Android] Gradle 發生錯誤解決


Gradle 發生錯誤


今天載了一個開源專案發生 gradle 錯誤如下

Error:Unsupported method: BaseConfig.getApplicationIdSuffix(). The version of Gradle you connect to does not support that method. To resolve the problem you can change/upgrade the target version of Gradle you connect to. Alternatively, you can ignore this exception and read other information from the model.

解法


到 build.gradle 把版本號換成目前 android studio 使用的 gradle 版本

classpath 'com.android.tools.build:gradle:2.2.1'

2018年8月19日 星期日

Discord 教學 - 如何使用學習日文機器人 (Kotoba)

繼上一篇介紹

接下來介紹給喜歡 ACG 又想學日文的人,
這個機器人幫助你練習很多日文單字。
而且會記錄你答對的積分,像是在玩遊戲一樣。



他就是 Kotoba #3829!!!! 很可愛吧 😊

2018年7月22日 星期日

Krita 教學 - 如何讓筆刷尺寸不被重置 & 橡皮擦跟筆刷尺寸不要一樣

Krita 是個免費開源繪圖軟體,介面接近 Photoshop,
更棒的是它有提供動畫的時間軸,
因此讓我躍躍欲試。

但在真的下去創作時,
發現只要換了筆刷的種類,
筆刷大小沒法維持我上一個筆刷大小設定。

並且筆刷跟橡皮擦來回切換,
筆刷大小會跟橡皮擦大小一樣。

終於在網路上找到解法,
首先直接點擊鍵盤 F5 開啟軟體的設定介面。

畫面圈選 1. 換了筆刷的種類,筆刷大小不被重置
畫面圈選 2. 橡皮擦跟筆刷大小不要一樣
畫面圈選 3. 橡皮擦跟筆刷透明度不要一樣





























Krita 軟體官網: https://krita.org/en/

2018年6月27日 星期三

Discord 教學 - 如何簡單加音樂機器人進伺服器 (Rythm)

2021/09/18 更新:因為 Youtube 政策關係強制停止了 Rythm 的運作,如需要音樂播放機器人請參照新文章:

Rythm 和 Groovy 不能用怎麼辦?取代方案超好用的音樂機器人在這裡 (Jockie Music)

公告翻譯如下,原文來自官方網站:

為了遵守我們從 Youtube 收到的通知 - Rythm 已終止其服務。但是不要把我們趕出去,這不是我們的結局。

Rhythm 最初是由我們的創始人 ImBursting 於 2016 年啟動的一個小項目,僅供他和他的朋友使用。很快,它就變得遠不止於此——最終成為 Discord 上最大的機器人。他從沒想過它會發展到如此之大,但作為一個團隊,看到它發展到超過 2000 萬個社區,將世界各地的人們聯繫起來並為這麼多人帶來歡樂,這對我們來說真是不可思議。

即使我們目前的服務正在關閉,我們也不會去任何地方。去年,我們一直致力於音樂領域的全新事物,這將徹底改變我們所有人聽音樂的方式。我們還不能分享太多內容,但請將 Rythm 保留在您的服務器中並訂閱我們的時事通訊以獲取我們在未來幾個月發布的更新。

如果您正在尋找一個新的聚會場所,您也可以加入我們的社區——我們在 Discord 上建立了一個活躍的音樂空間,在那裡我們定期舉辦活動和贈品。

我們要感謝所有這些年來選擇 Rythm 並相信我們的人。我們知道如果沒有 Rythm,您在 Discord 上的體驗將不一樣,但請繼續關注 - 這還不是結束。

如需業務諮詢,請聯繫我們contact@rythm.fm


如何加音樂機器人到我的伺服器?

今天要介紹 Rythm,
簡單、功能多、支持循環播放,
不用另外架設機器人,直接可以用。

首先到他的官網
https://bots.discord.pw/bots/235088799074484224


2018年5月27日 星期日

[Codility] 第六課 Distinct



寫一個 function


class Solution { public int solution(int[] A); }

陣列 A 有連續好幾個 整數 N,最後返回不重複的整數數量。

舉例來說,有一個 陣列 A

A[0] = 2 A[1] = 1 A[2] = 1 A[3] = 2 A[4] = 3 A[5] = 1
此 function 返回 3,因為在陣列 A裡面有 1, 2, 3 三個不重複的數字。

條件:

  • N的範圍必須是 0~100,000
  • 陣列 A 每個元素範圍 -1000,000 ~ 1000,000

複雜度:

  • 最糟的時間複雜度為 O(N * log(N))
  • 最糟的空間複雜度為 O(N) (不含 input 的參數)


Java 程式碼
// you can also use imports, for example:
// you can also use imports, for example:
import java.util.*;

// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");

class Solution {
    public int solution(int[] A) {
        // write your code in Java SE 8
        
        HashSet<Integer> set = new HashSet<Integer>();
        for(int i = 0;i < A.length; i++){
            if(!set.contains(A[i])){
                set.add(A[i]);
            }
        }
        return set.size();
    }
}

分數共拿 100%
任何問題歡迎交流討論,一起學習!

更多面試相關

⇒ [Codility] 面試寫題目經驗感想


感謝相關連結
https://www.codility.com/
https://app.codility.com/programmers/lessons/6-sorting/distinct/

[Codility] 面試寫題目經驗感想



網路上面試的分享都會寫到某些公司要考 Codility,
但是至於細節怎麼考,並無說明很詳細。

Codility 確實是很適合塞選面試者的一個考題,尤其是篩選掉速成培訓班的學員,所以就算工作不會寫到演算法,要找工作前還是需要練習手感,畢竟也有助於促使我們找到寫 code 的最佳解。

[Codility] 第六課 MaxProductOfThree




一個不是空的陣列 A 含有 N個整數,產出的三個數字組合為 (P, Q, R),
相乘結果為 A[P] * A[Q] * A[R] (0 < P < Q < R < N)

舉例來說,有一個 陣列 A

A[0] = -3
A[1] = 1
A[2] = 2
A[3] = -2
A[4] = 5
A[5] = 6


(0, 1, 2), 結果為 −3 * 1 * 2 = −6
(1, 2, 4), 結果為 1 * 2 * 5 = 10
(2, 4, 5), 結果為 2 * 5 * 6 = 60

所以 function 返回最大值 60,因為它是 (2, 4, 5) 的乘積最大值。

條件:

  • N的範圍必須是 3~100,000
  • 陣列 A 每個元素範圍 -1000,000 ~ 1000,000

複雜度:

  • 最糟的時間複雜度為 O(N * log(N))
  • 最糟的空間複雜度為 O(1) (不含 input 的參數)


Java 程式碼
// you can also use imports, for example:
// you can also use imports, for example:
import java.util.*;

// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");

class Solution {
    public int solution(int[] A) {
        // write your code in Java SE 8
        Arrays.sort(A);
        HashSet<Integer> set = new HashSet<Integer>();
        for(int i = 0;i < A.length; i++){
            if(!set.contains(A[i])){
                set.add(A[i]);
            }
        }
        return set.size();
    }
}

分數共拿 100%
任何問題歡迎交流討論,一起學習!

更多面試相關

⇒ [Codility] 面試寫題目經驗感想

感謝相關連結
https://www.codility.com/

[Codility] 第一課 BinaryGap





一個二進制正整數 N,
舉例來說 9 二進制為 1001 含有二進制的間隙長度為 2,
數字 525 二進制為 1000010001 含有兩種二進制間隙分別為 4 跟 3,
數字 20 二進制為 10100 二進制間隙為 1,
數字 15 二進制為 1111 則沒有二進制間隙。

寫一個 function:

class Solution { public int solution(int N); }

給一個正整數 N ,返回最大的二進制間隙,如果沒有,則返回 0

舉例來說 N = 1041 則 function 返回 5,因為 N 的二進制為 10000010001,則最大的間隙為 5。


條件:

  • N的範圍必須是 1.., 2, 147, 483, 647

複雜度:

  • 最糟的時間複雜度為 O(log(N))
  • 最糟的空間複雜度為 O(1) (不含 input 的參數)


Java 程式碼
// you can also use imports, for example:
class Solution {
    public int solution(int X, int[] A) {
        // write your code in Java SE 8
        HashSet<Integer> set = new HashSet<Integer>();
        for(int i = 0;i<A.length;i++){
            if(A[i]<=X){set.add(A[i]);}
           
           if(set.size() == X){
               return i;
           }
        }
        return -1;
    }
}
分數共拿 80%,

訂正版
需考慮 1000 這種後面沒 1 的不成立二進制間隙,
1001000 也會變成  3,須把後面不成立間隙的部分 000 移除。

Java 程式碼
// you can also use imports, for example:
// you can also use imports, for example:
import java.util.*;

// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");

class Solution {
    public int solution(int[] A) {
        // write your code in Java SE 8
         // write your code in Java SE 8
        Arrays.sort(A);
        if(A.length == 3){
            return A[0] * A[1] *A[2];
        }
      
        int N = A.length;
        int result = 0;
        if(A[0] * A[1] > 0 && A[0] < 0){
            result = Math.max(A[0] * A[1] *A[N-1],A[N - 1] * A[N - 2] *A[N - 3]);
        }else{
            result =A[N - 1] * A[N - 2] *A[N - 3];
        }
        
        return result;
    }
}

分數共拿 100%
任何問題歡迎交流討論,一起學習!

更多面試相關

⇒ [Codility] 面試寫題目經驗感想

感謝相關連結
https://www.codility.com/

[Codility] 第五課 PassingCars



一個不是空陣列的 A ,含有連續  N 個整數,
這些 A 陣列連續 N 個整數代表連續的車輛,

陣列 A 只有包含 0 或是 1:

  • 0代表一輛向東行駛的汽車
  • 1代表一輛向西行駛的汽車

目標是要數路過的車輛,我們假設有一組 (P, Q),範圍是 0 < P < Q < N,
P 是往東行駛,Q 是往西行駛。

舉例來說,A 陣列如下:

A[0] = 0
A[1] = 1
A[2] = 0
A[3] = 1
A[4] = 1

我們有五種路過車輛的組合 (0, 1), (0, 3), (0, 4), (2, 3), (2, 4)。

寫一個 function
int solution(int A[], int N);

給一個不是空的陣列 A 並且有 N 個整數,返回值為幾組路過車輛的數字。
如果數字大於 1,000,000,000 則返回 -1

舉例來說,A 陣列如下:

A[0] = 0
A[1] = 1
A[2] = 0
A[3] = 1
A[4] = 1

則 function 返回 5 。

條件:

  • N的範圍必須是 0~100,000
  • 陣列 A 的每個元素不是 0 就是 1

複雜度:

  • 最糟的時間複雜度為 O(N)
  • 最糟的空間複雜度為 O(1) (不含 input 的參數)


Java 程式碼
// you can also use imports, for example:
// you can also use imports, for example:
import java.util.*;
 
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
 
class Solution {
    public int solution(int[] A) {
        // write your code in Java SE 8
          // write your code in Java SE 8
       int zCount = 0;
       int total = 0;
       for(int i =0;i<A.length;i++){
           if(A[i] == 0){
               zCount++;
           }else{
               total +=zCount;
           }
         
       }
       
         if(Math.abs(total) > 1000000000){
               return -1;
           }
        return total;
    }
}
分數共拿 100%,
任何問題歡迎交流討論,一起學習!

更多面試相關

⇒ [Codility] 面試寫題目經驗感想

2018年5月23日 星期三

[Codility] 第四課 MissingInteger




寫一個 function:


  • int solution(int A[], int N);

給一個含有 N 個整數的陣列 A,返回最小的正整數 (必須大於 0) 且不含在 A 陣列裡面
舉例來說 A = [1, 3, 6, 4, 1, 2] ,則 function 應該要返回 5。

A = [1, 2, 3],function 返回 4
A = [−1, −3],function 返回 1

條件:

  • N是一個 1 ~ 100,000 的整數
  • 陣列 A 的每一個元素範圍 -1,000,000 ~ 1,000,000


複雜度:
  • 最糟的時間複雜度為 O(N)
  • 最糟的空間複雜度為 O(N) (不含 input 的參數)


Java 程式碼
// you can also use imports, for example:
// you can also use imports, for example:
import java.util.*;

// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");

class Solution {
    public int solution(int[] A) {
        // write your code in Java SE 8
        HashSet<Integer> list = new HashSet<Integer>();
        if(A.length == 0){
            return 1;
        }
        boolean isSmallerThanZero = true;
        
        for(int i =0;i<A.length;i++){
            if(A[i]>=0){
                isSmallerThanZero = false;
            }
            list.add(A[i]);
        }
        
        if(isSmallerThanZero){
            return 1;
        }
        
        for(int i = 1;i<Integer.MAX_VALUE;i++){
            if(!list.contains(i)){
                return i;
            }
        }
        
        return 1;
    }
}
        

分數共拿 100%,
任何問題歡迎交流討論,一起學習!

更多面試相關

⇒ [Codility] 面試寫題目經驗感想

2018年5月6日 星期日

[Hexo] Blog 在 hexo deploy 時發生錯誤

剛剛要發新文章的時候,
執行 hexo deploy ,突然就拋出以下 Exception

錯誤發生到解決

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
The file will have its original line endings in your working directory.
Fatal: HttpRequestException encountered.
bash: /dev/tty: No such device or address
error: failed to execute prompt script (exit code 1)
fatal: could not read Username for 'https://github.com': Invalid argument
FATAL Something's wrong. Maybe you can find the solution here: http://hexo.io/docs/troubleshooting.html
Error: Fatal: HttpRequestException encountered.
bash: /dev/tty: No such device or address
error: failed to execute prompt script (exit code 1)
fatal: could not read Username for 'https://github.com': Invalid argument
at ChildProcess.<anonymous> (D:\nodejs\test\node_modules\hexo-deployer-git\node_modules\hexo-util\lib\spawn.js:37:17)
at emitTwo (events.js:87:13)
at ChildProcess.emit (events.js:172:7)
at ChildProcess.cp.emit (D:\nodejs\test\node_modules\hexo-deployer-git\node_modules\hexo-util\node_modules\cross-spawn\lib\enoent.js:40:29)
at maybeClose (internal/child_process.js:827:16)
at Process.ChildProcess._handle.onexit (internal/child_process.js:211:5)
FATAL Fatal: HttpRequestException encountered.
bash: /dev/tty: No such device or address
error: failed to execute prompt script (exit code 1)
fatal: could not read Username for 'https://github.com': Invalid argument
Error: Fatal: HttpRequestException encountered.
bash: /dev/tty: No such device or address
error: failed to execute prompt script (exit code 1)
fatal: could not read Username for 'https://github.com': Invalid argument
at ChildProcess.<anonymous> (D:\nodejs\test\node_modules\hexo-deployer-git\node_modules\hexo-util\lib\spawn.js:37:17)
at emitTwo (events.js:87:13)
at ChildProcess.emit (events.js:172:7)
at ChildProcess.cp.emit (D:\nodejs\test\node_modules\hexo-deployer-git\node_modules\hexo-util\node_modules\cross-spawn\lib\enoent.js:40:29)
at maybeClose (internal/child_process.js:827:16)
at Process.ChildProcess._handle.onexit (internal/child_process.js:211:5)
直接到 _config.yml 檔案裡

原本的設定:

1
2
3
4
deploy:
type: git
branch: master

修改後的設定:

1
2
3
4
deploy:
type: git
repo: https://{yourname}:{yourpassword}@github.com/{yourname}/{yourname}.github.io.git
branch: master

參考連結


2018年5月5日 星期六

[Android] Webview 使用 Proguard 後 Bug 解決

因為金流交易使用 Webview 接,
使用 proguard 後,發現 shouldOverrideUrlLoading 此 method 沒有 call,
於是無法 redirect 回來結果,導致金流流程卡住。
此文分享解 Bug 過程思路,歡迎指教!

2018年1月22日 星期一

[Android] ProGuard 混淆程式碼及反編譯教學


這個主題網路上搜尋有著千千萬萬的文章,
通常混淆跟反編譯寫在一起的文章比較少,
因此我還是想寫得更完整,以我自己的方式記錄一遍這樣的過程。
如有任何地方有誤都歡迎指教!