Skip to content

2016

Lessons Learned from an IoT Project

Last year, I worked on an Internet of Things (IoT) project focused on a Bluetooth smart gadget. The experience differed significantly from pure software development in several ways:

Firstly, integration posed a challenge because the project's mechanical, firmware, mobile app, and design components were outsourced to multiple vendors. These vendors had geographically dispersed teams and varying work cultures. When developers are so specialized in their fields that they work in silos, the Scrum model is unlikely to function effectively.

Secondly, the duration of hardware iterations far exceeded that of software iterations, making it difficult to adapt to changes. Unlike software, which can be easily modularized, many hardware components like chips and motherboards are interconnected. This situation pushes the development process toward a more waterfall-like approach. You either receive the entire prototype or nothing at all; there's no middle ground for delivering a Minimum Viable Product (MVP) for consumer testing. The absence of early user feedback further hampers the feature prioritization process.

Thirdly, diagnosing issues becomes particularly challenging when things go wrong. It's difficult to determine whether the problem lies in the mechanical design, firmware, or mobile app development. Additionally, end-to-end testing becomes more complex as interfaces evolve. Conducting tests without comprehensive hardware automation was also time-consuming. To alleviate this, it's essential to have clearly defined and testable acceptance criteria, ensuring a strict definition of "done."

Effective communication is crucial for the success of any IT project, especially when various aspects aren't progressing as planned. Finger-pointing and defensiveness can severely damage interdepartmental relationships. Effective communication requires empathy; try to understand issues from the other person's perspective instead of reacting emotionally or judgmentally.

Customers assess performance based on the value they derive from a product. Adopting an empathetic and problem-solving mindset can reduce wasted time and effort, thereby improving overall performance. I look forward to the product's release and the positive reactions from its end-users.

從物聯網項目中吸取的教訓

去年,我參與了一個專注於藍牙智能裝置的物聯網(IoT)項目。這個經驗與純軟體開發在幾個方面有顯著的不同:

首先,集成帶來了挑戰,因為項目的機械設計、固件、手機應用程式和設計組件被分包給多個供應商。這些供應商有地理上分散的團隊和不同的工作文化。當開發人員在他們的領域專門化到組織成獨立的群體時,Scrum模型不太可能有效運行。

其次,硬體迭代的時長遠超過軟體迭代,使其難以適應變化。與軟體不同,軟體可以輕易被模塊化,許多硬體組件如晶片和主機板卻是相互關聯。這種情況推動了開發過程向著更像瀑布模型的方向。你只能收到整個原型或者一無所有;沒有傳遞一個用於消費者測試的最小可行產品(MVP)的中間地帶。早期用戶反饋的缺乏進一步阻礙了特性優先級的確定過程。

第三,當事情出錯時,診斷問題尤其具有挑戰性。很難確定問題是出在機械設計、固件還是手機應用程式的開發。此外,隨著介面的演變,端到端的測試變得更加複雜。在沒有全面的硬體自動化的情況下進行測試也很耗時。為了緩解這一點,有必要明確並可驗證的接受準則,確保“完成”的嚴格定義。

對任何IT項目的成功而言,有效的溝通至關重要,特別是當各個方面沒有按計劃進展時。指責和防衛可以嚴重損害部門之間的關係。有效的溝通需要同理心;嘗試從他人的角度理解問題,而不是情緒化或判斷式地反應。

客戶根據他們從產品中獲得的價值來評估性能。採取同理心和解決問題的思維方式可以減少浪費的時間和精力,從而提高整體性能。我期待著產品的發佈和最終用戶的積極反饋。

How to Fix iOS 10 Permission Crash Errors

I've been developing an app that requires access to the user's microphone.

The app worked fine on iOS 9, but after upgrading to iOS 10, it started crashing. The error message displayed in the terminal reads as follows:

> This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app’s Info.plist must contain an NSMicrophoneUsageDescription key with a string value explaining to the user how the app uses this data.
> (lldb)

