2023-12-29

25 篇热帖

1. 大家喜欢用 ORM 还是直接写 SQL

OP 主要用的 Java 和 Go ,但是感觉这俩主流语言的 ORM 框架( JPA 、GORM )都不如 C#、Python 的 ORM 好用( JOOQ 、ent 、XORM 感觉国内用的还是有点少),而 SQL / SQL builder ( JdbcTemplate 、sqlx )在动态条件查询时需要在代码里拼 SQL 字符串也有点🥚疼

其实就是最近在玩 Spring 新出的 JdbcClient ( JdbcTemplate 的封装版),感觉在 Java 有多行字符串后,在 Java 代码里写 SQL 完全不是什么问题,而且也不用使用难用的 XML 去定义 resultMap (直接在 Java 里定义 record 或者 class 然后用构造器就可以了)

public record User(Long id, String name, Integer sex) {
}

@GetMapping("/users/in")
public Iterable<User> listInIds(@RequestParam List<Integer> ids) {
    return jdbcClient.sql("""
            SELECT *
            FROM `user`
            WHERE `id` IN (:ids)
            """)
            .param("ids", ids)
            .query(User.class)
            .list();
}

但是在碰到动态条件的 where 语句的时候,在 Java 代码里手搓 SQL 看着也很让人头大……这时候 MyBatis 提供的 dynamic SQL 就很好用了

但真的不喜欢 XML……

MyBatis-Plus 也了解过,但说不上来为什么,总是感觉不太喜欢这个库……

2. 元旦准备返乡参加堂妹的婚礼,却在今天发现她把我老婆微信好友都删掉了

(没有任何矛盾,不久前有交流过应该可以确定不会是误删),这个婚礼还有必要去吗

3. 🎁 嗯背单词双链功能已上线,助你轻松突破一万词汇量,评论抽取 20 个终身会员兑换码!

肝了差不多两周,本次更新上线了一个非常有趣的功能,自由添加单词的同义词,反义词,派生词,和相关词,同时这些被添加的单词也会链接到原始单词,类似于 Obsidian 的双链功能

通过这个功能你可以像思维导图一样组织单词之间的关系,对单词进行分类,整理记忆,例如词根词缀,所属类别,共同特点等等你认为存在的联系,都可以进行组织,实现一个单词记忆十个单词的效果,随着整个记忆网络的不断扩大,对于新词的记忆效果也会越来越快,越来越好

目前所有背单词 APP 的原理本质上都是把中英文的对应关系灌输给你(无论使用什么算法),嗯背单词使用的 STRS 算法也一样,这种记忆由缺乏上下文的,很难长期保持。

联想记忆可能是目前被证明最高效的记忆方式,比如一直很流行的思维导图,双链笔记

img

整个功能使用起来十分甚至九分的简单,点击编辑,搜索单词(不需要完全拼对,会自动识别), 点击添加就好了

关于"背单词无用论"

我自己的情况是这样的,平时我会玩很多游戏,有的没有中文汉化,有汉化的呢可能字体非常丑(比如 Doom),不得不切换到英文。玩过游戏的都知道一边玩一边查生词真的是不现实的,很多时候看个大概意思也就过了

这种情况下,先大量背单词就非常好,在保证一个基本理解的前提下也不会破坏整体的游玩体验

下载地址

App Store

App Store 搜索 "嗯背单词"

产品交流

img

评论参与抽奖

终身会员原价 198 元,目前 85 折 168 元,折扣持续一周

留下邮箱的评论,我会在下周五截止抽取 20 个终身会员兑换码

4. 我的 2023 总结,一个程序员与物业的对抗之路

前言

这个标题看似愤怒。甚至在发这个帖子的时候,我因为楼上一次次的装修扰民刚刚报完警,还在等待警察的到来。但这种操作我其实早就习惯了。所以此时毫无愤怒之感。2023 年马上就要过去了,在这个间隙,我总结一下这一年一个中年程序员的经历。顺便把今年做的小产品介绍给大家认识。

我做了一个小程序。slogan 很直接,就是“为业主服务”!如果不是避免过于暴躁戾气太重,我甚至想将 slogan 改为“去你妈的狗屎物业”!

我自己的房子买来接近 10 年。一直未曾装修。所以这些年一直在外租房。 在疫情之前,我并未对物业的服务有过什么太深的感受。因为白天基本都在公司度过,所以每天都会加班到半夜两三点才回来。第二天一大早就又去公司。基本接触不到物业。

2020 年疫情开始,有大量的时间呆在家里。从这时候开始开始频繁的接触到物业。这时候也开始发现大量物业与业主之间的矛盾,而且类似矛盾极其广泛,形成常态。几乎任何小区都有类似的问题。

矛盾

老旧小区

1 ,老旧小区的物业。先从老破小说起。老旧小区的物业基本是个摆设。大家都知道有个物业,知道每年要缴纳物业费。但能感觉到的物业的工作就只是在门口放个保安。每天倒个垃圾。在小区停车交个钱。除此之外,完全感觉不到物业的存在。任何时候任何陌生人进小区,保安基本不会阻拦。小区停车场的钱到底交给谁了。业主对此也不关心。这些老旧小区一旦家里有什么问题,基本都是靠自己解决。因为他们完全意识不到这种事情可以去找物业。大家习惯了好像没有物业的存在。

