即刻App年轻人的同好社区
下载
App内打开
鼠标为什么不是猫标
379关注613被关注3夸夸
iOS独立开发:StaySleep/熬夜热力图
base纽约 康奈尔计算机硕士在读
ENFJ/喜欢写点东西/思考/努力成为实干主义
置顶
鼠标为什么不是猫标
2年前
鼠标为什么不是猫标
3月前
我们希望让整理相册变成一件「有趣、好玩」的一件事情。为此,我们开发了「StayPhoto」,现已上架App Store,欢迎体验,点击展开它背后的一部分故事。

人的记忆并非连续,就像每次回想过去的时候,出现的往往总是一些画面碎片,这些散落在脑海里的一块块人生拼图,讲述着我们的故事。

手机和相机出现以后,记忆有了更好的载体,它们让曾经不再模糊,转而变成一张张高清的相片和Live实况照片,静静地躺在相册里,等待被重新翻起的那一天。

整理和回忆过去明明是一件很有意义的事情,但我讨厌清理相册。我试过很多的照片清理工具,它们都以日期或者文件大小排序照片,不仅每次都要记住清理了哪些日期。而且它们开始以后没有终点,似乎在希望我可以一次性地,清理完相册里的数万张照片。

我不想循规蹈矩地整理相册,讨厌那些清理相册带来的记忆负担,和没有正反馈的过程。我期待每一次都能看到不同的往事,收获惊喜与新的感悟。StayPhoto就此诞生。

不同于其他照片清理软件,StayPhoto不提供任何时间以及文件大小排序。在正式开始之前,甚至不会知道接下来能看到哪些相片。我们主打「相册随机漫步」,从相册里随机选取10张不同照片展现,只需要不到20秒就可以整理完成。简单地左右滑动照片,便能决定每张照片的去留并继续浏览下一张,如同刷社交媒体一般顺畅,却又乐趣横生。

不用有任何压力,StayPhoto会自动记住每一次进度,记录整理过的所有照片,让他们不再重复出现。这样就可以随时开始,也可以随时停下做其他真正重要的事情。

每次回顾完一组照片后,都可以看到「统计数据」和专属的礼花动画。也可以通过主页和统计页面看到过往的数据。我们相信,无论多小的成就,都是一个里程碑,值得庆祝和被记录。

虽然App的功能和逻辑并不复杂,但在设计上还是动了一点小心思,比如默认每组整理照片的数量设置成多少、保留和删除的选项提供不同的震动手感、单击Live图标可以重播实况照片。我们希望让整个过程更丝滑,而不破坏那种在时光里漫步的沉浸感。

在开发工作接近尾声的时候,我一直在思考这个App应该叫什么名字,脑海里始终没有很好的想法。

直到在一次测试的时候,我回顾到了三年前自己开发StaySleep的照片,那时的光标刚好也落在了文章的最后一段 “在我看来,代码的意义有两种,一种是帮助人们探索更多领域的未知,另一种是帮助人们改善他们的生活,只要它能够帮助到大家,哪怕只影响了一个人,也达成了我对它的期待。”

这几年来,我做了很多不同的项目,也尝试了很多不同的领域。之前App名字中的Stay只是希望大家可以睡得更久,但我在开发的路上逐渐体会到 “科技应该始终以人为本”的实际意义,所以我保留了这个前缀,时刻提醒自己保持以人为本的初衷。同时,也是希望大家享受在回忆里短暂停留的片刻,那些过往的光阴,值得被珍藏与翻看,无论好坏。

清理不需要的照片只是一件小事。我们更希望每一次整理的时候,这些照片都能给您带来一些新的领悟与不同的心境。这也正是我们开发StayPhoto的另一个初衷,“旧照重逢,回忆常新”。

至此,欢迎踏上这趟闪回过去的旅程。
61
鼠标为什么不是猫标
7月前
“好好照顾自己,等下次见面的时候,我还想再听你们的故事。”