To resolve this issue, edit the Info.plist file as source code and add the following lines:

    <key>NSMicrophoneUsageDescription</key>
    <string>Provide a description explaining why your app needs microphone access.</string>

Additionally, if your app needs access to the user's camera, add the following:

    <key>NSCameraUsageDescription</key>
    <string>Provide a description explaining why your app needs camera access.</string>

If your app requires access to the user's contacts, add this:

    <key>NSContactsUsageDescription</key>
    <string>This app requires access to your contacts.</string>

Happy coding!

如何修復 iOS 10 權限崩潰錯誤

我一直在開發一款需要訪問用戶麥克風的應用程序。

該應用在 iOS 9 上運行正常,但在升級到 iOS 10 之後,它開始崩潰。終端顯示的錯誤消息如下:

> 此應用程序已崩潰,因為它試圖訪問隱私敏感數據而未提供使用說明。應用程序的 Info.plist 必須包含一個 NSMicrophoneUsageDescription 鍵,並提供一個字符串值解釋應用程序如何使用這些數據。
> (lldb)

要解決此問題,按源碼編輯 Info.plist 文件並添加以下行:

    <key>NSMicrophoneUsageDescription</key>
    <string>提供一個說明,解釋您的應用為何需要訪問麥克風。</string>

此外,如果您的應用需要訪問用戶的相機,請添加以下內容:

    <key>NSCameraUsageDescription</key>
    <string>提供一個說明,解釋您的應用為何需要訪問相機。</string>

如果您的應用需要訪問用戶的聯繫人,請添加以下內容:

    <key>NSContactsUsageDescription</key>
    <string>此應用需要訪問您的聯繫人。</string>

祝你編碼愉快!

The Future of FinTech in Hong Kong

I was often told by my teachers that Hong Kong is an international financial center. Indeed, in our highly competitive corporate environment, we enjoy economic success daily. However, Hong Kong currently lags in the FinTech revolution. Singapore has seized this opportunity and has aggressively moved ahead. The Singaporean government has played a crucial role in attracting FinTech companies by providing incentives and clear regulations. Moreover, the extensive client base available to mainland China's FinTech firms has enabled them to thrive in ways that Hong Kong companies haven't.

The challenge is clear: Hong Kong's risk-averse mentality is slowing the progress of the FinTech industry. As an IT consultant, I've heard numerous individuals in the banking sector express concerns about innovations like blockchain, Bitcoin, and mobile payments. They fear these technologies could disrupt their businesses, jeopardize jobs, and result in big companies failing to adapt.

However, there's a silver lining: Hong Kong is home to a large number of innovative and creative individuals. Our community boasts a diverse group of thinkers, builders, and leaders. We have the potential to assemble outstanding teams that can inspire and contribute to the creation of the world's best FinTech ecosystem. Now is the time to elevate our awareness and reimagine what is possible when financial technology serves as a catalyst for positive industry transformation.

In my opinion, this is the desired outcome: we are guiding global financial technology to become more human-centered. Our current legal sandbox policy allows companies to test their innovative ideas in the marketplace. These financial technologies have the potential to positively impact people's lives around the globe. Together, let's utilize the language and tools of FinTech to reestablish Hong Kong as the regional hub for FinTech commerce.

香港金融科技的未來

我經常被我的老師告知,香港是一個國際金融中心。確實,在我們競爭激烈的企業環境中,我們每天都享受著經濟的成功。然而,香港目前在金融科技的革命中落後了。新加坡已經抓住了這個機會,並積極地前進。新加坡政府在吸引金融科技公司方面起著至關重要的作用,他們提供了激勵措施和明確的規章制度。此外,中國內地金融科技公司可用的廣大客戶基礎使得他們能夠以香港公司無法實現的方式蓬勃發展。

挑戰十分明顯:香港過於保守的心態正在減緩金融科技行業的進步。作為一名 IT 顧問,我聽到許多銀行業的人對像區塊鏈、比特幣和移動支付等創新科技表示擔憂。他們擔心這些技術可能會破壞他們的業務,威脅工作,並導致大公司無法適應。

