2 分•作者: alephnerd•7 个月前
返回首页
最新
2 分•作者: gnarbarian•7 个月前
你们这里的人都太严肃了。造这些无聊的、毫无意义的东西才有趣,而且能学到很多东西。
1 分•作者: salkahfi•7 个月前
1 分•作者: ninju•7 个月前
1 分•作者: salkahfi•7 个月前
1 分•作者: Brajeshwar•7 个月前
1 分•作者: Brajeshwar•7 个月前
1 分•作者: ucollabn•7 个月前
1 分•作者: epistemovault•7 个月前
1 分•作者: Andisanjaya•7 个月前
OCBC 银行呼叫中心,请拨打 0851-6690-3793,24 小时客户服务中心。
24 分•作者: Garbage•7 个月前
3 分•作者: JawadR•7 个月前
类似于 Google Docs 的 Python 版本。
在过去的 4 个月里,我一直在开发一个我引以为豪的全栈项目,名为 PyTogether;这是一个为初学者设计的实时协作 Python IDE(可以把它想象成 Google Docs,但用于 Python)。它主要用于结对编程、辅导,或者只是一起学习 Python。它完全免费。没有订阅,没有广告,什么都没有。只需创建一个帐户,创建一个小组,然后开始一个项目。它具有适当的代码检查、用于笔记或教学的实时绘图、语音聊天、一个极其直观的 UI、自动保存和实时光标。目前没有任何限制(除了代码大小,以防止恶意负载)。
为什么要构建这个,而不是使用 Replit 或 VS Code Live Share?
因为我的目标是简单(和教育)。我希望为那些只想编写和分享简单的 Python 脚本(单独或与他人一起)的初学者提供一些轻量级的东西,无需下载、付费墙或额外的干扰。此外,它也没有内置 AI/copilot,这是许多老师和学习者实际上更喜欢的。而且它还是免费的,哈哈。
技术栈(前端):React + TailwindCSS,CodeMirror 用于代码检查,Y.js 用于实时同步和实时光标,Skulpt 用于在浏览器中执行 Python(为了安全——我最初想要 Docker 容器,但这会占用太多内存。Skulpt 的库有限,所以不幸的是,像 pygame 这样的导入将无法工作)。我不喜欢前端或 UI 设计,所以我依赖 AI 获得了一些设计帮助,但所有的逻辑/代码都是我自己的。通过 Vercel 部署。
技术栈(后端):Django(channels、auth、celery/redis 支持使其非常适合),PostgreSQL 通过 Supabase,JWT + OAuth 身份验证,Redis 用于 channel layers + 缓存,完全 Dockerized + 部署在 VPS 上(8GB RAM,每月 7 美元)。
数据模型:用户 <-> 组 -> 项目 -> 代码。用户可以加入许多组。组可以有多个项目。每个项目属于一个组,并有一个代码文件(为初学者保持简单,尽管我稍后可能会添加一个文件系统)。
在构建这个项目的过程中,我遇到了很多问题,尤其是在后端方面。我最大的问题是弄清楚如何创建一个可靠且智能的自动保存系统。我不能仅仅让它在每次用户按键时都保存,因为出于明显的原因,这会使数据库不堪重负,尤其是在大规模的情况下。所以我提出了一个解决方案,我对此感到非常自豪;我使用 Redis 缓存活动项目,然后使用 Celery 每分钟循环遍历这些活动项目,然后将代码持久化到数据库中。我通过跟踪每个项目的用户计数来实现这一点,每当有人加入或离开时,如果项目的用户计数降为 0,则将其从 Redis 中删除(也保存代码)。Redis 速度极快,因此在每次按键时保存代码根本不是问题。我本质上是用一块石头打了四只鸟,因为我重用了 Redis,我已经将其集成到我的 channel layers 中,用于跟踪活动项目,并缓存代码,这样当新用户进入项目时,它将从 Redis 获取代码,而不是访问数据库。我甚至可以使用 Redis 作为 Celery 的消息代理(没有使用 RabbitMQ,因为我想节省存储空间,而不是对一个全新的服务进行 Docker 化)。这在大规模的情况下也会非常有效,因为 Celery 会将大量代码的自动保存任务从后端卸载。当有人离开项目时,代码也会保存。我后来遇到的另一个问题是,如果人们试图发送大量文本,所以我将其限制为 1 MB(将对此进行调整)。
在 VPS 上部署是另一个难题。我花了大约 8 个小时来处理 Nginx、Certbot、Docker 和 GitHub Actions,以使一切启动并运行。这令人沮丧,但我学到了很多东西。
如果您有兴趣或想亲自查看这项工作,源代码在这里。欢迎贡献:<a href="https://github.com/SJRiz/pytogether" rel="nofollow">https://github.com/SJRiz/pytogether</a>。
我还在学习,所以任何反馈都会很棒(以及贡献)!
1 分•作者: rickcarlino•7 个月前
1 分•作者: todsacerdoti•7 个月前
1 分•作者: Timothee•7 个月前
4 分•作者: walterbell•7 个月前
1 分•作者: signa11•7 个月前
1 分•作者: ppaanngggg•7 个月前
1 分•作者: billyzs•7 个月前
1 分•作者: signa11•7 个月前