当然,老旧小区的物业也有自己的困难。这个以后另聊。

2 ,大量老旧小区开始出现地面沉降造成的墙体裂缝,墙漆脱落,保温层破损,路面起伏,电梯老损,路灯不亮,绿化带荒废。据统计,北京城六区内建设与 2000 年及以前的老旧小区占比约六成,集中在城北的二环至四环之间。
其实针对这种情况,小区一般都有公共维修基金,维修基金一般存入各地建设主管部门开设的专户代管。但是动用维修基金有一套繁复的流程。首先是物业或业主提出使用建议;然后,需要三分之二的业主的业主或召开业主大会讨论通过;第三部,物业或者相关业主组织实施使用方案,需持有关材料,向相关主管部门申请列支;政府主管部门审核同意后,专户管理银行才会将资金划转至维修单位。
在这个过程中,业主协商或召开业主大会等环节,往往就卡住了。有数据显示,截止 2022 年底,北京累计的商品住宅维修基金达到 782.90 亿元,累计使用的数额只有 78.07 亿元,提取率不足 10%。还有很多城市低于这个水平,大量公共维修基金就锁在银行的账户里。

新小区

1 ,物业纵容。用我现在租住的这个小区为例。中海地产的一个项目。算是高档小区,盖起来没几年,因为几年疫情,所以这个小区的的入住率并不高。平时看到大多数房子都是未装修状态,空空荡荡。疫情结束后,前期买了房子的业主开始扎堆装修。所以出现了大量的非正常装修时间的扰民现象。比如大清早 7 点多装修,中午装修,晚上 9 点 10 点还在装修。周末也在装修。如果一栋楼彻底没人住,无论怎么折腾也基本不存在扰民现象。但我自己住的房子正好处于他们卖的比较好的一栋楼。已经有不少住户已经住进去了。所以这种装修扰民现象实在是闹心。

而且这不是偶尔扰民,几乎是每天。住进这个小区 1 年多。我因为扰民现象,找物业处理的次数不下 100 次。因为小区还有很多房子没卖出去,为了提高小区的入住率,物业基本上是刻意纵容这种装修扰民行为。所以找物业的上百次,基本什么作用都没有。最后我实在愤怒,在对方装修扰民的时候,砸了对方家里的装修。为此进了一趟派出所,甚至差点被拘留。

装修扰民看似是一个小问题,一部分装修业主经过沟通可能也都能顺利处理掉。但遇到我这种情况,新小区,加上物业刻意纵容,基本无计可施。

2 ,开发商承诺的没有交付。或者被欺骗。两个小例子,我住过的某个小区,窗户外是小区的游乐场。每天中午,下午一直到晚上 10 点 11 点,小孩的声音非常吵闹。问过房东,当时买房的时候,规划里是没有游乐场的,但是房子交付以后,发现门口被生硬的加了一个游乐场。因为这个游乐场方便了小区里的一些有小孩的住户,所以对于这个游乐场周边的住户来说,只能忍气吞声,如果提出自己的不满,可能会导致一些离游乐场很远的,事不关己但是自己家又有小孩的一些住户唱反调。所以基本不了了之。

另一个例子是曾经住过的世茂的一个小区,住户在买房的时候,规划有两个很气派的小区大门。结果房子交付以后,只有一个正门。小区的住户经过几年艰苦的维权。后面结果因为我搬了出去,也不了解。

3 ,物业不作为,在我们本地很大的有几万住户一个小区。物业公司不作为,基本不对小区进行日常维护。小区其实盖起来没多少年,但是进去看到的是破破烂烂的场景。像一个老破小。小区业主无论怎么维权,物业始终不理不睬,也继续不作为。最后小区业主报团准备成立业委会,从而可以换掉物业。但是物业通过盯梢,阻挠等等各种手段干扰。甚至物业开始和业主大家,闹的整个城市都沸沸扬扬。直到现在都没什么结果。

4 ,物业和业委会沆瀣一气。有的小区因为物业不作为,辛辛苦苦经过一两年的时间,终于成立了业委会。然后物业私下找到业委会的领导,承诺送车位,免物业费。最后业委会的领导原地解散业委会。业主几年的辛苦全部泡汤。大家也没有了重新再来的心气儿和精力。现在也是破罐子破摔。

5 ,物业的权利被无限放大。有的小区物业的权利被无限的放大,本来物业是业主的管家,是小区的管家。最后变成了小区的主人,对业主的态度是颐指气使。在小区里随便折腾。广告贴的到处都是。到处划分空间给出租给第三方。特别是疫情几年,物业基本成了执法单位,业主出小区需要老老实实的给保安汇报自己要出去做什么,见什么人。几点回来。疫情也才过去一年,曾经发生的各种新闻各位估计都还记得吧。

这是一个介绍我 2013 年做的产品的帖子,目前打了这么多字各位该看烦了,但事实上,物业的各种问题我仅仅是说了皮毛。太多问题存在了太多年。这里不再说太多。

疫情这几年我一直在想,有什么办法能解决这种问题?一直在想。想了几年。

最终,我的答案是:将矛盾公开。真正的由业主监督物业!

答案

所有的矛盾,一旦公开,基本是非就明了了。

我想到的解决业主和物业矛盾的方案,就是将业主的情绪公开。好的情绪和不好的情绪,都公开。公开的途径就是类似朋友圈的这样一个线上社区。

