2022/03/10

[LeetCode] 565. Array Nesting

題目給一組長度為n陣列nums,其元素從[0,n-1],陣列中元素並未排列,求最長的nested陣列。

原題連結:https://leetcode.com/problems/array-nesting/

nested陣列定義為:nums[k], nums[nums[k]], ...直到元素重複為止。

[Miscellaneous] 臺大清寒獎助學金永續基金捐贈


美金$250捐贈於臺大清寒獎助金,雖然金額小,但是在能力範圍內,努力為社會貢獻一份心力。

[LeetCode] 1458. Max Dot Product of Two Subsequences

給兩組數組陣列nums1及nums2,求其子序列(subsequence)之最大內積(dot product)。

看到題目有兩個重點:
  1. 子序列(subsequence):意思是從原本陣列中刪去一些元素所組成的陣列
  2. 陣列中的元素有正有負

2022/02/15

[Linux] Run eBPF with Linux Kernel v5.16 on Ubuntu 21.10

有鑒於eBPF相關的架構都還在開發中,這邊紀錄了目前編譯成功且能夠執行的版本。

系統需求:Ubuntu 21.10 (因為需要clang-13,且至少70GB以上的硬碟空間)

如同目前Linux官方文件上說,需要clang-13+的版本才能編譯eBPF的code。所以在這裡使用了還在開發中的Ubuntu 21.10,但只要是有clang-13+的作業系統版本應該都適用。

整個流程主要參考Cilium的BPF and XDP Reference Guide,加上一些網路找的bug fix posts。

2021/06/16

[Linux] zsh 好用的shell: 在Secure Shell上正確顯示agnoster主題

zsh因為有更好的介面,所以在使用上非常熱門。本篇主要紀錄怎麼在Chrome上的Secure Shell App上,使用oh-my-zsh:


2021/06/06

[Miscellaneous] 把SSH Server當作VPN Server來使用,切換Netflix的地區

如果想透過Netflix追劇,可是在北美地區,想看的影集卻沒有中文字幕,該怎麼辦?有幾個可能的方式:

  1. 透過VPN,讓IP轉到臺灣,優點是簡單,可是缺點是可能會花錢。不想花錢的話,也可以使用SetupVPN,可是擔心自己的流量被監控的話,這個方法可能會有疑慮
  2. 自己架VPN Server,優點是保有隱私,可是缺點是設定過程麻煩,像是用OpenVPN之類的
  3. [此篇] 透過SSH Tunnel,把所有的網路連線流量都透過SSH的Server做連線,優點是保有隱私且設定簡單,只要在遠端機器上安裝OpenSSH(可參考這篇)即可
設定要求:
  1. 一台遠端電腦in臺灣,且有SSH Server (with Public IP address)
  2. MacOS

2021/05/18

[Ubuntu] Build bbrv2 on Ubuntu 21.04

因為BBRv2還沒有在Linux的master tree中,所以Ubuntu目前也沒有BBRv2。本篇紀錄怎麼把編譯好的BBRv2放到Ubuntu 21.04中。以Google Cloud Platform的VM作為例子。

需要的有:1) 下載BBRv2的程式碼在本機端,2) 遠端的VM (本篇用GCP Ubuntu 21.04)。

首先在GCP上開一個Ubuntu 21.04的VM。接著可以在本機端下載BBRv2的程式碼(BBRv2 Alpha),接著編譯

$ cd bbr/
$ ./gce-install.sh -m ${HOST}

2019/07/05

[Ubuntu] 讓Ubuntu 16.04變成一個Router by IP Forwarding

有時候因為實驗需要,會把Ubuntu當作一個中間站來測試整個網路的Topology,因此就會需要把Ubuntu變成一個轉送的Router。從圖中可以看到原來的網路下,Ping到8.8.8.8的TTL是49。

2019/05/30

[Linux] 客製化Linux Kernel於VirtualBox Ubuntu18.04上