然而,這裡有一線希望:香港擁有大量的創新和創造力的個體。我們的社區擁有多樣化的思考者,建設者,和領導者。我們有可能組建優秀的團隊來啟發並為創造世界上最好的金融科技生態系統做出貢獻。現在是提高我們的意識,重新想象當金融科技作為正向產業轉型的助推器時,可能會發生什麼。

依我看,這是我們期望的結果:我們正引導全球的金融科技變得更以人為本。我們目前的法律沙盒政策允許公司在市場上測試他們的創新想法。這些金融科技有可能對全球人民的生活產生積極的影響。讓我們一起利用金融科技的語言和工具,將香港重新建立為金融科技商業的區域中心。

What is Blockchain and How is It Used?

Many of my friends have been asking about the emergence of the blockchain revolution. According to recent news, four of the world's largest banks have teamed up to develop a new form of digital cash. This digital cash aims to become an industry standard for clearing and settling financial trades over blockchain technology. Meanwhile, Ripple has raised $55 million in Series B funding. In my opinion, there's no doubt that blockchain has the potential to disrupt traditional banking.

What Is It?

Blockchain is a data structure that serves as a digital ledger for transactions. This ledger is shared among a distributed network of computers, numbering in the millions. Utilizing state-of-the-art cryptography, the technology securely manages the ledger. Blockchain operates on a consensus model: every node agrees to every transaction, thereby eliminating the need for a central counterparty (CCP) in traditional settlement processes.

How Is It Used?

Blockchain offers broad implications for cross-currency payments by making them more efficient. It eliminates time delays and reduces back-office costs. In response to growing customer demands for faster, lower-cost global payments, blockchain allows for direct bank-to-bank settlements. Some applications of this technology include remittance services for retail customers, international transactions, corporate payments, and cross-border intra-bank currency transfers.

What is the Innovation?

The technology offers the opportunity for transactions to occur without needing to know who the other party is. Its most innovative feature is the idea of a distributed database, where trust is established through mass collaboration rather than through a centralized institution responsible for authentication and settlement.

What Problems Could Be Solved?

The potential applications of blockchain extend beyond the financial market. This technology could provide an immutable record that can be trusted for various uses. Current identity infrastructure is easily compromised; however, in a blockchain, once a block of data is recorded, it becomes very difficult to alter. Thus, it can be used for genuine privacy protection. Whenever someone attempts to add data to the blockchain, all existing copies run algorithms to verify the transaction. Malicious attempts to defraud the system are rejected, while proposed transactions are approved when a majority of nodes agree on their validity by cross-referencing the blockchain history. As a result, blockchain could serve as the basis for an open protocol for web-based identity verification, creating a 'web-of-trust' and storing data in an encrypted format.

References
  1. Martin Arnold, "Big banks plan to coin new digital currency," Financial Times, August 24, 2016, Financial Times Article
  2. Alyssa Jarrett, "Ripple Raises $55 Million in Series B Funding," Ripple official website, September 15, 2016, Ripple Article
  3. Don Tapscott, Alex, and Rik Kirkland, "How Blockchains Could Change the World," McKinsey & Co, May 8, 2016, ValueWalk Article

什麼是區塊鏈,以及它如何被使用?

很多朋友都在問我關於區塊鏈革命的出現。根據最近的新聞,世界四大銀行已經聯手開發一種新形式的數位現金。這種數位現金旨在成為清算和結算金融交易的區塊鏈技術的行業標準。同時,Ripple已經在B輪融資中籌得5500萬美元。在我看來,無疑區塊鏈有潛力顛覆傳統銀行。

何謂區塊鏈?

區塊鏈是一種數據結構,用作交易的數字記錄簿。這個記錄簿在數以百萬計的分散式網絡的電腦之間共享。利用最先進的密碼學,該技術安全地管理記錄簿。區塊鏈依賴共識模型運作:每個節點都同意每一筆交易,從而消除了傳統結算過程中需要中央交易對手(CCP)的需要。

