Skip to main content

Tedshd's Dev note

在 cloud functions 或是 firebase functions 處理 nodejs 使用 import 的方式

# Intro 現在在使用 nodejs 時可以使用副檔名 .mjs 的方式和 package.js 添加 "type": "module" 來使用 import 來取代 require 關於這件事也是因為有許多歷史因素無法完全取代掉 require 但是如果我們想要在 cloud functions 或是 firebase functions 使用時就沒那麼順利 因為光是要使用 .mjs 就是個問題 但是參考下面的文章後發現有取巧的方式 refer - ES6+ in Cloud Functions for Firebase #2 # Solution 先說結論 其實就是先用 babel build 完 code 最後把 build 完的 code 部署到 functions 上面 以 firebase functions 專案的例子 我自己的做法是 多建立一個 src 的目錄來當成再開發的 code 在部署前 build 到 functions 的目錄 package.json 添加 "scripts": { "build": "babel src --out-dir functions" } npm run build ...

MySQL export import 紀錄

# Intro 紀錄一下 MySQL 匯出與匯入資料的一些情況 # 匯出 mysqldump --column-statistics=0 -u <user> -h <host> -P 3306 -p <database> > output_file.sql --column-statistics=0 忽略掉一些匯出時的一些資訊, 節省容量 匯出資料庫中個別的 table mysqldump --column-statistics=0 -u <user> -h <host> -P 3306 -p <database> <table> > output_file.sql # 匯入 mysql -u <user> -h <host> -P 3306 -p <database> < ./file.sql 如果要忽略一些錯誤並強制執行可以添加 -f mysql -f -u <user> -h <host> -P 3306 -p <database> < ./file.sql # troubleshooting # 如果遇到有 table 的欄位是使用 binary 的形式像是 point 匯出時在匯入會出現格式錯誤 如果欄位中有以 point 的型態儲存經緯度數據 ...

使用 golang migrate 安裝紀錄

# Intro 在使用 golang 的情境下, 有一個很常用的 migration 工具 golang-migrate 但是在不同系統下安裝我覺得不太容易 所以記錄一下 # Install github 上有提供不同作業系統的安裝方式 cmd/migrate 目前測試 Mac / Ubuntu 有成功 Mac OS X 使用 homebrew 安裝 brew install golang-migrate 在 mac 上面安裝是蠻容易的 Ubuntu 20.04 在 ubuntu 遇到許多權限的問題 github 上面的 *.deb 安裝需要調整指令 curl -L https://packagecloud.io/golang-migrate/migrate/gpgkey | sudo apt-key add - sudo sh -c 'echo "deb https://packagecloud.io/golang-migrate/migrate/ubuntu/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/migrate.list' sudo apt-get update sudo apt-get install -y migrate # Usage 要連接的 DB 的格式 ...

Firebase dynamic links 遷移轉換

# Intro 服務終有停止的一天 firebase 動態連結將於 2025 年 8 月 25 日關閉。 所以要提前做遷移轉換或是找其他替代方案 # Firebase 建議 可以參考 Firebase 文件的建議自己搞 從動態鏈接遷移到應用程式連結和應用程式鏈接通用連結 自己搞的好處是能搞成符合自己需求的東西 但是最大的麻煩點是要記錄的話就得自己搞數據 很多時候都會需要紀錄點擊轉換 這就得自己搞了 # 第三方服務 其實除了自己搞以外 還有很多第三方服務有在做這個東西 目前有找到的有 ## Branch io https://www.branch.io/what-is-deep-linking/ branch io 還有個教學文 How to migrate from Firebase Dynamic Links ## Appsflyer https://www.appsflyer.com/products/customer-experience-deep-linking/ ## kochava https://www.kochava.com/product/deep-linking/links/?int-link=menu-links 上面列出來的是比較常見的幾個 應該還有其他服務沒有列出來 這個就評估下要用哪個服務 ...

JavaScript 確認頁面有沒有縮放

# 前言 不管在 mobile 還是 desktop 都有個困擾就是要處理用戶縮放頁面的問題 如果只是資料類型的頁面, 縮放的話大多都只是畫面 UI 跑版 但如果是複合功能型的頁面, 縮放的話大概率會讓功能壞掉 就得找一些方法處理 # 確認可行性 JavaScript 有一個 api window.devicePixelRatio 是顯示畫面解析度比率的 早期可以用這個是不是 1 來判斷 但是螢幕的解析度其實會影響這個值 所以這個 api 沒有辦法當作判斷的基準 resize 事件可以在頁面縮放時會觸發 搭配 window.outerWidth/window.innerWidth 的值的變化可以知道有沒有縮放 但是這在 mobile device 的兩指縮放是不會觸發 所以也沒用… 但是針對 mobile 兩指縮放 可以使用 window.visualViewport window.visualViewport.scale 可以知道現在縮放比例 如果只是要判斷有沒有所放的話 可以使用 resize 事件 + mobile 判斷來拿取 window.visualViewport.scale 或是 let zoom = window.outerWidth/window.innerWidth; 的組合來處理 sample code let zoom = window.outerWidth / window.innerWidth; function isMobileDevice() { return /Mobi/i. ...

CSS 處理多行省略

.multiline-ellipsis { overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3; /* start showing ellipsis when 3rd line is reached */ white-space: pre-wrap; /* let the text wrap preserving spaces */ } refer - Easiest Way to Truncate Text With Ellipsis in CSS ...

