我的技术回顾那些与ABP框架有关的故事-2018年

我的技术回顾那些与ABP框架有关的故事-2018年

今天准备想写18年的,但是发现我从19年开始就在逐渐淡出社区,因为生活、工作的缘故吧。所以也没什么特别罗列的,就合并下吧。

时间真的是可以磨平太多东西了,如果我不去整理资料的话,我会以为有太多事情发生在2017年,结果他们都发生在2018年或2019年。

写到这篇的时候,我发现我的技术轨迹也从单纯的.NET 技术栈开始多元化,接触前端(angular)、数据库、架构、集群、Devops、容器化的方案了。

社区所提供的ABP后端+Vue、React模板方案

2018年,随着ABP框架被越来越多的人使用,前端的方案在国内变化基本上都是vue。同时ABP官网并不打算提供vue方案的支持。

所以社区人员就提供了Vue的前端模板。

下图为vue的 Pull Requests记录。

76ea68fd59aa346986d0f17653858b2c.png

下图为react的 Pull Requests记录。

081895e6c08194bb11c24908a544a252.png

所以采用abp框架的功能模板是非常健全的,无论是angular、vue、react你都可以依据你的喜好选择。

所以很多人吐槽ABP框架功能不全,那仅仅是因为前端的功能没有做出来罢了。当然伸手党是也是常态。

开始着手52ABP官网的成立

我大约是在18年,谋划了想自己独立建站的想法,其实中途也有人搭建过一个abpbbs的论坛,但是也因为运营者和人气的关系,浅尝辄止。

所以到了我这里的时候,我就在想我要如何做,怎么做。公司内,我基本上已经变成了一个非常纯粹的管理者了,基本上不用写什么业务代码,更多的时候做做技术选型架构设计。

但是人啊,不打算彻底转型当管理的话,不能脱离一线啊,尤其是我们开发人员,加上我一直想做点不一样的东西。所以谋划了很久。

最初的目的ABP框架国内镜像网站

最开始的时候,单纯的想做成一个国内的镜像网站。毕竟很多朋友没有“科学上网”工具,导致访问ABP官网很慢。所以想加速下的网站的CDN速度。开始方便国内的小伙伴大家的下载和使用。

我也利用空余时间录制了几个快速入门的视频,放到几个网易云课程和腾讯课堂上。

然后情况就开始发生了一些变化。。。就是发现这个视频的基础照顾的不太好,导致很多基础不是很好的程序员,体验性很糟糕,评论也很好玩,两极分化严重。

有好有坏,比如

b22e09adfed09e0ce098a430e6d51ba9.png

因为这两个平台来的大多都是仅学过C#和传统.NET Framework的学生,连.NET Core都没有接触过,更别说是Angular了,所以导致很长一段时间,我都有点自闭,觉得ABP门槛太高了,后来才想明白是单纯的教材少,大多数人没我这么强迫症把做的东西通用化。

而这时很多人加群的目的也开始起了变化,不是单纯的学习和讨论技术了,ABP官方有一个商业版本,包含了一个干净的前后端完整功能模板即:ABPZero,很多人都想使用获取这个模板来接私活,但是又有很多人玩不转这个模板,所以不少人选择了放弃,然后转头骂ABP难用,还不如Ado.NET。

.NET Core版本的52Abp框架

我又开始了新的尝试,而当时正值AntDesign 官方也推出了Angular版本的组件库:NgZorro。

然后机缘之下接触到了卡色的Ng-alain,然后进行了集成和适配。但是因为版本太早,无论是Ng-alain还是ng-zorro,在当时生态相比react的版本都不那么成熟。

所以在中途发生了好多次破坏式升级。这个也是让我体会到了如何做最大的兼容性对于框架的设计者来说挑战才是最大的。

这也是非常佩服土牛的模块化设计思想。

只有我一个人的话,工作量太庞大了,就找到了熊猫一起搞这个事情,然后历时两个月,我们推出了第一个版本,在小范围给大家使用了下。然后大家表示喜欢。然后我们就将它提交到了52ABP网站上,方便大家下载为属于自己的解决方案。

52ABP在2019年,做了太多对于Angular下的适配了,尤其是NG-Zorro的官方组件过于残缺,但是已经上车了就坚持搞了下去,好在仅两年ng-zorro的官方组件生态库越来越完善和齐备。Angular对于开发管理系统来说熟悉了时候,会非常的得心应手。