其实目前一些大的开发商(包括物业)都有自己的线上社区 app 。比如万科,恒大,碧桂园,中海,世茂等等。都有自己的 app 。app 里面基本都有一个类似社区的地方,供自己的业主在里面发帖交流。

但是这种由开发商自己搞的社区其实毫无意义。原因一,基本你在里面只能发一些无关痛痒的东西,一旦涉及到矛盾,可能就被开发商删除了。你的声音就消失了,他们把矛盾仅仅控制在你和对方之间,其他人根本不知道。这个矛盾最后能否被处理,由不得你。原因二,这种开发商自己搞的 app 。基本只能在自己的业主之间小范围使用,因为毫无公共扩散属性,所以基本连自己的业主使用的都极少。最后都成了僵尸 app 。

我的产品思路这时候也很明了了:做一个线上社区,业主可以在上面发布自己的内容。这些内容的展现不受开发商限制,业主可以看到自己小区里的所有帖子。也可以看到自己城市内其他小区的帖子。也就是说,一个业主与物业产生了矛盾,你的矛盾会被整个城市的人看到!

因为业主大部分可能都是中老年人,所以界面设计和体验都要极其简单。功能也不能太复杂。

为了方便迭代,传播和试错,我准备先用小程序试水。有了这个想法,第一个原型就出来了,长这样:

为了降低使用门槛,我将发布内容的页面尽量做的和微信朋友圈一模一样

到这里我把做好的小程序进行了小范围的测试。结果出乎意料,好评如潮!

问题其实显而易见,如下:

拿什么吸引业主来用?

这个问题其实到我发帖的此时此刻,都没有能彻底考虑清楚。
并不是所有业主和物业都有矛盾。
就算有矛盾,并不是所有矛盾的业主都愿意来这里。
就算愿意来这里,并不是所有业主都愿意将矛盾公开。
就算愿意来这里,愿意公开,如果小程序籍籍无名,也起不到督促物业的作用。
就算这个产品有点名气了,但如果一个产品里面的内容都是矛盾,都是充满戾气的,基本离死不远。

怎么办呢?
围绕这个这个问题。我做了一小部分迭代。

增加了发布内容的类型。比如活动,辩论。

这些解决了上面的问题了吗?好像并没有。毕竟 slogan 是“为业主服务”,而不是“去你妈的狗屎物业”。
目前仅仅是一些内容。内容本身的吸引力有限,绝大多数业主可能对内容本身并不感冒。

所以我的想法又来了,增加服务。

业主服务

1 ,在内容类型中增加拼团,比如马大帅家有 200 斤苹果需要卖,但它既不是商家,也没办法给一些平台供货,他就是一个小区中的普通业主。那么可以在社区里发布拼团。小区里的其他人可以看到马大帅在出售苹果。自己小区的东西在自己小区卖。拿货卖货都很方便。

由于线上交易需要办理增值电信业务许可证,所以目前这个功能仅在内部测试中,并没上线!

2 ,增加社区超人。所谓的社区超人,就是社区里有技能,也能给其他业主做出服务的一些人。比如张三会弹吉他,李四可以做保姆,月嫂。王五可以修电脑,马六会做烘焙。他们就都可以成为社区超人。然后只需要在小程序内展示一下,社区内其他人就可以联系他们,至于免费或者付费,他们自己去商量。

上图了:

其实可以围绕业主,可以做到的服务内容有很多。但因为我目前是独立开发者的状态,一个人需要做很多事情,进度缓慢。所以目前构思的东西有很多,但进度比较慢。

比如便民,商家服务,都在开发中。但是界面依然非常简单,会避免做成 58 同城一样的一锅粥。如果大家对这个项目感兴趣,之后我会针对业主服务这块单独做帖子进行扩展介绍。

继续问题:这些措施解决了上面那个网友提出的问题吗?可能解决了一点点。但并没有完全解决。其实还是没有提供任何一个业主必须来这里的理由。

而且,忘记了一个更重要的东西,项目的 slogan 是“为业主服务”,但我本来想表达的是“去你妈的狗屎物业”,那么怎么解决物业不作为的这个问题呢?

支持业委会

业委会是有权利替换物业的,事实上,在我做这个项目之前,调查过几十个小区的物业,他们对业委会基本都是忌惮的。最初我曾走过弯路,我想通过与物业的合作,能帮我快速的将这个小程序推广出去,但大部分物业给我的反馈是:合作可以,但是需要去掉业委会模块。

这让我更坚定了一个想法,就是可以暂时放弃和物业的合作,但一定要想办法找业委会合作。

如文章开头所说,有数据显示,截止 2022 年底,北京累计的商品住宅维修基金达到 782.90 亿元,累计使用的数额只有 78.07 亿元,提取率不足 10%。还有很多城市低于这个水平,大量公共维修基金就锁在银行的账户里。

而阻碍这些的原因,绝大多数原因是因为卡在了业主协商或召开业主大会等环节。所以也是问题的核心。

我们需要解决这个问题!

我做了两个措施:

对于没有业委会的小区,提供咨询群组,我们会寻找一些有经验的人帮助这些小区成立业委会。

对于已经成立了业委会的小区,业委会人员可以在社区内发布带有业委会标识的公告。可以发起业主投票,公示小区与第三方的签约合同,财务公示等等。

目前的投票功能还在紧张的开发中。