八月,潮湿闷热的上海,网约车碾过陆家嘴的霓虹倒影驶向浦东机场,你撇了一眼手表,九点,但没有在迪士尼城堡的方向看到晚场的烟花余光。母亲在浦东机场反复检查你的登机牌,走之前她说这是你离家最远的一次。迪拜机场凌晨四点的中转厅像被按了暂停键的太空舱,穿红色校服的小学生在候机室的瓷砖地上玩跳房子,你低声道他们这个年纪会有什么顾虑呢。十六小时后,飞机落地肯尼迪机场,寒风裹着《Welcome to New York》灌进开着通透模式的耳机,Lyft堵在Van Wyck高速时,你数着一路上遇到的在国内没见过的各种商务车款式。傍晚前终于抵达宿舍门口时,抬头第一眼看到的Bloomberg Center 玻璃幕墙,将你的影子折叠成数百种未来的可能。

九月,宿舍顶楼长桌铺开阿瓦隆卡牌时,月光正切开东河河面的货轮航迹。你分不清梅林和莫甘娜的身份,但当你睁眼的瞬间,手机正弹出明天去Costco的购物清单。当大都会博物馆的苏州园林复制品让你喉头发紧时,MoMA的《星空》正吞噬着整个展厅的光,梵高的漩涡在视网膜上显现出童年课本的折痕。在161街上,你跟随着各种穿着大巴黎、阿根廷、巴塞罗那球衣的球迷们入场,纽约FC球衣的湛蓝色在洋基体育场洇开,你当时不明白为什么这个色调和曼城球衣完全一样。面试失败那天下午,手机屏幕最终还是在列车进站前暗下去,你在等待地铁时编辑又删除的《Tiktok 移动端一面挂经》,像把秘密封进漂流瓶投入铁轨下的暗河,却又在落下的第一时间应声破裂。

十月,加州阳光晒软了时差,格里菲斯天文台的二楼观景台上,洛杉矶像被孩子随手推倒的积木城,分散在眼前的大陆。圣莫妮卡码头的雾气漫过你游戏记忆里的像素海滩,可游戏里的海滩从来不会遇到大雾天。当你数着Target冰激凌空罐计算加州没有车的生活半径时,突然想到Cornell Tech为什么没有那么好吃的食堂和校园商店。光脚踩在La Jolla海滩的时候,你不喜欢这种参杂着海水和藻类的触感,可你依然在加州最西边的海滩上多走了很久,只为让加州的晚风多吹散几页纽约的阴雨记忆。

十一月,阳光像某种温柔的暴力,治愈的同时总有一些若隐若现的刺痛,你坐在食堂外草坪试图用自然疗法消化心碎,LeetCode窗口在风里摇晃成模糊的色块。罗斯福岛中餐厅窗口前,你盯着取餐处打包袋上的订单标签,突然希望人生也能像Lunch Special的订单号一样清晰可溯。你数着微波炉加热泡面的秒数,一边把在口袋里摸到的褶皱机票和昨晚吃剩的晚饭收拾进门口的垃圾袋,一边在Leetcode题解里寻找着Peak Number的最优思路。

十二月,大雪掩埋了所有退路,还轻盈地覆盖了推掉的回国机票、错过的乔迁派对,以及冷冻层里已结成冰霜的哈根达斯。学校自习小教室暖气的嗡嗡声中,你对着摄像头完成今年最后的Tech轮面试。你把终面面试官“If you join Bloomberg, definitely ping me”的承诺反复烘焙成冬日特供的希望饼干。面试结束那天下午,小岛尽头的大理石台阶接住了你所有悬而未决的忐忑,远处NYC Ferry开过了一艘又一艘,你没有在渡轮的站点,但你多希望它能把你带走。你数着那些渡轮汽笛声等待未知的宣判——如同小时候踮脚偷看灶上蒸笼,明知可能是烫伤仍要伸手。

一月,朋友们裹着厚厚外套在下着暴雨的纽约街头穿梭,大家或许从没想过还能在拥挤之中找到一席之地,远眺自由女神像旁的跨年烟花,那晚在曼哈顿路过的每一栋玻璃高楼都可能成为你命运的下一个锚点。但手机屏幕的冷光最终刺破午后浅眠,Apple Intelligence总结邮件内容时用的“Unfortunately”,躺在通知栏像枚生锈的图钉。你数着窗帘缝隙漏进的光斑,直到空调暖风烘干了眼底最后一丝潮气。你觉着阳光有些过于耀眼,于是等天彻底暗下来后才挪动身子打开了窗帘,窗外隔壁健身房屋顶上的积雪在慢慢消融,你想起冰箱里冻了三个月的羊排或许比停滞了一个月的求职生涯更值得解冻。