当这个我们内部完成了之后,购买了52abp的域名后,开始上线试运营的时候,才知道ABP还是一个动作电影的系列。说实话,现在想来是真的尴尬。尤其时不时进来的关键字。

不过好歹是上线了,而且不管怎么说也坚持到了现在(2022年)。

如何保障网站的持续运转-资金

当网站开始运转了之后,网站最开始部署在一台1核心2G的Linux服务器上。起初流量就群里的人用,还算好。后来因为人太多,撑不住了。开始慢,然后大家就以为是ABP框架慢,然后就开始在群里喷ABP框架有多么的不好。。巴拉巴拉的到最后到人身攻击的都有。

所以菜鸡到处都是,不要妄自菲薄,我们要自信。

这个就比较坑了,同时这个不是我们要做这个事情的初衷,毕竟是为了推广ABP,而不是给ABP框架抹黑,所以当时要么关站,要么想其他办法。我们晚点再说

2018年上海紫荆谷ABP分享会

适逢一次去上海找钢网参观学习的机会(找钢网没有上市,可惜了),我在群里说要去出差,问问有没有人聚聚,本以为只会有10来个人活动。但是大家都在踊跃报名要来参加,从小活动变成了非常正式的技术分享会了。

那次应该是群里神聊的网友,能来的都来了,大家在线下见了面,也认识了很多新的朋友,比如老渠(从南通驱车来的),当然这又是另外一个支线故事了。

e3ee98c00c660d0b2f57312416cf973d.png

d830a9687bed209846eaac00876ee95a.png

第一次非常正式的和ABP官方沟通

为了解决网站运营资金的问题,我就想和ABP的作者沟通,说了下我想52ABP来干嘛。

然后就通过马立明联系到了ABP官方作者,给他写了一封邮件,告知他是否可以考虑下国内市场。

马立明 我是和他在北京认识的,后来他频繁活跃在ABP官方仓库中,然后就全职作为ABP框架的核心开发人员之一,后面梁仕伟也加入了ABP框架团队。

ABP的作者也回复给我了一封邮件,大体的内容是因为国内盗版官方版本的太多,所以不考虑。并且告诉我他现在的重心开始转移到ABP.IO,也就是ABPVnext的版本中。

680ba75d81dc172ab7622a7afad06d0a.png

这个时候,我就陷入了比较尴尬的状态。毕竟这个服务器是要掏钱的,我们已经牺牲了很多的休息时间来做52ABP的网站和模板。这个项目让我把它腰斩,这个是我不愿意的。

既然ABP官方不考虑国内市场,那我就搞吧。觉得新浪微博可以抄Twitter。那我就来折腾个本土版本的ABP吧。尴尬的问题就是,ABP官方的模板都是盗版的,更别说有人愿意来付费买本土版本的ABP框架吧。

尴尬而又不失礼貌的微笑

所以我们得感谢那些付费买课程的客户

这个时候,我就想到了卖课程,也在群里问了,好多都在说出了课程没人买,后来给我的教育就是不要把程序员的思维代入商业行为。

但是我还是坚持搞了,我还算行动力不错的人,就开始搞了,准备了个大纲,问了一些人意见就开始搞。

这个课程出来后上架到了网易云课堂。目前来看销量还可以。但是录制视频实在是太累了。当时天天熬夜到凌晨2-3点来录制视频内容。现在想起来仍然心有余悸。不过结果是很好的,因为大家付费了,支持52ABP网站的运营的经费有了。然后我们也推出了一个学习版的52ABP目标框架,里面的功能就比较多了。和当时的ABPZero功能差不多。然后很多人学了之后,就拿去做公司内部的商业项目了。

市场中总有一双看不见的手

我想你可能猜到了。事情又起了变化。现在看来让我想起了**经济学家凯恩斯在他的著作《国富论》**中提到的那句话“市场中总有一双看不见的手”推动着你走。

那就是有一些公司联系到我,问我学习版或者企业版会不会可以持续更新。讲道理,如果是17年问我,我肯定回答说没问题。但是经历了上面那么多的事情之后。也见过了很多基于ABP框架也好,模板也好的开源项目。

因为各种原因难产后,我明白坚持更新是一件很难的事情。就如

  • ABP官方也是靠ABPZERO 的销售来养活这个公司的。

  • 后来也因为有了资金才会有更大的梦想来做ABPVnext这样的项目。

