發表文章

[Yarn] 為何yarn add會出現EACCES: permission denied?原來只是檔案被上鎖

在react專案資料夾下安裝axios $ yarn add axios 結果跳出以下錯誤,並且axios安裝失敗。 yarn add v1.22.10 warning package-lock.json found. Your project contains lock files generated by tools other than Yarn. It is advised not to mix package managers in order to avoid resolution inconsistencies caused by unsynchronized lock files. To clear this warning, remove package-lock.json . 中間省略... error An unexpected error occurred: "EACCES: permission denied , open '/home/kabuto/react-learn-hook/frontend/yarn.lock'". info If you think this is a bug, please open a bug report with the information provided in "/home/kabuto/react-learn-hook/frontend/yarn-error.log". info Visit https://yarnpkg.com/en/docs/cli/add for documentation about this command. 只看後面錯誤訊息,查了Statck Overflow以為是 yarn.lock有執行權限的Bug, 雖然照字面看permission denied也確實如此,於是就用以下指令修改yarn.lock的權限  $ sudo chown -R $USER:$GROUP yarn.lock  當然這次yarn add 就成功了,總覺得強行修改權限不是個好辦法,事實上在Statckoverflow也有人提議乾脆sudo yarn add。 2022/01/15更新: 第二種解法:最保險的情況應該是刪除node

Angular Language Service 在VSCode輸入(event)沒有產生對應的智能提示

圖片
問題描述 更新AgnualrCLI、VSCode 還有VScode插件 Angular Language Service的版本後, 發現登打app.component.html時,在Tag輸入括號時 event binding時沒有智能提示或任何補全效果,但 [ ] 語法或*ngFor這類Structual Directive倒是部份有智能提示(intellisense)。 當輸入( )沒有列出可選的Event,如下圖: 當輸入 Two-way binding  [(  )]裡沒有出現ngModel之類的智能提示,如下圖: 預期行為 當在component.html輸入()或[()]時,會正確出現對應提示。      系統環境 VSCode: 1.57.1 VSCode's Angular Language Service:  12.0.5 Angular: 12.1.0 Angular CLI: 12.1.0 Node: 14.17.1 Package Manager: npm 6.14.13 OS: linux x64 解決方式 1. 開啟Angular Language Service的extension settings 2.  選擇User ,並勾選 Use Legacy View Engine language service. 完成設定後,就會跟預期行為的結果相同。 我知道這只是一種折衷辦法,昨天花了一個下午去網路去查不管是中文還英文資料, 想找到一個既用最新Ivy(目前預設Ivy)又可以正確運作的方法, 最後結論還是Ivy 這個功能還不太穩定, 所以改用舊版的ViewEngine並暫停Extension自動更新會是一個比較好的作法。 看到這邊的你可能會有些失望,但我覺得投資時間在開發上會更好, 畢竟安裝插件是為了加速開發,而不是拖延開發。 補充說明 另外VSCode可以直接安裝Will保哥的插件大集合, 可以節省尋找安裝Angular相關插件的時間。 因為Angular LanguageService提供的智能提示和常用語法產生不夠完整, 安裝額外的Snippets之類的插件可以少打很多字。   最後如果網友知道有更好的解決辦法,歡迎留言分享😼👍。 2021/7/25 (五) 此Bug仍存在於 Angular CLI: 12.1.3 No

golang本地測試如何繞過防火牆詢問允許

圖片
OS: OSX 10.14.6 development: VSCode programming language: Golang 發現寫的http server每次在本地端測試時防火牆總會跳出來, 詢問你是允許or拒絕連線,然後允許後下次也還是會跳出來。 如下圖: 詢問是否接受接受「_debug_bin」接受傳入的網路連線? 其實如果只是要本地連線測試, 不需要把防火牆關掉或另外設定。 只要將原本這行 err := http. ListenAndServe ( ":8080" , nil ) 只要像底下明確指定內部IP即可。 err := http. ListenAndServe ( "127.0.0.1:8080" , nil ) 參考文章: https://stackoverflow.com/questions/18978622/firewall-blocks-go-development-server

使用Intent在Activity間傳遞資料(bundle)

