记一次华硕笔记本的北美维修经历

犹记很多年前, 就被朋友疯狂安利, 说华硕的笔记本品质好. 于是, 在某一次自己笔记本的升级换代的时候, 在京东商城下单了一台破晓6 Pro.

收到货以后, 确实是感受到了华硕的扎实稳重的做工. 特别是那上面精致的 EXPERTBOOK 字样, 给人一种很踏实的的感觉. 包括后面我拆开后盖升级的过程中, 也能明显感受到主板做工用料的扎实. 比如, 原厂自带的SSD给加了一个金属屏蔽罩, 电源排线接口额外用一小块透明胶带固定住, 等等.

然尔, 也不知是我运气不好还是怎么的, 在使用了大约1年半以后, 问题出现了. 典型表现为: 开机一段时间以后, 笔记本会突然”自动断电”, 哪怕是插着电源. 且”自动断电”以后, 得按3次电源键, 笔记本才会正常启动. 离谱的是, 我不论是在华硕的MyASUS 软件里, 还是在 BIOS 里运行 Diagnosis, 全都提示正常.

万幸的是, 我这台破晓6 Pro 还在保修期, 更幸运的是, 它还支持全球联保.

这期间我也在不断的问 Gemini 是啥情况. Gemini 建议我只进入BIOS里试一下是否还会”自动断电”, 我试了一下, 哪怕只停留在 BIOS 界面, 也会出现”自动断电”的现象. 之后 Gemini 说这100%是硬件问题, 建议我直接报修.

然后我打开了华硕的加拿大官网. 准备上报一个RMA(类似于一个维修工单号). 然后第一个坑就来了: 华硕加拿大官网的 Service Request (报修)页面, “State/Province”那个下拉菜单是空的! 就是说, 我完全选不了省份, 所以根本无法提交这个 Service Request. 我在这个页面上填好了各种信息, 包括地址, 邮编, 城市, 但是”State/Province”这个下拉菜单至始至终都是空的! 我甚至自己修改了页面源代码, 强行把”State/Province”的值改成了AB或者Alberta, 都无法提交!

然后我联系了在线客服, 说明了一下情况, 终于, 客服帮我提交了. 但是第2个坑也就来了: 华硕在加拿大, 只有一个官方维修中心, 在多伦多. 在按客服的要求自付了$50 的运费以后, 我的邮箱里收到了Shipping Label. 好吧, 总算是可以把笔记本寄出去了.

大约3周以后, 我收到了寄回来的笔记本, 附带了一张 Repair Report. 根据这个 Repair Report, 维修人员称电脑有异响, 更换了主板和Speaker以后解决了, 并顺利通过了Diagnosis. 当时我有点莫名其妙, 我自己都没听到异响, 你是咋听到的? 但我当时认为更换了主板, “自动断电”的问题应该就顺利解决了吧, 也不用纠结这个了.

结果! 第3个坑来了, 我发现笔记本还是会在使用的过程中”自动断电”. 就是说, 哪怕换了主板, 故障也没修好.

我又跑去问 Gemini 怎么回事. Gemini 说你把笔记本的电源排线拔掉, 就是说不用电池, 单独插外部电源开机试一下. 于是我试了, 结果发现根本无法开机. Gemini 回复说, 根据这个现象, 问题极大概率出现在电池/电池检测回路上(电池本身, 电池内部 BMS 芯片,或者电池连接线/接口). Gemini 还说, 华硕很多笔记本的主板 EC在设计上有”电池在线检测(Battery Present Detection)”保护. 如果主板没有检测到电池接入, EC 会出于安全保护直接拒绝响应电源键的开机指令.

于是我又联系了在线客服, 说明了这次的情况, 并要求华硕承担再次寄回去的费用. 于是我再次把笔记本寄了回去. 并且额外按照 Gemini 的建议, 附上了新的说明: “Since the motherboard was replaced and the problem persists, I suspect the issue is caused by a damaged battery or battery management board (BMS) triggering protective shutdown. Please inspect and replace the battery and battery cable.”

然后最离谱的来了. 几天后, 我收到了一个华硕的”Customer Service Representative”发来的邮件, 邮件里说, 他们对电脑进行了各种测试, 没有复现”自动断电”的问题, 也没看到任何硬件故障, 只是在系统日志里发现了一些应用程序的故障. “However”, 考虑到你的电池只有85%的可用率, 作为对于要求更换电池的回应, 我们还是决定为你更换一次电池.

怎么说呢, 作为一个极其敏感的人, 隔着屏幕我都能感受到对方的愤怒. 因为那一个”However”.

然尔我也很愤怒. 难不成我在骗你呗? 我闲着无聊去瞎折腾你们吗?

Read More

回国见闻

出国整整3.5年, 真的是豪无意外的生疏了国内的各种规则.