二月,当烤箱在烘焙朗姆过量的冰淇淋烤布蕾时,泽西城Brunch店门口早已在十一点就排起了长龙。投递出的简历在邮箱里筑巢,你开始给每封拒信编号,这样似乎比之前全部记录在Notion里更快一些,如同收藏不同口味的咖啡胶囊。当朋友在LinkedIn更新职位头衔时,你还在一遍又一遍刷着收件箱,那个似有似无的面试机会成为了你向前的动力。某个在罗斯福岛上散步听风的瞬间,海浪拍打岸堤礁石的声音突然与心跳共振——有一瞬间才突然意识到,原来生活的谜底不在永无止境的未来,而是法拉盛重庆老灶的鸳鸯火锅,是深夜依然车水马龙的一号国道,是岛上突然冒出枝桠的白樱花树。

三月,Bloomberg Center的玻璃幕墙吞噬了最后一缕月光,那一天第三场面试结束耗尽最后半块蛋白棒的能量,你靠着身后的白板滑坐在地,手机屏幕映出手心未干的汗渍。视频通话的蓝光里映出老家的挂钟:北京时间下午一点,他们永远活在你时间的另一面,那是比任何BQ问题都更难启齿的乡愁。当整栋楼的大灯在凌晨一点全部熄灭,你发现自己正坐在满是充电器和书包的中央,恍若置身于一片废墟的顶端,活过了一整篇的灾难。

次日,当你仍然还沉浸在不确定算法题是否做对的焦虑中时,通知栏弹出的邮件比屏幕外的阳光更灼目,近四个小时的算法与职业迷宫在此刻终于坍缩成来自HR的一封未读邮件。你两小时前吞下的Goodbye Stress在血管里结成失效的冰晶,任由多巴胺洪流冲垮所有理性的堤坝:原来被命运坚定选择的滋味,是咸的,像此刻滑进嘴角的泪,更像是初春你们在East Village甜品店分食的那勺巧克力冰沙。

签电子名的动作比当年选择研究生院校的时候更决绝,光标划过的地方泛起磷光,像是把求职季所有未眠夜里的星光都抵押给了这份PDF。那些被高强度BQ和半小时三道Coding的记忆、某场十五分钟视频面试里始终未露面的面试官、五轮面试后后石沉大海的焦灼,此刻都随着电子签名栏里笨拙的字迹进入了那个名叫“过去故事”的记忆文件夹。

邮件底部公司Logo在视网膜上灼出橙黄色光斑,它分外眼熟,但是一时半会又想不起来在哪里见过它。直到某一天在清理不常用App的时候突然闪回到去年夏天:你坐在那个小房间的阳台Work From Home的时候,那抹橙色也曾安静匍匐在屏幕右下角,只有当你连接公司的内网的时候,那个Global Protect的图标才会突然出现,像枚等待一年后才引爆的定时器。命运此刻完成了它的莫比乌斯环,就像两年前的自己不会想到能入职每天路过的那栋大楼,一年前的自己也不会想到,来年暑假的结局早在当时就和自己打过招呼。

四月,波多黎各的太阳把焦虑晒成细沙,圣胡安机场落地的瞬间,飞机带走了最后一片纽约的雨云。你们在荧光海划独木舟的夜晚,手机信号格比浮游生物的光还微弱。当云雀水滑梯冲走你三百度的镜片,世界突然变成莫奈笔下的睡莲池,朋友们的身影在雨林水雾中晕染成色块。但这点小意外没有影响你们躺在沙滩上享受北回归线的阳光,这里的阳光也再没有暴力的感觉,而是温柔地抚平了那些刺痛,试图把他们深深地沉入大西洋。学校旁边的体育馆,冬天的积雪早已消融,门口整排樱花吸引了无数慕名前来的纽约游客,你握紧从国内漂洋过海来的红双喜球拍,保护套上还粘着宁波港的潮气——突然看清人生就像反胶与长胶的对攻,重要的不是预判旋转方向,而是学会在失衡瞬间用腰腹核心发力。

