这两天,在和一个老友研究一个和emoji相关的技术问题。
早上又刚好看到一个google的invitation,在Gmail页面(macOS下的Safari浏览器)和iOS下的Gmail APP里,显示的效果不一样,甚至在同一个Safari浏览器下,Gmail页面和Google calendar页面的效果也不一样。如图:
左:web页面;右:iPhone Mirroring的APP界面
这就激起了我的好奇心,想深入分析了一下Unicode和emoji的一些细节。正式开始前,先叠个甲:这里面的技术细节水非常深,我今天的“初探”难免会有错误和不完整的地方,欢迎留言讨论交流。
点击查看全文 »
发表于:2025年11月05日 23:31 | 分类: 精华 | 没有评论 »
虽然在X上已经简单说过几句,但鉴于这个事情太离谱了,我还是想专门再写点文字吐槽一下。。。
先从前一天10月18日说,和所有的马拉松一样,今天是领参赛包的日子,连续玩了几天的景点后,今天也是休息日。睡了个懒觉,10点多才起来吃早饭,然后去体育场领参赛包。
参赛包领取流程和国内的类似,甚至更简单,凭邮件通知就可以领取,拿到东西后,会经过一个很长的设置好的“赞助商展示购物区”,还挺热闹的。
点击查看全文 »
发表于:2025年11月03日 22:15 | 分类: 流水帐 | 4 个评论 »
你往WordPress上传一张图片的时候,它有可能会给你在后台生成7、8张不同尺寸的图片,比如这样:
其实这对于大部分人来说,都是一个蛮好的功能。比如小白可能会把手机拍的几个MB的图片直接上传上来,那对于web显示可能就太大了。有个自动缩略就很合适了,既能节省带宽,页面加载又快。
但我偏偏是一个喜欢“手动档”的人,我想自己来控制这些尺寸,上传前就会对图片做适当的压缩。这样服务器里也就不用存储这多张图片了。
问了GPT,以下方法对我是有效的:
WordPress后台 → 设置 → 媒体,把缩略图/中等/大的宽高都设为 0,保存。//这里能少3个图片
在WP主题的 functions.php 里,加入以下代码:
// 移除不必要的图片尺寸
add_filter ( 'big_image_size_threshold' , '__return_false' ) ;
add_filter ( 'intermediate_image_sizes_advanced' , function ( $sizes ) {
foreach ( [ 'medium_large' , '1536x1536' , '2048x2048' ] as $s ) {
unset ( $sizes [ $s ] ) ;
}
return $sizes ;
} ) ;
完事,现在你传什么,服务器就只存什么了。
PS:查资料的过程中,还了解到现在浏览器有个srcset响应式图片,大致是,HTML的img标签里,除了正常的src以外,还会提供一个srcset,然后浏览器就可以根据当前屏幕的尺寸来决定具体请求那个资源了,下面是个例子,听起来是挺不错的。
<img src = "IMG_2184-768x384.jpeg"
srcset = "
IMG_2184-300x150.jpeg 300w,
IMG_2184-768x384.jpeg 768w,
IMG_2184.jpeg 1214w"
sizes = "(max-width: 768px) 100vw, 768px"
/>
折腾自己的blog,而不是直接用平台,就是有这些乐趣(如果你也觉得这是乐趣的话),哈哈~
发表于:2025年11月02日 17:05 | 分类: 经验技巧 | 标签: WordPress | 没有评论 »
在新加坡租房(或者买房)的话,肯定会接触“SP group”这个APP,是用来交水电费和垃圾处理费等杂费的。
租房的时候,你需要去开通一个账户,后续的水电使用就可以通过这个APP查看并缴费了。也可以绑定信用卡或者GIRO(理解为定期付款)自动处理,其实还挺方便的。
如果有接触过,可能也已经注意到了,第一期收费的时候,会有一个200-800块钱的Deposit,那这个钱在你的租期结束(或者卖房)的时候,是不会自动退换给你的。这点就完全不像缴费的时候那么方便了,也顺便吐槽一下。
那怎么才能退回来呢?办法还是在SP group里操作,找到 Utilities Services,如图找到“Refund Request”:
点击查看全文 »
发表于:2025年11月01日 15:34 | 分类: 未分类 | 没有评论 »
最近日益觉得,要少刷X了。
首先,是“刷”的体验,这个体验某种意义上来说是“太好了”,总让人停不下来。之前Twitter时代,基本上是你fo了哪些人,就看那些人的内容,你的timeline真的是你决定的。但现在X里有for you,这里的内容几乎是无限的,而且是以短视频内容为主,点开一个也能上滑看下一个,这不就变成tiktok了嘛。。。亏我刻意避开tiktok,可不能在这里栽了。
其次,是“发”的体验,这个体验现在就是“太差了”,X现在的曝光和浏览,明显向付费的蓝勾子用户倾斜了。这本无可厚非,毕竟人家付钱了嘛,但普通的用户的体验变差了,我就不再在X玩也属于无可厚非吧。
于是,我就寻思着,反正发在X上,也没有多少人看,不如重新启用自己这个上古的blog,之前一直维持着这个站点,是为了纪念;现在重新启用,不是更好吗?毕竟这里一切都可以自己说了算,没有字数限制、可以随时编辑,最重要的是,也不用付额外的钱。还可以避免刷太多浪费时间。
至于浏览量啥的,经过这么多年,已经完全没有期待了,这样更好,也没有啥压力,因为以后发的东西都是自己的碎碎念。
其实如果你往前翻,十多年前我写的东西本身也就是碎碎念,有时候就一两句话,也会当作一篇“文章”。倒是到后来,中文博客流行起来以后,关注我这个小站点人也慢慢多起来了,甚至一度左耳朵耗子的酷壳都加了我的友链,发东西就没有那么自在了。那时候觉得如果发得东西太水了,有点对不起读者,但自己又太懒了,没有那么多优质的内容可以发,所以慢慢就沉寂了下去。再后来中文博客整体都沉寂了。再再后来连网页也都沉寂了下来。。。
所以,现在反正不会有太多人看来,也就想通了,发的内容就当给自己记录吧。毕竟这里搜索起来也比X方便,嘿嘿。
最后,我很喜欢马斯克,希望他能带领人类登陆火星,但也不认同他对X的改变,更不认可他要把X做成微信。
今天就碎碎念到这吧。
发表于:2025年10月29日 23:36 | 分类: 流水帐 | 没有评论 »
别的不说,就拿买机票举例,你永远无法以“搜索结果”页面的价格,买到你想要的机票。
是的,相同航班的机票,你试着在携程和飞猪搜索的时候,往往飞猪的会便宜个几十块钱,然后,套路就开始了。
先给你推个“超值精选”,就是机票加上若干保险套一起,要去掉保险,你眼神首先得好,能找得到小字入口才行。然后会给你各种行李额度的捆绑之类的,最后你会发现之前的价格,是有附加条件的,你要完成一个什么“联订”才行。。。
点击查看全文 »
发表于:2025年10月28日 22:56 | 分类: 未分类 | 没有评论 »
香港和新加坡是两个经常被拿来比较的对象,面积、人口体量都比较类似,也都是曾经的亚洲四小龙。
但就居住条件而言,坡县确实比香港好太多了,即使坡县的组屋,比香港的鸽子笼也强不少。今天在办公室往外看,突然想到了一个原因:SG的绿地,其实是分布在住宅中见的;而香港的则是住宅区是住宅区,森林是森林。也就是“和牛”和“五花肉”的关系。均匀分布的感受,就会好很多。
发表于:2025年10月28日 17:20 | 分类: 流水帐 | 没有评论 »
最近这两天,在折腾拿一台4块V100的GPU卡,来跑个671b准满血的DeepSeek R1,遇到了很多问题,也解决了很多问题,当然估计还留下很多问题。这期间遇到一个个的挑战,搞定一个后又遇到下一个,突然有点十多年前折腾linux的时候的意思了,觉得挺好玩的,就也像以前一样,稍微记录一下吧。
先说下背景,我这台机器的配置是比较古老的数据中心版的GPU机器,显卡上面说了是4块V100,每块16G显存,cpu只有20核、内存256GB、数据盘1.5T,系统是ubuntu 20.04。这硬件拿来跑671b确实是有点捉襟见肘,最终的结果也只是1 token/s 左右,并不具备生产价值,只是研究而已。
我最先遇到的问题,就是由于这个机器很多人有权限,而是最恐怖的公用一个linux账号,环境被搞得想当乱,python都是各种版很多套。所以我最先做的就是梳理环境,用了Miniconda搞了一套干净的python-3.12的运行时,后续的各种包都独立维护。
另外,原先的Nvidia驱动也有两个版本,我也顺手给升级并统一了一下,查了各种资料后,发现这个架构比较旧的显卡最好还是不要安装最新的(12.8)驱动,所以我安装了12.6的版本。
然后,我的思路是,在本机直接编译一个ktransformers,这样才有最大的自由度,我感觉这是最终能跑起来的关键,因为到最后还需要现场修改一些代码才能跑起来。
从源码编译安装的过程主要参照官网文档 ,但在执行 bash install.sh 之前,还需要干两件事:
一个是export TORCH_CUDA_ARCH_LIST="7.0",这个7.0的值,就是V100的硬件架构。
另一个是 pip3 install flash-attn,这个模块虽然在V100下最终没有用到,但不装会报依赖错误
现在,按照官方文档的说法,应该是要可以跑起来了,然而你跑 python -m ktransformers.local_chat --model_path ./DeepSeek-R1 --gguf_path ./DeepSeek-R1-Q4_K_M的时候,大概率会在load很久之后,报一个错:
RuntimeError: CUDA error: invalid device function
CUDA kernel errors might be asynchronously reported at some other API call, so the stacktrace below might be incorrect.
For debugging consider passing CUDA_LAUNCH_BLOCKING=1
Compile with TORCH_USE_CUDA_DSA to enable device-side assertions
这个问题,我折腾了很久,简单来说大概就是因为过程中会调用flash-attn,而flash-attn其实并不支持V100,在官方的issue列表里搜了一圈后我发现还真有人遇到类似的问题了,而且也贴了一些解决方案,评估了一下,我最终是按这个办法 来做的,这里我感觉大概是刻意避开了对flash-attn的调用,可能会影响效率但不会报错了。其中第五步,对ktransformers/ktransformers/operators/attention.py的修改,是用了这个据说更快的方案 。。。
改完再运行,还是会报内存不足的错误(可能是显存不足),因为默认只会用单块V100,16G的内存显然是不够的,这时候需要加 optimize_rule_path 参数,给一些优化规则,实测可以这样:python -m ktransformers.local_chat --model_path ./DeepSeek-R1 --gguf_path ./DeepSeek-R1-Q4_K_M --cpu_infer 20 --optimize_rule_path ktransformers/ktransformers/optimize/optimize_rules/DeepSeek-V3-Chat-multi-gpu-4.yaml这个DeepSeek-V3的4卡规则,对于R1也同样有效。
加了这个规则以后,加载过程应该就可以看到会加载到不同的GPU去了,nvidia-smi也能看到4块卡的显存都用起来了。
最终应该就可以响应你的问题了!虽然大概只能到1 token/s 左右。。。
至此大致结束,后面又折腾了一下web的配置,大概也是根据官方文档 来的,这个没啥特殊就不展开了。
最后,感谢朋友发的这篇文章,就是这篇公众号文章 让我开始有动力折腾这个事情的,哈哈!
发表于:2025年02月27日 08:16 | 分类: 故障分析 | 没有评论 »
这个三角棋 ,是一个双人对战的棋类游戏,黑白双方轮流下子,然后最终(旗子铺满所有可落子的点后),数一数谁围成的正三角形多,谁就获胜。这里的正三角形可以是变成1个单位的,也可以是更大的,所以还是有一定的变化性的。如果开启了“高级模式”,斜的正三角形甚至也能算在里面。
点子其实是几年前就想到了,当时是想和小学生的娃下棋,在卡纸上画过一个棋盘,用笔下棋,然后手工数结果,就当让娃练习一下对几何图形的敏感性了。也确实下过几盘,还有点好玩的。
其实那时候就试着写过一个web页面,想把这些逻辑程序化,但其实真去手工画图,发现还有点麻烦,后来就没做出来,就这么放了几年。
最近,大家都在说cursor 如何如何好用,小学生都能用它写个像模像样的小游戏,于是也就下载下来试试。在想让它写个啥的时候,突然就看到之前写了一半的代码,于是。。。就写出了现在这个还算完整的版本 。
cursor写代码 确实方便,配合 claude-3.5-sonnet,基本上真的是自然语言编程了,小修改也都是“tab到底”,科技发展确实日新月异了。
更要命的是,我让AI写了个“人机”,稍微调整一下策略之后,发现这不到一百行JS代码的人机居然还挺强的,虽然每次都只考虑一步,但已经不是随随便便都下赢的了。不信的话,大家可以试试。
Enjoy!
发表于:2024年10月03日 16:28 | 分类: 游戏 | 2 个评论 »
前言:
自从我2022年来到新加坡以后,就发现这边有些地方确实是挺人性化的。举个我自己感受最深的例子:这边会有很多的免费喝水点,分布在机场里、食阁角落、公厕边上、小区内部,最主要还有很多在公园里和绿道边。要知道新加坡是一个接近赤道的热带国家,气温一直比较高,如果出门在外,是很容易口干舌燥的,如果去哪都要自己带水会很麻烦,如果光靠买水,那经济上的压力也会不小。
在户外能喝到免费放心的饮用水,对喜欢户外跑步或者徒步的人(比如我)尤其友好。但也因此带来了一个小小的问题:当我探索到一个陌生的地方,我要怎么才能知道附近哪来有喝水点呢?
试着解决:
我当然想过在google maps或者苹果的地图里搜索,但很遗憾,这个数据可能只在新加坡有意义,需求也相对比较小众,因此这些巨头企业是覆盖不到这个需求的。在新加坡的各种政府网站,我也没有搜到想要的答案。
而且,我看到有人做了类似事情,比如这个: https://linktr.ee/brayontng 作者是一个大一到学生,用Google forms收集数据,最终在google maps的自定义地图 上做展示。但现在似乎也有大半年没更新了,而且我身边熟知的几个点好些都没有收录。还有就是大部分点都没有图片,真要用起来可能也不是太方便。
我的方案:
所以,我想到做一个手机app,嵌入地图SDK,打开app就能显示附近的喝水点,除了告诉你经纬度以外,还会告诉你所在楼层、水是常温的还是冰水或者热水;并且能显示一张图片,让你大致知道周边的情况,还能方便地调用第三方地图软件导航过去。
当然,我自己并没有完整的数据。所以,还会有一个“上传喝水点”的功能,希望发挥广大网友的力量,逐步完善这个数据。最终希望能覆盖整个新加坡绝大部分的喝水点。
于是,就有了 thirsty@SG 。不过由于我也是刚学的SwiftUI,对界面设计也不太在行,因此目前app可能会有这样那样的小问题,界面也比较简陋,但我还是会尽我所能把这个事情做好。
APP:
所以,大家可以通过这里 下载这个叫做“thirsty@SG”的app。目前只有iOS的,因为我不会安卓的app开发,可能暂时不会有安卓的版本。而且目前仅限在新加坡范围内使用,暂时没有打算支持更多地区。
关于上传喝水点:
方法也很简单,点击app左下角,会弹出上传的界面,此时需要拍一张喝水点的照片,app会自动获取此时的经纬度信息,填上一些必要的信息以后,就可以点界面上的“upload”上传了。
显示上传成功以后,暂时还不会直接在app上显示,为了防止有人滥用而误导其他用户,我设计了数据需要审核才能生效,审核我主要会看上传的照片,因此照片是不接受图库里选择的,只能现场拍,望大家理解。我也会尽快审核,慢也不太会超过一天。
上传的时候,可以选择填上你的邮箱。即使填了,也不会在任何地方公开这个信息,万一以后有会员体系什么的,这些做过贡献的用户,肯定默认就是高级用户。(对,我在画饼了,哈哈)
如果在使用app的过程中有任何问题,可以通过X(前Twitter)联系我: https://twitter.com/senob_ 其他未尽事宜,也欢迎联系咨询。
发表于:2023年11月13日 17:22 | 分类: 精华 | 2 个评论 »