笔记
0工具
0此页用于记录用户反馈问题后的每一次改进
关于
“写笔记”支持四种格式——Word 文档、Excel 表格、Markdown、纯文本,起稿或二次编辑时都能随时切换,同一篇笔记想用哪种形态来记,都由你说了算。
md、txt、csv、json 这类纯文本则原样载入,不做多余加工。拿一张现成的表倒进来、改几笔、再导出去,等于白用一台免费的格式转换器。
要带走就在右上角点“下载”,可导出 PDF、Word、Markdown、Excel、TXT 等格式;列表卡片“⋯”菜单里,也有同样的下载入口。
在“工具”页点“+ 上传工具”即可发布:填好名称与链接,再用 Markdown 把使用方法写清楚——能解决什么问题、怎么装、怎么用,比堆介绍实在。
要分发安装包就一并上传压缩包(ZIP、RAR、7Z、TAR.GZ,最大 35MB),别人在详情页一键下载;只放链接不带附件也可以。
工具按大家的收藏热度排序,好用的自然会被顶上来。发布后可在详情页或卡片菜单里编辑、下架。
写笔记时勾上“隐藏”,这篇就只存在于你自己的账号里:不进列表、不进搜索、不上首页精选,也不会出现在任何公开的页面,链接发给别人同样打不开。
适合放密码、草稿、日记这类只给自己看的内容;想公开,去“发布”打开它,把“隐藏”的勾去掉再保存,之后编辑会默认保持原状态,不会悄悄变回公开。
不想公开、只想临时给人看:点“分享”生成一条带密码和有效期的链接,到期自动失效,你也能随时撤销。
你的内容会同时保存在多个副本上,系统定期做备份与完整性校验,再配合异地容灾机制:就算某台机器出问题,数据也不会丢,可以长期放心存放;特别重要的资料,仍建议你另外再留一份备份。
全站跑在容器化、模块化的现代架构上,更新、部署、回滚都很快,扩展性和稳定性都按长期运营的标准来设计(Built for reliability, designed to scale)。
这个网站最早只是一个人的笔记仓库,后来慢慢长成现在的知识中枢。设计上很克制——没有广告、没有追踪、没有推荐算法,只是干干净净地存放一些东西;既然做好了,就公开出来,万一有人用得上呢。
不做大而全,不做平台梦,保持简单、保持克制、保持好奇。所有内容都由用户贡献、由用户维护:不会突然冒出付费墙,不会在角落塞广告位,也不会把你的数据卖给第三方。
产品会持续迭代,站内日志页记录着每一次改动,改了什么都有迹可循;想了解这个站是怎么一步步走到今天的,翻翻日志就能看到来龙去脉。
如果在这里看到涉嫌违规的内容,点对应卡片右侧的“举报”按钮就能提交,我们会尽快核实处理;也谢谢你花一点时间,一起把这里维护干净。
趋势
从仓库地板到微软商店——一个波兰22岁独立开发者的技术旅程
大概在去年的这个时候,我的破笔记本风扇在94°C的高温下尖叫,键盘烫得手腕都放不住。那个声音成了我每个夜晚的背景音。我就在这种环境下写代码,因为害怕一旦停下来,我就会像之前12个死掉的项目一样,悄无声息地消失。就像我自己差点在22岁时做的那样。
上周,那种恐惧得到了我完全没想到的回应。我在这台尖叫的笔记本上一个人写的Windows监控工具——PC Workman,竟然在微软商店上线了。不是随便扔个ZIP包或者“git clone一下”,是正儿八经的商店列表,跟我从小以为只有大公司才能做的软件待在一起。
然后,三天后,一个测试者告诉我这玩意儿根本没法用。
这两句话都是真的。这篇文章讲的就是这两件事之间的距离——因为只有这段距离,才是一个里程碑真正值得写下来的东西。
那个你永远看不见的数字跨过了界线
有种版本的我在22岁就放弃了。没有戏剧性的时刻,就像电源轨从12伏慢慢掉到11.9、11.8,每次读数都还在“规格范围内”,直到某一天这个数字就是不对了,而你根本不知道是什么时候发生的。
我到底是怎么发现那天来了、又怎么拒绝接受的,这背后的故事比较个人化。我在另一篇文章《找回自己的人》里详细讲过,就不在这里重复了。但那个隐喻很重要,因为它最终会体现在代码里:阈值永远抓不住缓慢的下降,你只会在数字已经错了的时候才发现。记住这一点,后面讲电压监控的时候会用到。
仓库
在荷兰待了九个月。四份工作,七个住处。每天步行15公里扫描条码,时薪3.5欧元。12小时轮班,然后晚上再花4-6小时在那台2014年的笔记本上写代码。
圣诞节前三天,那些对我笑了好几个月的人又笑了,说:“你没通过试用期。明天再见吧。还有,搬出公寓。”
12月22日。我还没来得及说完话,行李箱就已经摆在了门口。还有两条狗在另一个国家等我。剩下的钱大概只够撑一个月。
(那天晚上我站在走廊里用不是母语的语言大喊我不是恐怖分子,阻止一个男人把我赶到大街上。说来话长,改天再写。)
那天晚上我没有打开招聘网站。我打开了编辑器,开始重写第四版。三周后,1月20日,我发布了第一个.exe。
这是我这一年里最真实的一句话:做点东西。提交点代码。看着进度条走。感觉自己存在。 这可不是什么励志海报,这是生存。
我到底做了个什么
PC Workman告诉你电脑为什么慢——不是告诉你“你电脑慢”,这个你自己知道,而是告诉你为什么。它通过一个叫hck_GPT的助手跟你对话,这个助手完全跑在你本机上:90个意图,九层路由器,没有云,没有API密钥,没有任何东西离开你的电脑。
问“这是病毒吗?”它会检查是谁真正签了那个文件,而不是相信文件名。问“我应该升级什么?”它会读取你自己的负载历史,指出真正的瓶颈是什么。
我本来可以花一个下午搞个pip install openai就完事了。但我没这么做。一个能读你机器数据的监控工具,却要打电话给陌生人的服务器来解释这些数据,这本身就是个矛盾。所以hck_GPT运行在规则引擎和可选的本地模型上,你问的任何东西都不会离开你的房间。
但真正让我失眠的部分是内存。
地球上的每个监控工具在你关掉它的那一刻就会忘记你。HWiNFO、Afterburner,第二天再打开,它们会用跟所有机器一样的基准线来画你的78°C。我接受不了这个。
一个监控工具能给的最有用的数字不是温度本身,而是这个温度对你来说正不正常。所以每条读数都会被归类到五个工作负载桶中的一个,每个桶都有自己的学习基线,用Welford累加器不断更新。每个桶只存三个数字,从不重新计算:
def _welford_add(acc, x):
"""Fold one sample into a running accumulator (Welford, 1962)."""
n = acc["n"] + 1
delta = x - acc["mean"]
mean = acc["mean"] + delta / n
acc["n"] = n
acc["mean"] = mean
acc["M2"] = acc["M2"] + delta * (x - mean)
玩游戏时82°C:正常。闲着不动时82°C:出问题了。同样的数字,完全相反的结论——根据的是你自己的历史数据,而不是一张规格表。
电压监控用了这个项目里最古老的数学:中位数和MAD(中位数绝对偏差),加上1984年的Nelson规则,专门用来抓那种缓慢的下降——阈值永远抓不住的那种。
还记得前面说的电源轨吗?我本人就是这样在规格范围内慢慢下降了三年的,所有人都包括我自己都发誓没什么问题。我给自己造了一个从未有过的报警器。来自六十年代的统计学,用来照看电源。无聊、可预测,但这正是我信任它们的原因。统计学不会产生幻觉。人会。
有人用每小时19兹罗提的工资看着我的眼睛说:“再努力点,工资会涨的。”工资从来没涨过。但数学至少从来没骗过我。
微软说不行,然后微软说行
在商店上架前两周,我发了一篇文章叫“微软说不行”。我的第一个.msix包被拒绝了。不是因为代码,而是因为一个模糊的磁贴图标和一个指向错误文件的隐私政策链接。一年的电压异常数学和离线AI,最后卡在了一个模糊的PNG上。审阅者是对的,但这依然很伤人。
于是我修好了它。一个清晰干净的图标。一个真正的、可读的隐私政策,放在它该在的地方。一个打了13个补丁的新版本(我的测试者们在等待期间找到的bug)。重新提交。等待。
然后有一天早上:通过了。
一个说“修好这两件事再提交”的拒绝从来就不是真正的拒绝。那是商店在告诉我:你就差这么一点了。
我以为这就是终点了。我错了,而且我错的方式才是这篇文章真正想说的。
“通过”之后的72小时
商店的徽章能证明什么?证明你存在,证明你的文件没问题,证明审阅者打开过你的应用,它启动起来了。但它不能证明什么?不能证明这个东西在别人的机器上也能用。
庆祝完三天后,一个叫Adam的测试者给我发了个截图。游戏内覆盖层——那个专门用来显示温度的东西——显示的是:--,就两个破折号。在他的机器上,这个监控工具是瞎的。一个看不到温度的监控工具,就只是个名字而已。
我已经把它发布到商店了,它已经通过认证了,但对一个不是我的人来说,它就是废的。
那个周末我一直在做尸检,发现了两个失败点。我要坦诚地把它们写出来,因为这是这篇文章里最有价值的东西。
失败一:商店安装的只读陷阱
微软把我的应用安装到了一个应用本身无法写入的文件夹里。商店安装的路径在C:\Program Files\WindowsApps下,这是只读的。我的数据库、学习到的基线、用户偏好——每一次写入都静默地失败了,在每一个商店安装的机器上都是如此。那个本来应该记住你机器的应用,实际上什么都记不住。
失败二:权限的静默降级
即使你解决了路径问题,商店应用还运行在一个叫AppContainer的沙箱里,默认情况下它根本不能通过标准WMI或Ring 0驱动访问硬件传感器。在商店环境里,Get-Counter或OpenAdapter这类API会直接返回空值——不是报错,而是静默地返回空。这就是为什么Adam看到的温度是破折号:应用在运行,传感器在读取,但读取结果全是空的,而代码里没有任何地方处理这个情况。
我是怎么修的
这两个问题其实有同一个根源:我把桌面应用的假设带到了商店环境里。在Win32时代,你写个exe,它默认就能读写它自己的目录,默认就能用管理员权限调用WMI。但在UWP/商店模型里,这些特权全都被收回了。
修复方案分两步:
存储路径:改用
Windows.Storage.ApplicationData.Current.LocalFolder,这是商店应用唯一保证可写的路径。所有用户数据、基线、偏好都迁过去。传感器访问:对于商店应用,必须通过
Windows.Devices.Sensors命名空间或者使用一个专门的驱动服务来获取硬件数据。我写了一个中间层,检查运行环境——如果是商店模式,就走UWP的传感器API;如果是传统桌面模式,就走WMI。两种路径最终输出同样的数据结构,上层代码完全不用改。
// 伪代码:运行环境检测与适配
if (IsStoreApp())
{
// 使用 UWP 传感器 API
var temp = await TemperatureSensor.GetDefault().GetReadingAsync();
return temp.Celsius;
}
else
{
// 使用传统 WMI 查询
var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_TemperatureProbe");
// ...
}
所以,教训是什么?
商店徽章不代表你的软件能工作。认证不代表你的软件能工作。你的开发机上的测试不代表你的软件能工作。唯一能证明你的软件能工作的,是有人在他自己的机器上运行它,然后告诉你“这东西挺好使”。
我花了11个月做这个项目,花了3周通过认证,花了3天发现它根本不能用。如果Adam没给我发那个截图,我可能现在还蒙在鼓里,以为一切顺利。
所以如果你也在做类似的事情,我的建议是:尽快让真实用户上手测试。不要等到商店上架了才找人。我在发布前有测试者,但测试得不够。我没有在商店沙箱环境里测试过。我没有在别人那台配置完全不同的机器上测试过。这些错误本来都可以避免,但直到那个破折号的截图出现,我才真正意识到问题在哪。
最后说两句
我今年22岁,在波兰,白天在零售店打工,晚上在这台快报废的笔记本上写代码。PC Workman在微软商店上线了,这对我意义重大。但它真正教会我的不是“坚持就能成功”这种鸡汤——而是“你自以为做好了,其实远远不够”这种更残酷但更真实的道理。
代码不会骗你。数学不会骗你。但人会。包括你自己。
所以,测试。测试。再测试。 在别人的机器上测试。在沙箱里测试。在只读目录下测试。在你不信任它的每一种情况下测试。因为等到用户告诉你它坏了的时候,你已经晚了。
PC Workman现在在微软商店上架中。如果你下载了它,发现它在你机器上坏了——请告诉我。我会修。