活在夢裡

奈特說美好的東西的時候,總是會被反駁。

奈特也知道那是幻想,可還是覺得好棒啊。

只是想要分享心裡想要的那種美好而已,為什麼要惡語相向。

是啦,現實很殘酷… 可現實很殘酷才要有美好的幻想啊。因為有這樣殘酷的現實,才會有渴望美好的夢呀。

為什麼總是打破奈特的夢。

好累啊,不想醒來。 

最近

平穩的度過了大學的第一週,生活上一切皆好。

數學不算難,至少是在奈特可以接受的程度。經濟課有些糟心,教授的嘴裡好像含了橄欖一般,說話教人聽不清。在ECS102課程待了兩堂課,感覺的確是在浪費時間。可是不能drop,於是只能換掉。被要求參加了一場程式設計水平的測試,被調到了CIS351,數據結構課,數學不好不知道會不會吃力。

以及,上週以來某位老朋友又回來了,繼續DoS著奈特的伺服器,讓IPv4的訪問一直進入空路由。不過,不管目的和結果是怎麼樣,這麼多年以來一直沒有改變自己的意志,真可謂不忘初心,這樣的精神也實在難得可貴。希望那位朋友今後能找到自己真正該做的事情,並且這樣的堅持下去,祝好。

思考了下,打算在這個付款週期結束之後,把現有的服務用Github Pages、Mailgun之類的代替。WordPress差不多該拋棄了,剩下一些沒辦法的服務,不要也罷。

幾天前因為某些原因失聯了將近一天,社交帳號也被刪除,甚至觸發了自己bot的生命安全檢測機制。然後想想好像讓一個人消失也不是什麼困難的事情嘛。在這樣一個時代,大家不就是網上認識的程度,僅此而已。真正能夠在危機的時候幫上忙果然還是得依靠真正認識的人。也不是說網上就靠不住了,只是即使有實力也愛莫能助罷了。

好耶,是大學。

抵達美國已經兩週了,在大學裡邊也呆了一段時間。什麼感覺?沒有感覺。至少就目前來看,事情都很平穩的進行著。這個週末過去之後,就該開始正式上課了。課程還算是輕鬆——至少看起來算不算很忙的樣子。嗯,立 flag 了。但是這樣的,人生的,傳統意義上的重要的時刻,不立旗子就沒機會了,對不對?(不對。)

到大學裡發現,這個地方遠比想象的要繁華。來這裡之前,腦袋裡的感覺是應該是個小城市,結果發現還是蠻熱鬧的,還能找到味道還算不錯的中餐、韓國菜一類。不遠的地方還有一個亞洲超市,各種在大陸超市裡邊的食物、用品一類都能找到,很是驚奇。另外一點意外就是,這裡還是很熱的。尤其是在宿舍裡頭,沒有空調,通風也比較糟糕。想來這大概是為了冬天到來之後的保暖措施吧。但是在現在這種三十度的天氣裡,有些讓人難以接受的熱。

除了悶熱之外,宿舍還算是不錯的。宿舍算不上大,但是也足夠放下各種東西了,該有的都有。比較驚訝的是宿舍內的網路。牆上的埠是 1Gbps 的,用速度測試的網站的話,上行、下行都能達到 900Mbps+,宿舍內的網口都是內網的,不然就能夠搭個伺服器了。

環境之外,融入到大學裡還是挺困難的。日常英語倒是不成問題,更大的問題是語言之下的思想。室友來自紐約州,溝通不算是太多,但也算是融洽。學校有組織夜間活動一類——我一次也沒有參加。這些夜間活動,多是那些放著大聲的音樂,群魔亂舞的場景。像我這樣的不愛動,害怕吵的,沒有辦法融入到那種環境裡。

食物方面,也能夠接受。在宿舍樓下的食堂是自助式的,偏西式的食物,也會有 Pasta,Pizza 什麼的,味道不算很好,但是相比起高中那時候的食堂要好得多。學校還有別的幾個食堂,還沒有去吃過。(懶。)

不知道開課之後的生活會是怎麼樣,希望我能夠融入進去吧。

奈特在山莊裡

Photo taken by nat at Stowe Mountain Lodge.

Photo taken by nat, at Stowe Mountain Lodge.

即將去大學之前的奈特,來到了Stowe Mountain Lodge。這個地方中文叫作斯托維山,這張照片是早上起床之後拿著手機從陽台上拍出來的,一片的綠色讓人真是心情大好。嗯,因為環境而感到很愉快對奈特來說是很少有的。這裡從 Burlington International Airport 下來之後,坐著車,開了一個多小時的山路,才來到了這個地方。