在Linux的學習之路上,常常會需要修改Linux Kernel來達到自己的需求,這篇紀錄如何在VirtualBox上置換Ubuntu18.04的Linux Kernel。目標是利用客製化成的deb檔案,來安裝修改的Linux Kernel,並且能夠在開機選單上挑選想要的版本開機。
這是Ubuntu18.04現有的Kernel版本。

[VirtualBox] MacOS與Ubuntu共用資料夾設定

在以MacOS為Host的情況下,要處理共用設定相對於Windows是比較麻煩的 。關於Windows與Ubuntu的共用資料夾設定可以參考這篇。因此,如果MacOS與Ubuntu要設定共用,比較簡單的方式是透過VirtualBox的共用資料夾來做。首先,在GuestOS上選擇設定Settings,如下圖:

2019/02/16

[UIUC] 美國報稅Tax Return-留學生

在美國基本上只要有收入,不論是獎學金或者工作收入,都需要報稅。大約在年初的時候應該會收到W-2或者1042-S,兩者的差別是W-2是研究助理或者助教的收入,但是1042-S是獎學金的收入。但是不論是哪種都需要繳稅。學校是用glacier tax prep來報稅。

2018/08/08

[美國租屋] 開啟水電服務設定

今天要來談談在美國租屋很有趣的經驗:開啟水電服務。美國租房的方式很多,有些是本身就會包水電,但這次我租到的是租完房子之後,租屋合約上寫要自行跟水電公司開啟服務。因為之後申請很多證件都需要水電帳單,像是駕照等等,所以也就當作一次經驗談。

2018/07/17

[美簽申請] F1-行政審查AP(Administrative processing)

在申請F1美簽,如果是在敏感的技術領域,通常都有很高的機會會被要求AP,也就是所謂的吃到紅單。而且整個過程會花30-60天,所以建議如果能提早申請美簽,一定要提早申請,才不會到時候卡到自己的飛機時程。

我是主修ECE(electrical and computer engineering)的軟體系統領域,面試的時候,本來以為應該可以順利通過,但還是需要經過AP。但是特別的是,因為我還需要我的護照,所以我並沒有當場把護照放在AIT,而是事後再送過去。

先說整個時程:
2018/06/19 AIT面試,拿到AP,但沒留護照
2018/06/21 補上AIT要求的資料
---經過19天---
2018/07/09 送護照
2018/07/10 完成Completed
2018/07/13 拿到護照


2018/05/30

[Cryptography] 複習筆記: Week4 - Active attack on CBC encryption with a random IV using AES

本週課程探討AE(Authenticated Encryption)的重要性,因為不論是流加密(Stream cipher)或區塊加密(Block cipher),雖然是CPA(Cipher plaintext attack) security,但是無法阻擋Active attack在資料上的完整(Integrity)。


2018/05/28

[Cryptography] 複習筆記: Week2 - Problem Set Question 5

第二週的測驗第五題,在考CBC的概念。

[Cryptography] DES筆記: meet in the middle attack

Meet in the middle attack是在cryptography攻擊上很常見的手法,概念上是把一系列的計算分成前半部份和後半部份,利用建立表格的方式,找到前半部份計算與後半部份計算相等的地方。

2018/05/18

[Cryptography] 數論相關筆記-Quadratic equations mod p

最後,綜合上面幾篇的概念,來解二元一次方程式的難題。題目是:
x2 + 4x + 1 = 0 in Z23


[Cryptography] 數論相關筆記-Fermat and Euler

Fermat's theorem之定義是,若p是一個質數,則存在一個x,x比p小且互質,x會滿足下列式子:
xp-1 = 1 in Zp

2018/05/17

[Cryptography] 數論相關筆記-用Extended Eculid algorithm求Modular multiplicative inverse


在數論中,最大公因數是一個很重要的概念,因為如果兩個數的最大公因數為1,則代表兩個數互質(relatively prime)。要求兩數的最大公因數,可以透過Extended Eculid algorithm來計算。