重灌 macOS 的工程(下)- Terminal 篇

前情提要

重灌 macOS 的工程(上)

 

開始進入本篇

iTerm2

首先要先處理的,是 Terminal 的部分;
除了 macOS 所內建的 Terminal 之外,我目前嘗試使用 iTerm2
主要是看上有較多個人化設定的部分。
而我所使用的主題風格是 Dracula,相關的安裝方式裡頭有蠻清楚的介紹。

Homebrew

這套相信大家都不會太陌生,而不清楚的人就在這邊簡單解釋一下,
Homebrew 主要是負責 Mac 上的一些套件管理;
就有點像是 Swift package manager、CocoaPods 或是 Carthage。

zsh

在 iterm2 之中安裝完 homebrew 之後,
接著就繼續來安裝 zsh,其主要是用來取代原先內建的 bash,
也是這次重灌後開始嘗試使用的新玩意之一。
而在下載安裝完 zsh 後,會被默認安裝在 /usr/local/bin/zsh(或者出現 /usr/local/bin/zsh-5.4.2),
我們要將 zsh 替換掉 bash,需要下一行指令
chsh -s /usr/local/bin/zsh-5.4.2
chsh 的意思便是 change shell,也就是將原本使用的 shell 換成指定路徑。
不過由於 macOS 對於 shell 有防範,所以你可能會得到這種錯誤訊息:
non-standard shell
遇上這個時,我們就得編輯 /etc/shells,將我們剛剛所安裝的路徑放進,
讓系統明白這是一個可以拿來使用的 shell 路徑。

oh-my-zsh

oh-my-zsh 是 zsh 的一套 framework,而這也是大家必推的 zsh framework;
安裝方法很簡單:

$ git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh

接著,它有預設的 zshrc template 提供給你使用,可以直接拿來取代 ~/.zshrc

zsh-completions

再來,使用 brew 來安裝 zsh-completions,並在 .zshrc 裡頭補上
fpath=(/usr/local/share/zsh-completions $fpath)
接著重開 iTerms2,便可以發現可以使用 tab 來進行 auto completions。
 

更改 zsh 顯示的東西

我們可以透過修改 ~/.zshrc 的 PROMPT 來決定輸入指令的左側要顯示什麼,
而通常若沒有特別設定的話,會隨著不同的 zsh theme 來變動;
而我自己本身喜歡只顯示我的名字及最後路徑及 git 相關的,
大概會長得像這樣:

PROMPT='%{$fg_bold[white]%}張家齊 %{$fg_bold[red]%}➜ %{$fg_bold[green]%}%p %{$fg[cyan]%}%c %{$fg_bold[blue]%}$(git_prompt_info)%{$fg_bold[blue]%} % %{$reset_color%}'

UIImage memory issue

今天要來分享的內容,是有關於 UIImage 的一個記憶體爆炸情況,
而我先闡述一下發現這問題的情境:
專案內有個功能會需要匯入大型圖片做縮放以及拖拉功能,
使用者可以切換大型圖片,而在點擊過多的圖片時,便會造成記憶體爆炸。

原先的做法

在使用者點擊叫出某張圖時,會使用
UIImage(name: ImageName) 來產生 UIImage 物件,並將畫面上的 UIImageView.image 設為它。
看起來蠻合理的,當使用者切換後,我會再生成一個新的 UIImage 物件,並取代前者;
這樣前者就應該會釋放掉記憶體空間了!

但⋯⋯事情並不是這樣發展

在使用者切換幾次後,發現記憶體只有一直往上增長,而未釋放掉;
意思是指雖然我將畫面上的 UIImageView.image 取代掉了,
不過實際上仍然佔據著記憶體空間⋯⋯

為什麼?

上網查了一下後,發現 UIImage(named: ImageName) 這種生成方式,
會自行將取出來的圖片放置到 cache;
而上述的使用情況就會變成當使用者一切換,便會將另一張大型圖片放置到 cache 而未釋放掉前一張。

改良的做法

Data 在建構的時候,有一種選項是 .uncached
也就是說,我們可以先將圖片以 Data 的方式打開,再轉回 UIImage,
則就可以避免掉它自動放置到 cache 而記憶體爆掉的情況。

這樣就可以解決 UIImage 的 cache 導致記憶體爆炸的情況。
 

題外話

至於圖片本身就已經大到放不進來,則可以先 resize 一下:

雙 NP:中華電信➡️台灣大哥大➡️中華電信

首先,先附上地標網通的價目表
我所要選擇的方案是雙 NP 回中華電信的智慧大玩家 999 方案,
而方案內容是 24 個月,每月月租 999 元,4G 吃到飽,網內60分/網外50分/市話20分。
透過雙 NP 的流程,我可以拿到 11,000 元的攜碼折扣,而算一下每月月租費約為
(999 x 24 - 11,000) / 24 = 540.66667 元
 

闖關流程

第一步,先確認一下自己的合約狀況:
以我的例子來說,
合約原本內容:

我們可以看到,大多數的合約到期日為 10-03,
但由於第一項合約,其正是去年申請的老客戶優惠方案;
而它的到期日是在 12-23,所以我還是得到中華電話一趟來申請攜出。
於是我便在 10-03 當天的 17:30 左右,
到中華電信的長春服務中心辦理攜出業務。

從中華電信攜出

和櫃檯人員說明我要攜出門號,而她也沒有多問些什麼,
便請我提供資料以及詢問門號轉出費用 240 元,
是要選擇跟著當期帳單還是直接繳清。
選擇直接繳清後,並簽個名,就順利拿到收據離開了;
前後加上等候叫號的時間,約莫十分鐘。

還沒離開中華電信,便收到了相關通知簡訊。

到台灣大哥大辦理門號攜入

接著到附近的台灣大哥大林森北二直營服務中心,
一進去後副店長便詢問我門號,而當我表示要轉入 4 G 1.8 的方案時,
他便直接問我是否要雙 NP,以及原電信是否為中華電信!
我點了點頭示意,便交出了雙證件和簽了兩處名字,
他告知我通常隔天就可以再到台灣大哥大辦理攜出,
一樣繳納 240 轉出費後便可以去走接下來的流程!
前後大概花了五分鐘,便簡單完成門號攜入了!

再來就等明天的流程⋯⋯

到台灣大哥大攜出

攜出流程應該和中華電信大同小異,明天預計到羅東台灣大哥大興東店辦理。

最後,到地標網通申請智慧大玩家 999 方案

接著再到羅東的地標網通,出示從台灣大哥大攜出的收據辦理後續等開通。
 
之後再補上明天過後的流程和感想,
目前操作起來都還算輕鬆順利!
 


2017-10-04

早上十點半前往台灣大哥大羅東興東店辦理攜出,一樣繳交了 240 元的轉出費,
也是五分鐘左右搞定!
 
接著到羅東地標網通辦理方案申請,由於中華電信的資料較多,
就和梁店長一一逐條簽名,花了十分鐘左右完成。
智慧大玩家 999 - 24 個月的攜碼折扣為 11,000 元,而需要預繳 8,800 元,
而在最後完成後,店長便直接退還差額 2,200 元以及合約書和 sim 卡給我,
並告知開通約需 2 - 3 天。

Bitnami