2023-06-04

13 篇热帖

1. 原来做跨境电商(woo)这么挣钱?这确实颠覆了我的认知

事情是这样的现在的已经完全开放了,很多工厂就开始了做跨境这一块,我经过朋友介绍,认识了一位当地做衣服工厂的老板,他做阿里巴巴国际站已经 3 年了,想投入住独立站。原因就是如下:

  1. [环境] 阿里巴巴国际一年的广告推广成本是 30 万左右,所以获得“新客户”的成本是 30 万一年
  2. [老客户] 在阿里巴巴上复购,商家同样要付出成本。因为平台抽佣的机制。
  3. [问题] 如何提高复购率并且让成本变成 0 ,让他成为你的私域客户?

这里就需要独立站,为什么不用 shopify ,数据不够自由,自定义的程度不够高,客户的需求大概如下:

  1. 能连接 ERP 系统因为有多个站点销售, 库存要同步。 [我帮他想到解决方案] -- 这里是成单的第一个关键
  2. 每一个销售人员有自己的有自己的 code, 客户会绑定销售的 code 来识别是谁的客户。我熟悉 woo + wordpress 这个功能可以做
  3. 域名迁移客户 ---- 域名很重要,因为关系到广告推广,这里我给了一个方案。---- 这里是第二个关键点

[主技术栈]

[代码] wordpress + woocommerce + reactjs

[运维] google vm + github action + docker + shell script 写了一个 docker monitor 能判断 docker 状态和自动重启

项目非常顺利收尾。

如果有 wordpress + shopify 的项目可以找我

微信:heywebmaster

discord:https://discord.gg/7mFZJmQBxe

---------------------------------------重点来了----------------------------------------

我这个月查了这个网站的数据 每月的营业额高达 1W - 2W 刀,WTF 。。。。。。

image.png 也就是说我做一个网站挣 6 万,他运营一个网站每月最少都 6 万,怪不得我当时报价,他马上就答应了,我 X ,确实是强。其实在这个过程中大家属于双赢。我保守估计这个网站一年可以创造 20-30W 刀的业绩。接下我会继续挖掘 wordpress + woo 的跨境需求单子。

[如果下个月我看到数据如果是稳定增长的话。继续分享,我会带一些我的分析。]

2. 我好像没办法快速区分左右🥵
打羽毛球🏸的时候,根据比分左单右双。

每次得分或丢分都要心里想想左右手是哪边,在哪侧发球。

在场下(球场的左右侧,如裁判位置),因为球场是横着的,默默计分时就更困难,要代入自己面向球网时的左右手在哪侧。

这种情况还出现在驾驶过程,副驾指路时说往左 /右转,心里还是要想想左手是哪边🥵

有时给人指路,手指向左边,嘴里念出来的是右边👉

反正好像不能立即区分,像前后那种快速区分。
3. 购买软路由是否真的有必要?

曾经作为刚入门的选手购买过 R2S ,体验不可谓不糟糕

软路由最大的需求应该都是为了翻墙,但是软路由在这方便做的其实并不好,本人软路由节点是自己搭建的,稳定性是有的,但是就算是这样软路由总是会碰见各种各样的问题

1.经常莫名其妙重启,不是到是不是性能差的原因,R2S 对我的反馈就是一个字折腾、 2.国内外自动分流,在我打游戏的时候总是要切到后台,否则游戏延迟就爆炸 3.软路由当网关的模式下,配置错误一个问题,直接炸掉,只能恢复出厂设置,真的糟糕 4.软路由旁路由的模式下,手机设备代理到软路由也总是会碰到各种各样的问题,IOS 验证码加载不出来,最糟糕的一点家里本来的带宽 500 兆,挂上软路由直接掉到 200 兆,R2S 性能不够,只能在 WiFi 设置下手动删除代理 5.在绝大多数人机场都是限速的情况,就算自己搭建,100 兆的翻墙带宽和 500 兆的翻墙带宽,是否在体验上真正有本质的区别,这里打个问号?