五一黄金周

五一假期的每一天都不适合出游, 注意是每一天, 甚至是最后一天.

我是5月4号抵达香港的, 当时以为是最后2天了, 人应该没有那么多了. 结果证明是自己 too young too naive 了. 那天跑了4家银行, 很多银行门口都是各种办港卡的人, 他们繁忙的在手机上点来点去. 去问银行柜台, 要么被告知今天名额满了, 要么只能办100W资产以上的银行卡.

工银亚洲门口的保安老大爷提示我们可以去某处“远程见证开户”. 于是我风尘仆仆的跑到第一个远程开户点, 发现只有1台机器可以”远程见证开户”, 且人已经排队到网点大门外了. 排了半小时队, 里面终于有1位同胞完成了见证开户出来了. 同胞说, 进去以后系统排队至少还要1小时起, 即使排上了, 办卡业务也得持续1小时起. 于是放弃, 坐港铁来到了第2个可以远程见证开户的点, 幸运的是这里居然没有人排队, 而且有2台机器可以”见证开户”, 于是排队了1小时以后, 终于有了1台空机器, 我进去又排了半小时, 机器终于接通了远程客服. 一顿提交资料, 期间甚至提交了加拿大银行超过百万人民币等值资产的证明. 结果, 竟然被客服告知开户申请被拒了. 此时又过去了整整1个小时.

这天, 抽空下载了汇丰, 中银的App, 尝试在App上申请开户. 汇丰提交成功了, 说是几个工作日以后给出结果. 中银App甚至没有走到最后一步系统就直接提示不满足开户要求. 我TM.

回去的路上, 我暗暗告诉自己, 以后再也不会去办工银亚洲和中银的卡.

人际沟通

很多年前, 跟朋友约饭的时候, 我都会说一句”避开牛蛙和海鲜, 其它我都可以”. 然后吃饭一直都比较开心的. 出国几年以后, 我忘记了这一点.

那晚抵达广州, 朋友擅作主张的选了一家火到不行的必吃榜餐厅, 一去的时候门口就坐满了各种排队的人, 可想而知它家的火爆. 但当真正点餐的时候, 我傻眼了, 它家榜上有名的菜几乎全是海鲜.

结果可想而知, 我尴尬了吃了几只炸虾, 就借口吃饱了. 那晚明明没吃饱, 却只能饿着肚子去朋友家. 路上看到各种小笼包, 各种大排档, 口水都快流出来了.

人口素质

这一点, 真的是国内国外一个样了. 我在香港机场转机的时候, 看到不远处有一个空的坐椅, 于是走过去准备坐下. 但就当我距离那个坐位仅剩2米且低头看了一下手机的时候, 一个大姐以超光速冲到那里并坐了下去. 然后大姐立即用手指的方式告诉不远处的朋友那里还有一个空位置. 当时很无语, 也知道这大姐豪无疑问的是中国人. 因为早有心理预期, 心里上也告诉自己别为了这种事情生气.

随后回到了国内, 也辗转了好几个地方, 发现国内有素质的人还是很多, 甚至是一点也不比国外少.

Read More

Set up self-hosted runners for Github Actions

Add and Install a new runner on our host

Highly recommand run self-hosted runner as a systemd service

# Save settings
./config.cmd --url https://github.com/XXX/MyApp --token XXXXXXXXX

# Lets's deploy a systemd service
# Refer: https://docs.github.com/en/actions/hosting-your-own-runners/managing-self-hosted-runners/configuring-the-self-hosted-runner-application-as-a-service
sudo ./svc.sh install

Then, we will see these below

Run as user: zhang3
Run as uid: 1000
gid: 1000
Created symlink /etc/systemd/system/multi-user.target.wants/actions.runner.XXX.service → /etc/systemd/system/actions.runner.XXX.service.

Set up the workflow for our Github Actions

Official Document

https://docs.github.com/en/actions/hosting-your-own-runners/managing-self-hosted-runners/adding-self-hosted-runners

https://docs.github.com/en/actions/hosting-your-own-runners/managing-self-hosted-runners/configuring-the-self-hosted-runner-application-as-a-service

Read More

Javascript Array

Handle element in an Array

const hobbies = ["sports", "cooking", "reading"];

console.log(hobbies[0]);       # Get single element

hobbies.push("surfing");       # Add new element to the end
hobbies.unshift("movies");     # Add new element to th start

hobbies.pop();                 # remove the last element
hobbies.shift();               # remove the first element

Find element

const index = hobbies.findIndex((item) => {
    return item === "reading"
});
console.log(index);

A shorter code:

const index = hobbies.findIndex((item) => item === "reading");
console.log(index);

// Result
2

Find an element in Object

const inventory = [
  { name: "apples", quantity: 2 },
  { name: "bananas", quantity: 0 },
  { name: "cherries", quantity: 5 },
];