其他

除此之外,后台正在以 saas 的形式向每个小区,每个社区,每个业委会,甚至物业创建独立的管理中心。
我也试图以城市化运营的方式,增加合作城市的管理后台。将城市的运营分散运营给合作方。可能也会让我压力小一些。

对于独立开发者而言,设计,前端,后端,产品策划,运营,销售,尤其是 2023 年我个人以及家庭的一堆大大小小的事情。让开发工作变得比较缓慢。需要做到工作依然比较多。

设计稿经历了 5 到 6 次的迭代,每次迭代的设计稿包含接近 80 个页面。持续了 2023 年整整一年的时间。

但能否成功呢?完全不知道。我所谓的这个项目的成功是能保持盈亏平衡,能持续盈亏平衡下去能让这个项目更持久的运营下去。但问题也依然存在。如果需要做到为业主提供到价值,并且能为绝大多数业主提供价值,这个产品需要做的事情还很多。

但作为它诞生到现在的第一个阶段,2023 年的工作结束了。

2024 年将继续向前。如果有盈利,我会全职运营。如果不能盈利,我也将业余开发运营。

如果有朋友有兴趣一起运营,也可以联系我。不割韭菜,也不涉及费用,但希望拥有资源的朋友能帮助我们,或者和我们一起创造价值。

小程序体验:

个人微信

项目更新公众号

5. 房价算是回到 2017, 2018 了吗?这么搞下去,明后年会怎样,有点慌啊
房价算是回到 2017 ,2018 了吗?这么搞下去,明后年会怎样,有点慌啊。
不如趁早抛掉,连刚需房也卖了得了,拿着现金比较保险啊
6. ps5 还是 switch
背景:
1 、孩子小学
2 、平时不给用手机平板刷短视频或者玩游戏
3 、每周末会让孩子看电视(主要是动画电影+纪录片)

目的
1 、避免孩子以后可能会偷偷玩游戏导致上瘾
2 、游戏使人明智

需求:
1 、连电视玩( 90 寸)
2 、有适合孩子玩的游戏,有适合全家一起玩的游戏

之前做了一些了解,其实 switch 比较适合,但是不知道连电视上的效果如何,所以想听一下各位的建议,谢谢。
7. 前端/客户端有什么办法来处理后端/服务端返回的不规范数据吗
本人是前端,技术栈 ts/java/oc ,web 和 app 都在做。



现在经常遇到后端返回的值让人难以琢磨。



比如同样都是表示是/否,或者打开/关闭两种状态,有点时候返回值是 0/1 ,有时候是 1/0 ,有的时候是 1/2 ,有的时候是 true/false ,有的时候是"on"/"off",还有的时候干脆就是为否就没有这个字段了。



或者是同样都是用户 id ,有时候字段叫做 user_id ,有时候叫 UserID ,有时候就只叫 id 。



然后在业务逻辑中经常会出现从不同接口拿到的同一个值,但是是在同一处 UI 显示。就导致 ts 类型定义得定义好几种不同的类型用来兼容。



各位大佬们有什么好的办法来处理这种情况吗?
8. 在公司不爱说话是什么体验

就是平时除了工作上的事, 一句闲话也不愿跟同事说, 完全是不想说, 觉得毫无意义, 路上碰到了也装作没看见, 也不打招呼, 交流仅限于工作上的对接, 所以有时候一天也说不了几句话

9. 2023 年最后一个工作日了,分享一下你的年终总结吧

我先来晒一个年度总结,总的来说就是换了份工作,折腾了自己的产品,参与了一点开源。

10. 儿子 5 岁,有推荐的 switch 双人游戏吗,玩了双人成行,皮克敏,他感觉不太会,有点不自信
11. 🎊数字名片 APP-内测送会员

起源

起因是因为以前利用苹果版小程序,做了个 NFC 情书信件
但是大家对于 NFC 的要求越来越多,不太符合“岁月笔记 APP”的定位,所以觉得做一款新的 APP
以前 NFC 情书传送门👉🏻

介绍

APP 国内叫做“数字名片”,国外则是“LinkerCard”
和其他的数字名片类似,不过其他的好像都是,直接用的网页 没有用到系统的功能,数字名片则不同,他可以👇🏻

1.写入 NFC 卡片,卡片靠近手机弹出名片

2.名片二维码放锁屏界面

3.扩展你的隔空投送,顶部碰一碰

4.双方都是苹果,短信可以生成卡片

应用场景

获取会员/NFC 卡片

1.获取内测会员

在数字名片 APP 的账户 - 点击右上角的三个点 查看用户 id ,发我一下,我给咱们开权限

2.NFC 名片

咱们如果想试试 NFC 名片 直接自己淘宝买普通的那种 NFC215 就行,便宜

如果不想费这个事,也可以直接点击图片,用我做好的(价格改好了,但是我个人去邮,邮费比较贵)

12. 感叹现在的制造业,送女朋友假的 airpods 竟然没发现

淘宝上买了 150 的高仿 airpods 给女朋友。不是真的买不起,是华强北更有性价比。因为女朋友一直想要苹果耳机,奈何苹果要 1000 多,而且上个月刚送了一个 iphone15pro ,钱包瘪了。到手体验了一下,查找和电量显示功能都有,成功以假乱真。感谢华强北帮我节省了 1000 多,也成功的避免了在耳机上刻字“分手还我”这种尴尬事