那方刚好能放下茶几和地毯让大家围坐的小客厅,正在消化整季的梅雨,梅花A与黑桃K永远败给命运随机发放的顺子,就像那个总把筹码推成孤注的男孩,每次看到他拿起手牌反复观摩都会让人心里一颤。菠萝与椰浆的混合物流淌成粘稠的时间轴,当第两杯Piña Colada在高脚杯缘凝结糖霜,已经有人开始在电视上放着说唱,但他的清醒总是终结在每一次故事高潮前的逗号。

你们披着毛毯数着地毯下藏着的气球碎片,丈量着窗外天空的亮度等待黎明特赦。总有人在天光刺破窗台时咒骂纽约吝啬的夜晚,而冰块在玻璃杯上凝结的露水早已替你们签好NDA协议:每场日出都是小型葬礼,埋葬通宵未关的氛围灯和背景音乐,埋葬被提前预览但又说了一遍的秘史,埋葬玩游戏时因昏睡错过的一整篇故事。

五月,客厅的地毯终于记住了每个人的凹陷形状,即使总有人失手把杯子打翻在上面。空瓶在厨房的推车旁边站成斯德哥尔摩群岛,仍然摆在灶台上的那些则还在倾听着这里的故事。有人开始诉说起了你们第一次在这里的场景时,声音颗粒在晨光中飞舞如柳絮,你们曾在这里羡慕过乐队和爱情的故事,用那副微微泛黄、边角有些破损的塔罗牌占卜过未来的姻缘,把某个心碎的小说故事绘声绘色地分享出来。现在这个装满Youtube音乐与膨化零食的立方体即将被格式化,像你们反复清空的Leetcode草稿纸。

晨光照进隔壁高楼的刹那,窗台上插着鲜花的玻璃瓶在地面投下细长的影子,像一列永远等不到乘客的机场摆渡车。你知道所有未兑现的诺言终将长成木地板下的菌丝网络:有人打算美国结束以后回国工作,有人势要留在加州或者纽约体验一下异域的工作生活,而你们约好或许下一次在国内见面是盛夏的末尾。曾经这里发生的所有事情会变成宇宙里的回声,永远在真空里震荡,诉说着二十三岁那年的海啸与月光。离开的你轻轻打开了房门,手边鞋柜最顶上的,是那天你给大家拍的拍立得,背面写着四个字 “毕业快乐”。

那天的Boat Party,见到了很多许久未见朋友们,也很珍惜在这个学年结束之前最后一次和大家聊天,有些朋友新学年还能再见,有些朋友再见可能就不知何时了。带着拍立得和三盒备用相纸,给一些将要说再见的朋友们留下了一张相片。那些刚拍完尚未显影的相纸在西装内口袋里沉睡像冬眠的蝉蛹,我知道其中某张会永远定格穿黑色礼裙的朋友,她总是穿搭得这么暗色调,另一张将封住布鲁克林大桥和波多黎各衬衫的身影,在我们眼里他是那个永远有活力永远年轻的少年。唯一一张拍立得合照,画面里大家站在甲板上背对哈德逊河,虽然是完全背光的形象,但或许能留出更多的遐想空间,就像记忆里那些模糊的身影。

躺在包底的最后一盒备用相纸,像通往未来时光机的票根。下一张相纸或许会留给中央公园的秋枫、洛克菲勒圣诞树的第一片雪、来年秋假的第一次旅行。而那些尚未发生的故事正在名为未来的巢穴里孵化着,等待着破壳而出的那一天,将再次栖落在罗斯福岛的南侧。

游轮两次经过了自由女神像,一次仍然是傍晚,另一次只能看见落日的余晖,但无论如何,它始终在那里。就像总会有新来的硕士生指着罗斯福岛南端废弃的医院遗址问起往事,站在宿舍门口对着东边的皇后区大桥拍照,等着Slack频道里的通知准点去Maker Day蹭饭。没有人总能一直在这艘游轮上,但总有人会在上面。

船在九点靠岸了,船上的bar也不再提供香槟和啤酒,最后一次站在了甲板上,感受着风从哈德逊河带来咸涩水汽,恍惚回到二十二岁初到罗斯福岛那夜:南方孩子第一次感受到晚上八点依然还亮着的天空,呆站在卧室的窗前看着皇后区大桥来来往往的车流,半夜因为睡不着凌晨两点在入户门口组装工学椅,一边想着自己什么时候可以在这里找到明年暑假的实习,一边又在担心明天能不能早起赶上新学期第一天的早课。虽然充斥着迷茫和挑战,但对这个新世界的探索欲掩盖了所有的不安和无助。