这里讨论是否有必要购买软路由,打个比方,家里闲置的 ios 或者 Android ,芯片性能一定超过软路由太多,功耗也十分的低,在 ios 和 Android 开启代理软件,要上网的设备设置下 WiFi 的代理到移动设备,是不是已经可以替代软路由了? 而且体验更佳,不会出现各种莫名其妙的问题。

4. 生而为人,不是任小米随便支配的猪狗!

准备入职小米了,结果在星球里看到了这个帖子....求证真假。。。。。

算是骨灰级的米粉和员工了。一大早就被拉去开大会,一种不详的预感强烈来袭,职场不成文规定:好事单独聊,坏事开大会。果然,上来就被告知,“从今天开始,上班时间强制至少 11.5 个小时”。 我以为是有大项目要做,谁知道理由竟是隔壁部门的打卡数据比我们的漂亮,荒唐又可笑。轻飘一句话抹杀了员工 3.5 个小时的自由时间。加班费只字未提,连起码得加班餐也没有,只撂下一句冷冰冰的威胁,“不够点的,直接优化”。 随意践踏员工的基本权益也就算了,竟然敢视《劳动法》为无物,蔑视政府的权威,这天下还没有改姓雷吧。真想问问小米的法律底线到底在哪? 小米是什么时候变成这个样子的呢? 记得在做小米 6 的时候,领导一句话,全体员工连轴转,一个月无休,上班时间没有低于 12 个小时的,大部分员工都没有怨言。因为大家知道,特殊时期就要牟足劲的干,最终交给公司和用户一份满意的答案。小米 6 也成了至今无法超越的经典。而后的每一次 miui 改版或者新机发布前总有那么一段时间需要加班加点,哪怕没有加班费,那怕给了调休的机会也没用。无所谓,就算是个人也有忙的时候,何况偌大的公司呢。 那个时候的小米有种自上而下的情怀,而现在却成了从头到脚的威胁。 人的精力就像弹簧,张弛有度才能更加持久,一味地强拉硬拽最后只会松弛。领导难道不明白这个道理?不是!一切不过是领导之间的内耗和无意义的攀比,为了所谓的面子数据,人为制造努力奋斗的假象,欺上瞒下,真的是无能又可笑。但凡有点正事干,也不会天天盯着考勤查,黔驴技穷。就这企业文化能造出好车?我信你个球,麻烦你先做到最基本的遵纪守法吧。

最后说一句,想裁员就直接送大礼包,别刷这些下三滥!麻辣隔壁的!

5. 拿驾驶证 8 年了,今年打算买车,但担心驾校学的都忘光了怎么办?

是不是可以找个教练先再学一下驾驶?

自己的车技真的很一般,家里也没车,现在对车就非常陌生。

6. 国内的有些大学的课程真的能烂到这种程度吗?

看到一个本科的计算机专业的 2023 年课程,用着 win98 的操作系统,教 FrontPage 做「网页设计」。虽然我有预料国内的一些垃圾学校的垃圾教学水平,但是真的没想到会有这么烂。

如果学生真的处于这种教育环境,真的不是在对于整个国家来说是一个彻彻底底的浪费吗?

7. 价位 4000 的戴尔 ultrasharp27 寸 4k 显示器和价位 1600 的红米 4k 显示器差别在哪

非专业人士,想知道具体差别。只知道都是 27 寸 4K 的。最近想买显示器。

8. 不知不觉买了一堆便宜 VPS,买服务器居然会成瘾

买服务器居然也会上瘾,看到有便宜的就想买,不知不觉手里已经囤了一堆了。

服务商 配置 费用 用途
腾讯轻量无忧 1C2G 190/年 备案的网站、笔记、Bitwarden 、Gitea
腾讯云首单优惠 2C4G 158 马上到期了 闲置
狗云香港 1C1G 100/ 年 魔法、建站
狗云香港 1C1G 100/年 魔法
野草云 2C8G 266/年 开发测试环境
racknerd 2C3G $32/年 邮箱服务、魔法
racknerd 1C 0.5G $10/年 魔法

除了国内的腾讯云轻量,其他的服务器负载很低,几户算是闲置了,还能再搭建什么服务让其物尽其用呢。

