iOS 摸魚週報 #83 | ChatGPT 的風又起來了

語言: CN / TW / HK

本期概要

  • 本期話題:各大搜索引擎開始接入類 ChatGPT 功能
  • 本週學習:Python 中的匿名函式與閉包
  • 內容推薦:iOS 越獄檢測、獲取虛擬記憶體狀態、使用 KeyChain 進行持久化等內容
  • 摸一下魚:Stable Diffusion 功能嚐鮮;關於技術規劃的思考;大廠覆盤文件

本期話題

整理編輯:zhangferry

ChatGPT 的風又起來了

最近 ChatGPT 又火了一波,不僅搜尋引擎紛紛引入類 ChatGPT 能力,就連各種跟 ChatGPT 沾邊公司的公司股價都漲了一波。隨著新使用者的不斷湧入,官網已經多次停止使用者登入了。

搜尋引擎盯上 ChatGPT 是自然而然的事情,早在 ChatGPT 開發之初就有它能否代替 Google 的討論,因為它大多數使用場景跟搜尋重疊很高。能否替換 Google 還有待驗證,但 StackOverflow 受到的影響已經非常明顯,根據報道 StackOverflow 一個月內訪問量驟降 3200w。這已經促使大部分產品不得不考慮 ChatGPT 的影響,以及如何讓自己的產品利用類似能力。

1、Google 宣佈了 ChatGPT 的競爭對手 Bard,一個基於 LaMDA 模型訓練的智慧對話服務。該服務正在做最後的測試,未來幾週會更大範圍的對外開放。

2、微軟的 「new Bing」 整合 ChatGPT 的能力已經可以嘗試了,不過並沒有全量放開。訪問:http://www.bing.com/new,登入賬號,可以加入候選等待名單,通過之後可以正常使用 new Bing。

OpenAI 對外開放的 ChatGPT 是基於 GPT 3.5 的,這個能力已經非常驚豔,Bing 則是使用訓練量更大的 GPT-4 模型。根據訓練模型評估,GPT 3.5 就已經超過了 Google 的 LaMDA,所以就回答準確性 new Bing 應該穩穩強於Bard 的。微軟能否搶佔一些搜尋引擎的份額就看這次發揮了。

3、百度也宣稱推出類 ChatGPT 服務,即將上線聊天機器人「文心一言」,3 月完成內測。未說明使用的技術,因為百度在人工智慧方面佈局還比較多,應該是使用自己的訓練模型,具體效果如何要等上線之後來看了。

本週學習

整理編輯:zhangferry

Python 中的匿名函式與閉包

Python 中正常的函式是這樣的:

```python

函式名是 add

def add(x, y): return x + y ```

匿名函式是沒有函式名的函式,但可以做一些函式做的事情,對應就指 Lambda 表示式。

python func = lambda x, y: x + y print(func(1, 2)) # 3

關於閉包可以先看一個計算平均數的例子:

```python def make_averager(): # 以下整體屬於閉包 series = [] # 自由變數

def averager(new_value):
    series.append(new_value)
    total = sum(series)
    return total / len(series)

return averager

avg = make_averager() # 可呼叫物件 print(avg(10)) # 10.0 print(avg(11)) # 10.5 print(avg(12)) # 11.0 ```

make_averager()建立了一個 avg,它表示內部函式averager。正常來說一個函式呼叫完之後就返回了,本地作用域資料也就釋放了,為什麼它還可以儲存資料呢?資料是存在哪裡了呢?

關鍵點就在於那個自由變數 series。Python 裡的函式有幾個內部屬性,avg.__code__表示編譯後的定義體:

```python

區域性變數

avg.code.co_varnames ('new_value', 'total')

自由變數

avg.code.co_freevars ('series',) ```

再看閉包的內容avg.__closure__

我們傳入的值都存放到了閉包裡。再說回閉包,閉包也是一種函式,它會保留定義函式時存在的自由變數的繫結,這樣呼叫函式時,雖然定義作用域不可用了,但是仍能使用那些繫結。自由變數的生命週期是跟著閉包走的。

再稍微改下程式碼:

python def make_averager(): count = 0 total = 0 def averager(new_value): count+= 1 total+= new_value return total / count return averager

這個程式碼在 PyCharm 裡會直接報編譯錯誤,用命令列執行報 UnboundLocalError: local variable 'count' referenced before assignment,提示變數未定義,但實際問題是這裡變數型別有衝突。預設閉包內部函式外的變數為自由變數,但內部函式裡包含賦值語句,這樣count 和 total 就應該是區域性變量了,兩者衝突引發問題。

修改方式是引入 nolocal 欄位,告訴編譯器它不是區域性變數,而是自由變數,就可以正常賦值了。