和大家一起打Uber回宿舍的时候,最后一次路过了罗斯福岛大桥,雪佛兰的前挡风玻璃借着路灯的反光浮现出两个重叠的时空,一个人坐在上岛的车里期盼着新学年的生活,一群人坐在回岛的车里讨论着来时的趣闻。当这辆UberXXL最终停在了和八个月前初到这里的相同位置,开门的瞬间忽然听见时间纤维崩裂的轻响:原来所有关于明天的忧虑,都会在某个靠岸时刻结晶成琥珀,里面封存着永远不会迟到的早课闹铃、凌晨三点依然亮灯的帝国大厦塔尖、早上六点半罗斯福岛上盛开的樱花、和注定会等来的一切。

现在或许还是不明白,记性太好是一种奖励还是惩罚。就像记住了和大家的第一次见面、夜晚的狼人杀、半夜的畅聊、每次吃饭的餐厅,就也同样会记住和大家的最后一次见面、离开时的告别、最后一张合影,和再凑不齐相同人的桌游局。在这其中也听过了很多的故事,有相聚、有离别、有欢乐、也有悲伤,但每一段旋律,都已深深镌刻在名为青春的乐谱上,不会因为曲终人散而失去它曾有的共鸣。

好好照顾自己,等下次再见面的时候,我还想听你们的故事。

这个学年在纽约的故事到这里就结束了,开着刚租的KIA行驶在101公路上,后备箱里是刚买的早餐和各种日用品,伴着熟悉的背景音乐,追着夕阳朝家的方向开去,湾区的故事才刚刚开始。
01
鼠标为什么不是猫标
8月前
最近很幸福,实习上岸了,也和好朋友们去旅行了,在幸福的时候很少更新动态🥹🥹暑假硅谷见,欢迎在硅谷的朋友约饭
20
鼠标为什么不是猫标
9月前
一周来了三面试 希望能过一个吧🥹🥹🥹🥹
00
鼠标为什么不是猫标
10月前
坏了 感觉最近有点bornout了
00
鼠标为什么不是猫标
10月前
正在开发一个完全开源&AI辅助的Terminal。我对于命令行工具并不是特别资深的使用,所以不是很在意他们的性能,反而AI功能和UI设计对我来说更重要。但是之前用了Term2、Termius,感觉UI太古老了,和MacOS15的风格完全不在一个世纪,感觉还是30年前的UI设计,也试了一些自称现代化的Terminal工具,但是感觉UI依然太复古了,并且和现在移动端和操作系统我们已经熟悉的UI差别有点太大

虽然感觉资深程序员们已经习惯了那种复古的UI和功能,但是我学了这么久的计算机还是完全没法习惯界面,对我来说颜值绝对是第一生产力,所以决定手搓一个。用过最现代最符合我心仪的当然是Warp,但是不能用自己的API或者本地的Ollama作为大语言模型实在是不太友好,并且价格也有点贵。现在Deepseek或者本地部署的模型完全有能力作为Terminal内置的模型进行轻度使用了,并且花费也可以下降好几个数量级,并且也不用考虑速率限制。

技术栈选择了Rust+React,用比较新的Tauri框架,不知道什么时候可以发布,大家也可以留言一下想要的功能,这个Terminal我的主要方向是:
0.UI和颜值一定是第一生产力
1. 计算机小白,不用忍受自带Terminal 20年前的UI风格
2. 可以自己带API或者Ollama 作为Terminal的自动补全和AI助手
3. 性能不追求极致,能用就行
11
鼠标为什么不是猫标
10月前
虽然还在找工作刷算法题…但是今天确实找到了新娱乐活动,觉不亚于当时折腾root/exposed。就是给电脑装各种大模型折腾工作流和工具,和stable difusion,64+2t的Mac确实好使,完全不担心内存和显存的问题,14b和32b的模型速度还行的,感觉大模型的话体验来说应该和游戏笔记本差不多了
10