9. 想买一辆公路车
1.用于通勤,上班大概 10 公里左右的路程
2.周末休闲骑行健身
3.希望对小白友好,不容易出现无法骑行问题,小毛病可以接受

目前看下来有推荐斯特拉 95 ,希望价位最高不超过 4.5k 。本身对公路车各种组件都不熟悉,所以希望是能直接买到的整车,各位 V 友们有推荐的车型吗?
10. 被 Manager 批评了,但是我觉得我做得对,怎么办

这周被老板喷了,有点难受,不知道是不是我做错了,发出来请老哥看一看

我是去年跳槽进的现在公司,进去不久 Manager 分了个活给我,让我做一块小东西(一个通用的技术需求),因为不算绩效,所以可以自己折腾。我在开工的时候拉了个会和组里其他人过了下设计,就开始做了。

那个活我当时打算拿 node 写个 CLI 就行,但是实际写完之后发现还有些可以做的,需要在 CLI 里加个命令,本地起个 UI ,类似 Prisma 那样,就开了个 nextjs 的应用,和 CLI 放在同一个仓库,把那个仓库改成了 monorepo ,后面因为循环引用,就把 cli 里的一块逻辑提出来了。

上面这些坑挖了不久,我就因为被其他原因 block ,暂停这个 CLI 的开发,最近打算继续做,就在周会上提了下。

我 Manger 刚好打算对另一个新成立的组输出些东西,就找我要了仓库,说看一下。实际是打算把我做的和他手下另一个做这块的人做的东西缝一下,提供给他们组。

分支是周四发的,周五晚上他在微信群里 @全体,说不要把代码写的过于复杂,过度包装,还用了个抽象的比喻,我也没多想,就没管,也没想是说谁。

结果第二天打开工作 im ,发现老板给我留言批评我,说我过度包装了,让我把 monorepo 合回去,并且说“他以为可以分分钟给出去,最后他自己写了,这些功能几个文件就搞定了 balabala”,最后说这也不是什么大事,让我不要担心之类的

我一直觉得我和老板脑回路对不上,平时他带了好几个组,所以不常会和他一起交流设计,但是一旦开始讨论,意见几乎必然相左。平时都是在设计的时候意见不一致,这次是实际发生的事情,一步一步有迹可循,所以我直接给他说了我为什么这么做

昨天晚上他看到我的消息,还是说我做的不对,s 说我是在乱叠包装、杀蚊子用大炮,他自己写就几个文件,别人还可以改 balabala

刚刚醒了看到他昨天晚上的消息,人有点麻,完全没办法沟通,去年跳槽就是希望去外企工作氛围能轻松一些,结果老板完全没办法沟通。

总之我把我为什么这么做再详细讲了下,并且给他抗议他不经过我,直接扒代码,扒不出来就说我过度包装的行为,让他后续有这种例子叫上我

11. ios+WeChat 组合每次点开都要转圈 1-2 分钟

点开 app 就是连接中,获取中,算了下时间,足足两分钟。wechat 用户。严重影响使用。如若圈圈没有转完。你点扫码,是无网络情况下的。也就是无法扫码。这就蛋疼了。坐个车,师傅等了我两分钟扫码!

另外你们用的微信还是 wechat ?有没有和我一样的情况。抛开网络文字,流量,wifi 都试过了

转圈情况长年有,但是这两天敏感日子特别严重

12. 用 Go 基于 epoll 实现一个最小化 IO 库

目前 Go 圈有很多款异步的网络框架:

排名不分先后。

这里面最早的实现是 evio 。evio 也存在一些问题,之前也写过evio文章介绍过。 其他比如 nbio 和 gnet 也写过一些源码分析。

为什么会出现这些框架?之前也提到过,由于标准库 netpoll 的一些特性:

  • 一个 conn 一个 goroutine 导致利用率低
  • 用户无法感知 conn 状态
  • .....

这些框架在应用层上做了很多优化,比如:Worker Pool,Buffer,Ring Buffer,NoCopy......。

都分析了好几篇的代码了,那么咋么说也得自己动手搞一个来达成学习目的。

没错,这就是easyio的由来。

它是一个最小化的 IO 框架,只实现最核心的部分,加起来不超过 500 行代码。

