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…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...
高防服务器价格高原因分析
高防服务器的价格较高,主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因: 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器,因此…...