python def make_averager(): count = 0 total = 0 def averager(new_value): nonlocal count, total count+= 1 total+= new_value return total / count return averager

內容推薦

本期將推薦近期的一些優秀博文,涵蓋 iOS 越獄檢測、獲取虛擬記憶體狀態、使用 KeyChain 進行持久化 以及 SwiftGG 但新專案等方面的內容

整理編輯:東坡肘子

1、iOS 資料持久化 —— KeyChain -- 來自:莊周曉夢

@東坡肘子: 為了安全的在本地儲存敏感資料,不少開發者都會採用系統提供的 KeyChain 框架。在本文中,作者將為你展示如何建立一個通用的同時適用於 iOS、 MacOS 的 keyChain 輔助類,以提高資料增刪改查操作的便利性。

2、2023 年 iOS 越獄檢測 -- 來自:Marco Eidinger

@東坡肘子: 在這篇博文中,作者將展示現有的檢測越獄的方法並分享程式碼示例。但更重要的是,通過討論越獄檢測的動機、分享相關實現並提供資訊,方便開發者評估越獄檢測在 2023 年(或總體上)是否仍是一個好主意。

3、SwiftUI Layout -- 來自:東吳賈詡

@東坡肘子: 本文作者對 SwiftUI 4 中提供的 Layout 協議做了比較詳盡的說明。即使你目前仍使用老版本的 SwiftUI ,通過本文可以瞭解更多有關 SwiftUI 佈局的內部邏輯。

4、好久不見,SwiftGG -- 來自:SwiftGG

@東坡肘子: SwiftGG 是國內知名的蘋果生態開發社群,儘管它的公眾號處於歇業狀態已經很久了,但 SwiftGG 翻譯組在這幾年並沒有處於停滯狀態。在本文中,SwiftGG 對近兩年的工作進行了總結,並介紹了接下來一些新的計劃和打算。同時,也回答了一些網友提出的問題。

5、iOS APP虛擬記憶體用量初探 -- 來自:呦呦君

@東坡肘子: 在作者當前的專案中有用於 APP 實體記憶體、系統實體記憶體等記憶體狀態的獲取 API,但是一直缺少獲取虛擬記憶體的 API。由於之前業務上出現過因為虛擬記憶體耗盡所導致的 Crash,因此本文將基於以上的背景對虛擬記憶體進行一些調研與探討。

摸一下魚

整理編輯:zhangferry

1、diffusionbee-stable:Stable Diffusion 是一個開源的人工智慧模型,它可以根據文字描述生成一張影象。現在已經有不少影象類專案基於這個模型進行產品設計。如果你想本地跑這個模型的話,還需要租用 GPU,配置也比較麻煩。因為 PyTorch 對蘋果的 ARM 晶片進行了完善的支援,已經完全可以用手頭的 M1/M2 裝置去執行 Stable Diffusion 了。Github 有一個開源專案 diffusionbee,把整個配置流程封裝到了一個 Mac Applicaiton 上,我們可以更快速的體驗這項功能。專案依賴模型將近 8 個 G,下載體驗需要準備好足夠的磁碟空間。

2、技術三板斧:關於技術規劃、管理、架構的思考:最近關於技術規劃寫了不少,參考了團隊內部其他人的技術規劃文件,也查了一些技術規劃相關的文章,對如何做技術規劃有這些總結。

第一步:問題分析。如果是從零開始的專案,分析的是痛點,如果是已有專案分析的是現狀。這裡要結合資料指標,客戶反饋,歷史事件,並對未來有一定暢想。

第二步:目標制定。目標選擇要結合上一步的問題分析,用於解決實際痛點。目標制定要具體明確可量化,對每個目標進行拆解,確定實現路徑。

第三步:以終為始。以最終結果溯源開始,明確時間節點,設定可驗收的 Milestone。專案結果從業務、平臺、效能視角等視角審視結果。

3、大廠專案覆盤:UED 方向的各大廠專案覆盤文件彙總。

關於我們

iOS 摸魚週報,主要分享開發過程中遇到的經驗教訓、優質的部落格、高質量的學習資料、實用的開發工具等。週報倉庫在這裡:http://github.com/zhangferry/iOSWeeklyLearning ,如果你有好的的內容推薦可以通過 issue 的方式進行提交。另外也可以申請成為我們的常駐編輯,一起維護這份週報。另可關注公眾號:iOS成長之路,後臺點選進群交流,聯絡我們,獲取更多內容。

往期推薦

iOS 摸魚週報 #82 | 去中心化社交軟體 Damus

iOS 摸魚週報 #81 | Apple 推出 Apple Business Connect

iOS 摸魚週報 #80 | 開發加速器 SwiftUI 中管理資料模型

iOS 摸魚週報 #79 | Freeform上線 & D2 本週開始