13. 为什么其他厂商不跟进小米的 AI 接听电话功能呢?
如果 AI 应答有门槛,简单实现个留言信箱功能总是可以做的吧?为什么就是没有呢?年末真的被骚扰电话弄烦了,现在推销都用私人电话打过来,防不胜防。直接拒接又怕漏接重要电话。
14. 快过年了,不要再讨论什么 vite、react 源码之类的了
快过年了,不要再讨论什么 vite 、react 源码之类的了。你带你的破电脑回到家并不能给你带来任何实质性作用,朋友们兜里掏大把钱吃喝玩乐,你默默的在家里摆弄你的破烂儿框架。亲戚朋友吃饭问你收获了什么,你说我做了个平台,把低代码、服务器渲染、多线程线程优点都结合了一遍,亲戚们懵逼了。你还在心里默默嘲笑他们,笑他们不懂你的框架、不懂你的算法、不懂你的封装,也笑他们连个复杂点的密码都记不住。你父母的同事都在说自己的子女今年的收获,儿子买了个房,女儿买了个车,姑娘升职加薪了。你的父母默默无言,说我的儿子搞了个破电脑开起来噏噏响、家里电表走得越来越快了,你的父母还在想你什么时候能买套房子,什么时候能成个家。你却一天到晚想的是怎么封装一个牛逼的组件,你的和有钱人的差距就是你的格局一直在于代码,而你的身边的人会想怎么挣钱。你一天到晚看那个破文档,封装源码框架,什么 vue 源码深度解析,mp 逆向分析,github 早就一堆。但是你还是乐此不彼的写着自己的另外一套,因为你会觉得这是你自己写的不一样,实际上毛的用处都没有,时间轮回一年又一年你还在想着新技术出来了继续学习什么 vite5 ,什么 react ,而你身边的人在考虑啥时候买第二套房子,什么时候生二胎,你还在捣鼓你的破代码!
15. 要坐十几个小时的火车,大伙有什么推荐的电影或者单机游戏吗
17. Go: For-Loop-Variable 适合面试的小问题

在面试的过程中, 如果恰好遇到对方日常也使用 Go 做为主力语言, 我会选择一些简单而可扩展的问题交流下双方对 Go 的熟悉程度.

我喜欢的一个问题是让面试者告诉我下述代码的运行结果:

func main() {
	for i := 0; i < 3; i++ {
		go func() {
			fmt.Println(i)
		}()
	}

	time.Sleep(time.Second)
}

正确的答案应该是: 乱序输出三个数字. 对于三种错误答案: 输出 1, 2, 3; 输出三个数字; 乱序输出 1, 2, 3; 都可以通过反问再给予一次机会.

进一步的, 我们可以询问如何让其至少将 1, 2, 3 都输出一次. 大多数时候, 我们的得到的答案会是将 i 做为参数传入. 此时我喜欢再追问, 下述代码中 i := i 的写法是否正确.

func main() {
	for i := 0; i < 3; i++ {
		i := i
		go func() {
			fmt.Println(i)
		}()
	}

	time.Sleep(time.Second)
}

我并不认为这是一个 Language Lawyer 问题, 由于 Go 中 for 循环的特殊实现方式, i := i 这种方式在 Go 中是普遍存在的.

极少数情况下, 我们可以再讨论下上述例子的原因, 允许面试者有更大的发挥机会. 其中包括的点有:

  • Go 并不保证先启动的 goroutine 先执行
  • Go 中 for 循环的实现是 one-instance-per-loop, 而不是 one-instance-per-iteration.

我们在下述例子中看到, i 和 v 的内存地址始终未曾改变:

~ cat main.go
func main() {
    nums := []int{1, 2, 3}
    for i, v := range nums {
        fmt.Println(&i, &v)
    }
}
~ go run main.go
0x1400009a018 0x1400009a020
0x1400009a018 0x1400009a020
0x1400009a018 0x1400009a020
  • 闭包(closure)可能以值(by value)或者地址(by reference)的形式引用外部变量; 当引用 for 循环的中变量时, 是以地址的方式
  • Go 允许在 inner block 中定义重名的变量, 下述代码虽然不好但合法
~ cat main.go | grep -A 7 "func fnVarScope"
func fnVarScope() {
    s := "hello world"
    {
        s := 10
        fmt.Println("s:", s)
    }
    fmt.Println("s:", s)
}
~ go run main.go
s: 10
s: hello world

Source: https://github.com/j2gg0s/j2gg0s/blob/main/_posts/2023-12-29-Go%3A%20For-Loop-Variable%20%E9%80%82%E5%90%88%E9%9D%A2%E8%AF%95%E7%9A%84%E5%B0%8F%E9%97%AE%E9%A2%98.md

18. 独立开发者们 2023 年最后一天开始进行年终总结了,我先来,我是一个毕业的程序员......
作为一个程序员,被毕业后不知道干啥,2023 年,第一次开始了独立开发者之路,目前做了两个产品,两个都是工具类型,出海方向,目前总盈利 24 美元,收入截图为 https://ibb.co/Kr5f5L3
展望 2024 ,不知道是找工作还是继续独立开发,如果继续独立开发的话,计划在开发 2 款产品


