一个程序员把天气和地图塞进黑白终端,结果比手机App还好看!
打开终端就能看天气、查雷达、翻地图,还不用注册账号、不用申请API密钥!
80年代法国人用电话线连上一个叫Minitel的小盒子,黑白屏幕上蹦出天气、火车时刻表和股票行情。900多万个家庭靠这个东西过日子,比万维网早了整整十年。2026年有个程序员把同一套东西搬回了你的命令行窗口。六个终端应用——天气、雷达、日照、月亮、潮汐、地图——全部免费开源,全部用Python标准库写成,一个第三方包都不需要。他管这个叫Linecast,说它就像《老农年鉴》遇上了Minitel。
问题来了。1792年创刊的《老农年鉴》靠算命一样的长期天气预报卖了233年。1982年法国政府砸钱推Minitel,免费发终端,巅峰时期装机900多万台。这两样东西有一个共同点:它们都是“没有更好选择”时代的产物。那时候没有手机App,没有实时卫星云图,没有GPS。你只能翻年鉴、拨电话线、看黑白字符。
现在你口袋里装着能显示4K卫星云图的手机,随便一个天气App都比当年的Minitel豪华一万倍。为什么有人要在终端里重新发明这些东西?
答案比你想象的更离谱。
终端里画图?一个字符塞进8个像素点
先搞清楚一件事:命令行终端天生不是画图的地方。
终端的基本单位是字符。一个字母“A”占一个格子,一个空格也占一个格子。你想画一条曲线?只能用ASCII字符拼——画个温度趋势图全是“_-~^”这种符号,看起来像地震仪记录纸。
Linecast不这么干。它用Unicode盲文字符。
盲文本来是为盲人设计的点字系统,每个字符由2列4行共8个点组成。Unicode把盲文字符编了码,从U+2800到U+28FF一共256个。每个码位对应8个点的亮灭状态——相当于把一个字符格子变成了8个微型像素。
终端分辨率瞬间翻了8倍。
这就是Linecast能画出温度曲线、雷达回波、甚至街道地图的秘密。每个盲文字符就是一个2×4的点阵画布,几百个字符拼在一起,就能在纯文本环境里渲染出图形界面。没有图形库,没有Canvas,没有WebGL——只有字符和ANSI颜色码。
ANSI颜色是另一个把戏。终端支持一套标准的颜色代码,Linecast直接读取你当前终端主题的调色板。你换一个终端配色方案,Linecast的画面颜色跟着变。深色模式、浅色模式、赛博朋克紫——全自动适配,不用你动一个手指头。
鼠标也能用。终端里用鼠标?对,Linecast支持鼠标拖拽地图、点击按钮、滚动缩放。一个纯字符界面,操作逻辑跟手机App差不多。
这就像有人用火柴棍搭了一座埃菲尔铁塔。明明有钢筋水泥不用,偏要用最原始的材料做出最精致的东西。
不要API密钥,不要注册,甚至不需要安装
现在做个天气App有多麻烦?
先注册一个天气数据平台的账号,填邮箱、验证手机、勾选一堆用户协议。然后申请API密钥,等着审核。拿到密钥之后研究文档,搞清楚调用限额是多少、免费套餐每天能刷几次、超了怎么收费。最后写代码,处理认证、处理超时、处理限流。
Linecast把这些全跳过了。
天气预报和空气质量来自Open-Meteo。这个开源天气API不需要任何密钥,非商业用途完全免费,数据按照CC BY 4.0许可发布。潮汐数据来自NOAA、加拿大水文局和昆士兰开放数据。雷达图像来自LibreWXR和NEXRAD。地图数据来自OpenStreetMap和OpenFreeMap。太阳和月亮的位置?本地计算,连网都不用。
全部是公共数据,全部是开放接口,全部不需要你掏一分钱。
更狠的是安装方式。如果你装了uvx,一行命令直接跑:uvx linecast weather。不用下载,不用配置,不用建虚拟环境。Homebrew能装,pip能装,pipx能装,连Arch Linux的AUR都有社区维护的包。
整个代码库只依赖Python标准库。这意味着什么?意味着你在任何装了Python 3.10以上的macOS或Linux机器上都能跑。不需要装numpy,不需要装requests,不需要装任何第三方库。
一个天气可视化工具,零依赖。
这跟主流开发趋势完全相反。现在做个“Hello World”都可能拖进来几十个npm包。Linecast的开发者在用80年代的工程哲学做2026年的产品——克制、精简、不堆砌。
但是有个致命问题:它过不了SSH
读到这儿你可能已经在想:这么好的东西,SSH到服务器上能不能用?
不能。
Linecast明确写着:不支持SSH传输。
为什么?因为SSH连接里终端调色板检测经常失灵,鼠标事件传不过去,图形刷新会卡顿。这东西是为本地终端设计的,不是为远程服务器准备的。
这就尴尬了。终端工具最大的使用场景就是SSH远程开发——你连上一台云服务器,在命令行里敲命令、看日志、跑脚本。Linecast偏偏在这个场景下失效。
Windows也不支持。虽然Python是跨平台的,但终端图形渲染依赖Unix-like系统的终端特性,Windows的终端生态还没完全跟上。
所以Linecast的适用场景被卡在一个很窄的区间:你必须坐在一台macOS或Linux电脑前,打开本地终端,才能享受这套东西。
这像什么?像有人造了一辆顶级跑车,但只能在自家车库里开。
地图能转、云层能飘、昼夜能变——全在字符里
别以为Linecast只是显示几行数字。
它的地图模块能渲染OpenStreetMap的矢量街道数据。道路、水系、公园、建筑,全部用盲文字符和ANSI颜色画出来。鼠标悬停在地物上会显示名称。按/键搜索地点,按d键规划路线,按v键切换视图。
缩放到最远,地球变成一个可旋转的球体。按r键让地球自动旋转。按s键显示当前全球昼夜分界线,夜晚一侧的城市会发光。按c键叠加实时卫星云图。
一个终端窗口里,你看到的是整个地球的实时状态。
天气模块更夸张。它显示当前天气、7天预报、空气质量、官方警报。温度曲线用盲文字符绘制,每小时一个点,连成一条平滑的折线。降雨概率、风速、湿度全在上面。警报覆盖36个国家。
日照模块受Apple Watch太阳表盘启发。太阳在弧形轨迹上移动,天空颜色从黎明到黄昏渐变,昼长变化精确到分钟。月亮模块画出当前月相,包括明暗分界线、月海 shading、光晕,以及你所在半球看到的月亮朝向。下次满月和新月的时间直接告诉你。
潮汐模块滚动显示几天的潮位曲线,标注每个高潮和低潮的具体时间。
六个应用,六个完整的可视化面板。全部在终端里,全部用字符和颜色完成。
一个盲文字符背后的数学
拆开一个盲文字符看看。
U+2800到U+28FF这256个码位,每个对应8个点的不同组合。第1个点对应码位加1,第2个点加2,第3个点加4,第4个点加8,第5个点加16,第6个点加32,第7个点加64,第8个点加128。
想画一个左上角亮点的盲文字符?U+2800加1,得到U+2801。想画一个全8点都亮的字符?U+2800加255,得到U+28FF。
就这么简单。256个字符对应256种点阵组合。Linecast把图形数据转换成点阵,点阵转换成盲文码位,盲文码位输出到终端。终端字体渲染引擎把盲文字符显示成点阵图案。
分辨率翻8倍,代价只是多了一行字符编码转换。
这种技术叫“终端图形学”,过去十年里被Drawille这类库带火过。但大多数项目停留在“在终端里显示一张图片”的玩具阶段。Linecast把它做成了生产级工具——实时数据、交互操作、主题自适应,全部整合进一套完整的应用套件。
开源、免费、MIT协议——但开发者只有一个人
去GitHub上看一眼Linecast的仓库。提交记录从2026年7月到8月,密集得像炮弹。开发者Andrew Shuttleworth Fowler在几个月里完成了六个完整应用的全部代码。
没有团队,没有公司支持,没有众筹。一个人,一台电脑,一个终端。
MIT协议。你可以随便用、随便改、随便商用,只要保留版权声明。代码就在那儿,任何人都能拿去研究、拿去改进、拿去做成自己的东西。
这跟当今软件行业的生态形成了鲜明对比。大公司做一个天气App要几十人的团队、几年的迭代、几千万的预算。一个人用Python标准库就搞定了——功能更全、更干净、更透明。
但问题依然悬在那儿
回到开头那个问题。
2026年,手机里有4K卫星云图、有实时雷达动画、有精确到分钟的降水预报。为什么还要在终端里看天气?
Linecast给出了一个答案:因为可以。因为技术本身有趣。因为用最少的资源做最多的事情,本身就是一种美学追求。
但还有另一个答案没人说出来。
《老农年鉴》卖了233年,不是因为它的天气预报准——事实上它的长期预报准确率一直被气象学家质疑。人们买它,是因为翻年鉴这件事本身有一种仪式感。Minitel在法国火了十几年,不是因为它的技术先进——黑白字符界面跟后来的万维网比简直原始。人们用它,是因为它是当时唯一的选择。
Linecast把这两样东西缝在一起,造出了一个悖论:用最复古的媒介,呈现最现代的数据;用最受限的工具,做出最自由的交互。
这不支持SSH。这不能在Windows上跑。这需要你坐在本地终端前面。
但也许这正是它的意义。在一个万物皆可云的时代,有些东西注定要在本地跑、在眼前亮、在字符里活。
我还在想另一个问题。开发者说“我还没探索Windows的支持”。这句话的意思是:不是做不到,是还没做。不是技术壁垒,是时间问题。
那Windows版本什么时候来?SSH支持什么时候加上?会不会有人拿MIT协议fork一份做成跨平台版本?
这事还没完。