這個地方意外的令人覺得很舒適,以至於奈特會專門為了這個來寫一篇博文——換作是之前的地方,都是看過便作罷了。前幾天待在紐約市的時候就會覺得整個人處在緊張難受狀態裡面,能夠把人烤熟的太陽加上擁擠的人群、車流,渾濁的空氣,高樓的壓迫。總之是讓人不愉快的體驗。

來到這裡的第一天,原先是計畫拿相機出去取景的。結果泡上一壺茶坐在陽台的躺椅上之後,就完全沒有了想要起來的意願。明明才起床不太久,看著天邊捲動的雲又睡了下去。再次醒來已經過了快兩個小時,但依舊是完全不想動的——起身慢慢的再泡上一壺茶,曬著柔和的陽光,繼續望著遠處的山發呆。在這樣的山莊裡邊待著,就好像到了晚年一樣。腦子裡邊會產生「就這樣度過餘生好了。」的念頭。來到這裡之後,感覺上整個人的生活節奏都變慢了。

要說對這裡的感覺的話,就是這裡除了山,還是山。這能夠從當地的衛星圖裡邊得到證實:

周邊地圖。

周邊地圖。

中間的那些建築物就是奈特所在的山莊了。這個山莊有一個上山的纜車,去往的是 Vermont 的最高峰,上邊也很是雄偉:

Photo taken by NAT on Stowe Mountain

Photo taken by NAT on Stowe Mountain

中間那一塊地方,就是奈特所在的山莊了。

這邊的氣候也很舒服。不同於紐約市的三十度高溫,這裡的秋季都維持在非常舒適的二十度左右。到了夜間會低到十幾度。這地方其實是個滑雪聖地——十月份過後就會開始下雪,不過奈特不會待到那個時候了。

總之就是很舒服的地方,那種感情是溢於言表的。身為理科,筆拙。肚子裡沒什麼墨水,無奈只能表達出這些。

筆記:一些方便的shell功能

快捷鍵
alt+. 在當前位置插入上一條命令的最後一個參數。
ctrl+x,然後 ctrl+e 在編輯器裡邊編輯當前輸入的內容。
ctrl+r 日誌反查。
alt+# 把當前行變成註釋。

文本替換

~ $ str=hello
~ $ echo ${str/ll/aa} # 文本替換
heaao
~ $ echo ${I:1:2}     # 子字符串
el

快速糾錯

~ $ sduo halt -p
bash: sduo: command not found
~ $ ^sduo^sudo

方便的 ! 字符

~ $ cd /var/www
/var/www $ vim index.html
/var/www $ popd
~ $ !-2 # 執行兩條之前的指令(cd /var/www)
/var/www $

使用 !! 可以調用到上一條命令,所以你可以:

/var/www $ rm index.html
rm: index.html: Permission denied
/var/www $ sudo !!
/var/www $ ls index.html
ls: index.html: No such file or directory
/var/www $ vim index.pho
/var/www $ mv !:1 index.php # !:1 -> 上条指令的第一个参数(mv index.pho index.php)
~ $ touch a b c
~ $ ls -l !:1-2 # 上条指令的第一到第二个参数 (ls -l a b)
-rw-r--r--  1 nat  staff  0 Aug 10 22:00 a
-rw-r--r--  1 nat  staff  0 Aug 10 22:00 b

亦可以使用 !^ 代表第一個參數,!$ 代表最後一個。很好理解,因為 ^ 在通配符中代表行首,$ 在通配符中代表行末。! 亦可以和前面的結合使用,例如 !:s/old/new 也是可行的。

數組