各位独立开发者们,今天是 2023 年最后一个工作日了,请开始你们的 2023 年终总结了,大家相互鼓励
19. 工位电脑莫名被远程控制
电脑上有安装 logi options+ ,会提示大小写、小键盘灯的状态。
刚刚突然提示小键盘灯被打开(我自己键盘 87 键没有小键盘区),然后紧接着鼠标开始自己动。从左侧屏幕穿到了右侧屏幕,然后点了点我打开着的 vscode ,然后又下移到任务栏仿佛离开了……

前几个月出过一次几乎一模一样的事情(不过当时我在尝试跟这个人抢鼠标,最后吓得拔网线了),当时因为各种原因装过一些破解软件猜测是不是有什么不干净的东西。就找运维要了块新硬盘装了新系统。

没想到这么快又出现了类似的问题……
电脑上除了 windows 自带的远程桌面没有安装其他远程软件,也比较迷茫不太清楚该从哪里查起。

想请各位来帮忙分析分析
22. 我的全职独立开发 2023——如何在存量市场里摸爬滚打

先自我介绍一下,我是Reqable的开发者,也是 HTTPCanary (小黄鸟)的作者。我在 2022 年初从商汤辞职开始全职独立开发,算起来大约有两年的时间。在 2023 年终之际,给大家分享下我这个阶段的独立开发心得和经验。

我在全职独立开发的这两年里,只做了一个项目,就是Reqable。Reqable 是一个全平台的抓包和 API 测试工具,可以理解成 Fiddler/Charles + Postman 。这是一个看起来非常没有前景的独立开发方向。首先,这是面向开发和测试人员的产品,而众所周知程序员的钱并不好赚(笑);其次,这是已经严重饱和的存量市场,无论是开源的、免费的还是付费的,替代品众多;再者,项目工程量大,相当于一个人要做 Charles 和 Postman ,而且是桌面端 + 移动端全平台。Reqable 桌面端在今年 6 月份正式上线,移动端在今年 12 月中旬正式上线,真正的营收窗口期只有 7 个月,虽然收入远达不到辞职前的水平,但是可以看到营收曲线有一个很好的增长趋势,我相信 2024 年会进入一个扩张性增长的阶段。

现今这个时代,互联网的红利早已经被吃透,到处都是存量市场。创意的爆款产品也就那么些许,很多时候除了创意更多还需要运气,可遇而不可求。因此,很多的独立开发者不得不和我一样在存量市场里摸爬滚打。尽管 Reqable 项目目前算不上成功,我还是想给大家分享下我的关于如何在存量市场里生存的一些看法,全当抛砖引玉了。

1. 有鲜明特色的平替

在存量市场里面,后来者是以挑战者的姿态出现的,目标是争夺市场份额。市场的需求是固定的,后来者需要提供竞品可替代的功能,最简单有效的方式就是抄功能。当然,抄袭前人并不可耻,可耻的是毫无特色的抄袭或者是全盘照抄。在存量市场里,竞品可能已经做了十年甚至二十年,他们沉淀多年的设计或者交互大多已经成为这个行业的习惯或者默认规则,我们这些后来者没必要闭门造车,该抄的抄。当然,一个非常重要的原则是取其精华,去其糟粕,用腾讯的话来说叫做“微创新”,用我的话来说叫做“有鲜明特色的平替”。

平替,意思就是要替代掉对方或者替代掉对方的某些功能,而不是另起炉灶,自我创新,虽然我们鼓励创新,但是强行改变用户习惯的代价和不确定性太高。当然,替代的过程可能是极为漫长的,我们可以先从核心功能做起,慢慢地逐步地实现竞品所有的功能。比如 Reqable 的目标是替换掉 Postman 的 API 测试功能,但是 API 测试相关的功能太多了,比如 HTTP 、WebSocket 、GRPC 等等。这些功能里面用得最多最频繁的肯定是测试 HTTP 请求,所以我第一个做的功能就是 HTTP 请求测试,界面和交互基本都是遵循的 Postman 。

未命名.png

上图两者界面和交互看起来几乎一样,实际上却有很多细节做了优化。比如 URL 做了语法高亮配色,更简约的设计,更便捷的类型切换等等。在底层技术方面,Reqable 支持 HTTP2 和 HTTP3 的请求测试,而 Postman 并不支持。这是很多 Postman 用户的痛点,近几年 HTTP 的协议版本在持续发展,Postman 却已经滞后了,护城河留下了一个缺口,落后就要挨打。虽然 Reqable 远不足以挑战 Postman 的地位,但是能吃到一部分的用户也是非常好的。

2. 创新点也必不可少

全面去复制竞品的功能虽有可取之道,但替换的太过于漫长,我们可能等不到成功的那一天,因为对手也在更新也在进步。竞争对手是一个成熟的团队,独立开发者是一匹独狼,以小搏大是不切实际的。所以,我们仍然需要寻求创新点,开辟一个新的方向,寻找一个新的道路。

在做 Reqable 项目之前,我曾经调研了 Postman 的一些功能,发现它有一个捕获 HTTP 流量的功能,也就是抓包,但是做得非常的简单,是下图这个样子。

截屏 2023-12-29 13.24.47.png

而我们所常用的一些知名抓包软件也支持编辑和发送 HTTP 请求,比如像 Charles 的 Compose 功能,参考下图。

Screen Shot 2023-12-29 at 1.31.57 PM.png

