
[编程语言]
文章平均质量分 95
云来雁去
探讨技术心得,交流生活感悟,站在理性与感性的十字路口,谢谢你,在这世界的角落,找到我。
展开
-
使用 EFCore 和 PostgreSQL 实现向量存储及检索
随着 ChatGPT 的兴起及其背后的 AIGC 产业不断升温,向量数据库已成为备受业界瞩目的领域。、Qdrant 等产品层出不穷。市场调研公司 MarketsandMarkets 的数据显示,全球向量数据库市场规模预计将从 2020 年的 3.2 亿美元增长至 2025 年的 10.5 亿美元,年均复合增长率高达 26.8%。这表明向量数据库正从最初的不温不火逐步演变为大模型的 “超级大脑”。向量数据库,不仅解决了大模型在 “事实性” 和 “实时性” 方面的固有缺陷,还为企业重新定义了知识库管理方式。原创 2024-04-11 12:22:21 · 1226 阅读 · 0 评论 -
基于 LLaMA 和 LangChain 实践本地 AI 知识库
本文讨论了人工智能领域的最新发展,主要围绕着基于 Transformer 和 MoE 架构的多模态模型 Gemini 1.5 Pro,以及 OpenAI 推出的支持从文字生成视频的模型 Sora。文章提到通用人工智能(AGI)的实现正在加速,指出 AI 应用落地的主要实践围绕大模型微调、提示词工程和知识增强展开。在介绍 LangChain 中的知识库构建过程中,涉及 Loader、Splitter、Embeddings 和 VectorStore 等步骤。此外,还讨论了 RAG 和 GPTs 在实践中的应用原创 2024-03-01 09:59:41 · 1892 阅读 · 0 评论 -
使用 llama.cpp 在本地部署 AI 大模型的一次尝试
2023年被誉为AIGC元年,随着技术浪潮,人们开始对人工智能的发展产生担忧。文章介绍了使用llama.cpp在本地部署AI大模型的过程,包括编译、量化和模型下载。通过对不同模型的体验,展示了其运行效果和评估。最后,将ChatGPT-Next-Web与llama.cpp结合,展示了本地部署AI大模型的潜力。整体讲述了私有化部署AI大模型的重要性和实践过程。原创 2024-03-01 09:54:29 · 2322 阅读 · 0 评论 -
基于 SVG 的图形交互方案实践
实际上,到目前为止,这篇博客里对方案可行性的探索业已完成,而在现实中,更多的挑战往往来自非技术因素。当然,从这篇文章的思路延伸出去,无论是复杂的数据大屏,还是布局编辑器/低代码、地图、流程图、工作流等问题,我们都无法摆脱 DOM、Canvas、WebGL、SVG 等知识体系。”,你不得不为每一个区域标注好坐标,这对于没有设计感的程序员来说可能是一场折磨,更重要的是,一旦这个方案运用到数字大屏上面,你总要去解决屏幕尺寸变化、全屏/非全屏等一系列问题,显然,这个时候这些区域的坐标都需要重新计算。原创 2023-08-24 18:24:50 · 1803 阅读 · 0 评论 -
前端视频播放技术概览
转眼间,2023 年已进入下半场,在这样一个时间节点下,长视频平台如爱奇艺、优酷、腾讯视频等,以及短视频平台如抖音、快手等,对大家来说早已是司空见惯的事物。然而,在我们追剧、刷弹幕的时候,很少有人会去深入思考这些平台背后的技术奥秘。直到最近,我需要在前端项目中实现视频播放时,我终于意识到,这些视频不仅在格式上存在着差异,甚至连播放形式都各有不同。举个例子,当下最为火热的 “”,通常是指实时的视频播放。相对应地,非实时的视频播放则被称为 “如果你有接触过,你或许还听说过 “” 这个词汇。原创 2023-07-31 10:41:01 · 2108 阅读 · 0 评论 -
GDI+下字体大小自适应方案初探
在某个瞬间,我忽然发觉,三体或是AI,本质上是非常相近的事物,甚至在面对任何未知领域的时候,人类总会不自觉地划分为降临派、拯救派和幸存派。姑且不论马斯克等人叫停 GPT-5 的真实动机如何,当大语言模型(LLM)裹挟着 AIGC 的浪潮气势汹汹地袭来时,你是否会像很多人一样,担心有一天会被机器取代以致于失业呢?原创 2023-04-13 08:41:16 · 1205 阅读 · 0 评论 -
关于 Docker 容器配置信息的渐进式思考
作为一名软件工程师,不,或许应该叫做 YAML 工程师、Markdown 工程师、Dockerfile 工程师……等等,这绝非自谦,更多的是一种自嘲。毕竟,从入行的那一天开始,追求配置上的动态灵活,就如同思想一般刻进每个程序员的 DNA 里。可当你意识到,在这个世界上,提出主张的人和解决问题的人,并不是同一群人时,你或许会心头一紧,接着便是直呼上当,我甚至不能理解,为什么程序员提交完代码,还要像运维一样折腾各种配置文件。原创 2022-12-02 17:21:09 · 641 阅读 · 5 评论 -
在 Docker 容器内集成 Crontab 定时任务
有时候,我们需要在容器内执行某种定时任务。譬如,Kerberos客户端从KDC中获取到的TGT默认有效期为 10 个小时,一旦这个票据失效,我们将无法使用单点登录功能。此时,我们就需要一个定时任务来定时刷新票据。此前,博主为大家介绍过和这样的定时任务系统,而对于 Linux 来说,其内置的是比以上两种方案更加轻量级的一种方案,它可以定时地去执行Linux中的命令或者是脚本。对应到Kerberos的这个例子里面,从 KDC 申请一个新的票据,我们只需要使用kinit这个命令即可。原创 2022-11-29 08:56:49 · 3998 阅读 · 0 评论 -
关于 Git 大文件上传这件小事
很多年后,当我在命令行中熟练地操作 Git 的时候,我总会不由地想起从前意气风发的自己。毕竟不知不觉间,三十岁的年龄已然被更年轻的人们嫌弃“苍老”,除却生理上不可逆转的自然衰老,更多的或许是一种心态上的衰老。以前,我是非常鄙夷在 Git 仓库里提交 Word 或者 Excel 文件这种行为的,甚至连理由都给得十分正当,即:这种文件不利于差异的对比和合并。后来,参与的项目越来越多,渐渐认识到 Markdown 始终是一种小众的格式,你没有办法要求所有人都去适应 Markdown。原创 2022-10-11 14:23:37 · 1578 阅读 · 0 评论 -
聊一聊前端图片懒加载背后的故事
懒加载,即:LazyLoad,其核心全在于“懒”这个字眼上。虽然,这个字在生活中更多的是表示一种贬义,可正如气体有活性和惰性的区别,这里我们将其理解为延迟加载,或许会更合适一点,因为生活早已告诉我们,只要你打算偷懒,就一定会造成拖延。因此,懒加载其实就是一种通过延迟加载对网页性能进行优化的方法。一个典型的例子是,当网页中有滚动条的时候。此时,网页的一部分区域对于浏览器视窗而言是不可见的。如果将一次性将其加载出来,这其实是一种资源的浪费,因为你不确定用户是否有耐心浏览完整个网页。............原创 2022-08-05 09:54:06 · 7043 阅读 · 17 评论 -
支持外部链接跳转的 Vue Router 扩展实现
众所周知,Vue-Router 是 Vue 中重要的插件之一,特别是在当下流行的 单页面应用/SPA 中,这种感觉会越来越明显。此时,路由的作用就是根据 来决定要显示什么内容。诚然,页面这个概念在工程/模块中依然存在,可当你开始关注最终发布的产物时,你会发现本质上它只有一个页面。无论你选择 或者是 模式的路由,它都像是在同一张纸上反复写写画画,让你看起来觉得它有很多个不同的页面。回顾早期的前端项目,它往往会有多个不同的页面组成,我们是通过一个个的超链接来实现不同页面间的跳转。如今,这一切都已一去不复返原创 2022-07-13 16:02:00 · 4668 阅读 · 0 评论 -
Vue.js 前端项目容器化部署实践极简教程
大概一周前,在某个「微雨燕双飞」的下午,我正穿梭于熙熙攘攘的车流人海当中,而被雨水濯洗过的天空略显灰白,傍晚亮起的路灯恍惚中有种朝阳初升的错觉,内心更是涌现出一种「一蓑烟雨任平生」的豁达,我还没来得及给这场内心戏添油加醋,兴哥的电话突然打断了我的思绪。一番攀谈交心,我了解到,他想问的是前端容器化部署的相关问题。虽然,靠着兴哥的睿智、果敢,他第二天就想明白了整个事情的来龙去脉;但是,这完全不影响我水一篇博客出来。所以,今天这篇文章,我们来聊聊前端项目的容器化部署,并提供一个极简的实践教程,这里以 Vue.js原创 2022-05-18 13:10:14 · 1845 阅读 · 0 评论 -
ASP.NET Core gRPC 拦截器的使用技巧分享
gRPC是微软在.NET Core 及其后续版本中主推的 RPC 框架,它使用 Google 的 Protocol Buffers 作为序列化协议,使用 HTTP/2 作为通信协议,具有跨语言、高性能、双向流式调用等优点。考虑到,接下来要参与的是,一个以gRPC为核心而构建的微服务项目。因此,博主准备调研一下gRPC的相关内容,而首当其冲的,则是从 .NET Core 3.1 开始就有的拦截器,它类似于ASP.NET Core中的过滤器和中间件,体现了一种面向切面编程(AOP)的思想,非常适合在RPC服务调原创 2021-05-28 10:48:14 · 478 阅读 · 0 评论 -
使用 HttpMessageHandler 实现 HttpClient 请求管道自定义
最近,博主偶然间在 博客园 看到一篇文章:ASP.NET Core 扩展库之 Http 请求模拟,它里面介绍了一种利用 HttpMessageHandler 来实现 Http 请求模拟的方案。在日常工作中,我们总是不可避免地要和第三方的服务或者接口打交道,尤其是当我们需要面对“联调”这样一件事情的时候。通常,我们可以通过类似 YAPI 这样的工具来对尚在开发中的接口进行模拟。可是,因为这种方式会让我们的测试代码依赖于一个外部工具,所以,从严格意义上讲,它其实应该属于“集成测试”的范畴。在接触前端开发的过程中原创 2021-04-30 01:55:34 · 1214 阅读 · 5 评论 -
ABP vNext 的实体与服务扩展技巧分享
使用 ABP vNext 有一个月左右啦,这中间最大的一个收获是:ABP vNext 的开发效率真的是非常好,只要你愿意取遵循它模块化、DDD 的设计思想。因为官方默认实现了身份、审计、权限、定时任务等等的模块,所以,ABP vNext 是一个开箱即用的解决方案。通过脚手架创建的项目,基本具备了一个专业项目该有的“五脏六腑”,而这可以让我们专注于业务原型的探索。例如,博主是尝试结合 Ant Design Vue 来做一个通用的后台管理系统。话虽如此,我们在使用 ABP vNext 的过程中,还是希望可以针对原创 2021-04-19 22:40:31 · 3783 阅读 · 14 评论 -
ABP vNext 对接 Ant Design Vue 实现分页查询
本文内容ABP vNext中的分页查询STable组件中的分页查询实现参数转换层最终对接效果在 上一篇 博客中,博主和大家分享了如何在 EF Core 中实现多租户架构。在这一过程中,博主主要参考了 ABP vNext 这个框架。从上个月开始,我个人发起了一个项目,基于 ABP vNext 和 Ant Design Vue 来实现一个通用的后台管理系统,希望以此来推进 DDD 和 Vue 的学习,努力打通前端与后端的“任督二脉”。因此,接下来的这段时间内,我写作的主题将会围绕 ABP vNext 和 An原创 2021-04-09 23:33:50 · 2338 阅读 · 2 评论 -
通过 EmbededFileProvider 实现 Blazor 的静态文件访问
重构我的 独立博客 ,是博主今年的计划之一,这个基于 Hexo 的静态博客,最早搭建于2014年,可以说是比女朋友更亲密的存在,陪伴着博主走过了毕业、求职以及此刻的而立之年。其间虽然尝试过像 Jekyll 和 Hugo 这样的静态博客生成器,可是考虑到模板、插件等周边生态,这个想法一直被搁置下来。直到最近,突然涌现出通过 Blazor 重写博客的想法,尤其是它对于 WebAssembly 的支持,而类似 Vue 和 React的组件化开发模式,在开发体验上有着同样不错的表现。所以,今天这篇博客就来聊聊在重写原创 2021-02-23 06:53:31 · 1823 阅读 · 0 评论 -
低代码,想说爱你不容易
本文内容低代码发展现状国外趋势国内风云低代码产品形态低代码研发痛点多人协作不便孱弱的表达能力混乱的变量和参数动态计算/事件顺序/黑盒子本文小结一直想写篇文章,聊一聊“低代码”这个话题。一方面,“低代码”这个概念确实非常火,其热度丝毫不亚于曾经的“中台”。有人说,2021年是属于“云原生”的时代,看起来我们每一年都在被技术的“娱乐圈”抛弃,明明连 Kubernetes 都还没有入门呢?人们已然在欢呼雀跃般地声称要抛弃 Docker 。这个世界有时就是如此地魔幻,明明我们生活在一个拥有大量基础设施的时代,我们原创 2021-02-15 18:00:50 · 8547 阅读 · 43 评论 -
从 C# 1.0 到 C# 9.0,历代 C# 语言特性一览
本文内容C# 版本历史记录C# 版本特性说明C# 7.0元组和弃元更多的 expression-bodied 成员`out`变量异步 `Main` 方法模式匹配引发表达式C# 8.0默认接口方法异步流索引和范围C# 9.0Record顶级语句模式匹配增强参考链接C# 版本历史记录说明:因为Markdown下维护这样复杂的表格有一点麻烦,故,这里以图片形式展示出来,如后续内容有更新,请点击 这里 访问原始笔记链接。为知笔记 的表格渲染在移动端表现不佳,为了获得更好的阅读体验,请在电脑端访问查看。C原创 2021-02-06 12:28:13 · 7990 阅读 · 14 评论 -
实现网页长截图的常见思路总结
作为一个经常写博客的人,我有时会在微博上分享博客内容,可不知道从什么时候开始,国内互联网越来越丧失信仰,所有的厂商都在试图打造一个“只进不出”的信息孤岛,进而达到增强“用户黏度”的目的。以微博为例,微博中的外链永远都会被转化为短地址,并且无法通过微博内置的浏览器进行跳转。即使你通过手动复制链接的方式打开链接,你依然需要至少两个步骤方能见到“庐山真面目”。借鉴/抄袭这一陋习的还有简书,花时间做了一个第三方链接跳转提示页面,唯独不愿意在上面加一个a标签,你还是要手动复制黏贴。坦白说,我觉得国内互联网正在丧失着信原创 2021-01-10 15:46:55 · 22607 阅读 · 13 评论 -
温故而知新,由ADO.NET与Dapper所联想到的
文章目录重温ADO.NET实现DynamicRow实现参数化查询本文小结这段时间在维护一个“遗产项目”,体验可以说是相当地难受,因为它的数据持久化层完全由ADO.NET纯手工打造,所以,你可以在项目中看到无所不在的DataTable,不论是读操作还是写操作。这个DataTable让我这个习惯了Entity Framework的人感到非常别扭,我并不排斥写手写SQL语句,我只是拥有某种自觉并且清醒地知道,自己写的SQL语句未必就比ORM生成的SQL语句要好。可至少应该是像Dapper这种程度的封装啊,因为关原创 2021-01-01 15:05:15 · 1008 阅读 · 0 评论 -
视频是不能P的系列:当OpenCV人脸检测遇上柴犬Doge
恍惚间,2020年已接近尾声,回首过去这一年,无论是疫情、失业还是“996”,均以某种特殊的方式铭刻着这一年的记忆。也许,是这个冬天的西安雾霾更少一点。所以,有时透过中午的一抹冬阳,居然意外地觉得春天的脚步渐渐近了,甚至连圣诞节这种“洋节日”都感到亲切而且期待,我想,这大概是我丧了一段时间的缘故吧!可不管怎样,人们对未来的生活时常有一种“迷之自信”,果然生还还是要继续下去的呀!趁着最近的时间比较充裕,我决定开启一个信息的系列:视频是不能P的。这是互联网上流传的一个老梗了,正所谓“视频是不能P的,所以是真的”原创 2020-12-26 13:52:39 · 898 阅读 · 0 评论 -
作为技术宅的我,是这样追鬼滅の刃的
有人说,“男人至死都是少年”,而这句听起来有一点中二的话,其实是出自一部同样有一点中二的动漫——银魂。我个人的理解是,知世故而不世故。也许,年轻时那些天马行空的想法,就像堂吉诃德大战风车一样荒诞,可依然愿意去怀着这样的梦想去生活。正如罗曼罗兰所言,“世上只有一种英雄主义,就是在认清生活真相之后依然热爱生活”。所以,继《浪客剑心》之后,我再次被一部叫做《鬼灭之刃》的动漫吸引,毕竟男人的快乐往往就是这么朴实无华且枯燥。一个快三十岁的人,如果还能被一部热血少年番吸引,大概可以说明,他身体里的中二少年连同中二少年魂原创 2020-12-18 00:44:20 · 1968 阅读 · 0 评论 -
使用dotTrace对.NET应用进行性能分析
前几天,有位朋友问我,你平时都是怎么去排查一个程序的性能问题的啊。不要误会,这位朋友不是我啦,因为我真的有这样一位叫做 Toby 的朋友。说到性能问题,可能大家立马会想到类似并发数、吞吐量、响应时间、QPS、TPS等等这些指标,这些指标的确可以反映出一个系统性能的好坏。可随着我们的系统结构变得越来越复杂,要找到这样一个性能的“损耗点”,同样会变得越来越困难。在不同的人的眼中,对于性能好坏的评判标准是不一样的,譬如在前端眼中,页面打开速度的快慢代表着性能的好坏;而在后端眼中,并发数、吞吐量和响应时间代表着性能原创 2020-11-02 15:59:18 · 6151 阅读 · 13 评论 -
一道HashSet面试题引发的蝴蝶效应
没错,我又借着“面试题”的名头来搞事情了,今天要说的是 HashSet ,而这确实是一个实际面试中遇到的问题。当时的场景大概是这样的,面试官在了解了你的知识广度以后,决心来考察一番你的基本功底,抛出了一个看起来平平无奇的问题:说一说你平时工作中都用到了哪些数据结构。你心想,这还不简单,Array、ArrayList、List、Dictionary、HashSet、Stack、Queue…等等各种集合类简直如数家珍,甚至你还能说出这些数据结构间的优劣以及各自使用的场景。可没想到,面试官话锋一转,直接来一句,“原创 2020-10-26 10:10:37 · 4793 阅读 · 0 评论 -
基于选项模式实现.NET Core的配置热更新
最近在面试的时候,遇到了一个关于 .NET Core 配置热更新的问题,顾名思义,就是在应用程序的配置发生变化时,如何在不重启应用的情况下使用当前配置。从 .NET Framework 一路走来,对于 Web.Config 以及 App.Config 这两个配置文件,我们应该是非常熟悉了,通常情况下, IIS 会检测这两个配置文件的变化,并自动完成配置的加载,可以说它天然支持热更新,可当我们的视野伸向分布式环境的时候,这种配置方式就变得繁琐起来,因为你需要修改一个又一个配置文件,更不用说这些配置文件可能都.原创 2020-10-13 00:33:20 · 3600 阅读 · 2 评论 -
.NET Core中对象池(Object Pool)的使用
在此前的博客中,博主参考 eShopOnContainers 实现了一个基于RabbitMQ的事件总线(EventBus)。在这个项目中,它提供了一个持久化连接的类DefaultRabbitMQPersistentConnection,主要解决了RabbitMQ在连接断开后自动重连的问题,可实际上我们都知道,RabbitMQ提供的连接数是有一个上限的,如果频繁地使用短连接的方式,即通过ConnectionFactory的CreateConnection()方法来创建一个连接,从本质上讲,一个Connecti原创 2020-08-25 17:54:54 · 2268 阅读 · 9 评论 -
利用MySQL的Binlog实现数据同步与订阅(上):基础篇
终于等到了周末,在经历了一周的忙碌后,终于可以利用空闲写篇博客。其实,博主有一点困惑,困惑于这个世界早已“堆积”起人类难以想象的“大”数据,而我们又好像执着于去“造”一个又一个“差不多”的“内容管理系统”,从前我们说互联网的精神是开放和分享,可不知从什么时候起,我们亲手打造了一个又一个的“信息孤岛”。而为了打通这些“关节”,就不得不去造一张巨大无比的蜘蛛网,你说这就是互联网的本质,对此我表示无法反驳。我更关心的是这其中最脆弱的部分,即:一条数据怎么从A系统流转到B系统。可能你会想到API或者ETL这样的关键原创 2020-08-25 16:55:22 · 5690 阅读 · 5 评论 -
原生JavaScript实现Hexo博客推荐功能
有时候,我不禁在想,我们到底处在一个什么样的时代呢?而之所以会有这样的疑问,则是因为我们的习惯在不断地被这个时代向前推进,就像我用了两年多的魅蓝Note6屏幕出现了问题,扫视了一圈新手机,居然再找不出一款带实体键的手机,刘海屏、水滴屏、破孔屏、异形屏、曲面屏等等简直令人眼花缭乱,唯独没有一款让我感到熟悉的非全面屏手机。做软件的时候,会不明白那些似是而非的定制需求的差异,可为什么偏偏到了硬件的时候,大家就能被迫适应这些越来越同质化的东西呢?也许有和我一样怀念非全面屏的人,可对于这个时代而言,一切都好像无足轻重原创 2020-06-22 11:44:11 · 1422 阅读 · 2 评论 -
.NET Core原生DI扩展之基于名称的注入实现
接触 .NET Core 有一段时间了,最大的感受无外乎无所不在的依赖注入,以及抽象化程度更高的全新框架设计。想起三年前 Peter 同学手写 IoC 容器时的惊艳,此时此刻,也许会有不一样的体会。的确,那个基于字典实现的 IoC 容器相当“简陋”,就像 .NET Core 里的依赖注入,默认(原生)都是采用构造函数注入的方式,可其实从整个依赖注入的理论上而言,属性注入和方法注入的方式,同样是依赖注入的实现方式啊。最近一位朋友找我讨论,.NET Core 里该如何实现 Autowried,这位朋友本身是 J原创 2020-06-22 11:39:00 · 2064 阅读 · 0 评论 -
通过EF/Dapper扩展实现数据库审计功能
相信大家都有过周末被电话“吵醒”的经历,这个时候,客服同事会火急火燎地告诉你,客户反馈生产环境上某某数据“异常”,然后你花费大量时间去排查这些错误数据,发现这是客户使用某一种“骚”操作搞出来的“人祸”。可更多的时候,你不会这么顺利,因为你缺乏有力的证据去支持你的结论。最终,你不情愿地去处理了这些错误数据。你开始反思,为什么没有一种流程去记录客户对数据的变更呢?为什么你总要花时间去和客户解释这些数据产生的原因呢?好了,这就要说到我们今天这篇博客的主题——审计。什么是审计?结合本文引言中的描述的场景,当我们原创 2020-05-11 11:04:45 · 1885 阅读 · 0 评论 -
.NET Core + ELK搭建可视化日志分析平台(上)
Hi,各位朋友,大家好!欢迎大家关注我的博客,我的博客地址是: https://blog.yuanpei.me。今天是远程办公以来的第一个周末,虽然公司计划在远程两周后恢复正常办公,可面对着每天都有人离开的疫情,深知这一切都不会那么容易。窗外的阳光透过玻璃照射进屋子,这一切都昭示着春天的脚步渐渐近了。可春天来了,有的人却没有再回来。那些在2019年结束时许下的美好期待、豪言壮语,在这样一场灾难面前...原创 2020-03-04 11:08:57 · 5088 阅读 · 0 评论 -
从 .NET Core 2.2 升级到 3.1 的踩坑之旅
有时候,版本更新太快并不是一件好事。虽然,两周一个迭代的“敏捷”开发依然被客户嫌弃交付缓慢,可一边是前端领域“求不要再更新了,学不动了”的声音,一边则是.NET Core从1.x到2.x再到3.x的高歌猛进。版本更新太快,带来的是API的频繁变动,无法形成有效的知识沉淀,就像转眼到了2020年,Python2.x和Windows7都引来了“寿终正寝”,可能你都还没有认真地学习过这些知识,突然就被告...原创 2020-01-23 10:52:46 · 5482 阅读 · 0 评论 -
使用Liquid实现简单的数据交换
在平时的开发工作中,接口对接是一件无可避免的事情。虽然在“前后端分离”的大趋势下,后端的角色逐渐转换为数据接口的提供者,然而在实际的应用场景中,我们面对的往往是各种不同的“数据”,譬如企业应用中普遍使用的企业服务总线(ESB),这类服务要求服务接入者必须使用WebService来作为数据交换格式;再譬如电子数据交换(EDI)这种特定行业中使用的数据交换格式,从可读性上甚至还不如基于XML的WebS...原创 2019-12-29 14:44:08 · 3694 阅读 · 4 评论 -
百度地图加载海量标注性能优化策略
在上一篇博客中关于Vue表单验证的话题里,我提到了这段时间在做的城市配载功能,这个功能主要着眼于,如何为客户提供一条路线最优、时效最短、装载率最高的路线。事实上,这是目前物流运输行业智能化、专业化的一个趋势,即面向特定行业的局部最优解问题,简单来说,怎么样能在装更多货物的同时满足运费更低的条件,同时要考虑超载等等不可抗性因素,所以,这实际上是一个数学问题。而作为这个功能本身,在地图上加载大量标注更...原创 2019-11-26 17:48:37 · 6973 阅读 · 0 评论 -
Vue快速实现通用表单验证
本文开篇第一句话,想引用鲁迅先生《祝福》里的一句话,那便是:“我真傻,真的,我单单知道后端整天都是CRUD,我没想到前端整天都是Form表单”。这句话要从哪里说起呢?大概要从最近半个月的“全栈工程师”说起。项目上需要做一个城市配载的功能,顾名思义,就是通过框选和拖拽的方式在地图上完成配载。博主选择了前后端分离的方式,在这个过程中发现:首先,只要有依赖jQuery的组件,譬如Kendoui,即使使用...原创 2019-11-26 17:10:54 · 10524 阅读 · 12 评论 -
在WSL中使用Linux桌面环境的尝试与总结
最近忙里偷闲的博主,再次迷恋上折腾Linux。话说自从微软推出WSL以后,我就彻底地停止了Windows + Linux 的双系统组合。回想起从前使用过的各种Linux发行版,基本上每隔一段时间就会崩溃一次,所以,面对WSL这种近乎应用级别的方案,我个人是非常愿意去接受的。因为一不小心玩坏了的话,可以直接对应用程序进行重置,或者重新从应用商店下载,相比重装系统,我觉得这种方式要更友好一点。虽然说W...原创 2019-08-25 11:22:03 · 12269 阅读 · 9 评论 -
通过ApiExplorer为Swagger提供MVC扩展
我一直想吐槽下运维同事提供的Jekins项目模板,因为它居然不支持含有多个项目的解决方案。作为一个有追求的程序员,每个解决方案下最少应该含有两个项目,即项目本身和项目对应的单元测试。可惜在这样一种情形下,我没法再去坚持这样的原则,而这真正让我感到难过的是,为了在编译环节向Jekins妥协,大家在一个项目里极尽所能,在这一个项目里居然混合了MVC、WebApi和WebService三种技术,甚至到最...原创 2019-08-25 11:20:53 · 1981 阅读 · 5 评论 -
.NET Core POCOController在动态Web API中的应用
Hi,大家好,我是Payne,欢迎大家关注我的博客,我的博客地址是:https://blog.yuanpei.me。在上一篇文章中,我和大家分享了ASP.NET中动态Web API的实现,这种方案的现实意义是,它可以让我们把任意一个接口转换为Web API,所以,不单单局限在文章里提到的WCF迁移到Web API,任意领域驱动开发(DDD)中的服务层,甚至是更为普遍的传统三层,都可以通过这种方式快...原创 2019-08-25 11:19:24 · 1809 阅读 · 0 评论 -
使用ASP.NET Core和Hangfire实现HTTP异步化方案
Hi,大家好,我是Payne,欢迎大家一如既往地关注我的博客。今天这篇博客里的故事背景,来自我工作中的一次业务对接,因为客户方提供的是长达上百行的XML,所以一度让更喜欢使用JSON的博主感到沮丧,我这里不是想讨论XML和JSON彼此的优缺点,而是我不明白AJAX里的X现在基本都被JSON替代了,为什么还有这么多的人坚持使用并友好的XML作为数据的交换协议呢?也许你会说,因为有这样或者那样等等的理...原创 2019-07-14 23:27:23 · 5701 阅读 · 5 评论