Hi there 👋

分享技術與有趣的事物

dotnet ef Error

當使用者使用 dotnet cli 輸入 ef core 指令時會遇到下列錯誤訊息時,肯定會很納悶為什麼會錯誤。 dotnet ef 指令需先透過dotnet tool install –global dotnet-ef進行全域安裝。 Your startup project 'MicroRabbit.Banking.Api' doesn't reference Microsoft.EntityFrameworkCore.Design. This package is required for the Entity Framework Core Tools to work. Ensure your startup project is correct, install the package, and try again. 找到執行專案的 csproj 檔案,將 Microsoft.EntityFrameworkCore.Design 的 PrivateAssets 註解掉,再重新執行 dotnet ef migrations add 就可以執行了 <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.8"> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <!-- <PrivateAssets>all</PrivateAssets> --> </PackageReference> 參考 stackoverflow

September 6, 2024

Opencc Memory Leak

近期專案上有個需求,需要使用opencc來將接收到的資料將簡體轉繁體,參考了will保哥與黑暗執行緒的範例,其中保哥的文章指出有做防止記憶體洩漏的調整,但上線後發現一樣有記憶體洩漏的問題,最後找到的解決方案是,應該要使用opencc的函式做記憶體釋放,而非使用C#的函式。 調整前 using System.Runtime.InteropServices; using System.Text; public static class OpenCCHelper { [DllImport(@"C:\Tools\opencc\bin\opencc.dll", EntryPoint = "opencc_open")] private static extern IntPtr opencc_open(string configFileName); [DllImport(@"C:\Tools\opencc\bin\opencc.dll", EntryPoint = "opencc_convert_utf8")] private static extern IntPtr opencc_convert_utf8(IntPtr opencc, IntPtr input, long length); public static string ConvertFromSimplifiedToTraditional(this string text, string config = "s2t") { return OpenCC(text, config: config); } public static string ConvertFromSimplifiedToTraditionalTaiwan(this string text, string config = "s2twp") { return OpenCC(text, config: config); } public static string ConvertFromTraditionalTaiwanToSimplified(this string text, string config = "tw2sp") { return OpenCC(text, config: config); } public static string ConvertFromTraditionalToSimplified(this string text, string config = "t2s") { return OpenCC(text, config: config); } public static string OpenCC(this string text, string config) { var configFile = $"C:\\Tools\\OpenCC\\share\\opencc\\{config}....

May 19, 2024

Dockerslow

dotnet 6 部署到docker忽然變很慢 最近在公司將dotnet 6 用docker-compose部署到測試機時忽然要等3-5分鐘,最後查證是因為我們在linux環境上有做mount遠端磁碟造成部署時間過長 掛載的磁碟機沒有做資料夾分類所有檔案都在一個資料夾底下,在根目錄就有破百萬的檔案,導致container透過volume連到實體路徑時會讀取過久

May 5, 2024

安裝到手機

如何直接安裝到ios裝置 flutter build ios flutter install 選擇要安裝到哪個裝置

January 27, 2024

2024年度目標

2024年度目標 學會使用copilot,增加coding效率 3月前使用flutter開發記帳軟體並且上架 7月前TOEIC金色證書 開始錄製廣播

January 9, 2024

Dapper PostgreSQL Error

問題 當使用dapper呼叫postgresql時後,需要在in裡面查詢一批陣列會遇到下方的錯誤訊息 var Ids = [1,2,3,4]; DynamicParameters parameters = new(); parameters.Add("Ids", Ids); var strSQL = ""; strSQL +="select * from Users where id in @Ids;" await dapper.QueryAsync(strSQL,parameters); 42601: syntax error at or near “$1”\r\n\r\nPOSITION: 81 解法 改語法為any就可以解決這個問題。 var Ids = [1,2,3,4]; DynamicParameters parameters = new(); parameters.Add("Ids", Ids); var strSQL = ""; strSQL +="select * from Users where id = any(@Ids);" await dapper.QueryAsync(strSQL,parameters);

November 24, 2023

Three Tree

三棵樹 flutter共有三個核心 widget tree 在flutter很常看到一層包一層,MaterialApp、Scaffold這類組件都是widget tree,我們通常只會對到這層。 element tree 會將資料儲存在記憶體,並決定要不要重新繪製UI render tree 是由element tree控制,當element tree決定有必要修改,就會透過render tree進行UI修改

July 20, 2023

如何固定設備方向

如何鎖定裝置的方向 先到main.dart檔案找到最初的進入點main()要執行runApp時,先執行 WidgetsFlutterBinding.ensureInitialized(); 確定每次執行都要初始化 SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp,]) 選擇我們接受的方向 所在的函示庫記得引入 import ‘package:flutter/services.dart’; void main() { WidgetsFlutterBinding.ensureInitialized(); SystemChrome.setPreferredOrientations([ DeviceOrientation.portraitUp, ]).then((value) => { runApp(MaterialApp( home: const Expenses(), )) }); }

June 4, 2023

資料庫分表

資料庫架構設計 架構演變 讀寫分離 當遇到資料庫瓶頸時,最簡單的做法是將資料庫做主從架構 主資料庫只有做寫入並同步資料到其他從資料庫,被同步的資料庫可以是n個只做讀取 垂直分庫 資料還是持續增長後,就到了要做垂直分庫的架構了,垂直分庫的意思可以想像成將同一個資料表內的資料欄位做整理,分成多個資料庫,也就可以將不同資料庫放在不同機器上。 資料庫分成使用者資料庫、訂單資料庫、商品資料庫 水平分庫 資料量再更大量,最後的解決方案就是水平分庫,會將相同的資料表分成多個表 table01、table02、table03 Sharding中介軟體 要做到水平分庫會建議使用已經發展成熟的Sharding中介軟體 Sharding架構 有區分成兩種 Porxy架構 應用集成架構

June 4, 2023

Pub

快速介紹flutter安裝的函式庫 intl 轉成指定地區的日期格式 flutter pub add intl uuid 建立guid flutter pub add uuid transparent_image 當圖還沒有載入時可以有透明背景圖使用 flutter pub add transparent_image riverpod 是一個狀態管理的工具,當開始寫flutter就會遇到跟現在流行的框架vue/react一樣的問題,當我要傳遞資料時要一直往子層傳參數,才能將資料傳進去,這時riverpod就是來解決這個問題的 另一個社群討論度高的是Getx。 flutter pub add riverpod 要在需要的區塊上加上ProviderScope,下列範例就是所有區塊都要可以使用 void main() { runApp(const ProviderScope( child: MyApp(), )); } 新增一個檔案並建立供應方 import 'package:flutter_riverpod/flutter_riverpod.dart'; final demoProvider = Provider((ref) { return false; }); = & ConsumerWidget StatelessWidget改成ConsumerWidget StatefulWidget改成ConsumerStatefulWidget 建立接收方 //在要使用資料的地方使用下列 //當資料不會改變時可以使用read來取代watch,但官方建議一律使用watch,以免當資料異動時,沒有修改到 final demo = ref.watch(demoProvider); //接下來即可使用demo來做後續事情 http 進行restful api,透過這個套件可以發送請求到api並接收回傳 flutter pub add http image_picker 使用系統得相機功能,在ios中記得查看文件檔,將key放入文件所說明的plist檔案中 flutter pub add image_picker...

May 28, 2023