所以我的回答是如果你们愿意付费的话,我就坚持更新。那么有一些公司就说花钱就算了,我们公司有程序员,自己可以改。你都微软MVP了还收费。打着MVP的名头去收钱。当然更难听的也有。

当然我终于遇到了第一家愿意付费的公司,因为这个价格实在是太便宜了。当然收费后,我也一直坚持更新这个模板。

从.NET Core 2.1升级到2.1,升级到3.1。然后Angular从6到8到9,慢慢到现在的angular12。

尤其52ABP代码生成器的推出,很多人给我反馈说,开发效率提高了70%以上,也有不少公司参考代码生成器做了一个属于自己公司内部的代码生成器。

小结

如果说2016、2017年是我个人技术能力进行了快速提升的话,18年起我更多在考虑如何带来持续稳定的收入来维护一个网站,毕竟它不是一个博客网站,记录我个人的技术内容。

那么这就不是技术能帮助我解决的了,同时经历了周围很多经营的公司重组、破产、运营模式的问题等等。而我呆的是积微物联因为运营模式,加上我的项目因为政策、运营模式都比较新,见到了太多用技术无法解决的事物了之后,所以我就要去思考,52ABP到底要怎么搞,才能长久的做下去。

推荐

《深入浅出ASP.NET Core 》书籍配套源代码与视频下载

0b309913adf8e01df37c7c2fad78a325.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/290841.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

wpa_supplicant 无线网络配置

为什么80%的码农都做不了架构师?>>> 安装wpa_supplicant后,修改服务,编辑 /usr/share/dbus-1/system-services/fi.epitest.hostap.WPASupplicant.service 将下面的 [D-BUS Service] Namefi.epitest.hostap.WPASupplicant Exec/s…

Avalonia跨平台入门第六篇之Grid动态分割

前面玩耍了ListBox多选,今天在他的基础上对Grid进行动态分割;这个效果其实在Xamarin中已经实现过了;其实都没太大区别;直接看效果吧:在ListBox中选择了具体的布局后进行Grid布局分割:具体分割的方法和原来在移动端没啥区别:下一篇就是控件的拖放了;最终简单的效果先这样吧;以后…

使用ABBYY FineReader进行自动图像预处理

2019独角兽企业重金招聘Python工程师标准>>> 扫描图像和数码照片中常见的扭曲文本行、歪斜、噪声和其他缺陷可能会降低识别质量,ABBYY FineReader可自动消除这些缺陷,也允许手动消除。 ABBYY FineReader有几个图像预处理功能,如果…

Avalonia跨平台入门第五篇之ListBox多选

前面我也提前预告了今天要实现的效果;不过中间被卡了一下;今天赶紧去弥补上次要做的效果,其实在WPF效果中已经实现过了,看效果吧:ListBox的前台布局代码:使用的附加属性和WPF好相似:子项模板(绑定写法简化了好多):多值转换器(少了一个ConvertBack):最终简单的效果先这样吧;以后…

Android之android.os.NewWorkOnMainThreadException解决办法

1、问题 用别人提供的的sdk的Demo出现android.os.NewWorkOnMainThreadException 2、解决办法 网络请求开启一个线程请求或者开启异步任务都行 3、总结 1、 之前就看到过这种android.os.NewWorkOnMainThreadException异常,时间很久了,自己也没反映过来&a…

金蝶K/3 WISE 12.3订单跟踪SQL报表

金蝶K3一直缺少完整的跟踪报表,所以我们开发了一张完整的跟踪报表,通过查询分析工具直接生成。代码(WIN2008 R2SQL 2008 R2环境,K3 WISE 12.3):select t1.fname1 客户,t1.fname2 业务员,t1.f_102 款号,t1.f…

开源绘画应用 Pinta 已移植到GTK 3和.NET 6

Pinta [1]是一款开源绘画应用,适用于 Linux、Windows 和 macOS。你可以用它来进行自由手绘/素描。你也可以用它在现有的图片上添加箭头、方框、文字等。年初发布了 Pinta 2.0.2 版本,这是我看到的第一款桌面的dotnet6 和 gtksharp的 应用。Pinta是一个小…

Druid源码分析系列1:dataSource.init()的准备工作