const result = inventory.find(({ name,quantity }) => name === "cherries");

console.log(result); 

// Result:
 { name: 'cherries', quantity: 5 }

find() method ONLY returns the first element in the provided array that satisfies the provided testing function

Filter

const words = ['spray', 'elite', 'exuberant', 'destruction', 'present'];
const result = words.filter((word) => word.length > 6);

// Result:
["exuberant", "destruction", "present"]

Iterate Array

const newHobbies = hobbies.map((item) => item + "!");
consoloe.log(newHobbies);

// Result
(3) ["sports!", "cooking!", "reading!"]

Combine Array

const numbers = [1,2,4,5];
const all = [...hobbies, ...numbers];
console.log(all);

// Result
(7) ["sports", "cooking", "reading", 1, 2, 4, 5]

Destruct an Array

const userName = ["John", "Ted"];

// Old School Way
// const firstName = userName[0];
// const lastName = userName[1];

// New Way
const [firstName, lastName] = ["John", "Ted"];
console.log(firstName);
console.log(lastName);

// Result:
John
Ted

We can also destruct an Object like this:

const {name,quantity} = { name: "apples", quantity: 2 };
console.log(name);
console.log(quantity);

// Result:
apples
2
Read More

Get Ubuntu release code name in Script

$ lsb_release -h
Usage: lsb_release [options]

Options:
  -h, --help         show this help message and exit
  -v, --version      show LSB modules this system supports
  -i, --id           show distributor ID
  -d, --description  show description of this distribution
  -r, --release      show release number of this distribution
  -c, --codename     show code name of this distribution
  -a, --all          show all of the above information
  -s, --short        show requested information in short format


$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 22.04.3 LTS
Release:	22.04
Codename:	jammy


$ lsb_release -sc
jammy

$ lsb_release -sr
22.04

Use it in Shell Script

echo "deb http://apt.kubernetes.io/ kubernetes-$(lsb_release -sc) main kubernetes-$(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
Read More

大学回忆录之2023

真不敢相信, 今天是我在这所大学的 last day.

好像昨天还是刚刚入学的日子一样, 时间, 过的真是快啊.

同学们陆陆续续的散去, 这个陕小的教室也终于安静下来了

我是这么的不愿意离开, 这里的回忆简直太多了

初见

那个好看的尼泊尔同学, 名字叫Dipesh, 每次从我身边经过的时候, 我都会偷偷打量他. 每次都在作业的 due date 前一天, 他也会准时在whats app上找我帮忙, 我也很乐意帮忙, 谁叫人家长的好看呢

坐在对角的哥伦比亚大龄同学, 每次路过我的座位的时候, 都要双掌合十, 然后喊我一句”master”

还有我前面那位印度大胡子同学, 叫什么Pavit的, 每次回头看我, 嘴里都要哼着一句我听不懂的印度歌曲, 好像叫什么faya kun的, 这位大胡子同学每次课堂上咳嗽的时候, 嘴里也会小声说一句sorry.

另外一位尼泊尔的同学, 自从我教会了他 how to say fuck you in chinese 以后, 每次见面, 他都要说一句”草拟”…

哦对了, 那位哥伦比亚同学, 也教过我 how to say fuck you in spanish, 好像是什么类似于 ‘budha’ 的发音. 有一次我在休息区说了一句 budha, 他们吓的全跑开了, 也不知道为啥

还有一次, 我记得那是一节 Programming basic 课程, 一个胖胖的男老师, 虽然很胖, 但是眼神里却透露着一股子凶恶的感觉. 那次, 也不知道讲到哪个知识点了, 大胡子 Pavit 同学当场拿着 ChatGPT 的结果上去提出了疑问… 结果, 课间的 Break time 之后, 这位”凶恶”的男老师再也没有回来了…. 后来还是教学主任出马, 把他请了回来. 当然, 不是请回了教室, 只是改为了远程上课了…

还有那个高贵冷艳的 Indigeneous 女生, 平时也懒得搭理我的, 最后的 e-commerce project 却跟她分到了一组, 当时觉得天都塌了, 没想到在做 Project 的时候, 她竟然异常的热情…

太多的回忆了, 数都数不过来…

自己一直是个极其怀旧的人, 大家都走了, 我还一个人坐在这个空荡荡的教室里, 舍不得离开

在这间教室的一年, 是我人生中技术领域进步最快的一年了

也许上北美的老师都很负责吧, 又或者同学们都太努力了, 这一年在各种 Project + Assignment + Quiz 的轮翻轰炸下, 我也算是入了前端的门了. 虽然还是很菜, 但至少, 现在有了能自己写 WordPress 主题的能力了, 也能写出一个简单的 CMS 了. 收获还是大大滴.

Read More