Posts

git 指令

remote 的 origin 上有 branch A,local 沒有 branch A。想建立一個跟 origin/A 進度相同的 local branch A git switch -c A origin/A 遠端分枝名稱寫錯了,想改名字。先刪除 remote 的 origin 上的 A 分支,然後再用正確名字 push 一次 git push origin --delete A 參考: How To Rename a Local and Remote Git Branch How to delete remote branches in Git 把本地的 A 分枝 push 到遠端 origin 上的 B 分枝 git push origin A:B 複製其他分枝的 commit 到當前所在的分枝 git cherry-pick <commit hash code> // 只複製一個 commit git cherry-pick <commit hash code 1>..<commit hash code 2> // 複製多個連續的 commit(不包含 hash code 1 的那個 commit) 參考: 你那招很厲害,我不要一整套,可以只要一招嗎?git cherry-pick Git Cherry Pick 的後遺症 暫存目前未 commit 的程式碼 git stash 取出暫存的程式碼 git stash pop 強制蓋掉 remote 的分枝(非常確定這個分支沒有其他人在 commit 時才用,以免把別人的 commit 蓋掉) git push --force-with-lease 參考: Git Force vs Force with Lease

[SY0-601 CompTIA Security+] Social Engineering

參考資料: Professor Messer’s SY0-601 CompTIA Security+ Course Phishing (網路釣魚) 不同類型的 phishing:Vishing、Smishing、Pharming、Spear phishing、Whaling 參考資料: 何謂網路釣魚攻擊? 、 當你個資外洩時會發生什麼事? Impersonation (假冒) 有時也會和網路釣魚搭配使用 假冒某個身份(可能還會先調查受害者的一些資料,以取信受害者),用某些技巧降低受害者的戒心(例如他們會很親切、運用心理學技巧等等),讓使用者交出個人資訊(銀行帳號密碼、信用卡之類的),或者取得你的電腦控制權,變成殭屍網路的一份子等等。 防範方式:不要輕易交出個資、確認對方的身份(例如對方自稱是你的朋友 A,掛掉電話後,撥電話給 A 確認) 類似的詐騙手法(不過對方不是騙資料,是直接騙錢): 我被電話詐騙了五萬元...智商堪慮 、 聖嚴法師:拆穿詐騙集團謊言 Dumpster Diving (垃圾搜尋) 如果沒有非法入侵到別人放垃圾的地方,那麼,撿垃圾通常不會被視為犯罪行為。 防範方式:丟棄有敏感資訊的文件時,用碎紙機切碎,或乾脆直接燒掉。 參考資料: 他在街上「潛水」|夜間潛進一個個箱子的副業,為美國男子一年賺進 289 萬元 Shoulder Surfing (翻譯的方式好像不太固定,我查到的有越肩偷窺、偷窺強記、肩窺等等) 防範方式:防窺片、留意電腦螢幕上的內容是否會被別人看見(不同大樓的人,也可以用望遠鏡從窗戶偷窺) Hoaxes (惡作劇程式) 參考資料: 愚人節病毒開玩笑 電腦開機即自動傳送 、 可別殺了可愛的小熊 防範方式:不要輕易相信網路上的說法。不要馬上照著指示做,先查證一下是不是流言 Watering Hole Attacks (水坑) 你的系統可能有足夠的安全性,駭客攻不下來,所以駭客改成埋伏在你可能會去的網站,你去到那個網站就會中標。 參考資料: 《APT攻擊/威脅 》 水坑攻擊: 不是去攻擊目標,而是去埋伏在目標必經之路 防範方式:確保你的系統非常安全,例如有足夠的 防禦縱深 。

SQL ZOO

