Burwei

@Burwei

Joined on Jul 21, 2020

  • IEEE 754有一個半精度的浮點數,叫Half-precision floating-point format 通訊的時候數值的部分常會用到,因為他是最小的浮點數,好用 Go的float16 package 我有一個專案有用到這個 https://github.com/x448/float16 不錯用,推推 online float16 calculator 要做確認的時候還是會需要計算一下,查到這個網站
     Like 1 Bookmark
  • 有時候我們會需要查看一個檔案(尤其是binary檔案的時候)的各個byte到底寫了什麼,這時後就可以用od這個指令來把檔案一個一個byte地顯示出來 最常用的指令(今天就只記錄這招XD) od -c filename.bmp >> od.txt 上面是將一個bmp檔案經過od的解析後,將結果寫進od.txt中。寫進txt檔是因為通常這個output會很大,如果terminal不允許顯示這麼長的output的話,會無法一次看完全部。 參數c在man page的解釋是"select printable characters or backslash escapes",已經講解得很清楚了,如果是ASCII的話會顯示字元或是帶有反斜線的跳脫字元,但一個byte換成十進位的話可以代表0到255,而ASCII只用了0到127而已,所以剩下的無法部分,od會將它轉換成八進位的三位數,例如212代表的就是2x8^2+1x8+2=138,也就是十進位的138,又例如012代表的就是十進位的10。所以我們可以知道這邊這個三位數最多只到377,也就是十進位的255 而od.txt每一行的左邊會有該行的行數,更正確的說是該行的offset,也就是該行在這份檔案中,它的前面有幾個byte的意思。而他的單位是八進位的數字,例如0000040代表的就是這一行的前面有4x8=32個byte。
     Like  Bookmark
  • 其實一直不想做RecyclerView的筆記,因為網路上資源太多了,但每次要用的時候都還要花個幾分鐘回憶一下這東西到底在幹嘛,實在是浪費時間,所以這篇從程市結構上簡單講一下,讓下次要用到RecyclerView的時候可以快速恢復記憶。 程式結構 以下重點式地說一下哪些地方要寫東西: Activity/Fragment的class attribute要新增 一個RecyclerView: 用來接收recyclerview的UI widget,並用它來設定好recyclerview背後的程式邏輯。
     Like  Bookmark
  • 先來講一點廢話,講一下為啥我會開始用ViewModel。 以前我寫single activity application還沒有用navigation的時候,都是自己寫個listener的interface用observer pattern來實現activity和fragment的溝通。我記得這其實是原本官方建議的方式,但我現在找不到了,記得好像蠻硬性地規定要有個callback method叫做onFragmentInteraction(uri: Uri)來做activity跟fragment的溝通。observer pattern的方式我用了很久,直到後來因為覺得各個fragment之間的轉換用寫的實在是有點亂,就用了navigation,沒想到一試成主顧,真的太好用而且很簡單(我就不特別筆記navigation了因為官方教學十分清楚,照著做就好),但用了navigation後,整個MainActivity的程式架構變了很多,也讓我重新思考activity、fragment和service之間到底要怎麼溝通比較好,於是讓我有這個機會試著用用看ViewModel和LiveData。然而它們就跟navigation一樣,太好用又太簡單了,用完之後回不去了。 所以這篇筆記所寫的可能跟一般大家常用ViewModel和LiveData的理由不同,一般是拿來存取UI元件的資料用的,而我這邊想講一下怎麼用ViewModel和LiveData來取代Observer pattern來做activity和fragment之間(fragment和fragment之間也可以)的溝通,而且相較之下是一個更好用更簡單的方案。 基本介紹 ViewModel ViewModel是一個用來把資料跟activity、fragment等view類型的元件分離的東西,而且它的lifecycle比activit和fragment的還要長,是一個很適合放資料的地方。它的存在跟一個叫做MVVM的design pattern有很大的關係。主要就是view跟model之間,有了這個viewmodel來讓資料的取得與更新有一個獨立的地方來專門處理。
     Like  Bookmark
  • App除了使用者看得到可互動的foreground部分之外,很多時候會用到background的運算,例如Google drive透過網路進行檔案的上傳下載、Line的即時訊息等等都是要在背景執行或是待命的。這篇會基本地介紹一下background processing的部分有哪些常用機制可以用,然後主要介紹其中兩個,第一個不外乎就是App四大component之一的Service,另一個是API 28出現的WorkManager。 官方建議的background processing方案 其實官方有文章來講解這個部分,這邊簡單重點整理一下,詳細內容可以去看官方的文章。 官方把背景的工作分成三種 Immediate Deferred Exact
     Like  Bookmark
  • 概要 為了良好的使用者體驗,Android對thread的限制十分嚴格(主要是UI thread),每次太久沒碰Android都會忘記該怎麼用,這邊簡單筆記一下 如果想直接看官方Android threading的doc的話就點這裡 最重要且不太會忘記的部分應該就是UI thread不能被block住,只要block超過五秒左右系統就會跳沒有APP回應的對話視窗。 接著就是thread或是asynchronous要怎麼產生怎麼用,主要就分成以下幾種機制 Thread AsyncTask (deprecated in API level 30) Coroutines (Kotlin)
     Like  Bookmark
  • 每次回來寫kotlin的時候都會忘記他的一些keywords和operators的用法,這邊簡單記錄幾個Kotlin特有且常用的,讓之後需要寫Kotlin的時候能更快恢復記憶。 官方網站 Keywords and Operators 常用的keywords var 可變變數
     Like  Bookmark
  • Official web page https://letsencrypt.org/docs/certificates-for-localhost/ 步驟 mkdir https_keys 複製上述網頁中的openssl指令(我會複製一份在最底下),並在https_keys中執行 會產生localhost.crt、localhost.key兩個檔案 sudo vim /etc/nginx/conf.d/all_site.conf 打開.conf檔並仿照certbot一樣寫入下列兩行
     Like  Bookmark
  • 問題 基於安全問題,程式中可能會用到環境變數來使用一些資訊例如database的登入資訊。但若此程式需要root權限的話,在使用sudo執行後便會將user改為root,會使程式的執行環境改為root的環境而非user的,因此程式便讀取不了user的環境變數。 解法:使用sudo的參數-E sudo -E <command> 範例 sudo -E node main.js
     Like  Bookmark
  • 環境變數其實共有兩種變數 environmental variables shell variables 變數都是key-value pair的string 環境變數存在範圍 environmental variables是全域的。在目前的shell跟所有子sell中都存在。當使用者登入時,系統會給使用者一個shell來用,並分一塊記憶體來儲存environmental variables,接下來產生的子shell都會繼承這塊記憶體的內容。但子shell創造出來的environmental variables並不會存在於父shell中,此記憶體的繼承是單向的。 shell variables是區域的。只存在於目前的shell。
     Like 1 Bookmark