前言
商业化的大语言模型(LLM,Large Language Model)的运行需要消耗大量的 GPU 算力和能源, 对于个人或者中小企业而言,其投入成本是巨大的,并且就目前的 AI 适用场景来看, 巨量的投入并不能产生相应的回报,因此,对于数据保密性要求不高的企业来说, 直接使用商业化的服务和方案是最佳选择。
不过,借助于 Ollama 我们还是可以在本地 CPU 上运行开源大模型, 以亲身体验当下前沿 AI 技术的能力。
《Elm 开发实践》系列文章为 Elm 工程实践经验分享, 主要目的是针对各类业务场景提供基于 Elm 的可行性方案, 以此让更多人能够认识到 Elm 的优势以及其适用场景, 为前端开发提供不同的问题解决思路。
个人认为,Elm 是一种更为优秀和彻底的前端解决方案,在逐渐跨过其使用门槛后,便会对其爱不释手。 其 强类型系统、 模式匹配、 模型/视图更新机制 以及 函数式编程 让应用开发过程更加流畅、思路更加清晰、代码结构也更加简洁明了, 而且,由于数据不可变特性,其还支持 Time Travel 并自带 调试器, 在开发过程中只需要通过其调试器观察和分析数据的变化情况便可以快速定位逻辑错误的位置, 而不需要在一堆混乱的代码中理出头绪(数据可以在任意位置被更新所造成的麻烦真心让人痛苦不堪)。
我甚至开始希望,能够参考 Elm 的设计模式从底层开始重新设计 GUI 的开发语言(展示层与交互层应使用同一套开发语言,以降低各层之间的转换消耗和开发人员的心智负担), 而不是简单地对 JavaScript 进行缝缝补补,也不要照搬面向对象等设计模式的思想去设计新的 GUI 语言, 对于现有的 JS 生态,也仅需提供与其的 互操作 支持, 而不需要提供对其的兼容性支持。
不过,从当下实用的角度出发, 我们也没有必要教条地按照理想的 Elm 模式(比如,消除 CSS、组件无状态等)进行开发, 完全可以在不破坏 Elm 核心原则(模型/视图单向更新、数据不可变、强类型系统、函数式编程等)的前提下, 结合 JS 的优势实现自己的开发需求。
Elm 为函数化编程语言,所以,通过 Elm 开发的组件也只能是一个个函数, 而函数是无状态的,无法编写和使用有状态的组件, 若组件内部有自己的状态数据,则必须将其状态挂载到业务模型上,与业务状态一起维护。 但该方式也面临以下问题:
有状态组件在 Elm 中难以实现和维护,导致其复用度极低,严重影响 Elm 的应用范围, 这也是很多开发人员不愿使用 Elm,以及 Elm 生态难以发展的原因之一。
不过,通过 Web Components 机制,便可以彻底解决有状态组件无法在 Elm 中复用的问题, 也不会破坏 Elm 的使用原则,并且这也是 Elm 推荐的一种与 JS 生态互操作的方式 - Custom Elements。
《Elm 开发实践》系列文章为 Elm 工程实践经验分享, 主要目的是针对各类业务场景提供基于 Elm 的可行性方案, 以此让更多人能够认识到 Elm 的优势以及其适用场景, 为前端开发提供不同的问题解决思路。
个人认为,Elm 是一种更为优秀和彻底的前端解决方案,在逐渐跨过其使用门槛后,便会对其爱不释手。 其 强类型系统、 模式匹配、 模型/视图更新机制 以及 函数式编程 让应用开发过程更加流畅、思路更加清晰、代码结构也更加简洁明了, 而且,由于数据不可变特性,其还支持 Time Travel 并自带 调试器, 在开发过程中只需要通过其调试器观察和分析数据的变化情况便可以快速定位逻辑错误的位置, 而不需要在一堆混乱的代码中理出头绪(数据可以在任意位置被更新所造成的麻烦真心让人痛苦不堪)。
我甚至开始希望,能够参考 Elm 的设计模式从底层开始重新设计 GUI 的开发语言(展示层与交互层应使用同一套开发语言,以降低各层之间的转换消耗和开发人员的心智负担), 而不是简单地对 JavaScript 进行缝缝补补,也不要照搬面向对象等设计模式的思想去设计新的 GUI 语言, 对于现有的 JS 生态,也仅需提供与其的 互操作 支持, 而不需要提供对其的兼容性支持。
不过,从当下实用的角度出发, 我们也没有必要教条地按照理想的 Elm 模式(比如,消除 CSS、组件无状态等)进行开发, 完全可以在不破坏 Elm 核心原则(模型/视图单向更新、数据不可变、强类型系统、函数式编程等)的前提下, 结合 JS 的优势实现自己的开发需求。
Tailwind CSS 将所有 CSS 属性全部封装成了语义化的类,支持响应式设计、暗黑模式, 可定制化程度高,可维护性强,还默认提供一套专业的 UI 属性值(文字、尺寸、边距、颜色等)。 其极大地简化了前端的开发工作,即使没有专业的 UI 设计知识, 也可以快速地开发出现代化的应用页面,实为我等 UI 设计能力薄弱的开发人员的福音。
Elm 开发侧重的是业务逻辑,并不提供专业的 UI 库,要想写出一套美观的页面, 需要像写 HTML 一样编写内联样式(或自定义 CSS)。 而将 Tailwind CSS 与 Elm 进行集成,不仅可以充分利用 Elm 的开发优势, 还可以彻底摆脱页面不美观、无法自适应移动设备等 UI 设计问题, 让一个后端 Boy 也能对前端开发游刃有余。
虽然,像 Elm UI 之类的 Elm 库致力于消除对 CSS 的使用,但其并不能提供一套现成的、专业的、现代化的 UI 库, 而自行从头设计一套 UI,不仅费时费力,还很难达到当下的审美设计要求。 故而,将 Tailwind CSS 与 Elm 集成使用,才是一个后端 Boy 更为务实的选择。
《Elm 开发实践》系列文章为 Elm 工程实践经验分享, 主要目的是针对各类业务场景提供基于 Elm 的可行性方案, 以此让更多人能够认识到 Elm 的优势以及其适用场景, 为前端开发提供不同的问题解决思路。
个人认为,Elm 是一种更为优秀和彻底的前端解决方案,在逐渐跨过其使用门槛后,便会对其爱不释手。 其 强类型系统、 模式匹配、 模型/视图更新机制 以及 函数式编程 让应用开发过程更加流畅、思路更加清晰、代码结构也更加简洁明了, 而且,由于数据不可变特性,其还支持 Time Travel 并自带 调试器, 在开发过程中只需要通过其调试器观察和分析数据的变化情况便可以快速定位逻辑错误的位置, 而不需要在一堆混乱的代码中理出头绪(数据可以在任意位置被更新所造成的麻烦真心让人痛苦不堪)。
我甚至开始希望,能够参考 Elm 的设计模式从底层开始重新设计 GUI 的开发语言(展示层与交互层应使用同一套开发语言,以降低各层之间的转换消耗和开发人员的心智负担), 而不是简单地对 JavaScript 进行缝缝补补,也不要照搬面向对象等设计模式的思想去设计新的 GUI 语言, 对于现有的 JS 生态,也仅需提供与其的 互操作 支持, 而不需要提供对其的兼容性支持。
不过,从当下实用的角度出发, 我们也没有必要教条地按照理想的 Elm 模式(比如,消除 CSS、组件无状态等)进行开发, 完全可以在不破坏 Elm 核心原则(模型/视图单向更新、数据不可变、强类型系统、函数式编程等)的前提下, 结合 JS 的优势实现自己的开发需求。
单页面应用首次加载资源的过程可能会比较耗时,进入应用会出现较长时间的空白, 为了提升用户的感知体验,往往需要添加开屏动画,让等待变得不再那么漫长。
本方案主要解决开屏动画的以下问题:
本译文采用与原文相同的许可协议进行授权和传播。
本译文不会对原文做任何除格式调整和拼写错误以外的调整和修改,以确保原文内容的完整性,保证原文所要阐述的事实和思想不被曲解。
Some time ago, I've come across a contemplation on the topic of necessity of operating systems. I've been doing sort of "research" about this for almost two years, so I've decided to write up central thoughts along with links to some relevant sources of information on this topic.
正在翻译中 ...
This blog contains a wall of text.
I would like to declare that I am talking about myself. When I write that something is "necessary", "possible", or "viable", what I mean is that it's "necessary for me", "possible for me", or "viable for me".
正在翻译中 ...
本译文采用与原文相同的许可协议进行授权和传播。
本译文不会对原文做任何除格式调整和拼写错误以外的调整和修改,以确保原文内容的完整性,保证原文所要阐述的事实和思想不被曲解。
We often hear that Apple's ecosystem of apps (or Microsoft's, or Google's) are "walled gardens". But what about the individual applications themselves?
正在翻译中 ...
In fact, individual programs are even more harmful walled gardens - a stifling barrier to true expressiveness, productivity, freedom and consistency of computing experience.
正在翻译中 ...
本译文采用与原文相同的许可协议进行授权和传播。
本译文不会对原文做任何除格式调整和拼写错误以外的调整和修改,以确保原文内容的完整性,保证原文所要阐述的事实和思想不被曲解。
I love text layout, and have been working with it in one form or other for over 35 years. Yet, knowledge about it is quite arcane. I don’t believe there is a single place where it’s all properly written down. I have some explanation for that: while basic text layout is very important for UI, games, and other contexts, a lot of the “professional” needs around text layout are embedded in much more complicated systems such as Microsoft Word or a modern Web browser.
我喜欢文本布局,并且已经以不同形式和它打了 35 年交道。 然而,有关它的知识还是相当晦涩。 我不认为在某一个地方就能够详尽地阐述它,因为: 虽然基本的文本布局对 UI、游戏和其他语境非常重要, 但在如微软 Word 和现代 Web 浏览器这些更复杂的系统中, 掌握文本布局是有许多「专业性」要求的。
A complete account of text layout would be at least a small book. Since there’s no way I can write that now, this blog post is a small step towards that – in particular, an attempt to describe the “big picture” using the conceptual framework of a “loose hierarchy”. Essentially, a text layout engine breaks the input into finer and finer grains, then reassembles the results into a text layout object suitable for drawing, measurement, and hit testing.
要完整地讲清楚文本布局,至少得写满一小本书。 由于现在我也没办法写这本书,这篇博客文章就算是迈出的一小步, 特别是,以「松散的层级结构」这一概念框架来描述「大图景」的一种尝试。 本质上,文本布局引擎是将输入拆分成很细很细的小块, 再重新组装为一个适用于塑形、测量和命中测试的文本布局对象。
译注:有关「命中测试」的概念, 请参考 Hit-Testing in iOS (原文地址https://smnh.me/hit-testing-in-ios)。
The main hierarchy is concerned with laying out the entire paragraph as a single line of text. Line breaking is also important, but has a separate, parallel hierarchy.
主要层级结构关注的是将整个段落布局为一行文本。 换行也同样重要,但具有独立的、平行的层级结构。
- DanBot 的设计仍在逐步改进与完善中,本文将随时发生变化,感兴趣的朋友们可以时刻保持关注;
- 在文末有本文编者的联系方式,有不同意见和建议的朋友可以与其保持联系;
DanBot
(也称为蛋Bot)是基于结构化语义分析的智能机器人大脑,
其通过对语义进行结构化分析以及对已有经验的整合,
实现对人类语言所要表达的事物和目的进行识别(结构分析)和理解(经验整合)。
随着经验的增加与知识的储备,有望让机器能够与人类进行正常交流,
并对人类发出的命令和意图作出正确的反应。
本译文采用与原文相同的许可协议进行授权和传播。
本译文不会对原文做任何除格式调整和拼写错误以外的调整和修改,以确保原文内容的完整性,保证原文所要阐述的事实和思想不被曲解。
These are the current theories and hypotheses (in a slightly more scientific meaning of the words) influencing the design and implementation of the 3L Project's development. They are just theories and hypotheses and are not set in stone. Most will probably change and be adjusted to match newly gained knowledge, viewpoints, and understandings. Note that many of these hypotheses are built on top of the core system and do not have to be followed or used. The system allows developing completely different systems based on completely different ideas. Hypotheses are generally not proven. Theories have been proven but solutions will likely change. There is no particular ordering to the listings.
这些是目前影响 3L 项目开发的设计和实现的理论和假设(一种稍微更科学的说法)。 它们只是理论和假设,并不是一成不变的。大多数可能会改变和调整,以适应新获得的知识、观点和理解。 请注意,许多假设都是建立在核心系统之上的,不必遵循或使用。 该系统允许基于完全不同的想法来开发完全不同的系统。 假设通常无法得到证明。理论已经被证明,但是解决方案可能会改变。这些清单并没有特别的顺序。
For questions, suggestions, and feedback send an email to the 3L Project hackers list.
如有疑问、建议和反馈,请发送电子邮件到 3L 项目的 Hackers List。
本译文采用与原文相同的许可协议进行授权和传播。
本译文不会对原文做任何除格式调整和拼写错误以外的调整和修改,以确保原文内容的完整性,保证原文所要阐述的事实和思想不被曲解。
Stagefright, heartbleed, GHOST, VENOM. What do these have in common? They are recent serious security vulnerabilities that could have easily been prevented.
Stagefright、 Heartbleed、 GHOST、 VENOM,这些有何共同点? 它们是最近出现的严重的安全漏洞,这些本来都是可以很容易地加以预防的。
As more computers are connected to the internet and more personal information and money moves online security becomes ever more important. Vulnerabilities are going to become more and more costly. We must start investing in the future now before things get out of hand. As programmers, do we want to spend our time playing catch-up with the crackers or building new and better software? We must start using the tools we have and invest in new tools that enable us to continue building the things we want and the world needs and stop wasting time playing whack-a-mole.
随着更多的计算机连入互联网,更多的个人信息和金钱转到线上,安全也就变得愈发重要。 漏洞会变得越来越昂贵。我们必须从现在开始对未来进行投资,以免事情失去控制。 作为程序员,我们是想将时间花在与黑客玩猫捉老鼠上,还是去构建新的更好的软件呢? 我们必须开始使用我们已有的工具,并投身于新的工具,以使我们能够持续构建我们想要的以及世界所需要的东西, 不要浪费时间在玩打地鼠上面了。