首页
📷在线壁纸
🎬娱乐天地
🔖友情链接
更多
📝留言板
Search
1
【javascript】JS-向当前url追加参数
2,343 阅读
2
【PHP】生成随机昵称
2,200 阅读
3
【PHP】判断一个字符串是否属于序列化后的数据
2,022 阅读
4
【css】html+css给文章页,做阅读全文
1,973 阅读
5
【PHP】 设计模式(23种)
1,907 阅读
📂默认分类
💓typecho
🏳️🌈代码改变世界
🍇 mysql
🍈 Winform
🍓 golang
🍉 设计模式
🥝 PHP
🍎 python
🍊 nginx
🍋 网络安全
🍍 javascript
🫑 database
🍡 AI
🍭文艺范
🍏mac
登录
Search
标签搜索
php
typecho
代码注释
redis
mysql
go
golang
nginx
thinkphp
gin
linux
curl
html
mamp
docker
算法
短网址
构造函数
webhook
代码片段
依然范儿特西
累计撰写
141
篇文章
累计收到
1
条评论
首页
栏目
📂默认分类
💓typecho
🏳️🌈代码改变世界
🍇 mysql
🍈 Winform
🍓 golang
🍉 设计模式
🥝 PHP
🍎 python
🍊 nginx
🍋 网络安全
🍍 javascript
🫑 database
🍡 AI
🍭文艺范
🍏mac
页面
📷在线壁纸
🎬娱乐天地
🔖友情链接
📝留言板
搜索到
141
篇与
的结果
2024-03-28
基于Gradio快速搭建demo展示
Gradio官网:https://gradio.app/1 安装方式pip install gradio2. 初步了解官网上有gradio使用的教程,包括例子NLP相关:输入问题,输出回答CV相关:输入图片,输出图片时序相关:时间序列预测3. 简单例子输入多个文本,输出多个文本import gradio as gr def greet(a, b): return f"Hello {a} ", f"Greet {b}" demo = gr.Interface( fn=greet, inputs=[gr.Text(label='input_text_a'), gr.Text(label='input_text_b')], outputs=[gr.Text(label='output_text_a'), gr.Text(label='output_text_b')] ) demo.launch(auth=("user_name", "pwd"), # 设置这个demo需要输入的认证信息 ) 4.可视化展示# 折叠的文本框 with gr.Accordion("超参数说明", open=False): gr.Markdown("...") 5. 其他例子https://github.com/gradio-app/gradio/tree/main/demo/all_demos
2024年03月28日
11 阅读
0 评论
1 点赞
2024-03-28
golang+VsCode中的代码自动补全和自动导入包
VSCode 必须安装以下插件:首先你必须安装 Golang 插件,然后再给 Go 安装工具包。在 VS Code 中,使用快捷键:command+shift+P,然后键入:go:install/update tools,将所有 16 个插件都勾选上,然后点击 OK 即开始安装。Installing 16 tools at /Users/maiyang/develop/goworkspace//bin gocode gopkgs go-outline go-symbols guru gorename dlv godef godoc goreturns golint gotests gomodifytags impl fillstruct goplay Installing github.com/mdempsky/gocode SUCCEEDED Installing github.com/uudashr/gopkgs/cmd/gopkgs SUCCEEDED Installing github.com/ramya-rao-a/go-outline SUCCEEDED Installing github.com/acroca/go-symbols SUCCEEDED Installing golang.org/x/tools/cmd/guru SUCCEEDED Installing golang.org/x/tools/cmd/gorename SUCCEEDED Installing github.com/derekparker/delve/cmd/dlv SUCCEEDED Installing github.com/rogpeppe/godef SUCCEEDED Installing golang.org/x/tools/cmd/godoc SUCCEEDED Installing github.com/sqs/goreturns SUCCEEDED Installing github.com/golang/lint/golint SUCCEEDED Installing github.com/cweill/gotests/... SUCCEEDED Installing github.com/fatih/gomodifytags SUCCEEDED Installing github.com/josharian/impl SUCCEEDED Installing github.com/davidrjenni/reftools/cmd/fillstruct SUCCEEDED Installing github.com/haya14busa/goplay/cmd/goplay SUCCEEDED All tools successfully installed. You're ready to Go :). 修改默认配置的方法:在 Preferences -> Setting 然后输入 go,然后选择 setting.json,填入你想要修改的配置自动完成未导入的包。 "go.autocompleteUnimportedPackages": true,VSCode 的一些插件需要配置代理,才能够正常安装。 "http.proxy": "192.168.1.110:1088",如果你遇到使用标准包可以出现代码提示,但是使用自己的包或者第三方库无法出现代码提示,你可以查看一下你的配置项。 "go.inferGopath": true,如果引用的包使用了 ( . “aa.com/text”) 那这个text包下的函数也无法跳转进去,这是为什么?修改 "go.docsTool" 为 gogetdoc,默认是 godoc。"go.docsTool": "gogetdoc",其他当我们在使用 import 功能的时候,如果无法通过 lint 检查,则不会执行自动 import。如果你需要自动 import 的前提是你必须把要导入的包的函数写完整。附带我的 settings.json{ "go.goroot": "", "go.gopath": "", "go.inferGopath": true, "go.autocompleteUnimportedPackages": true, "go.gocodePackageLookupMode": "go", "go.gotoSymbol.includeImports": true, "go.useCodeSnippetsOnFunctionSuggest": true, "go.useCodeSnippetsOnFunctionSuggestWithoutType": true, "go.docsTool": "gogetdoc", }
2024年03月28日
5 阅读
0 评论
0 点赞
2024-03-13
面向初学者的生成式人工智能课程
通过 12 章的课程,开启构建生成式 AI 应用程序之路面向初学者的生成式人工智能课程通过微软云技术布道师团队提供的十二章系列课程,了解构建生成式 AI 应用程序的基础知识。 每章都涵盖了生成式人工智能原理和应用程序开发的一个关键方面。 在整个系列课程中,我们将建立我们自己的生成式人工智能初创公司,以便您可以了解如何实现您的想法。代码仓库https://github.com/microsoft/generative-ai-for-beginners🌱 如何开始首先,将 整个 repo fork 到您自己的 GitHub 帐户,以便能够更改任何代码并完成相关学习。 您还可以(🌟)该 Fork以便稍后更容易地找到它!前往课程学习环境设置 找到最适合您的设置指南!🗣️ 找到志同道合的人和获取支持我们相信最好的学习方式之一就是与他人一起学习! 加入我们的官方 AI Discord server,与参加本课程的其他学习者会面和交流并获得支持。 您可能会在那里找到一位联合创始人!🚀 您是否来自一家初创公司还是有一个创业的想法?访问 Microsoft's Founders Hub,您可以在这里申请获得免费 OpenAI credits以及可高达价值 15 万美元的 Azure AI 服务。📂 每章都包含每章导学视频书面课程位于自述文件中对于基于项目的课程,带有代码示例的 Jupyter Notebook应用所学知识的知识拓展和知识检查进阶学习资源链接🗃️ 每章内容 课程链接相关教学内容学习目标00课程介绍和学习环境设置学习环境配置和课程结构在学习本课程的同时帮助您取得成功01生成式人工智能和 LLMs 介绍知识点: 生成式人工智能以及我们如何适应当前的技术格局了解什么是生成式人工智能 以及 LLMs 的工作原理。02探索和比较不同的 LLMs知识点: 测试、迭代和比较不同的 LLMs 模型为您的应用场景选择正确的模型03负责任地使用生成式人工智能知识点: 了解基础模型的局限性和人工智能背后的风险了解如何负责任地构建生成式人工智能应用程序04提示工程基础代码/知识点: 提示工程最佳实践了解提示结构和用法05创建高级的提示工程技巧代码/知识点: 通过在提示中应用不同的技术来扩展您的提示工程知识应用提示工程技术来改善提示结果。06创建文本生成应用代码: 使用 Azure OpenAI 构建文本生成应用程序了解如何有效地使用令牌和温度来改变模型的输出 07创建聊天应用代码: 有效构建和集成聊天应用程序的技术。确定关键指标和注意事项,以有效监控和维护人工智能聊天应用程序的质量08创建搜索应用代码: 语义搜索与关键字搜索。 什么是文本嵌入以及它们如何应用于搜索创建一个使用嵌入来搜索数据的应用程序。09创建图像生成应用代码: 图像生成及其在构建应用程序中的作用构建图像生成应用程序10创建低代码的人工智能应用低代码: Power Platform 中的生成式 AI 简介使用低代码为我们的教育初创公司构建学生作业跟踪应用程序 11为生成式 AI 添加 function calling代码: 什么是 Function Calling 及其在应用程序中的使用示例设置 Function Calling 以从外部 API 检索数据 12为人工智能应用程序添加用户体验知识点: 设计人工智能应用程序以实现信任和透明度开发生成式人工智能应用时用户体验设计的相关原则 xx拓展学习包含每章内容的的拓展链接!掌握生成式人工智能相关技能 🎒 更多系列课程还有更多基础基础的系列课程,请点击学习机器学习入门系列数据科学入门系列人工智能入门系列网页编程入门系列物联网入门系列虚拟现实入门系列
2024年03月13日
6 阅读
0 评论
1 点赞
2024-03-11
互联网公司裁员的预兆和手段
背后目的对于一家企业而言,裁员的目的,大部分都比较单纯,就是:降低经营成本,少亏点,赶紧盈利。单针对某条业务线,背后的原因不外乎:公司(也可能是业务线)已经进入长期亏损状况,高管们认为通过市场无法短时间扭亏。最快的办法就是降低支出。大佬们认为投入的成本无法产生更多的收益(前文提到的市梦率),看不到未来,幻想开始破灭。再投入只会继续扩大亏损。基于上述目的(不限于,但大多是钱的问题),从员工角度来看,公司就会开始出现一些奇奇怪怪的骚操作了。以下看看有没有你熟悉的?裁员预兆小试牛刀:省钱加班在最早的初期来讲,一般是不会马上开始裁员的,会想想其他路子。大佬们会想着提高大家的工作效率和缩减福利开支,看看能不能挤挤,有没有新希望。转到打工人侧,初中期常看到的步骤是:抓考勤:如果早上上班时间比较灵活,主打一个宽松感。那么大佬们为了提效,会要求 9 点或 9 点 30 要到。不再像以前那样,会进行收紧,不会再有过于活自由的时间点。多加班:会有领导层认为只要员工多加班,公司就能得到更多的益处。例如:提高交付效率。因此会改变工作时长,暗地里要求 9105,9106 等时长的执行。砍开支:加班餐、下午茶等经费缩减或直接取消。食堂控制每个人可以拿的分量等。这对于大佬们都是实打实的银子。(也会抓一些不合规的行为)卡福利:严格意义来讲,这属于砍开支的一部分。但这对于我们打工人而言,感触也比较深。因此单独拎出来。常见的操作,像是推迟加班餐到达时间、推迟加班允许打车时间、节假日的礼品调整等。加制度:为了上述动作合规,时常会有加制度的行为。例如抓考勤,有的公司就会要求上下班要打卡,加到规章制度中,确保不会被人抓到漏洞。当然。到中后期后。大部分措施已经落地,米已成炊了,发现这些措施对公司盈利其实没有特别大的作用。并不会说什么你做了这次,公司业务的业绩就蹭蹭蹭涨了。后面大家也就直接略过这种提效降本的步骤。大刀阔斧:减人合并在发现无论如何降本、提效(加班)都无法提高公司业绩的利润后,真正的裁员步骤开始了。常用的步骤如下:部门人员盘点:在正式动手前,中层及以上管理岗还有人力部门,会有密集的盘点行为。这是一个哨声。直接缩减 HC:在公司经过盘点测算后,在裁员的早期,会下发给每个部门 HC,要求直接减员。这是最基础的裁员。合并业务后裁员:在经过多轮的切香肠式裁员后,会发现一个问题:切不动了。这种时候,就会用 “高阶” 办法,将原有的业务再进行切割和划分,用看起来多给了几个人的 HC,让既有部门负责更多的业务。再进行减员。整条业务线裁员:这个比较常出现在大厂,这个业务的梦想破灭了。从总监、基层管理、研发都会被减员。可以认为是第二点的加强版。一般企业中会分为成本中心和利润中心,对于程序员们最熟悉的就是 “成本中心” 了。纯粹的技术部门,例如:工具、架构、数据、中台等部门,如果没有产生实际的客户业绩增收,都很可能被归属为成本中心。许多公司裁员会先动成本中心的相关部门,如果你已经发现了蹊跷,就可以找这些部门的同学了解一下当前情况,就能知道是不是真的了。个人应对措施千言万语,多说无益。主要以下几点:多存些钱,留好备用金。应对被裁员后的相当一段时间的经济支出。多卷八股文和算法等,以备突发面试,保证自己常在面试状态。多居安思危,要考量在公司自己的技术能得到什么。多了解公司现状和未来预期,看好当前和未来的风险,做好心里预期。多看看多渠道收入发展,看看能不能有 ABZ 计划。有就是最好的。少背些负债,像房贷、月供等,要量力而行。不要一崩就全崩了。总结目前的行业情况和局面,需要大家保持好自己的核心竞争力。身边有许多的朋友都有过被裁员或主动离职。大多数最后还是能找到工作,又或是降薪才找到的。希望以上内容能够给大家带来一些观察细节和日常警醒,公司裁员一般还是有迹可循的。提前做好一定的准备,对自己和家庭都是非常重要的。
2024年03月11日
2 阅读
0 评论
1 点赞
2024-02-29
水果表情符号
水果表情符号包括以下几种:红苹果:🍎青苹果:🍏柠檬: 🍋樱桃:🍒草莓:🍓蓝莓:🫐葡萄:🍇菠萝:🍍香蕉:🍌甜瓜:🍈水蜜桃:🍑西红柿:🍅橘子:🍊梨子:🍆糖葫芦:🍡西瓜: 🍉芒果: 🥭梨:🍐猕猴桃:🥝橄榄: 🫒椰子:🥥这些表情符号可以传达不同的情感和内心想法,适当的运用会使得聊天更加轻松和积极
2024年02月29日
2 阅读
0 评论
1 点赞
2024-02-28
golang 编程规范 - 项目目录结构
参考链接 https://makeoptim.com/golang/standards/project-layout#google_vignette针对API使用的目录结构, 如果有用作其他服务,可以灵活调整 ├── api (项目对外提供和依赖的 API 文件) │ └── dao │ └── http │ └── v1 │ └── v2 │ └── middleware │ └── model │ └── router │ └── service │ └── validator │ ├── cmd (当前项目的可执行文件) │ └── ├── internal (私有的应用程序代码库) │ └── ├── configs (配置文件和初始化文件) │ └── ├── global (全局变量) │ └── ├── deploy (IaaS,PaaS,系统和容器编排部署配置和模板) │ └── ├── pkg (外部应用程序可以使用的库代码) │ └── ├── scripts (用于执行各种构建,安装,分析等操作的脚本) │ └── ├── third_parth (外部辅助工具) │ └── ├── test (单元测试) │ └── ├── vendor (应用程序的依赖关系) │ └──
2024年02月28日
16 阅读
0 评论
1 点赞
2024-02-28
[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.
在学习Golang中的gin框架的时候,遇到了下面的warning :[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.对于上面的WARNING翻译出来之后也就是 : 您信任所有代理,这是不安全的。我们建议您设置一个值。对于Goland编译器给出的建议 :Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all- proxies for details.也就是去看文档去了解细节,额,好像又啥也没说!那么怎么解决呢?根据warning也就是给gin设置一个信任ip : 127.0.0.1代码 :router := gin.Default() router.SetTrustedProxies([]string{"127.0.0.1"})
2024年02月28日
1 阅读
0 评论
1 点赞
2024-02-27
工作六不做&四个时间段不工作
纯属娱乐,请勿学习!工作我有六不做1,会的,不做,完全没有成长空间,都会了还浪费时间做什么;2,不会的,不做,反正都不会,没法做:3,要被检查的,不做,工作是为了累积工作经验学习知识提升自己,并不是为了完成任务去敷衍领导的;4,不被检查的,不做,辛辛苦苦做半天,甚至没人看一眼,那做什么;5,不到ddl的,不做,enfp心善,工作陪了这么久,临了临了,做完的话,于心不忍6,不能创造奇迹的,不做,一个人,一台电脑,一个夜晚,创造一个奇迹,最好能让公司直接上市!四个时间段不工作上班我有四个时间段不工作1.早上9:00-10:30我不工作,因为刚到公司要先吃点东西,休息一下,调整好状态再工作2.上午10:30-12:00我不工作,因为快要吃饭了我要准备餐具去食堂吃饭3.下午13:30-15:30我不工作,刚午休结束头脑还不清醒容易出错4.下午15:30-18:00我不工作,因为要下班了我得收拾好东西准备回家
2024年02月27日
1 阅读
0 评论
1 点赞
2024-02-20
Redis 只会用缓存?16种妙用让同事直呼牛X
redis 的妙用
2024年02月20日
2 阅读
0 评论
1 点赞
2023-10-10
Gin 框架在中间件中获取 response body 的方法
在写一个Gin框架日志中间件的时候,需要记录请求和响应相关的一些数据,例如请求参数、请求方法、请求时间、请求头、耗时、响应状态码、响应数据等,gin为获取这些数据基本都提供了现成的方法,但是获取响应数据还是有一定难度和复杂度的。那么,该如何获取响应数据也就是 response body 呢?先上代码。代码示例1、先写一个 middleware ,简单打印一下 response bodypackage middleware import ( "bytes" "fmt" "github.com/gin-gonic/gin" ) //自定义一个结构体,实现 gin.ResponseWriter interface type responseWriter struct { gin.ResponseWriter b *bytes.Buffer } //重写 Write([]byte) (int, error) 方法 func (w responseWriter) Write(b []byte) (int, error) { //向一个bytes.buffer中写一份数据来为获取body使用 w.b.Write(b) //完成gin.Context.Writer.Write()原有功能 return w.ResponseWriter.Write(b) } func PrintResponse(c *gin.Context) { writer := responseWriter{ c.Writer, bytes.NewBuffer([]byte{}), } c.Writer = writer c.Next() fmt.Println("response body:" + writer.b.String()) } 2、引用 middleware ,看看效果package main import ( "github.com/gin-gonic/gin" "hello/middleware" "net/http" ) func main() { r := gin.New() //添加获取响应内容 middleware r.Use(middleware.PrintResponse) r.GET("/test", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{"name": "laofan"}) }) // Listen and Server in 0.0.0.0:8080 r.Run(":8080") } 打开浏览器访问http://127.0.0.1:8080/test ,即可在控制台中看到 response body 的输出内容response body:{"name":"laofan"}原理通过上面的代码可以看出,gin 通过调用如下方法写入了 response bodyc.JSON(http.StatusOK, gin.H{"name": "laofan"})追进 JSON 方法,源码如下,调用了 Render 方法package gin func (c *Context) JSON(code int, obj interface{}) { c.Render(code, render.JSON{Data: obj}) }追进 Render 方法, 可以看出 gin.Context.Writer 作为参数传给了 r.Render() 方法,这里形参 r 的实参为 render.JSON{Data: obj} ,所以实际调用的是 func (r JSON) Render(w http.ResponseWriter) 方法。package gin // Render writes the response headers and calls render.Render to render data. func (c *Context) Render(code int, r render.Render) { c.Status(code) if !bodyAllowedForStatus(code) { r.WriteContentType(c.Writer) c.Writer.WriteHeaderNow() return } if err := r.Render(c.Writer); err != nil { panic(err) } } func (r JSON) Render(w http.ResponseWriter) 源码如下package render // Render (JSON) writes data with custom ContentType. func (r JSON) Render(w http.ResponseWriter) (err error) { if err = WriteJSON(w, r.Data); err != nil { panic(err) } return } // WriteJSON marshals the given interface object and writes it with custom ContentType. func WriteJSON(w http.ResponseWriter, obj interface{}) error { writeContentType(w, jsonContentType) jsonBytes, err := json.Marshal(obj) if err != nil { return err } _, err = w.Write(jsonBytes) return err } 在 func (r JSON) Render() 方法中,gin.Context.Writer 被传到了 WriteJSON() 方法中,最终写入数据调用的是 gin.Context.Writer.Write() 方法。gin.ResponseWriter 源码如下package gin type Context struct { //... writermem responseWriter Writer ResponseWriter //... } // ResponseWriter ... type ResponseWriter interface { //... http.ResponseWriter //... } 可以看出 gin.Context.Writer 类型为 interface gin.ResponseWriter。package http type ResponseWriter interface { //... Write([]byte) (int, error) //... } 要实现 gin.ResponseWriter 接口,必须实现Write([]byte) (int, error) 方法。所以写入 response body 调用的是 gin.Context.Writer.Write() 方法,gin.Context.Writer 需要是type gin.ResponseWriter interface 的一个具体实现。到此,可以看出上面代码示例的思路:实现 type gin.ResponseWriter interface 并重写 Write([]byte) (int, error) 方法,该方法在实现 gin.Context.Writer.Write() 原有功能的同时,再向一个 bytes.buffer 中写一份数据来用于获取 response body 使用。
2023年10月10日
5 阅读
0 评论
0 点赞
1
2
...
15