无论是 Postman 还是 Charles ,他们交叉的功能都是浅尝辄止。对于用户来讲,完成一件事情,这两个工具可能都要用到。我们不妨想象下这样的一些场景,小明使用 Charles 抓取到了一个请求,想要进一步测试或者保存,就需要在 Charles 中复制 cURL 导出,然后打开 Postman 里面导入 cURL ,发送请求测试,保存到 API 集合。又或者这样的一个场景,小红在 Postman 里面测试一个请求,发现了些问题,她可能需要打开 Charles 抓个包,来看看网路中实际的流量是什么样子的,来进一步分析定位这个问题。如果有一款工具,能够深入地整合这两者,并打通中间的壁垒,那么一定会有市场。

那么,如何深入整合呢?首先是打破隔阂,可以在从抓包流量中直接创建 API 进行测试,可以在发送 API 请求的同时记录抓包的流量。接下来,进一步的抽丝剥茧,寻找两者之间的共同点进行整合。比如,都需要使用脚本来控制请求或者响应,都需要使用变量功能来代表一些动态的数据,我要做的就是一个功能同时应用到两个方面。

除了功能的创新,还有一个非常重要的就是覆盖范围。无论是 Postman 还是 Charles ,都只能在桌面端上工作(其实 Charles 还有个 iOS 版本)。在手机越来越重要的今天,移动端已经是一个不可或缺的平台了。所以我的另一个突破点就是桌面端 + 移动端全面覆盖,并提供两端协同功能。比如抓取手机端的流量无需再设置 Wifi 代理,手机扫码连接电脑,直接将流量转发到桌面端的 Reqable 上进行处理。

screenshot_android-36bc1b66363133351dfd5e402c017882.jpg

3. 帮助用户无缝转移

很多时候我们总是一心想着去超越竞争对手,而忽略了用户对于竞争对手的粘性。用户从一个产品转移到一个新的产品,是有非常大的沉没成本存在的。除了功能的平替外,还需要考虑如何帮助用户转移。这也是我今年做的非常不好的一个地方,没有能够在产品层面帮助用户来降低这个转移成本。比如,下图就是一个用户的真实反馈。

截屏 2023-12-29 14.13.32.png

再比如很多用户使用 Postman 或者 ApiPost 等工具,他们的 API 数据都存在于这些软件上面,这些用户改用 Reqable 后必然希望能够导入 Postman 等软件的数据,我要做的就是尽最大努力来支持。

4. 不要设置使用门槛

我觉得空讲这个话题不着地,所以还是结合前几天我遇到的一件事情来谈谈我的看法。

事情是这样的,有一个用户向我反馈 Reqable 在他的电脑上无法配置系统代理,热心的他表示可以配合我使用远程桌面进行调试,然后告诉我他用的一款远程桌面软件。我没听说过这个软件,自然电脑上也没有安装,然后我就去下载了一个。安装包 120M 左右,家里网络不错,很快就下好了,打开安装也没什么问题。安装完成,打开软件,弹出界面让我输入账号密码登录,看到这个我心里有点不爽了。想想还要解决问题,无奈选择微信登录,扫码,手机点击确认。登录完成,让我输入手机号,这时候我就有点恼火了,反手直接删除软件。这个远程桌面软件看起来还是有一定市场份额的,我就不透露名字了,免得惹麻烦。

也许这个远程桌面软件不缺我这一个用户,但是远程桌面软件产品这么多,我也不缺这一个。这个远程桌面软件好不好用,流不流畅,清晰不清晰我压根儿不知道,因为我进不去,进不去是因为我不想告诉他我的手机号。登录账号并不是远程桌面连接的必要步骤,如果我来开发一款软件桌面软件,我一定会遵循安装即用的原则。当然,在我的 Reqable 产品里面,也是严格遵循这样的原则,安装即用。在做 Reqable 之前,我调研过相关的竞品,比如 Postman 、ApiPost 、Fiddler 等等,也都是明确要求登录,甚至不登录不给用。我就只想测试个 API ,只想抓个请求,要登录搞啥呢?

此外,关于安装包的大小,120M 的软件安装包大小,在网络一般的情况下,下载可能需要 2-5 分钟,安装后需要占用 300M 的空间。我的 MacBook 工作机只有 256G 的存储空间,剩余容量不多(没办法,IDE 还有一些代码仓库占用就是大),这是另一个使用门槛。我想,如果我来做一款远程桌面软件,我会希望能够将安装包控制在 30M 以内,大幅降低这个门槛。Reqable 的安装包在 20M 左右,安装后大约有 60M 空间占用,这是一个让我非常满意的体积,像竞品 Postman 有 400M 占用呢。

当然,我的项目 Reqable 在降低使用门槛上做得也不够好。比如有一个用户安装后无法上网,就卸载换成 Insomnia 了,因为 Reqable 在最初的设计里面会默认给用户配置中间人代理。这是一个非常深刻的教训,因此我在后续版本进行了一些优化。

5. 迎合你的用户群体

不同的产品有不同的使用群体,不同的群体有不同的审美和习惯,我们要做的就是迎合这些用户。

比如我的 Reqable 的用户人群是开发和测试,因为我本身就是程序员,所以我相信我还是非常了解这个群体的,比方说我们喜欢简约的设计风格、喜欢流畅的运行效率、喜欢用键盘而不是鼠标、更偏爱暗色的应用主题,喜欢小而美,喜欢专注而不是分散,等等等等。