2019独角兽企业重金招聘Python工程师标准>>> 本节,讲解 dataSource.init(); 打断点在 stop in com.alibaba.druid.pool.DruidDataSource.init 好,开始研究代码 public void init() throws SQLException {// 首先确定没有initedif (inited) {r…

软件测试推荐专业,软件测试专业老师推荐信

尊敬的领导:您好!首先感谢您在百忙之中抽出时间来阅读我学生XX的推荐信!该生是XX大学软件测试专业应届毕业生,自进入XX大学以来,凭借自身扎实的基础和顽强拼搏的奋斗精神,经过几年不断的学习,在…

[转]Android中pendingIntent的深入理解

转自;here pendingIntent字面意义:等待的,未决定的Intent。要得到一个pendingIntent对象,使用方法类的静态方法 getActivity(Context, int, Intent, int),getBroadcast(Context, int, Intent, int),getService(Context, int, Intent, int) 分…

叮,您有一份ML.NET 速查手册请查收!

点击上方蓝字关注我们(本文阅读时间:7分钟)本篇文章简要介绍 ML.NET 背景和面向 .NET 开发的特色功能,以及典型的机器学习编码示例,并分享自己整理的 ML.NET API 速查手册。微软MVP实验室研究员项斌微软全球最有价值专…

老师计算机传帮带工作总结,传帮带工作总结范文

传帮带工作总结范文一段时间的工作在不知不觉间已经告一段落了,回首这段不平凡的时间,有欢笑,有泪水,有成长,有不足,让我们好好总结下,并记录在工作总结里。那么如何把工作总结写出新花样呢&…

[Usaco2007 Demo][BZOJ1628] City skyline

1628: [Usaco2007 Demo]City skyline Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 320 Solved: 260[Submit][Status][Discuss]Description Input 第一行给出N,W第二行到第N1行:每行给出二个整数x,y,输入的x严格递增,并且第一个x总是1Out…

负载均衡(LB)集群 dr

LB、LVS介绍LB集群是load balance 集群的简写,翻译成中文就是负载均衡集群 LVS是一个实现负载均衡集群的开源软件项目 LVS架构从逻辑上可分为调度层(Director)、server集群层(Real server)和共享存储层LVS可分为三种工作模式: NAT(调度器将请求的目标ip即vip地址改为…

ASP.NET Core启动地址配置方法及优先级顺序 | .NET 6 版本

前言上次,我们讨论了如何通过配置或代码方式修改启动地址:《ASP.NET Core启动地址配置方法及优先级顺序》。不过是基于 .NET 5 版本的。由于 .NET 6 使用了最小 WEB API, 配置方式已经部分发生了变化。设置方法1. applicationUrl 属性launchSettings.jso…

Avalonia跨平台入门第七篇之RadioButton的模板

前面其实已经玩耍过单选按钮,只不过一直好意思分享出来;今天终于可以正大光明的分享出来了,直接看效果吧:第一次使用然后的傻傻的版本(根据单选按钮的选中状态来切换二个图片);真的好Low:样式写法和WPF没太大区别:类似WPF中的触发器,使用了附加属性:前台具体使用方式:最终简单的…

更强的压缩比!PostgreSQL开始支持Zstd

文 | 局长出品 | OSC开源社区(ID:oschina2013)PostgreSQL 现已通过其 TOAST 存储技术提供压缩支持,并且在过去的一年里构建了 LZ4 压缩支持——用于压缩 WAL、备份压缩以及其他用途,现在 PostgreSQL 开发者正准备通过 …

jbpm6.5 环境搭建(三) 数据库 切换

2019独角兽企业重金招聘Python工程师标准>>> 经过一晚上的折腾,终于搞定,成功切换Mysql 步骤一: 安装mysql 数据库 创建数据库 名字为jbpm 设置用户名密码 我本地默认使用 root 步骤二: ** 修改配置文件 ** F:\jb…

Android之HandlerThread源码分析和简单使用(主线程和子线程通信、子线程和子线程通信)

1、先熟悉handler方式实现主线程和子线程互相通信方式,子线程和子线程的通信方式 如果不熟悉或者忘记了,请参考我的这篇博客 Android之用Handler实现主线程和子线程互相通信以及子线程和子线程之间的通信 http://blog.csdn.net/u011068702/arti…

Avalonia跨平台入门第八篇之控件的拖放

在前面分享的几篇中咱已经玩耍了Popup、ListBox多选、Grid动态分、RadioButton模板,过程还算顺利;今天接着把把ListBox中的Item拖放到Cavans中(基于官方的Samples实现的);直接看效果吧:1、ListBox中PointerPressed、DragOver事件:2、Canvas中的Drop事件:3、控件的移除无非就是通…