[{"data":1,"prerenderedAt":1535},["ShallowReactive",2],{"navigation":3,"\u002Frust\u002Fegui1":144,"\u002Frust\u002Fegui1-surround":1530},[4,36,53,86,131],{"title":5,"path":6,"stem":7,"children":8,"icon":35},"Golang","\u002Fgolang","1.golang\u002F1.index",[9,11,15,19,23,27,31],{"title":10,"path":6,"stem":7},"golang-各种golang学习以及使用过程中记录",{"title":12,"path":13,"stem":14},"gopls-官方gopls内置mcp server的基本使用","\u002Fgolang\u002Fgopls_mcp_usages","1.golang\u002F2.gopls_mcp_usages",{"title":16,"path":17,"stem":18},"实践-(一)创建简单的http服务器","\u002Fgolang\u002Fgo_http_simple_server","1.golang\u002F3.go_http_simple_server",{"title":20,"path":21,"stem":22},"wails入门系列(一)环境安装与demo","\u002Fgolang\u002Fwails_start","1.golang\u002F4.wails_start",{"title":24,"path":25,"stem":26},"wails入门系列(二)无边框应用的菜单栏以及窗口拖拽","\u002Fgolang\u002Fwails_frameless","1.golang\u002F5.wails_frameless",{"title":28,"path":29,"stem":30},"go\u002Fredis-redis中大数字自动转换成指数形式的处理","\u002Fgolang\u002Fredis_big_num","1.golang\u002F6.redis_big_num",{"title":32,"path":33,"stem":34},"go\u002F方法记录-局部坐标与世界坐标间的相互转换(位置\u002F方向)","\u002Fgolang\u002Fworld_local_transform","1.golang\u002F7.world_local_transform",false,{"title":37,"icon":35,"path":38,"stem":39,"children":40,"page":35},"瞎折腾","\u002Ftinkering","2.tinkering",[41,45,49],{"title":42,"path":43,"stem":44},"mi50显卡ubuntu运行大模型开坑(一)显卡准备以及驱动安装","\u002Ftinkering\u002Fmi50_gpu_llm_1","2.tinkering\u002F1.mi50_gpu_llm_1",{"title":46,"path":47,"stem":48},"mi50显卡ubuntu运行大模型开坑(二)使用llama.cpp部署Qwen3系列","\u002Ftinkering\u002Fmi50_gpu_llm_2","2.tinkering\u002F2.mi50_gpu_llm_2",{"title":50,"path":51,"stem":52},"mi50显卡ubuntu运行大模型开坑(三)安装风扇并且控制转速","\u002Ftinkering\u002Fmi50_gpu_llm_3","2.tinkering\u002F3.mi50_gpu_llm_3",{"title":54,"icon":35,"path":55,"stem":56,"children":57,"page":35},"LLM","\u002Fllm","3.llm",[58,62,66,70,74,78,82],{"title":59,"path":60,"stem":61},"langchain入门-安装以及初次使用(deepseek api版本)","\u002Fllm\u002Flangchain1","3.llm\u002F01.langchain1",{"title":63,"path":64,"stem":65},"langchain入门-使用langchain调用本地部署的大模型(以llama.cpp以及ollama为例)","\u002Fllm\u002Flangchain2","3.llm\u002F02.langchain2",{"title":67,"path":68,"stem":69},"langchain入门-使用langchain编写一个简单的聊天机器人(DeepSeek API&命令行版本)","\u002Fllm\u002Flangchain3","3.llm\u002F03.langchain3",{"title":71,"path":72,"stem":73},"langchain入门-使用langchain构建一个拥有RAG能力的代码问答应用(DeepSeek API&本地bge-m3&命令行版本)","\u002Fllm\u002Flangchain4","3.llm\u002F04.langchain4",{"title":75,"path":76,"stem":77},"golang\u002Feino eino框架的基础使用 Message以及ChatModel入门","\u002Fllm\u002Feino1","3.llm\u002F05.eino1",{"title":79,"path":80,"stem":81},"golang\u002Feino eino框架的基础使用 在ChatModel中使用工具","\u002Fllm\u002Feino2","3.llm\u002F06.eino2",{"title":83,"path":84,"stem":85},"llm\u002Fagent agent-zero初步搭建与使用","\u002Fllm\u002Fagent_zero_start","3.llm\u002F07.agent_zero_start",{"title":87,"icon":35,"path":88,"stem":89,"children":90,"page":35},"Verilog","\u002Fverilog","4.verilog",[91,95,99,103,107,111,115,119,123,127],{"title":92,"path":93,"stem":94},"31条指令单周期cpu设计(Verilog)-(一)相关软件","\u002Fverilog\u002Fmips1","4.verilog\u002F01.mips1",{"title":96,"path":97,"stem":98},"31条指令单周期cpu设计(Verilog)-(二)总体设计","\u002Fverilog\u002Fmips2","4.verilog\u002F02.mips2",{"title":100,"path":101,"stem":102},"31条指令单周期cpu设计(Verilog)-(三)指令分析","\u002Fverilog\u002Fmips3","4.verilog\u002F03.mips3",{"title":104,"path":105,"stem":106},"31条指令单周期cpu设计(Verilog)-(四)数据输入输出关系表","\u002Fverilog\u002Fmips4","4.verilog\u002F04.mips4",{"title":108,"path":109,"stem":110},"31条指令单周期cpu设计(Verilog)-(五)整体数据通路图设计","\u002Fverilog\u002Fmips5","4.verilog\u002F05.mips5",{"title":112,"path":113,"stem":114},"31条指令单周期cpu设计(Verilog)-(六)指令操作时间表设计","\u002Fverilog\u002Fmips6","4.verilog\u002F06.mips6",{"title":116,"path":117,"stem":118},"31条指令单周期cpu设计(Verilog)-(七)整体代码结构","\u002Fverilog\u002Fmips7","4.verilog\u002F07.mips7",{"title":120,"path":121,"stem":122},"31条指令单周期cpu设计(Verilog)-(八)上代码→指令译码以及控制器","\u002Fverilog\u002Fmips8","4.verilog\u002F08.mips8",{"title":124,"path":125,"stem":126},"31条指令单周期cpu设计(Verilog)-(九)上代码→基础模块实现","\u002Fverilog\u002Fmips9","4.verilog\u002F09.mips9",{"title":128,"path":129,"stem":130},"31条指令单周期cpu设计(Verilog)-(十)上代码→顶层模块设计&总结","\u002Fverilog\u002Fmips10","4.verilog\u002F10.mips10",{"title":132,"icon":35,"path":133,"stem":134,"children":135,"page":35},"Rust","\u002Frust","5.rust",[136,140],{"title":137,"path":138,"stem":139},"egui(一)从编译运行template开始","\u002Frust\u002Fegui1","5.rust\u002F01.egui1",{"title":141,"path":142,"stem":143},"egui(二)看看template的main函数：日志输出以及eframe run_native","\u002Frust\u002Fegui2","5.rust\u002F02.egui2",{"id":145,"title":137,"body":146,"description":1521,"extension":1522,"links":1523,"meta":1524,"navigation":132,"path":138,"seo":1526,"stem":139,"__hash__":1529},"docs\u002F5.rust\u002F01.egui1.md",{"type":147,"value":148,"toc":1513},"minimark",[149,153,188,191,233,236,654,657,963,966,1484,1487,1509],[150,151,152],"h2",{"id":152},"说在前面",[154,155,156],"blockquote",{},[157,158,159,163,166,169,172,175,185],"ul",{},[160,161,162],"li",{},"rust新手，egui没啥找到啥教程，这里自己记录下学习过程",[160,164,165],{},"环境：windows11 22H2",[160,167,168],{},"rust版本：rustc 1.71.1",[160,170,171],{},"egui版本：0.22.0",[160,173,174],{},"eframe版本：0.22.0",[160,176,177,178],{},"rust windows安装参考：",[179,180,184],"a",{"href":181,"rel":182},"https:\u002F\u002Fblog.csdn.net\u002Fqq_33446100\u002Farticle\u002Fdetails\u002F132119606",[183],"nofollow","这里",[160,186,187],{},"本文默认读者已安装相关环境(git、vscode等)",[150,189,190],{"id":190},"关于egui",[157,192,193,200,216],{},[160,194,195],{},[179,196,199],{"href":197,"rel":198},"https:\u002F\u002Fgithub.com\u002Femilk\u002Fegui",[183],"egui github",[160,201,202,207,212],{},[179,203,206],{"href":204,"rel":205},"https:\u002F\u002Fwww.egui.rs\u002F#demo",[183],"demo online",[208,209],"img",{"alt":210,"src":211},"一些官方例子",".\u002Frust\u002F1.webp",[208,213],{"alt":214,"src":215},"想听听cpu轰鸣的声音，可以将左上的参数拉满",".\u002Frust\u002F2.webp",[160,217,218,219,223,228],{},"关于",[220,221,222],"code",{},"immediate mode",[179,224,227],{"href":225,"rel":226},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FImmediate_mode_GUI",[183],"wikipedia",[179,229,232],{"href":230,"rel":231},"https:\u002F\u002Flearn.microsoft.com\u002Fzh-cn\u002Fwindows\u002Fwin32\u002Flearnwin32\u002Fretained-mode-versus-immediate-mode",[183],"microsoft learn",[150,234,235],{"id":235},"开始吧",[157,237,238,282,293],{},[160,239,240,241,244,245,248,249,252,253,256,257],{},"先",[220,242,243],{},"clone","下这个项目(也可以使用",[220,246,247],{},"github","提供的",[220,250,251],{},"Use this template","功能)，这是官方说明中的一个",[220,254,255],{},"template","。\n",[258,259,264],"pre",{"className":260,"code":261,"language":262,"meta":263,"style":263},"language-shell shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","git clone https:\u002F\u002Fgithub.com\u002Femilk\u002Feframe_template.git\n","shell","",[220,265,266],{"__ignoreMap":263},[267,268,271,275,279],"span",{"class":269,"line":270},"line",1,[267,272,274],{"class":273},"sBMFI","git",[267,276,278],{"class":277},"sfazB"," clone",[267,280,281],{"class":277}," https:\u002F\u002Fgithub.com\u002Femilk\u002Feframe_template.git\n",[160,283,284,285,288,289],{},"删除项目中的",[220,286,287],{},"toolchain","文件\n",[208,290],{"alt":291,"src":292},"在这里插入图片描述",".\u002Frust\u002F3.webp",[160,294,295,296,300,301,650,651],{},"编译运行（cargo换源见",[179,297,299],{"href":181,"rel":298},[183],"安装参考","）\n",[258,302,304],{"className":260,"code":303,"language":262,"meta":263,"style":263},"PS E:\\eframe_template-master> cargo run \n    Updating `rsproxy` index\nremote: Counting objects: 32254, done.\nremote: Compressing objects: 100% (14081\u002F14081), done.\nremote: Total 32254 (delta 23946), reused 25317 (delta 17601)\nReceiving objects: 100% (32254\u002F32254), 7.70 MiB | 7.47 MiB\u002Fs, done.\nResolving deltas: 100% (23946\u002F23946), completed with 2726 local objects.\nFrom https:\u002F\u002Frsproxy.cn\u002Fcrates.io-index\n + 69b92ab647...84fdefbd80 HEAD       -> origin\u002FHEAD  (forced update)\n  Downloaded ...\n  Downloaded 21 crates (14.4 MB) in 12.60s (largest was `windows` at 11.9 MB)\n   Compiling ...\n   Compiling egui-winit v0.22.0\n   Compiling eframe v0.22.0\n   Compiling eframe_template v0.1.0 (E:\\Workspace\\eframe_template-master)\n    Finished dev [unoptimized + debuginfo] target(s) in 1m 12s\n     Running `target\\debug\\eframe_template.exe`\n",[220,305,306,337,355,373,389,419,443,464,473,501,510,554,562,573,583,597,636],{"__ignoreMap":263},[267,307,308,311,314,318,321,324,328,331,334],{"class":269,"line":270},[267,309,310],{"class":273},"PS",[267,312,313],{"class":277}," E:",[267,315,317],{"class":316},"sTEyZ","\\e",[267,319,320],{"class":277},"frame_template-maste",[267,322,323],{"class":316},"r",[267,325,327],{"class":326},"sMK4o",">",[267,329,330],{"class":277}," cargo",[267,332,333],{"class":277}," run",[267,335,336],{"class":316}," \n",[267,338,340,343,346,349,352],{"class":269,"line":339},2,[267,341,342],{"class":273},"    Updating",[267,344,345],{"class":326}," `",[267,347,348],{"class":273},"rsproxy",[267,350,351],{"class":326},"`",[267,353,354],{"class":273}," index\n",[267,356,358,361,364,367,370],{"class":269,"line":357},3,[267,359,360],{"class":273},"remote:",[267,362,363],{"class":277}," Counting",[267,365,366],{"class":277}," objects:",[267,368,369],{"class":277}," 32254,",[267,371,372],{"class":277}," done.\n",[267,374,376,378,381,383,386],{"class":269,"line":375},4,[267,377,360],{"class":273},[267,379,380],{"class":277}," Compressing",[267,382,366],{"class":277},[267,384,385],{"class":277}," 100%",[267,387,388],{"class":316}," (14081\u002F14081), done.\n",[267,390,392,394,397,401,404,407,410,413,416],{"class":269,"line":391},5,[267,393,360],{"class":273},[267,395,396],{"class":277}," Total",[267,398,400],{"class":399},"sbssI"," 32254",[267,402,403],{"class":316}," (delta ",[267,405,406],{"class":399},"23946",[267,408,409],{"class":316},"), reused 25317 (",[267,411,412],{"class":273},"delta",[267,414,415],{"class":399}," 17601",[267,417,418],{"class":316},")\n",[267,420,422,425,427,429,432,435,438,441],{"class":269,"line":421},6,[267,423,424],{"class":273},"Receiving",[267,426,366],{"class":277},[267,428,385],{"class":277},[267,430,431],{"class":316}," (32254\u002F32254), 7.70 MiB ",[267,433,434],{"class":326},"|",[267,436,437],{"class":273}," 7.47",[267,439,440],{"class":277}," MiB\u002Fs,",[267,442,372],{"class":277},[267,444,446,449,452,454,457,461],{"class":269,"line":445},7,[267,447,448],{"class":273},"Resolving",[267,450,451],{"class":277}," deltas:",[267,453,385],{"class":277},[267,455,456],{"class":316}," (23946\u002F23946), completed with 2726 ",[267,458,460],{"class":459},"spNyl","local",[267,462,463],{"class":316}," objects.\n",[267,465,467,470],{"class":269,"line":466},8,[267,468,469],{"class":273},"From",[267,471,472],{"class":277}," https:\u002F\u002Frsproxy.cn\u002Fcrates.io-index\n",[267,474,476,479,482,485,488,490,493,496,499],{"class":269,"line":475},9,[267,477,478],{"class":273}," +",[267,480,481],{"class":277}," 69b92ab647...84fdefbd80",[267,483,484],{"class":277}," HEAD",[267,486,487],{"class":316},"       -",[267,489,327],{"class":326},[267,491,492],{"class":277}," origin\u002FHEAD",[267,494,495],{"class":316},"  (forced ",[267,497,498],{"class":277},"update",[267,500,418],{"class":316},[267,502,504,507],{"class":269,"line":503},10,[267,505,506],{"class":273},"  Downloaded",[267,508,509],{"class":277}," ...\n",[267,511,513,515,518,521,524,527,530,533,536,538,541,543,546,549,552],{"class":269,"line":512},11,[267,514,506],{"class":273},[267,516,517],{"class":399}," 21",[267,519,520],{"class":277}," crates",[267,522,523],{"class":316}," (14.4 ",[267,525,526],{"class":277},"MB",[267,528,529],{"class":316},") in 12.60s (",[267,531,532],{"class":273},"largest",[267,534,535],{"class":277}," was",[267,537,345],{"class":326},[267,539,540],{"class":273},"windows",[267,542,351],{"class":326},[267,544,545],{"class":273}," at",[267,547,548],{"class":399}," 11.9",[267,550,551],{"class":277}," MB",[267,553,418],{"class":316},[267,555,557,560],{"class":269,"line":556},12,[267,558,559],{"class":273},"   Compiling",[267,561,509],{"class":277},[267,563,565,567,570],{"class":269,"line":564},13,[267,566,559],{"class":273},[267,568,569],{"class":277}," egui-winit",[267,571,572],{"class":277}," v0.22.0\n",[267,574,576,578,581],{"class":269,"line":575},14,[267,577,559],{"class":273},[267,579,580],{"class":277}," eframe",[267,582,572],{"class":277},[267,584,586,588,591,594],{"class":269,"line":585},15,[267,587,559],{"class":273},[267,589,590],{"class":277}," eframe_template",[267,592,593],{"class":277}," v0.1.0",[267,595,596],{"class":316}," (E:\\Workspace\\eframe_template-master)\n",[267,598,600,603,606,609,612,615,618,621,624,627,630,633],{"class":269,"line":599},16,[267,601,602],{"class":273},"    Finished",[267,604,605],{"class":277}," dev",[267,607,608],{"class":316}," [unoptimized ",[267,610,611],{"class":277},"+",[267,613,614],{"class":277}," debuginfo]",[267,616,617],{"class":277}," target",[267,619,620],{"class":326},"(",[267,622,623],{"class":273},"s",[267,625,626],{"class":326},")",[267,628,629],{"class":277}," in",[267,631,632],{"class":277}," 1m",[267,634,635],{"class":277}," 12s\n",[267,637,639,642,644,647],{"class":269,"line":638},17,[267,640,641],{"class":273},"     Running",[267,643,345],{"class":326},[267,645,646],{"class":273},"target\\debug\\eframe_template.exe",[267,648,649],{"class":326},"`\n","\n可以看到我们的应用窗口打开了\n",[208,652],{"alt":291,"src":653},".\u002Frust\u002F4.webp",[150,655,656],{"id":656},"小小的尝试",[157,658,659,673,724,946,958],{},[160,660,661,662,665,666,669,670],{},"根据",[220,663,664],{},"readme","中的内容，我们可以修改下工程的名字，现在我们的应用名称是",[220,667,668],{},"eframe template","，我们将它改成",[220,671,672],{},"demo app",[160,674,675,676,679],{},"修改",[220,677,678],{},"Cargo.toml",[258,680,684],{"className":681,"code":682,"language":683,"meta":263,"style":263},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[package] \nname = \"demo_app\" \u002F\u002F 修改这里\nversion = \"0.1.0\"\nauthors = [\"o0olele \u003Co0o@lele.com>\"] \u002F\u002F 修改这里\nedition = \"2021\"\nrust-version = \"1.71\" \u002F\u002F 这里可以替换成我们使用的rust版本\n","yaml",[220,685,686,699,704,709,714,719],{"__ignoreMap":263},[267,687,688,691,694,697],{"class":269,"line":270},[267,689,690],{"class":326},"[",[267,692,693],{"class":277},"package",[267,695,696],{"class":326},"]",[267,698,336],{"class":316},[267,700,701],{"class":269,"line":339},[267,702,703],{"class":277},"name = \"demo_app\" \u002F\u002F 修改这里\n",[267,705,706],{"class":269,"line":357},[267,707,708],{"class":277},"version = \"0.1.0\"\n",[267,710,711],{"class":269,"line":375},[267,712,713],{"class":277},"authors = [\"o0olele \u003Co0o@lele.com>\"] \u002F\u002F 修改这里\n",[267,715,716],{"class":269,"line":391},[267,717,718],{"class":277},"edition = \"2021\"\n",[267,720,721],{"class":269,"line":421},[267,722,723],{"class":277},"rust-version = \"1.71\" \u002F\u002F 这里可以替换成我们使用的rust版本\n",[160,725,675,726,729],{},[220,727,728],{},"src\u002Fmain.rs",[258,730,734],{"className":731,"code":732,"language":733,"meta":263,"style":263},"language-rust shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","#![warn(clippy::all, rust_2018_idioms)]\n#![cfg_attr(not(debug_assertions), windows_subsystem = \"windows\")] \u002F\u002F hide console window on Windows in release\n\n\u002F\u002F When compiling natively:\n#[cfg(not(target_arch = \"wasm32\"))]\nfn main() -> eframe::Result\u003C()> {\n    env_logger::init(); \u002F\u002F Log to stderr (if you run with `RUST_LOG=debug`).\n\n    let native_options = eframe::NativeOptions::default();\n    eframe::run_native(\n        \"demo app\", \u002F\u002F `eframe template` to `demo app`\n        native_options,\n        Box::new(|cc| Box::new(demo_app::TemplateApp::new(cc))), \n        \u002F\u002F `eframe_template::TemplateApp` to `demo_app::TemplateApp`\n    )\n}\n\n\u002F\u002F When compiling to web using trunk:\n#[cfg(target_arch = \"wasm32\")]\nfn main() {\n    \u002F\u002F Redirect `log` message to `console.log` and friends:\n    eframe::WebLogger::init(log::LevelFilter::Debug).ok();\n\n    let web_options = eframe::WebOptions::default();\n\n    wasm_bindgen_futures::spawn_local(async {\n        eframe::WebRunner::new()\n            .start(\n                \"the_canvas_id\", \u002F\u002F hardcode it\n                web_options,\n                Box::new(|cc| Box::new(demo_app::TemplateApp::new(cc))), \n                \u002F\u002F `eframe_template::TemplateApp` to `demo_app::TemplateApp`\n            )\n            .await\n            .expect(\"failed to start eframe\");\n    });\n}\n","rust",[220,735,736,741,749,755,760,765,770,775,779,784,789,797,802,807,812,817,822,826,832,838,844,850,856,861,867,872,878,884,890,899,905,911,917,923,929,935,941],{"__ignoreMap":263},[267,737,738],{"class":269,"line":270},[267,739,740],{},"#![warn(clippy::all, rust_2018_idioms)]\n",[267,742,743,746],{"class":269,"line":339},[267,744,745],{},"#![cfg_attr(not(debug_assertions), windows_subsystem = \"windows\")]",[267,747,748],{}," \u002F\u002F hide console window on Windows in release\n",[267,750,751],{"class":269,"line":357},[267,752,754],{"emptyLinePlaceholder":753},true,"\n",[267,756,757],{"class":269,"line":375},[267,758,759],{},"\u002F\u002F When compiling natively:\n",[267,761,762],{"class":269,"line":391},[267,763,764],{},"#[cfg(not(target_arch = \"wasm32\"))]\n",[267,766,767],{"class":269,"line":421},[267,768,769],{},"fn main() -> eframe::Result\u003C()> {\n",[267,771,772],{"class":269,"line":445},[267,773,774],{},"    env_logger::init(); \u002F\u002F Log to stderr (if you run with `RUST_LOG=debug`).\n",[267,776,777],{"class":269,"line":466},[267,778,754],{"emptyLinePlaceholder":753},[267,780,781],{"class":269,"line":475},[267,782,783],{},"    let native_options = eframe::NativeOptions::default();\n",[267,785,786],{"class":269,"line":503},[267,787,788],{},"    eframe::run_native(\n",[267,790,791,794],{"class":269,"line":512},[267,792,793],{},"        \"demo app\",",[267,795,796],{}," \u002F\u002F `eframe template` to `demo app`\n",[267,798,799],{"class":269,"line":556},[267,800,801],{},"        native_options,\n",[267,803,804],{"class":269,"line":564},[267,805,806],{},"        Box::new(|cc| Box::new(demo_app::TemplateApp::new(cc))), \n",[267,808,809],{"class":269,"line":575},[267,810,811],{},"        \u002F\u002F `eframe_template::TemplateApp` to `demo_app::TemplateApp`\n",[267,813,814],{"class":269,"line":585},[267,815,816],{},"    )\n",[267,818,819],{"class":269,"line":599},[267,820,821],{},"}\n",[267,823,824],{"class":269,"line":638},[267,825,754],{"emptyLinePlaceholder":753},[267,827,829],{"class":269,"line":828},18,[267,830,831],{},"\u002F\u002F When compiling to web using trunk:\n",[267,833,835],{"class":269,"line":834},19,[267,836,837],{},"#[cfg(target_arch = \"wasm32\")]\n",[267,839,841],{"class":269,"line":840},20,[267,842,843],{},"fn main() {\n",[267,845,847],{"class":269,"line":846},21,[267,848,849],{},"    \u002F\u002F Redirect `log` message to `console.log` and friends:\n",[267,851,853],{"class":269,"line":852},22,[267,854,855],{},"    eframe::WebLogger::init(log::LevelFilter::Debug).ok();\n",[267,857,859],{"class":269,"line":858},23,[267,860,754],{"emptyLinePlaceholder":753},[267,862,864],{"class":269,"line":863},24,[267,865,866],{},"    let web_options = eframe::WebOptions::default();\n",[267,868,870],{"class":269,"line":869},25,[267,871,754],{"emptyLinePlaceholder":753},[267,873,875],{"class":269,"line":874},26,[267,876,877],{},"    wasm_bindgen_futures::spawn_local(async {\n",[267,879,881],{"class":269,"line":880},27,[267,882,883],{},"        eframe::WebRunner::new()\n",[267,885,887],{"class":269,"line":886},28,[267,888,889],{},"            .start(\n",[267,891,893,896],{"class":269,"line":892},29,[267,894,895],{},"                \"the_canvas_id\",",[267,897,898],{}," \u002F\u002F hardcode it\n",[267,900,902],{"class":269,"line":901},30,[267,903,904],{},"                web_options,\n",[267,906,908],{"class":269,"line":907},31,[267,909,910],{},"                Box::new(|cc| Box::new(demo_app::TemplateApp::new(cc))), \n",[267,912,914],{"class":269,"line":913},32,[267,915,916],{},"                \u002F\u002F `eframe_template::TemplateApp` to `demo_app::TemplateApp`\n",[267,918,920],{"class":269,"line":919},33,[267,921,922],{},"            )\n",[267,924,926],{"class":269,"line":925},34,[267,927,928],{},"            .await\n",[267,930,932],{"class":269,"line":931},35,[267,933,934],{},"            .expect(\"failed to start eframe\");\n",[267,936,938],{"class":269,"line":937},36,[267,939,940],{},"    });\n",[267,942,944],{"class":269,"line":943},37,[267,945,821],{},[160,947,948,949,952,953,955],{},"再次",[220,950,951],{},"cargo run","，可以看到我们的应用名称已经变成了",[220,954,672],{},[208,956],{"alt":291,"src":957},".\u002Frust\u002F5.webp",[160,959,960,962],{},[220,961,664],{},"中的另外两个修改是web 应用构建相关的，后面再说",[150,964,965],{"id":965},"尝试下web",[157,967,968,1006,1032,1050,1059,1066,1108],{},[160,969,970,971,974,975],{},"添加",[220,972,973],{},"wasm","相关资源\n",[258,976,978],{"className":260,"code":977,"language":262,"meta":263,"style":263},"set $RUSTUP_DIST_SERVER=https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Frustup; rustup target add wasm32-unknown-unknown \n",[220,979,980],{"__ignoreMap":263},[267,981,982,986,989,992,995,998,1000,1003],{"class":269,"line":270},[267,983,985],{"class":984},"s2Zo4","set",[267,987,988],{"class":316}," $RUSTUP_DIST_SERVER",[267,990,991],{"class":277},"=https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Frustup",[267,993,994],{"class":326},";",[267,996,997],{"class":273}," rustup",[267,999,617],{"class":277},[267,1001,1002],{"class":277}," add",[267,1004,1005],{"class":277}," wasm32-unknown-unknown\n",[160,1007,1008,1009,1012,1013],{},"安装",[220,1010,1011],{},"trunk","(真tm吃cpu)\n",[258,1014,1016],{"className":260,"code":1015,"language":262,"meta":263,"style":263},"cargo install --locked trunk\n",[220,1017,1018],{"__ignoreMap":263},[267,1019,1020,1023,1026,1029],{"class":269,"line":270},[267,1021,1022],{"class":273},"cargo",[267,1024,1025],{"class":277}," install",[267,1027,1028],{"class":277}," --locked",[267,1030,1031],{"class":277}," trunk\n",[160,1033,1034,1035,1012,1038],{},"开启",[220,1036,1037],{},"trunk server",[258,1039,1041],{"className":260,"code":1040,"language":262,"meta":263,"style":263},"trunk serve\n",[220,1042,1043],{"__ignoreMap":263},[267,1044,1045,1047],{"class":269,"line":270},[267,1046,1011],{"class":273},[267,1048,1049],{"class":277}," serve\n",[160,1051,1052,1053,1056],{},"浏览器打开",[220,1054,1055],{},"http:\u002F\u002F127.0.0.1:8080",[208,1057],{"alt":291,"src":1058},".\u002Frust\u002F6.webp",[160,1060,1061,1062,1065],{},"可以看到我们的应用名称还是",[220,1063,1064],{},"eframe_template","，这个时候我们可以进行一些修改",[160,1067,675,1068,1071],{},[220,1069,1070],{},"index.html",[258,1072,1076],{"className":1073,"code":1074,"language":1075,"meta":263,"style":263},"language-html shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","...\n\u003Ctitle>demo app\u003C\u002Ftitle>\n...\n","html",[220,1077,1078,1083,1104],{"__ignoreMap":263},[267,1079,1080],{"class":269,"line":270},[267,1081,1082],{"class":316},"...\n",[267,1084,1085,1088,1092,1094,1096,1099,1101],{"class":269,"line":339},[267,1086,1087],{"class":326},"\u003C",[267,1089,1091],{"class":1090},"swJcz","title",[267,1093,327],{"class":326},[267,1095,672],{"class":316},[267,1097,1098],{"class":326},"\u003C\u002F",[267,1100,1091],{"class":1090},[267,1102,1103],{"class":326},">\n",[267,1105,1106],{"class":269,"line":357},[267,1107,1082],{"class":316},[160,1109,675,1110,1113,1481],{},[220,1111,1112],{},"assets\u002Fsw.js",[258,1114,1118],{"className":1115,"code":1116,"language":1117,"meta":263,"style":263},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","var cacheName = 'egui-template-pwa';\nvar filesToCache = [\n  '.\u002F',\n  '.\u002Findex.html',\n  '.\u002Fdemo_app.js',\n  '.\u002Fdemo_app_bg.wasm',\n];\n\n\u002F* Start the service worker and cache all of the app's content *\u002F\nself.addEventListener('install', function (e) {\n  e.waitUntil(\n    caches.open(cacheName).then(function (cache) {\n      return cache.addAll(filesToCache);\n    })\n  );\n});\n\n\u002F* Serve cached content when offline *\u002F\nself.addEventListener('fetch', function (e) {\n  e.respondWith(\n    caches.match(e.request).then(function (response) {\n      return response || fetch(e.request);\n    })\n  );\n});\n","js",[220,1119,1120,1143,1155,1168,1179,1190,1201,1207,1211,1217,1255,1268,1304,1327,1334,1341,1350,1354,1359,1388,1399,1436,1461,1467,1473],{"__ignoreMap":263},[267,1121,1122,1125,1128,1131,1134,1137,1140],{"class":269,"line":270},[267,1123,1124],{"class":459},"var",[267,1126,1127],{"class":316}," cacheName ",[267,1129,1130],{"class":326},"=",[267,1132,1133],{"class":326}," '",[267,1135,1136],{"class":277},"egui-template-pwa",[267,1138,1139],{"class":326},"'",[267,1141,1142],{"class":326},";\n",[267,1144,1145,1147,1150,1152],{"class":269,"line":339},[267,1146,1124],{"class":459},[267,1148,1149],{"class":316}," filesToCache ",[267,1151,1130],{"class":326},[267,1153,1154],{"class":316}," [\n",[267,1156,1157,1160,1163,1165],{"class":269,"line":357},[267,1158,1159],{"class":326},"  '",[267,1161,1162],{"class":277},".\u002F",[267,1164,1139],{"class":326},[267,1166,1167],{"class":326},",\n",[267,1169,1170,1172,1175,1177],{"class":269,"line":375},[267,1171,1159],{"class":326},[267,1173,1174],{"class":277},".\u002Findex.html",[267,1176,1139],{"class":326},[267,1178,1167],{"class":326},[267,1180,1181,1183,1186,1188],{"class":269,"line":391},[267,1182,1159],{"class":326},[267,1184,1185],{"class":277},".\u002Fdemo_app.js",[267,1187,1139],{"class":326},[267,1189,1167],{"class":326},[267,1191,1192,1194,1197,1199],{"class":269,"line":421},[267,1193,1159],{"class":326},[267,1195,1196],{"class":277},".\u002Fdemo_app_bg.wasm",[267,1198,1139],{"class":326},[267,1200,1167],{"class":326},[267,1202,1203,1205],{"class":269,"line":445},[267,1204,696],{"class":316},[267,1206,1142],{"class":326},[267,1208,1209],{"class":269,"line":466},[267,1210,754],{"emptyLinePlaceholder":753},[267,1212,1213],{"class":269,"line":475},[267,1214,1216],{"class":1215},"sHwdD","\u002F* Start the service worker and cache all of the app's content *\u002F\n",[267,1218,1219,1222,1225,1228,1230,1232,1235,1237,1240,1243,1246,1250,1252],{"class":269,"line":503},[267,1220,1221],{"class":316},"self",[267,1223,1224],{"class":326},".",[267,1226,1227],{"class":984},"addEventListener",[267,1229,620],{"class":316},[267,1231,1139],{"class":326},[267,1233,1234],{"class":277},"install",[267,1236,1139],{"class":326},[267,1238,1239],{"class":326},",",[267,1241,1242],{"class":459}," function",[267,1244,1245],{"class":326}," (",[267,1247,1249],{"class":1248},"sHdIc","e",[267,1251,626],{"class":326},[267,1253,1254],{"class":326}," {\n",[267,1256,1257,1260,1262,1265],{"class":269,"line":512},[267,1258,1259],{"class":316},"  e",[267,1261,1224],{"class":326},[267,1263,1264],{"class":984},"waitUntil",[267,1266,1267],{"class":1090},"(\n",[267,1269,1270,1273,1275,1278,1280,1283,1285,1287,1290,1292,1295,1297,1300,1302],{"class":269,"line":556},[267,1271,1272],{"class":316},"    caches",[267,1274,1224],{"class":326},[267,1276,1277],{"class":984},"open",[267,1279,620],{"class":1090},[267,1281,1282],{"class":316},"cacheName",[267,1284,626],{"class":1090},[267,1286,1224],{"class":326},[267,1288,1289],{"class":984},"then",[267,1291,620],{"class":1090},[267,1293,1294],{"class":459},"function",[267,1296,1245],{"class":326},[267,1298,1299],{"class":1248},"cache",[267,1301,626],{"class":326},[267,1303,1254],{"class":326},[267,1305,1306,1310,1313,1315,1318,1320,1323,1325],{"class":269,"line":564},[267,1307,1309],{"class":1308},"s7zQu","      return",[267,1311,1312],{"class":316}," cache",[267,1314,1224],{"class":326},[267,1316,1317],{"class":984},"addAll",[267,1319,620],{"class":1090},[267,1321,1322],{"class":316},"filesToCache",[267,1324,626],{"class":1090},[267,1326,1142],{"class":326},[267,1328,1329,1332],{"class":269,"line":575},[267,1330,1331],{"class":326},"    }",[267,1333,418],{"class":1090},[267,1335,1336,1339],{"class":269,"line":585},[267,1337,1338],{"class":1090},"  )",[267,1340,1142],{"class":326},[267,1342,1343,1346,1348],{"class":269,"line":599},[267,1344,1345],{"class":326},"}",[267,1347,626],{"class":316},[267,1349,1142],{"class":326},[267,1351,1352],{"class":269,"line":638},[267,1353,754],{"emptyLinePlaceholder":753},[267,1355,1356],{"class":269,"line":828},[267,1357,1358],{"class":1215},"\u002F* Serve cached content when offline *\u002F\n",[267,1360,1361,1363,1365,1367,1369,1371,1374,1376,1378,1380,1382,1384,1386],{"class":269,"line":834},[267,1362,1221],{"class":316},[267,1364,1224],{"class":326},[267,1366,1227],{"class":984},[267,1368,620],{"class":316},[267,1370,1139],{"class":326},[267,1372,1373],{"class":277},"fetch",[267,1375,1139],{"class":326},[267,1377,1239],{"class":326},[267,1379,1242],{"class":459},[267,1381,1245],{"class":326},[267,1383,1249],{"class":1248},[267,1385,626],{"class":326},[267,1387,1254],{"class":326},[267,1389,1390,1392,1394,1397],{"class":269,"line":840},[267,1391,1259],{"class":316},[267,1393,1224],{"class":326},[267,1395,1396],{"class":984},"respondWith",[267,1398,1267],{"class":1090},[267,1400,1401,1403,1405,1408,1410,1412,1414,1417,1419,1421,1423,1425,1427,1429,1432,1434],{"class":269,"line":846},[267,1402,1272],{"class":316},[267,1404,1224],{"class":326},[267,1406,1407],{"class":984},"match",[267,1409,620],{"class":1090},[267,1411,1249],{"class":316},[267,1413,1224],{"class":326},[267,1415,1416],{"class":316},"request",[267,1418,626],{"class":1090},[267,1420,1224],{"class":326},[267,1422,1289],{"class":984},[267,1424,620],{"class":1090},[267,1426,1294],{"class":459},[267,1428,1245],{"class":326},[267,1430,1431],{"class":1248},"response",[267,1433,626],{"class":326},[267,1435,1254],{"class":326},[267,1437,1438,1440,1443,1446,1449,1451,1453,1455,1457,1459],{"class":269,"line":852},[267,1439,1309],{"class":1308},[267,1441,1442],{"class":316}," response",[267,1444,1445],{"class":326}," ||",[267,1447,1448],{"class":984}," fetch",[267,1450,620],{"class":1090},[267,1452,1249],{"class":316},[267,1454,1224],{"class":326},[267,1456,1416],{"class":316},[267,1458,626],{"class":1090},[267,1460,1142],{"class":326},[267,1462,1463,1465],{"class":269,"line":858},[267,1464,1331],{"class":326},[267,1466,418],{"class":1090},[267,1468,1469,1471],{"class":269,"line":863},[267,1470,1338],{"class":1090},[267,1472,1142],{"class":326},[267,1474,1475,1477,1479],{"class":269,"line":869},[267,1476,1345],{"class":326},[267,1478,626],{"class":316},[267,1480,1142],{"class":326},[208,1482],{"alt":291,"src":1483},".\u002Frust\u002F7.webp",[150,1485,1486],{"id":1486},"一些相关数据",[157,1488,1489,1499],{},[160,1490,1491,1492,1495,1496],{},"该桌面应用内存占用(",[220,1493,1494],{},"cargo run --release",")，有点高啊\n",[208,1497],{"alt":291,"src":1498},".\u002Frust\u002F8.webp",[160,1500,1501,1502,1505,1506],{},"可执行程序大小(",[220,1503,1504],{},".eframe_template-master\\target\\release","目录下)\n",[208,1507],{"alt":291,"src":1508},".\u002Frust\u002F9.webp",[1510,1511,1512],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}",{"title":263,"searchDepth":270,"depth":339,"links":1514},[1515,1516,1517,1518,1519,1520],{"id":152,"depth":339,"text":152},{"id":190,"depth":339,"text":190},{"id":235,"depth":339,"text":235},{"id":656,"depth":339,"text":656},{"id":965,"depth":339,"text":965},{"id":1486,"depth":339,"text":1486},"Rust egui GUI 框架入门教程，介绍 eframe_template 项目克隆、编译运行、项目名称修改以及 WebAssembly 构建与 trunk 部署流程。","md",null,{"date":1525},"2023-08-13 16:40:30",{"title":1527,"description":1528},"【rust\u002Fegui】egui(一)从编译运行template开始","Rust egui GUI 框架入门教程，介绍 eframe_template 项目克隆、编译运行、项目名称修改以及 WebAssembly 构建与 trunk 部署流程，适合 Rust GUI 开发入门学习。","q0tr0uouzx3jgjeIEQBFFkP_RhhIyJXZBFfIn-mz-VI",[1531,1533],{"title":128,"path":129,"stem":130,"description":1532,"children":-1},"详解31条MIPS单周期CPU的顶层模块Verilog代码实现，包括模块连接方式、控制信号设计、以及整个CPU设计流程的总结。",{"title":141,"path":142,"stem":143,"description":1534,"children":-1},"深入解析 egui eframe 模板 main 函数，介绍 env_logger 日志配置、RUST_LOG 环境变量使用以及 NativeOptions 窗口参数配置方法。",1776616492740]