Angular build custom element

# Intro 當使用 Angular 時, 有時會有需要自己建立一個自定義的元素 通常這個都是為了重複使用 這時會有兩種作法 自己建立一個元件, 再把這元件處理成 module, 這樣就可以有自定義元素了 使用 angular create lib 的方式(https://angular.io/guide/creating-libraries) 如果是在公司內部自己使用, 用 1 或是 2 都沒差 如果是要做成給外部或是別人使用, 甚至是開源出去, 那就是得用 2 順帶一提如果要使用自己定義的元素, 需要安裝 @angular/elements yarn add @angular/elements # 自己建立元件 這邊會用 custom-element 當成元件名字舉例 ng generate component custom-element 建立起一個 custom-element 元件 之後就是依照寫元件的方式開發 只是得自己手動處理一下在 custom-element/custom-element.module.ts 得添加和輸出與建立自定義元素的設定 import { createCustomElement } from '@angular/elements'; import { createCustomElement } from '@angular/elements'; import { NgModule, Injector } from '@angular/core'; import { CustomElementComponent } from '. ...

解決 Mac 外接硬碟讀不到 / 沒有顯示

# Intro 有時 Mac 會讀不到外接硬碟 可以試試以下方式解決問題 # 重新開機 可能一些未知的因素導致當下讀取不到 可以重新開機後再重新連接外接硬碟 # 啟用外接硬碟的可見性 如果你的電腦系統為在 macOS Big Sur 或 Catalina,那你就需要啟用外接硬碟的可見性。你可以根據以下步驟進行操作。 前往「Finder」>「偏好設定」>「一般」。 此時,你可以看到「在桌面上顯示這些項目」的欄位,勾選「硬碟」和「外接硬碟」的選項。 # 檢查系統資訊中的外部硬碟驅動程式 系統資訊 將會顯示所有連接至Mac的外部裝置、軟體、硬體和網路等所有訊息的地方。因此,你可以先在該位置進行檢測。 前往「應用程式」>「工具程式」>「系統資訊」。 在左側欄位點選「USB」,然後查看外接硬碟的資訊。 如果你可以看見相關資訊,Mac 卻無法顯示外接硬碟,那它可能正在被 macOS 修復。你可以前往「活動監視器」,以檢查是否有「fsck_hfs」或「fsck_exfat」的活動。 # 運行「Apple診斷」以檢測硬體問題 Mac 電腦擁有一套內建的診斷程式「Apple診斷」,以讓你查找故障的硬體問題。修復損壞的硬體也有可能解決Mac讀不到外接硬碟的情況。 拔除所有外接裝置,除了鍵盤、滑鼠等有用的裝置。 重啟Mac,並在電腦啟動時按住鍵盤的「D」鍵,直到看到選擇語言的視窗才放手。 接著,系統就會開始診斷動作,而你也會在介面看到進度列。 完成診斷後,你就會看到電腦所面對的硬體問題以及相對的解決方案。 # 重置 Mac 的 NVRAM 或 PRAM NVRAM 和 PRAM 是 Mac 電腦中的部分暫存。不管開機或關機,它都會保存特定數據。 如果你的Mac無法讀取外接硬碟是基於硬體受損,那你也可以嘗試使用這個方法解決。 重啟 Mac,然後在電腦啟動時同時按住「control + option + P + R」鍵。 按住這些按鍵長達大約 20 秒,直到你聽到電腦重啟的音效,或是看到蘋果標誌出現並消失後才放手。 # 重置 Mac SMC SMC(System Management Controller)負責演算 Mac 的低階功能,因此如果重置 NVRAM或 PRAM 仍無法解決 Mac 外接硬碟無法顯示的問題,那你也可以嘗試重置 SMC。 ...

App store & Google Play IAP((In-App Purchase)) 內購與訂閱注意事項

# 前期比較花時間的準備 收款銀行帳戶 公司登記資料 # 是否需要試用期 # 不同地區設定不同價格 避開匯率的問題 # 退款處理 由於是可以在商店平台做退款(所以需要客戶端或是服務端定期確認商店的訂閱狀態) https://support.apple.com/en-us/HT204084 https://support.google.com/googleplay/answer/2479637 # 取消續訂處理 取消續訂也是需要服務端或是客戶端確認訂閱狀態 https://support.apple.com/en-us/HT202039 https://support.google.com/googleplay/answer/7018481 # 取消訂閱流程 提供商店的 support 網址 https://support.apple.com/en-us/HT202039 https://support.google.com/googleplay/answer/7018481 # 價格對應的訂閱 id 需要有後端配置下發給客戶端以利於價格調整 避免用戶使用舊版 app 訂閱舊價格 # 訂閱量與續訂的數據埋點(取消訂閱也需要上報) 須注意訂閱量與預估收入的計算 # 購買 / 訂閱狀態是跟著 Google 或是 Apple 帳號 需要注意自己服務如何和 Google 帳號或是 Apple 帳號關聯(或是訂單 id 關聯) # 客戶端需要和商店確認訂單與後端確認訂閱狀態(增強安全性) # App store 文案需要添加訂閱相關事項與協議 Guideline 3.1.2 - Business - Payments - Subscriptions 這部分可以參考其他有訂閱或購買制的 App 的 App store 頁面 ...