不同Activity想傳遞簡單的資料, 可以使用Intent內的Bundle來儲存, 然後再利用Intent本身回傳。 通常只有這兩種情況,而這兩種情況也可能連續發生。 1.  A Activity 傳值呼叫 B Activity , B Activity 取得 A 給予的值。 Ex:聯絡人App, 列表畫面 中點擊某個聯絡人跳出 編輯畫面 , 編輯畫面 需要預先填入該聯絡人的基本資料在每個欄位中。 2. 當 B Activity  處理完成 A Activity 給予的任務,要結束 B 本身並返回資料給 A 。 Ex:當編輯成功時, 編輯畫面 關閉但同時將已更改聯絡人的id返回給 列表畫面 。 檢討 雖然putExtra和getExtra用起來很簡單, 但還是錯用,因此特別書寫一下! 有一點我犯的錯,紀錄一下。 當你使用intent時,不用另外指定給它新Bundle()。 不過底下這行還沒編譯就會直接報錯了。 intent.extras = Bundle() 延用舊intent塞值: intent.putExtraString(KEY, 你要存的字串值) 或重新產生一個Intent再塞值: Intent().apply{    // put 你的資料在apply{ }中 } 最後putExtra能存的型態很多, 不只基本的Int、String、Float還有Array, 甚至連Serializable的物件都行。

如果不使用Room、LiveData、ViewModel只使用SqliteOpenHelper會怎樣? 上篇 "查詢"

圖片
關於學習Android的資料庫運作, 現在很少直接操作 SQLiteOpenHelper , 通常會直接學習使用Room和ContentProvider來操作資料, 並配合MMVM架構去撰寫程式碼。 但直接讓新手學這種較多抽象的東西, 如果沒實作過糟糕的方式...恐怕無法真正理解這些做法好在哪? 以及重點差異。 基於上述理由我想用 SQLiteOpenHelper 實作一個沒有清楚分割UI和Model的案例。 最棒的學習方式是從問題中學習並解決它, 所以我們來假設一個需求「能查看&修改產品清單的App」 (當然只限於Android端)。 產品可視為一個資料表Products, 每一個產品需要有產品名稱、價格、庫存量,最後還需要一個唯一值的ID,總共4個Column要定義。 規劃的架構如下: Step1 建立一個Contract來管理資料庫、資料表會用到的常量。 將條目定義成常量的好處在於IDE會提供自動補全, 可以避免打錯字這類低階錯誤, Step2 建立資料類別Product 將每一筆資料都轉成Product物件處理,方便RecyclerView的Adapter處理。 Step3 建立ProductSqlOpenHelper 繼承父類SqliteOpenHelper,並實現類的 onCreate 和 onUpgrade 。 通常 onCreate 做的就是建立資料表, onUpgrade 則是當資料表結構有變動之類的進行更新的函數(當 VERSION_NUMBER 改變)。 另外我又定義了兩個方法, 查詢資料用的方法 getAllProducts  回傳的結果型態是List<Product>,之後將會提供給Adapter使用。 參數只需要SqliteDatabase, 回傳的結果就是一個Product的List(List<Product>), 之後會提供給Adapter使用。 插入Product用的方法 insertProduct 參數包掛db、Product代表要插入Products資料表的資料, 回傳新增item的id,如果新增失敗回傳-1, 因為db.insert會回傳插入item的id,當錯誤發

第6篇 使用Sensor取得三軸加速度計的數值

圖片
因為想做一個可以靠轉動手機就能操控內部物件的App, 所以就研究如何取得加速度計或陀螺儀的數值。 影片: 心得: 學感測器也順便學到了Activity的生命週期。 因為當你註冊一個感測器監聽時,如果你切換到下個Activity時不關掉它,它可是會繼續監聽動作的喔!。 當你 跳離原本的Activtiy (Ex: 同個App跳到下一個Activity 或是 執行別的App), 系統會自動執行 onPause() 函數。 當你從原本的暫停狀態要 恢復原本的Activity , 系統會自動執行 onResume() 函數 所以必須override onPause() 在裡面添加 取消註冊監聽的程式碼 和 override onResume() 在裡面添加 重新註冊監聽的程式碼。 完整程式碼 因為在Android使用感測器的內容不需要特殊權限, 所以Manifests的內容基本上沒啥變化。

第05篇 相機功能 (純記錄,內有一堆外部連結)

看 陳董的相冊和照相功能實作的MainActivity.kt  和 他的部落格文章 ,純粹是記錄個人學習用QwQ。 我會用陳董的Code學習也是因為他用的方法是最簡單,也是最直覺的。 我的Android系統版本是7.1.1, 原本覺得要在mainfest設定一些內容才能啟動App, 但上方連結的內容Code其實可以直接正常運作。 延伸學習(幫助蠻大的是第一個官方課程) 1. 官方關於相機的訓練課程(Java) 2. 簡書 Android获取图片的三种方法(Java) 3. 2011年的stackFlow