也没有用户端上层应用的优化,且目前只实现了 linux 的 epoll ,以及只能运行 tcp 协议。

简单的 demo ,

服务端:


package main

import (
	"context"
	"fmt"
	"os"
	"os/signal"
	"syscall"

	"github.com/wuqinqiang/easyio"
)

var _ easyio.EventHandler = (*Handler)(nil)

type Handler struct{}

type EasyioKey struct{}

type Message struct{ Msg string }

var CtxKey EasyioKey

func (h Handler) OnOpen(c easyio.Conn) context.Context {
	return context.WithValue(context.Background(), CtxKey, Message{Msg: "helloword"})
}

func (h Handler) OnRead(ctx context.Context, c easyio.Conn) {
	_, ok := ctx.Value(CtxKey).(Message)
	if !ok {
		return
	}
	var b = make([]byte, 100)
	_, err := c.Read(b)
	if err != nil {
		fmt.Println("err:", err)
	}
	fmt.Println("[Handler] read data:", string(b))

	if _, err = c.Write(b); err != nil {
		panic(err)
	}
}

func (h Handler) OnClose(_ context.Context, c easyio.Conn) {
	fmt.Println("[Handler] closed", c.Fd())
}

func main() {
	e := easyio.New("tcp", ":8090",easyio.WithNumPoller(4), easyio.WithEventHandler(Handler{}))

	if err := e.Start(); err != nil {
		panic(err)
	}

	defer e.Stop()

	c := make(chan os.Signal, 1)
	signal.Notify(c, syscall.SIGTERM, syscall.SIGQUIT, syscall.SIGINT)
	<-c
}

上面的代码,初始化一个 easyio ,启动一个 tcp 服务,监听端口 8090 ,options 里面设置 epoll 的数量,以及设置事件处理器。

当一个新连接到来时会回调 OnOpen 函数,此时你可以设置自定义的 ctx ,那么当对应连接读事件到来 OnRead 回调,你可以拿到之前设置的 ctx ,调用 conn.Read 读取数据,且通过 Write 向对端写数据。

这里需要注意的是,一个连接如果数据没读完,当 OnRead 执行结束,下一轮会继续触发回调代码,因为底层 epoll 采用的是 LT 触发方式。

简单的客户端

package main

import (
	"fmt"
	"net"
	"os"
	"os/signal"
	"syscall"
)

func main() {
	conn, err := net.Dial("tcp", ":8090")
	if err != nil {
		panic(err)
	}
	n, err := conn.Write([]byte("hello world"))
	if err != nil {
		panic(err)
	}

	go func() {
		b := make([]byte, 100)
		if n, err = conn.Read(b); err != nil {
			panic(err)
		}
		fmt.Println("read data:", n, string(b))
	}()

	defer conn.Close()

	ch := make(chan os.Signal, 1)
	signal.Notify(ch, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT)

	<-ch
}

源码地址:https://github.com/wuqinqiang/easyio

13. 为什么要叫“前后端分离”、“服务端渲染”
  • 前后端分离。ChatGPT 的解释:前后端分离是指将传统的 Web 架构中的前端(浏览器端)和后端(服务器端)分离开来,前端负责展示和交互逻辑,后端负责业务逻辑和数据存储等。

从通讯意义上来说,“前后端分离”恰恰是对前后端的通讯做了更好的设计或组织,也就是说前后端连接变得更为有序而不是分离。

  • 服务端渲染。ChatGPT 的解释:服务端渲染是指在服务器端将数据和模板结合生成 HTML 文件,并将其发送给客户端浏览器。

从正经的渲染( render )概念上来说,渲染是通过程序及图形硬件把数据以图像的形式呈现,就浏览器渲染 HTML 来说,浏览器最终需要吧 HTML 上的文本、图片、音频按照 HTML 的排版在屏幕上渲染出网页图像。

客户端理解前端概念里的“分离”却分离,“渲染”却没渲染,不明白前端为什么要起容易产生歧义的叫法,为什么不用“WebUI”、“服务端生成 HTML”等更为准确(我觉得更准确)更容易表示本质的叫法。