記錄一下我跟別人不同的寫法,以後對 SQL 語法的效能更有感之後,再回頭來看看有什麼差別。 目前還不太確定 SQL 語法的 coding style,例如縮排要空幾格、怎麼分行之類的。 SELECT in SELECT 8. List each continent and the name of the country that comes first alphabetically. 我的 SELECT continent, name FROM world x WHERE name = (SELECT name FROM world y WHERE y.continent = x.continent ORDER BY name LIMIT 1); 別人的 SELECT continent, name FROM world x WHERE name <= ALL(SELECT name FROM world y WHERE y.continent = x.continent) 不過我用 ORDER 應該會比較慢,最快的 merge sort,時間複雜度是 O(n log n)。別人用 <= ALL,時間複雜度應該是 O(n)。 9. Find the continents where all countries have a population <= 25000000. Then find the names of the countries associated with these continents. Show name, continent and population. 我的 SELECT name, continent, population FROM world WHERE continent NOT IN (SELECT continent FROM world WHERE population > 25000000); 別人的 SELECT name, continent, population FROM world WHERE continent IN (SELECT continent FROM world x WHERE 25000000

[計算機概論] float-point

先找一篇別人寫好的,這樣就不用從頭到尾都自己寫筆記(欸): 從 IEEE 754 標準來看為什麼浮點誤差是無法避免的 (以下代稱為「該文」) 看過 于天立教授的計算機概論單元 2 之後,我對該文的補充筆記: 「超127 格式」是怎麼回事 exponent 的部分,採用的是 Excess 的定義方式(可參考 定義負數 ),所以,要把十進位的數字 n ,轉成定義中對應的 bits 時,要先把 n 加上某個微調的值,然後轉成二進位,才會得到定義中對應的 bits。如何取得微調的值?看 exponent 有幾個 bits,例如說是 k bits,那麼那個微調的值,就是 2 k-1 -1。該文中的單精度浮點數,exponent 是 8 bits,所以微調的值是 2 8-1 -1 = 127。 不過,真的完全按照 定義負數 中的說法的話,那個微調的值應該是 2 k-1 才對。我目前的判斷是,這個 -1 的誤差,可能是來自於兩者的「哪組 bits 對應到哪個數字」的定義表,有一點點出入,但規律是沒有變的。 fraction 為什麼要去掉 1 正規化後,數字的格式(先不考慮 0 這個數字)固定會長成 n * 2 m 這個樣子,其中 1 ≤ n < 2。既然正規化後,所有數字都一定是 1.XXX * 2 m 這個長相,那麼整數部分的 1 乾脆就不要存起來,這樣省下來的記憶體空間,還可以拿來做更有效的運用。那麼,要怎麼表示 0 呢?所有 bits 都是 0 的話,就代表是 0。如果把「全部都是 0 的 bits」,依照 sign、exponent 跟 fraction 的規則是解讀的話,以單精度浮點數為例,我猜,得到的數字是 2 -128 (或者是 -126 次方?因為 IEEE-754 Floating Point Converter 在 exponent 都是零的時候,顯示的是 -126 次方),總之就會是這個正規化所能代表的最小的正數。但因為要把這個全部是 0 的 bits 改成拿來表示 0,所以「這個正規化所能代表的最小的正數」就被犧牲,變成無法被表示了。 其他 知道浮點數的表示方式後,就可以計算出這個表示方法中,「比 0 大的數字中最小的那個數字(我猜,應該是:sign 是 0,exponent 全部是 0,fraction 只有最後一

[計算機概論] overflow

以二補數這個定義負數的方式為例,若長度只有 3 bits 的話,能表示的整數數字範圍只有 -4 ~ 3,對照表如下: bits 代表的十進位正負數 011 3 010 2 001 1 000 0 111 -1 110 -2 101 -3 100 -4 overflow 會發生在「數字超出 -4 ~ 3 此範圍」的時候。在之前「 定義負數 」這篇文章中,介紹過,二補數這個定義負數的方式,加法依然可以使用原本二進位的加法。但如果加起來的值超出 -4 ~ 3,例如 2 + 3 根據定義即為 010 + 011 = 101,101 根據定義,代表的數字是 -3。「2 + 3 = -3」這個結果,就是 overflow 又或者, -3 + (-4),根據定義即為 101 + 100 = 1001,因為只有 3 bit 的空間,所以只剩下最後三個 bits 001 ,根據定義, 001 代表的數字是 1。產生「-3 + (-4) = 1」的現象 我之前寫 picoCTF 的 General Skills 題目時,有一題是 flag shop,看了 別人的解答 也不太明白發生了什麼事。今天終於知道了! 參考資料 台大開放式課程 于天立教授的計算機概論單元 2

shop_platform - 部署到 GCP (2)

Image
監聽 80 port(後來發現其實不需要) 試著在 80 port 上開啟伺服器,但是失敗了 flora@*******:~/shop_platform$ pipenv run gunicorn "app:create_app()" Loading .env environment variables... [2021-10-28 13:38:45 +0000] [22652] [INFO] Starting gunicorn 20.1.0 [2021-10-28 13:38:45 +0000] [22652] [ERROR] Retrying in 1 second. [2021-10-28 13:38:46 +0000] [22652] [ERROR] Retrying in 1 second. [2021-10-28 13:38:47 +0000] [22652] [ERROR] Retrying in 1 second. [2021-10-28 13:38:48 +0000] [22652] [ERROR] Retrying in 1 second. [2021-10-28 13:38:49 +0000] [22652] [ERROR] Retrying in 1 second. [2021-10-28 13:38:50 +0000] [22652] [ERROR] Can't connect to ('0.0.0.0', 80) 換成別的 port 就沒問題 flora@*******:~/shop_platform$ pipenv run gunicorn --bind 0.0.0.0:5000 "app:create_app()" Loading .env environment variables... [2021-10-28 14:00:11 +0000] [22879] [INFO] Starting gunicorn 20.1.0 [2021-10-28 14:00:11 +0000] [22879] [INFO] Listening at: http://0.0.0.0:5000 (22879) [2021-10-28 14:00:11 +0000] [22879] [

shop_platform - 部署到 GCP (1)

我不太確定,終端機裡的哪些訊息要打馬賽克,姑且憑感覺自己手動打馬賽克******* 過程 啟用 Google Cloud 服務、建立專案、安裝 Google Cloud SDK 按照 WordPress / 架站教學一:使用 Google 台灣主機免費架設自己的網站 (Mac/Win版) 的教學,啟用 Google Cloud 服務、建立專案、安裝 Google Cloud SDK 話說,啟用 Google Cloud 服務時,教學裡有提到「雖然這裡一定要提供信用卡資訊,不過 Google 也說明了這只是在驗證你不是機器人。在你升級為付費帳號之前,即使你用完了一年 300 美金的免費額度,Google 也不會自動收取任何費用。」但我的 visa 卡在我啟用 Google Cloud 服務時被扣了台幣 40 元。不太確定是什麼情況。 安裝 Google Cloud SDK 過程如下: (base) [~/Downloads/google-cloud-sdk] $ ./install.sh Welcome to the Google Cloud SDK! To help improve the quality of this product, we collect anonymized usage data and anonymized stacktraces when crashes are encountered; additional information is available at <https://cloud.google.com/sdk/usage-statistics>. This data is handled in accordance with our privacy policy <https://cloud.google.com/terms/cloud-privacy-notice>. You may choose to opt in this collection now (by choosing 'Y' at the below prompt), or at any time in the future by running the following command: