Photon AI Translator 和做产品的一些思考
近 4 个月内我一直在做 Apple 平台的产品,虽然从使用量来说「简体中文」用户是占多数,但我一直有做多语言的支持:英语、简体中文和繁体中文。习惯上 Google 翻译的我,基本上在使用 Xcode 过程中也会一直在浏览器开着 Google Translate 的网页,为的是能 ”随时“ 地去把简体中文翻译成繁体中文——当然这个 ”随时“ 可真不是随时,毕竟从 Xcode 切换到 Chrome 再到对应的 Tab 还是需要点功夫。
是的,我知道浏览器划词翻译已经有众多的插件来支持——但是我日常开发工作的主战场,并不是在浏览器。作为使用 MacBook Pro 单屏幕开发的人来说,切换一个窗口都是麻烦的事情。
有没有能帮我加速这个工作流的工具呢?
如果没有,或者找不好,那就很简单:自己做一个。
以上只是需求背景,契机是:Open AI 开放 API 了,我们可以使用同样驱动 ChatGPT 的 GPT-3.5 模型,来接入 AI 到我们自己的工作流了。在社交网络到处充斥着关于 ChatGPT 的消息的时候,你很难不去对它的作用产生思考:
- 利用 OpenAI API 能实现什么产品?解决什么痛点?
- 如何在现有产品上接入 OpenAI API,产生更高的价值?
第二点我在开始做一些尝试,但关于第一点,我用它来解决上述背景的需求:我做了一个 Mac 上的 Menu Bar 的翻译 app,并已经在 App Store 上线了。
Photon AI Translator

App Store 上的 Photon AI Translator
虽然也是「众多翻译 app」之中的一员,但它依然有自己的一些特色:
- 纯 Menu Bar 的 Mac app,在你点击 Menu Bar 上的图标之前,它是不会有窗口的,也不会占用你的 Dock 栏的位置。Menu Bar 在 macOS 里始终位于顶部,抛开因为挖孔导致的 Overflow 问题没有被解决外,它是你能随手可达的地方——当然,Overflow 问题,我个人推荐使用 Bartender 4 进行隐藏和整理。
- 支持翻译、词典、语法检查和提炼信息四种模式,你可以通过 ⌘ + 1-4 来快速切换到对应的模式
- 翻译模式为直接翻译模式,你可以选择对应的目标语言进行翻译。翻译模式特别新增「App 多语言」模式,对于 Apple 平台或者 Android 开发者来说,你可以复制粘贴你的 localization.strings 或者 strings.xml 内容,会以字典的模式进行翻译——也就是,你不用担心你的 key 会被翻译成对应的语言。
- 词典目前在英文语境下使用最佳,能给出一个单词的具体词典定义,如果它能用作名词、副词等,都会一并给出。
- 语法检查仅支持英文,用于检查并返回修复的语法。
- 提炼信息可以帮助你从一段文本里提炼总结,并以特定的目标语言输出。

当然,这一切都是 OpenAI 驱动,只不过 Prompts 是我自己调的。因此你需要一个自己的 API Key 才能访问——相信我,即便你不用此 app,学会使用 ChatGPT 以及注册好 OpenAI Platform,都会对你今后的工作效率有帮助。
目前仅支持 macOS 13 Ventura,你可以在 App Store 搜索并免费下载使用。
PhotonOpenAIKit 帮你的 app 快速接入 OpenAI
虽然 OpenAI 平台的 API 本身就可以直接通过 HTTP 请求来使用,但官方还是封装了 Python 的库以及一些提供了一些第三方库的 GitHub 参考。但可惜的是 Swift 版本的库目前还不支持 SSE 模式——你看官方 ChatGPT 的字是逐字出来的,是依靠这个模式来实现的:于是乎我又造了一个轮子,叫 PhotonOpenAIKit,来帮助你快速接入 OpenAI。
https://github.com/JuniperPhoton/PhotonOpenAIKit
此库目前仅支持 ChatCompletion,但配合上 GPT-3.5 模型,能满足很大部分的需求了。
更多详情和使用方式,请参考以上 GitHub 库的链接和 README。
做产品背后的一些思考
尽管这看起来像是一个关于 AI 和 ChatGPT 的「跟风」行为——坦白说确实有一方面的考虑在里面,如果现在你不接触多点这块的知识和消息,那么跟真正的互联网可能会慢慢产生信息差,这是从业人员害怕的一个事情。
但对于做的此 app 以及之前做的效率类 app MyerList 和 MyerTidy,我更多考虑的是:
用自己的技术和设计能力,做出最符合自己需求以及审美的工具。如果这同时也能解决潜在的一部分用户需求,那么就太好了,做多点用户体验上的包装以及优化,也希望他们用得舒服。
ChatGPT 以及 LLM 大型语言模型很厉害,它不是一蹴而就的产品,底层技术不是我们一般人或者开发者能学习得来。或许「调 API」是一个看上去没什么技术含量的工作,但「调 API 并用户(我们)带来实际的效率的提升」,也可能正是 OpenAI 平台开放 API 的一个初衷——但更何况,调 API 这事情本身也不是没有技术含量的工作,这里面太多细节和环节,都要做好,还是很花功夫的。
后记
在离职半年多后,我现在很难定义我是不是一个「独立开发者」——因为做的产品,并没有给我带来多少能让我生存的收入,更多的还是在用上班的钱,来体验不一样的「工作」。
之前在 Netflix 看到一部纪录片 Street Food: Asia,里面介绍了很多上了年纪还在做街边小吃的人,对他们来说——他们喜欢这个「工作」,这是一件能做到老的事情。在很多场合下,提起「上班」很多人都会头疼,但我从中感受到,上班跟工作不是一个事情的,根据使用 Photon AI Translator 词典功能,Work 的定义是:
Work (noun): activity involving mental or physical effort done in order to achieve a purpose or result.
只要你为自己的工作设定一个目标,只要完成了就应该是一件值得你高兴的事情,哪怕这个目标并不是通俗意义上的「挣钱」(虽然这是大多数人需要工作的目标)。
相关文章:
Photon AI Translator 和做产品的一些思考
近 4 个月内我一直在做 Apple 平台的产品,虽然从使用量来说「简体中文」用户是占多数,但我一直有做多语言的支持:英语、简体中文和繁体中文。习惯上 Google 翻译的我,基本上在使用 Xcode 过程中也会一直在浏览器开着 Google Trans…...
IPTV系统架构的分析与研究
1 引言 IPTV业务是伴随着宽带互联网的飞速发展而兴起的一项新兴的互联网增值业务,它利用宽带互联网的基础设施,以家用电视机和电脑作为主要终端 ,利用网络机顶盒(STB,Set -TopBox) ,通过互联网协议来传送电视信号.提供包括 电视节 目在 内…...
workerman开发者必须知道的几个问题
1、windows环境限制 windows系统下workerman单个进程仅支持200个连接。 windows系统下无法使用count参数设置多进程。 windows系统下无法使用status、stop、reload、restart等命令。 windows系统下无法守护进程,cmd窗口关掉后服务即停止。 windows系统下无法在一个…...
golang Gin实现websocket
golang使用 Gin实现 websocket,这里笔者重新搭建一个项目 1、创建项目安装依赖 项目名为 go-gin-websocket 在指定文件夹下,新建项目文件夹 go-gin-websocket 进入项目文件夹,打开cmd窗口,在项目(go-gin-websocket&a…...
冯·诺依曼体系结构与初始操作系统
目录 冯诺依曼体系结构 冯诺依曼体系结构图 内存 外存 网卡和磁盘 结构之间运算速度的差异 缓冲区 初始操作系统 概念 操作系统上边与下边分别有什么 从上到下依次顺序解析 用户 用户操作接口 系统调用接口 操作系统四项管理 驱动 硬件 冯诺依曼体系结构 冯诺…...
软件测试之黑盒测试的具体方法详解
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一.基于需求的设计方法二.等价类三.边界值四.判定表4.1 **关系**4.2 如何设计测试用例4.3 实际案例第一步第二步第三步第四步 五.正交排列5.1 什么是正交表5.2 …...
图形编辑器:历史记录设计
大家好,我是前端西瓜哥。今天讲一下图形编辑器如何实现历史记录,做到撤销重做。 其实就是版本号的更替。每个版本保存一个状态。 数据结构 要记录图形编辑器的历史记录,支持撤销重做功能,需要两个栈:撤销࿰…...
ubuntu22.04下挂载第二块硬盘
文章目录 一、查看硬盘情况二、找到nvme1n1三、挂载四、修改分区文件 一、查看硬盘情况 首先要查看一下系统识别出来的设备。也就是说,我希望知道,ubuntu到底发现了几块硬盘。用命令:lsblk 显示结果如下: 有两块硬盘:…...
举例说明.net中in与out的作用与区别
-----作用 在 .NET 中,in 和 out 是用于泛型类型参数的修饰符,它们用于指定参数类型的协变性和逆变性。 - in 修饰符:表示这个泛型类型参数是协变的。也就是说,in 类型参数可以从较特殊的类型隐式转换为较通用的类型。例如&…...
Java常见的100道面试题(内附答案及代码示例)持续更新
什么是Java程序? Java程序是一组可执行的代码,由Java编译器编译生成,可以在Java虚拟机(JVM)上运行。 public class HelloWorld {public static void main(String[] args) {System.out.println("Hello, World!&qu…...
策略设计模式知多少
目录 目标 概述 实现 目标 熟悉策略设计模式,了解策略设计模式的使用场景、具体实现。 概述 一、行为设计模式 行为设计模式是设计模式的一种类型。该类型的设计模式关注的重点在于对象的行为(通信和交互),而非对象的创建方…...
第三十九章 配置镜像 - 配置 ISCAgent - 在 UNIX Linux 和 macOS 系统上为非根实例启动 ISCAgent
文章目录 第三十九章 配置镜像 - 配置 ISCAgent - 在 UNIX Linux 和 macOS 系统上为非根实例启动 ISCAgent在 UNIX/Linux 和 macOS 系统上为非根实例启动 ISCAgent在 Microsoft Windows 系统上启动 ISCAgent 自定义 ISCAgent 第三十九章 配置镜像 - 配置 ISCAgent - 在 UNIX Li…...
嵌入式安卓开发:使用Camera2获取相机
文章目录 Camera2介绍Camera2的主要API类介绍CameraManager通过CameraManage获取Cameracharacteristics通过CameraManage获取CameraDevice从CameraDevice获取CameraCaptureSession预览效果 参考 Camera2介绍 从Android 5.0开始,Google 引入了一套全新的相机框架 Ca…...
阿里云g8i服务器Intel Xeon(Sapphire Rapids) Platinum 8475B
阿里云服务器ECS通用型实例规格族g8i采用2.7 GHz主频的Intel Xeon(Sapphire Rapids) Platinum 8475B处理器,3.2 GHz睿频,g8i实例采用阿里云全新CIPU架构,可提供稳定的算力输出、更强劲的I/O引擎以及芯片级的安全加固。阿里云百科分享阿里云服…...
设计模式——组件协作模式之观察者模式
文章目录 前言一、“组件协作” 模式二、Observer 观察者模式1、动机2、模式定义3、伪代码示例①、第一种方案,最朴素的方式②、第二种方案,重构使得遵循DIP原则:③、进一步的小优化:④、修改使得支持多个观察者: 4、结…...
观察者设计模式知多少
目录 目标 概述 实现 推设计模式 拉设计模式 被动观察者设计模式 目标 熟悉观察者设计模式,了解观察者设计模式的使用场景、具体实现(包括:推设计模式、拉设计模式、被动观察者设计模式)。 概述 一、行为设计模式 行为设…...
Flink之TaskManager内存解析
一、CK失败 Flink任务的checkpoint操作失败大致分为两种情况,ck decline和ck expire: (1)ck decline 发生ck decline情况时,我们可以通过查看JobManager.log或TaskManager.log查明具体原因。其中有一种特殊情况为ck cancel&…...
为何越来越多人不喜欢“试用期六个月”的公司?网友:感觉不靠谱
众所周知,任何一份工作都有试用期,一般是三月左右。但如果你遇到试用期达到半年的公司,你会不会进入? 近日,就有人遇到了此类公司,并对是否要进入该公司犹豫不决。他在论坛上发帖求助:大家是怎…...
单例模式的四种创建方式
前言 单例模式是日常开发中最常见的一种设计模式,常用来做为池对象,或者计数器之类的需要保证全局唯一的场景。 单例模式的目的是保证在整个程序中只存在一个对象实例,使用单例一个前提条件就是构造器私有化,不允许通过new 对象…...
Nginx+Keepalived 中的脑裂现象
如何解决和预防 NginxKeepalived 中会出现的脑裂现象? Nginx是一种高性能的Web服务器和反向代理服务器,可以处理大量并发请求。Keepalived是一种开源软件,用于实现IP负载均衡和故障转移。在Nginx和Keepalived结合使用时,可以通过将多个Ngin…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