~ $ arr[1]="a"
~ $ arr[2]="b"
~ $ arr[3]="c"
~ $ echo ${#arr[*]}  # 數組大小
3
~ $ echo ${arr[@]}   # 遍歷元素 (例如用作 for element in ${arr[@]})
a b c

命令行參數
bash -n 可以再不執行腳本的情況下,檢查語法。
bash -x 會在執行腳本的時候顯示完整的運行過程,方便除錯。

方便的變量
PROMPT_COMMAND 變量設置後,每次請求命令都會執行其變量內容。

~ $ export PROMPT_COMMAND="date"
Tue Aug 16 22:38:58 EDT 2016
~ $ ls
a  b  c
Tue Aug 16 22:38:58 EDT 2016
~ $

TMOUT 變量,內容是整數,單位是秒。在shell空閒達到這個時間之後,會自動退出。為 root 帳戶設置這個能夠增強安全。
FIGNORE 變量,設置在這裡的內容不會出現在自動補全裡。例如設置 .git 在裡邊,就能夠省去一些麻煩。
SECONDS 變量,能夠計算秒數。

~ $ SECONDS=0
~ $ sleep 5
~ $ echo $SECONDS
5

網絡交互
bash中可以使用 /dev/tcp/ 或者 /dev/udp/ 來進行網絡交互。

~ $ cat < /dev/tcp/time-a.nist.gov/13

57617 16-08-17 02:51:29 50 0 0 400.8 UTC(NIST) * 

這亦可以和fd3結合使用,例如:

~ $ exec 3<>/dev/tcp/nat.moe/80
~ $ echo -e "GET / HTTP/1.1\n\n" >&3
~ $ cat <&3 

暑假

看看日曆,三個月暑假已經快要到了尾聲。

有些事如果現在不做,那就永遠不會去做了。

這個暑假髮生了很多以前想過,覺得自己沒有可能去做的事情。起因就是看到自己以前記下的這句雞湯話。不過,從某種意義上來說,這樣才算是真正面對了自己吧。像是這樣的暑假恐怕不會再有了。想了想,也沒有辦法確定這就是自己真的想要的。但是至少這次按照自己的意志做了些什麼。這三個月有一種越休息越累的感覺,可能是閒著沒有做事的時間太久了,空想得太多。果然很多事情不應該想通的,嗯,想明白這一個道理晚了。怎麼說呢,死的距離,可能沒我想象的那麼遙遠。

相比之下,目前更應該注意的是,要上大學了。要說感覺的話好像也就只是那麼回事罷了,心中沒什麼激動的感覺。想來這樣的感覺或許也不錯,就是所謂的平常心?總之,不管是怎樣的一種心態,到了開啟一段新生活的時候了。「好耶,要上大學了!」這樣的想法雖然是有,不過從高中畢業的時候也是這樣的感覺吧。「好耶,要畢業了!」,然後到了真正畢業的時候也就是那樣而已。沒有什麼轟轟烈烈生離死別的情感,看著周邊的同學們自顧自的感動著,感覺自己像是異類一樣。不用微信的我,甚至畢業三個月還沒有和高中同學有過聯絡。

好吧,這大概是我比較奇怪。

夜深,有時候自己一個人的時候就會想,要是全部都可以重來就好了。要是我的一切都在一夜間消失,會不會更加幸福呢?這樣的念頭馬上就會被自己否決,所以有時候覺得自己有點神志不正常。然後就會去想自己是怎麼了。每次都會失敗——想這樣的事情太麻煩了。就當作自己不正常比較好,當作自己不正常比較輕鬆,也會在自己在做事的時候也會輕鬆很多,畢竟不正常的人不會去考慮那麼多,嗯。

比如,寫到這裡我回去讀前面的內容,我會發現這就沒有邏輯。換作是以前,我大概就回去改了,然後以失敗告終。嗯,果然隨心自在多了。

有時候,死掉也許真的是個不錯的選擇。這麼一想的話,一切事情都可以解決了嘛,大不了就是死掉咯。

既然什麼事情都能解決的話,就好好做吧。用死的思想快樂的活著。即使是用最消極的方法,也要讓自己積極的活下去。為了好好的死,好好的活著吧。

無意間看到自己曾經說的這句話,覺得很有意思。那時候的自己,真能找辦法說服自己,比現在的我強多了。忘記了很多過去的事情的我,已經不知道什麼時候變得不如過去了?

是時候從夢裡醒來了。

好耶,美國好強。

「你知道嗎,美國控制著百分之九十五的人口,九十七的經濟,九十五的軍事預算喔。」
「好耶,美國好強哦。」
「美國可以輕鬆的幹掉整個國家喔。」
「好耶,那又怎樣?」
「國家被幹掉的話,就無價可歸了喔!」
「好耶,奈特會無家可歸。」
「而且,會死的喔?」
「奈特也可以殺死自己喔。」
「…」
「好耶,奈特和美國一樣強了!」

筆記:使用 nginx 搭建一個 HLS(HTTP Live Streaming) & Rtmp 直播服務器

想要給朋友們直播遊戲的操作,但是QQ直播太垃圾,國內直播平台又要上傳身份證,外國的直播平台又太卡了。
那好,我自己搭一個¯\_(ツ)_/¯

需求:一台linux主機,外網 IP,OBS。

首先,先去將 nginx-rtmp-module (https://github.com/arut/nginx-rtmp-module) 下載下來:
% git clone https://github.com/arut/nginx-rtmp-module.git && wget https://github.com/arut/nginx-rtmp-module/archive/master.zip

再去下載nginx:
% wget http://nginx.org/download/nginx-1.10.0.tar.gz

然後解壓nginx:
% tar -xzvf nginx-1.10.0.tar.gz
% unzip master.zip

開始編譯:
% ./configure --with-openssl=/home/yinfb/openssl-OpenSSL_1_0_1t --add-module=/path/to/nginx-rtmp-module
% make
# make install

過程中可能會出現依賴問題,安裝libpcre3 libpcre3-dev,和添加OpenSSL模塊即可

之後:
# vim /usr/local/nginx/conf/nginx.conf

worker_processes 10;

error_log logs/error.log debug;

events {
    worker_connections 1024;
}

rtmp {
    server {
        listen 1935;
        application myapp {
            live on;
            hls on;
            hls_path /tmp/hls;
            hls_fragment 10s;
            hls_nested on;
            allow publish all;
            allow play all;
        }

    }
}

http {
    include mime.types;
    default_type application/octet-stream;

    server {
        listen 80;
        server_name localhost;
        error_page 500 502 503 504 /50x.html;
        location = /50x.html{
            root html;
        }

        location /stat {
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }

        location / {
          root html;
          index index.html index.htm;
        }
        location /hls {
         types {
          application/vnd.apple.mpegurl m3u8;
       }
        alias /tmp/hls;
        add_header Cache-Control no-cache;
       }
    }
}

然後添加網頁直播頁面:

# vim /usr/local/nginx/html/hls.html

<video src="/hls/index.m3u8" autoplay="autoplay" controls="controls" width="1280" height="700">
</video>

之後配置OBS如下圖:

QQ图片20160529164916
至於編碼與影像設定,就按找個人帶寬與性能自行設定即可。

最後,效果如圖:

QQ图片20160529165549

一天

一天/我問nat
設/想一下
你/周圍的
所有的/人
都是
你/思維中
所/虛構
出來的/會
如何?

nat說:
那也/沒關係
畢竟/自己
覺得存在/就夠了
對我來說
只要/我死掉了
世界/就毀滅了
所以/我
自己就是
整個世界

我說:
很強/很智障
感覺/生活
充滿了/詩意

筆記:在 OpenWRT 使用 PPTP 將兩個遠端局域網連通

需求:

  1. 兩個網段不同的局域網,文中使用:
    • 192.168.0.0/24
    • 192.168.1.0/24
  2. 一個PPTP服務器,使用獨立於上述兩個網絡的網段,文中使用:
    • 10.1.0.0/24

步驟:

  1. 按照這裡為OpenWRT配置PPTP支持。
  2. 設置PPTP
    1. 設置憑據
    2. 為PPTP創建新的防火牆區域,允許LAN=>PPTP轉發以及PPTP=>LAN轉發
    3. 在PPTP接口的高級選項中取消勾選「使用默認網關」。
    4. 在pptp伺服器上,chap-secret中為客戶端指定IP地址(推薦),文中使用:
      • 192.168.0.0/24網段的pptp賬戶:10.1.0.2
      • 192.168.1.0/24網段的pptp賬戶:10.1.0.3
    5. 將兩個OpenWRT的PPTP接上服務器。
  3. 配置靜態路由表
    1. 在192.168.0.0/24網段的路由上,設置下列路由:
      • 接口:pptp;目標:10.1.0.0,子網掩碼:255.255.255.0,網關10.1.0.1。
      • 接口:pptp;目標:192.168.1.0,子網掩碼:255.255.255.0,網關10.1.0.1。
    2. 在192.168.1.0/24網段的路由上,設置下列路由:
      • 接口:pptp;目標:10.1.0.0,子網掩碼:255.255.255.0,網關10.1.0.1。
      • 接口:pptp;目標:192.168.0.0,子網掩碼:255.255.255.0,網關10.1.0.1。
    3. 在pptp服務器上,設置下列路由:
      • 接口:pptp;目標:192.168.0.0,子網掩碼:255.255.255.0,網關10.1.0.2。
      • 接口:pptp;目標:192.168.1.0,子網掩碼:255.255.255.0,網關10.1.0.3。

      如果在步驟2.4中沒有為客戶端指定IP地址,則每次IP變動後都需要重新指定兩個192.168網段的網關至其在PPTP服務器上的IP地址。

至此,兩個網絡便已經通過pptp接在了一起。

問題:

  1. kmod-mppe似乎在某些路由器上沒法加載,那麼,直接禁用它吧。在服務端與客戶端中的pptp配置文件中注釋掉就可以了。
  2. OpenWRT的pptp有些奇怪。在pptp斷開後有幾率無法連接,這時候,把服務器地址修改下(域名換成IP,或者IP換成域名),就能解決了。

這些問題怎麼來的?誰知道呢…