在设计产品的风格、交互、使用习惯等方面的时候,都需要紧紧围绕我们的用户群体,让他们满意。如果用户群体是女性,那么可能需要更亮丽的色调;如果用户群体是儿童,需要的是卡通化的设计。

6. 做有耐心的垂钓者

很多独立开发者在项目刚上线的一段时间内可能没有收入或者有微薄的收入,这时候往往还能克制,然而当项目有了一些起色,就开始想着如何赚钱,开屏广告、横幅广告、付费功能或者涨价等等,每个页面都写着两个字是要钱。诚然,赚钱是商品的本质,但是没必要那么急不可耐,竭泽而渔。在存量市场竞争里面,这无疑是自寻死路,也是给新产品上位的机会。

先说定价。没有用户不喜欢免费的产品,如果是处在”环市场皆要钱也“的环境里面,免费和低价可以给予产品极大的优势,这也是中国制造独步全球的秘诀。在绝大部分市场里面,高价的干不过低价的,低价的干不过免费的,这是市场规律。当然,如果完全免费用爱发电也不适合独立开发者,毕竟是也是要养家糊口的。我的观点是,免费和付费可以并行,让白嫖的用户用得舒服,让付费的用户用得更舒服。免费可以更快地积累用户基数,付费可以缓解财务窘境。

这和钓鱼是一个道理,虽然我不是钓鱼佬也很多年没有钓过鱼了,但是钓鱼的过程我还是很熟悉的。钓鱼需要先打窝,打窝就是将气味浓郁的饵料扔到水里,通过这些饵料来吸引鱼群。类比到产品,免费就是打窝的饵料,不要因为免费的饵料被鱼吃了感到心疼。打完窝,我们就可以钓钩挂食开始钓鱼了,钓钩上的食物肯定比打窝的饵料要更有吸引力。钓鱼不是捕捞,讲究的是姜太公钓鱼——愿者上钩,可能河边坐了半天也没有鱼儿咬钩,但是你要是想下水捞一把,那鱼群可能就散了,得不偿失,还湿了裤子。

在产品上线初期,我们通常会用免费或者低价来和竞争对手抢用户。在积累了足够多的用户后,我们可能需要优雅地提高价格,或者增强用户的付费意愿。但是要注意,和下馆子一个道理,让客人忌讳的是涨价不涨量。软件产品和实物不一样,软件没有原料成本上涨的困扰,涨价一定是要建立在产品持续迭代、推陈出新的前提下的。好的做法是,在保留免费用户权益的基础上,推出需要付费的新功能,或者产品涨价让用户获得更多的权益。

下面给大家分享一个真实的例子。在 Reqable 项目内测期间,有幸认识了另一位全职独立开发者。我们在聊天的时候,他向我分享了一个有关他的某个项目的经历。大致意思是他的产品在内测期间还有不少用户,口碑也还挺不错的,正式上线后开始收费了,然后就没用户了。虽然他的产品定价比竞争对手低,不过也是半斤八两,功能差不多定价又没有优势,产品也就黄了。

我们需要做好产品在很长一段时间内都没有用户,没有收入的心理准备。坚持长期主义,戒骄戒躁,寻找原因,一切慢慢都会好起来的。

7. 2024 年继续加油

这篇文章是关于我的产品如何在存量市场里生存的一些可能不成熟的见解。2023 年即将过去,回顾这一年里,我在 Reqable 项目上做对了一些事情,但是也做错了不少,比如:

  • 产品在海外的宣传和推广没有用心,也没有花时间。
  • 没有实地去接触和了解企业的真实需求。
  • 未深度使用 GPT 等 AIGC 工具来提高工作效率和质量。

在 2024 新的一年里,我会花更多的心思去探索海外和 toB 的业务,希望明年底可以写一篇这方面的总结文章。

感谢各位的阅读,预祝大家新年快乐,2024 产品大卖!

23. 家里的网延迟高一直排查不出来什么原因
家里用的是电信宽带,这两三周突然发现手里的 iPhone13mini 玩英雄联盟手游时延迟动不动在 100ms 以上,家里用的是三个领势 mesh 路由器,我用其他安卓手机和 MacBook ping 路由器时延迟基本上就 20ms 左右,偶尔会上到 100ms 但是情况很少,我的 13mini 用 surge 测试 ping 基本上就很容易上 100ms 了,很容易卡,网速测试倒是正常很无语。

当我把手机拿到单位用时,同样也是电信宽带,就不会出现延迟问题.....

哪怕我在家里把每一个路由器拆开测试,只启用其中一个当主路由不开 mesh 也会出现这种情况,根本找不到是什么原因导致的
24. 小程序认证被拒了,求个能通过的名字

小程序现在叫 xx 公交查询,主要就是给我妈还有一些亲戚朋友查车次用,没广告。由于没认证,现在无法搜索到了。

花了 30 元用原来的名称认证被驳回了,理由如下:

你申请的名称可能涉及公共服务交通类,请提供《商标注册证》、公共运输行业相关的法定许可或备案证明文件、或其他补充材料,以证明你有权合理使用该账号名称,否则可能审核不通过。

求各位大佬帮忙想个能过审的名字,又不偏离主要业务的

25. .yaml 和.yml 有什么区别? docker-compose.yaml 还是 docker-compose.yml?

有什么区别啊他们