如何使用?

區塊鏈通過使其更高效,對跨貨幣支付有廣泛的影響。它消除了時間延遲並降低了後勤成本。為了回應客戶對更快、更低成本的全球支付的日益增長的需求,區塊鏈允許直接的銀行對銀行的結算。這種技術的一些應用包括零售客戶的匯款服務,國際交易,企業支付和跨國銀行間的貨幣轉帳。

何種創新?

這項技術提供了交易可以在不需要知道對方是誰的情況下進行的機會。其最創新的特點是分散化數據庫的理念,其中信任是通過大規模協作建立的,而不是通過一個負責認證和結算的中心化機構建立的。

可解決哪些問題?

區塊鏈的潛在應用擴展到了金融市場之外。這種技術可能提供一個對於多種用途可以信賴的不可變更的記錄。當前的身份識別基礎設施很容易被破壞;然而,在區塊鏈中,一旦數據塊被記錄,修改起來就變得非常困難。因此,它可以用於真正的隱私保護。每當有人試圖向區塊鏈添加數據時,所有現有的副本都運行算法來驗證交易。試圖欺詐系統的惡意嘗試被拒絕,而預期的交易在大多數節點通過鏈交易歷史驗證其有效性時獲得批准。因此,區塊鏈可以作為基於web的身份驗證的開放協議的基礎,創建一個'信任網絡',並以加密格式儲存數據。

參考文獻
  1. Martin Arnold, "Big banks plan to coin new digital currency," Financial Times, August 24, 2016, Financial Times Article
  2. Alyssa Jarrett, "Ripple Raises $55 Million in Series B Funding," Ripple official website, September 15, 2016, Ripple Article
  3. Don Tapscott, Alex, and Rik Kirkland, "How Blockchains Could Change the World," McKinsey & Co, May 8, 2016, ValueWalk Article

Installing Jupyter Notebook on macOS

I'm using the Anaconda distribution to install Jupyter Notebook.

Step 1: Download Anaconda

First, visit the Anaconda website to download the installer: https://www.anaconda.com/products/distribution

Step 2: Install Anaconda

Run the downloaded installer and follow the graphical prompts to install Anaconda.

Step 3: Attempt to Run Jupyter Notebook

After installation, try running Jupyter Notebook by executing:

jupyter notebook

You may encounter the following error:

> zsh: command not found: jupyter

This happens because the conda command is also not found:

> zsh: command not found: conda

Step 4: Update Shell Configuration

To resolve this issue, open your .zshrc file with your preferred text editor:

vim ~/.zshrc

Add the following line at the bottom of the file:

export PATH="$HOME/anaconda3/bin:$PATH"

Step 5: Restart Shell and Run Jupyter Notebook

Save the file and restart your shell. Try running Jupyter Notebook again. It should now be accessible at http://localhost:8888/.

在 macOS 上安裝 Jupyter Notebook

我正在使用 Anaconda 發行版安裝 Jupyter Notebook。

步驟 1:下載 Anaconda

首先,訪問 Anaconda 網站以下載安裝程式:https://www.anaconda.com/products/distribution

步驟 2:安裝 Anaconda

運行下載的安裝程式並按照圖形提示進行 Anaconda 的安裝。

步驟 3:嘗試運行 Jupyter Notebook

安裝完成後,嘗試執行 Jupyter Notebook:

jupyter notebook

你可能會遇到以下錯誤:

> zsh: command not found: jupyter

這是因為 conda 命令也找不到:

> zsh: command not found: conda

步驟 4:更新 Shell 配置

為了解決此問題,使用你偏好的文本編輯器打開你的 .zshrc 文件:

vim ~/.zshrc

在文件底部添加以下行:

export PATH="$HOME/anaconda3/bin:$PATH"

步驟 5:重新啓動 Shell 並運行 Jupyter Notebook

保存文件並重新啓動你的 shell。嘗試再次運行 Jupyter Notebook。現在應該可以在 http://localhost:8888/ 上訪問。