信使是一个简洁的 IM。核心目标:完成单机 10W + 的可用项目 (目前实现网页端和 electron 实现的 Win 端)。核心 Tio, 包括 http 和 socket 都是 tio. 没有引入 spring 系列,所以大部分的内容都需要自己封装,好处是启动快,体积小。弊端就是方方面面都需要自己考虑。从登录开始所有的交互全部使用 socket,除 minio 分片上传使用了 http 外,目前没有其他使用 http 的地方。 文件存储使用了 minio, 缓存使用 mangodb, 同时解决缓存和数据存储的问题(据说挺快的,没有做大量尝试)
爱的天地 发布的最新帖子
-
简洁的 IM courier-信使
-
基于React的中后台应用解决方案飞冰ICE
飞冰 (ICE) 是一套基于 React 的中后台应用解决方案,ICE 包含了一条从设计端到开发端的完整链路,帮助用户快速搭建属于自己的中后台应用。
面向设计者端,ICE 提供了 ICE Design 设计语言,来给 UI 界面提供专业的视觉指导。面向开发者端,ICE 提供了 Iceworks 工具,这是一个图形化界面的开发平台,它承载了 ICE 的物料体系和开发体验。在飞冰中,组件、区块、布局、模板等统称为物料,由飞冰团队维护,在内部有一套完整的开发规范和工具,目前也正在逐步对外开放中;基于此,你可以参与共建 ICE,也可以自建私有的物料体系。
-
用于WebVR的内容管理系统IdeaSpace
IdeaSpace 是一个用于虚拟现实网页的 CMS 内容管理系统。可以像管理博客一样管理你的虚拟现实空间和资源。IdeaSpace 使用 Mozilla 的 A-Frame 来实现主题和空间,提供强大的遵循 Web 标准的标识语言。可通过 Oculus Rift 或者 Google Cardboard 在浏览器上方便体验虚拟现实空间,无需安装插件和应用。
项目地址:
https://www.oschina.net/p/ideaspace
-
千亿参数预训练语言模型YaLM 100B
YaLM 100B 是一个类似 GPT 的神经网络,用于生成和处理文本。该模型利用了 1000 亿个参数,在 800 个 A100 显卡和 1.7 TB 在线文本、书籍以及海量其他英文和俄文资源的集群上训练该模型花了 65 天时间。在下载权重之前,请确保有 200GB 的可用磁盘空间。该模型(代码基于 microsoft/DeepSpeedExamples/Megatron-LM-v1.1.5-ZeRO3)应该在具有张量并行性的多个 GPU 上运行。它在 4 个 (A100 80g) 和 8 个 (V100 32g) GPU 上进行了测试,能使用总计约 200GB 的 GPU 内存来正确划分权重维度(例如 16、64、128)的不同配置。
-
多功能透明显示屏桌面站HoloCubic
HoloCubic 是一个带网络功能的伪全息透明显示桌面站。项目的硬件方案基于 ESP32PICO-D4,这是一个很实用的 SiP 芯片,整板面积能做到一个硬币大小;软件方面主要是基于 lvgl-GUI 库,移植了 ST7789 1.3 寸 240x240 分辨率屏幕的显示驱动,同时将 MPU6050 作为输入设备,通过感应的方式模拟编码器键值。
-
Spring Cloud项目
分析下来,可以替换的组件包括网关(gateway 或者 Zuul,由Ingress gateway 或者 egress 替换),熔断器(hystrix,由SideCar替换),注册中心(Eureka及Eureka client,由Polit,SideCar 替换),负责均衡(Ribbon,由SideCar 替换),链路跟踪及其客户端(Pinpoint 及 Pinpoint client,由 SideCar 及Mixer替换)。这是我们在 Spring Cloud 解析中需要完成的目标:即确定需要删除或者替换的支撑模块。
可以说,springcloud关注的功能是kubernetes的一个子集。
可以看出,两边的解决方案都是比较完整的。kubernetes这边,在Istio还没出来以前,其实只能提供最基础的服务注册、服务发现能力(service只是一个4层的转发代理),istio出来以后,具有了相对完整的微服务能力。而spring cloud这边,除了发布、调度、自愈这些运维平台的功能,其他的功能也支持的比较全面。相对而言,云厂商会更喜欢kubernetes的方案,原因就是三个字:非侵入。
平台能力与应用层的解耦,使得云厂商可以非常方便的升级、维护基础设施而不需要去关心应用的情况,这也是我比较看好service mesh这类技术前景的原因。 -
音乐创作编程语言Alda
Alda 是用于音乐创作的基于文本的编程语言,它可以通过在编辑框里输入代码来谱写不同种类的曲子,并且能把这些曲子编译成音乐。使用者通过 Alda 只需文本编辑器和命令行即可编写和播放音乐。Alda 语法简单,初学者很容易就能上手,实际上,Alda 就是为那些没有什么编程经验的人而写的。Alda 的 slogan —— 音乐家使用的编程语言,就说明了这一切。Alda易于理解、类似标记语言的语法,专门面向不知道如何编程的音乐家以及不知道如何作曲的程序员而设计,乐谱是可以使用 alda 命令行工具播放的文本文件,交互式 REPL 可让使用者输入 Alda 代码并实时收听结果,支持以编程方式编写音乐(算法作曲、在线编程等),支持使用 General MIDI Sound Set 中的任何乐器创作 MIDI 音乐。
-
实现将同步变成异步
任何软件问题都可以通过添加一层中间层来解决,如果不能,那就再加一层,同样的针对以上问题我们也可以添加一个中间层来解决,比如添加个队列,把用户注册这个事件放到队列中,让其他模块去这个队列里取这个事件然后再做相应的操作。
可以看到,这是个典型的生产者-消费者模型,用户注册后只要把注册事件丢给这个队列就可以立即返回,实现了将同步变了异步,其他服务只要从这个队列中拉取事件消费即可进行后续的操作,同时也实现了注册用户逻辑与其他服务的解耦。另外即使流量暴增也没有影响,因为注册用户将事件发给队列后马上返回了,这一发消息可能只要 5 ms,也就是说总耗时是 50ms+5ms = 55 ms,而原来的总耗时是 200 ms,系统的吞吐量和响应速度提升了近 4 倍,大大提升了系统的负责能力,这一步也就是我们常说的削峰,将暴增的流量放入队列中以实现平稳过渡,加了一层队列就达到了异步,解藕,削峰的目的。
由于队列在生产者所在服务内存,其他消费者不得不从生产者中取,也就意味着生产者与消息者紧藕合,这显然不合理。
消息丢失:现在是把消息存储在队列中,而队列是在内存中的,那如果机器宕机,队列中的消息不就丢失了吗,显然不可接受。
单个队列中的消息只能被一个服务消费,也就是说如果某个服务从队列中取消息消费后,其他服务就取不了这个消息了,有一个办法倒是可以,为每一个服务准备一个队列,这样发送消息的时候只发送给一个队列,再通过这个队列把完整消息复制给其他队列即可。
-
可扩展的Web浏览器Next
Next 是一个面向键盘的、可扩展的 Web 浏览器,专为高级用户设计。该应用程序具有键绑定(Emacs,VI),在 Lisp 中是完全可配置和可扩展的,并且对生产专业人员具有强大的功能。特性:选项卡的快速切换;快速导航;历史记录用树结构表示。
项目地址:
https://www.oschina.net/p/next -
实现手机模拟激光笔
随着科技的越来越进步,你是否注意到了,这些年我们越来越少在演讲中看到演讲人用激光笔给观众指示所讲的内容。先说激光笔,激光笔的工作原理是射出一束激光,照射到幕布上并反射到观众的眼睛里,于是大家可以看到一个很亮的红色光点。但现在因为大尺寸屏幕越来越便宜,我们越来越少使用幕布这种传统投影显示设备了,毕竟屏幕的显示效果相比幕布而言要更好。而屏幕为了保证良好的显示效果,往往都会在表面的玻璃上使用大量抗反射技术。这些抗反射技术的运用大大减弱了激光的反射,所以最终用户看到的红色光点就不那么显眼了,激光笔如果使用在这里效果就会大打折扣。
那么有没有可能用大家出门唯一愿意携带的手机来替代激光笔呢?3D 模拟方案:简单来说就是用手机内置的姿态传感器和加速度传感器来构建出手机和显示屏在三维空间中的方位和姿态,再以此模拟计算如果从手机发出一束激光,会照射到屏幕上的哪个位置,并在屏幕上的相应位置绘制一个红点,这样来实现手机模拟激光笔的效果。
如上图所示,假设一块屏幕的两条邻边分别平行与 X 轴和 Z 轴。当手机从 A 点沿着屏幕的一条边移动到 B 点,再从 B 点沿着屏幕的另一条边移动到 C 点,我们就可以计算出屏幕在以 A 点为原点的三维空间中的具体位置。能够通过把手机从 A 点移动到 B 点和 C 点来计算出屏幕的位置,自然也可以在接下来计算出任意时刻手机相对屏幕的空间位置和姿态方向,并模拟计算从手机射出一束激光会照射到屏幕的哪个位置。
可是,实验过后我发现这个方案虽然在理论上是可行的,但因为累积误差的存在,实际并不可行。
我们拿手机从 A 点移动到 B 点这个最基础的场景来举例。当一个人拿着手机从 A 移动到 B 的时候,手机的加速度、速度和移动距离可以用下面三幅图来描述。
横轴 t 表示时间,纵轴 a、v、d 分别表示手机在 x 方向的加速度、速度和移动距离。
第一幅图中,加速度前半程是正的,后半程是负的,所以手机在 x 方向上先加速后减速,速度从 0 增长到最大,后又慢慢减为 0,而移动距离一开始因为速度比较慢,所以增长慢,中间速度达到最大值,移动距离也增长得最快,最后速度归 0,移动距离也不在增长。
可问题就出在加速度上。本来加速度正的部分的积分和负的部分的积分,也就是蓝色区域的面积和黄色区域的面积,是完全一致的,这样当运动过程结束时手机的速度就会恢复为 0,但实际情况并非如此。