Blog | Phodal 全栈工程师

Blog

Latest articles

Lemonj:类 CSS 的自动化重构工具

最近,在帮助一家大型公司的大型前端项目设计和构建前端体系,期间和我同事 @Liuuy 讨论起了 CSS 的架构和设计问题。开发人员对于 CSS 及其 CSS 预处理器的使用是一个很有意思的问题 —— 过去,我一直在吐槽这些想写好 CSS 的人,却是一点儿也不想高认真学习 CSS。 于是,在我们的讨论之下,我借助了在编写 Coca 的经验,设计和验证了自动化重构的可能性。由我的同事完成了 TypeScript 的 CSS 自动化重构工具:Lemonj —— 名字是我取的 🍋🐔。 Lemonj GitHub:https://github.com/twfe/lemonj Lemonj 是一个面向 CSS/LESS/SCSS 的分析、坏味道检查和自动化重构工具。 从架构上来说,它就是通过...

Charj —— 代码的代码化语言

去年,和公司的大佬讨论了一系列关于代码的代码化,还记录了一些笔记。在那之后,我开始了各种尝试:如何将代码转变化代码。原先有一些思路,而后过了一年之后,慢慢地练习,又有了一些新的收获。 我们想要做的事情是:把任意的 A 语言转换为任意的 B 语言(PS:这里的任意 A 和任意 B 语言都是主流语言)。如此一来,我们便可以: 快速重写任何的系统。 与编程语言无关的领域建模。 产生一个更强大的 DSL。 创建新的语言。 引子 0:统一语言模型 统一语言模型,即对不同的比编程语言进行抽象,使用同一套数据结构描述编程语言。 在我使用了 Golang + Antlr 实现了 Coca 之后,我意识到这是一条可行的方案。但是,由于 Coca 的架构和用途所限,外加之 Antlr...

Rust + LLVM 调用 C/C++ 模块

在上一篇文章『LLVM + Rust JIT hello, world』中,我们介绍了如何使用 Rust + LLVM 编写一个 hello, world。而随着我们继续在这个领域的探索,我还想到了一个非常有意思的问题:如何使用 LLVM 调用三方模块。 最后代码见:https://github.com/phodal/rust-llvm-practises/tree/main/stdlib 从最后的结果来看,要实现这样的功能也相当的简单。只是呢,作为一个 LLVM 新手,我要学习的东西还有蛮多的。 Clang + LLVM 字节码 我们所要做的事情其实还是相对比较简单的:通过 Clang 来编译,并输出 LLVM IR。 Clang 是一个 C、C++、Objective-C 和...

Rust + LLVM + JIT hello, world 示例

最近在和我一同事一起,使用 Rust 来创造一门新的编程语言:Charj。而在实践方面,我们都是这方面的新手,所以不得不经历一番尝试。而作为其中的一部分,必然就是由一个 hello, world 开始的。由于在这个过程上,遇到一些小坑,所以我决定写篇文章记录一下。 最后代码见:https://github.com/phodal/rust-llvm-practises 简单介绍一下,一些工具: Rust 是由 Mozilla 主导开发的通用、编译型编程语言。设计准则为“安全、并发、实用”,支持函数式、并发式、过程式以及面向对象的编程风格。 LLVM 是一套编译器基础设施项目,为自由软件,以 C++ 写成,包含一系列模块化的编译器组件和工具链,用来开发编译器前端和后端。 Inkwell,一个非官方的...

开发者即服务:开发者的被按需即用

开发者即服务,是(Developer-as-a-Service)的简称,亦可称为 “按需即用的开发者”。即当开发者使用某一工具、库,遇到任何相关的问题,可以随时找开发者为我们提供服务。哪怕是使用者使用了我们的 A 框架,但是遇到 B 框架有问题,他/她们也会觉得 A 框架有问题 ——因为 A 框架的开发者们是一种服务,一种开箱即用的服务。 最近几年,我陆陆续续参与了一些公司的基础设施的开发和咨询。从组件框架、组件、平台到 IDE,各式各样的基础设施都有。作为一个参与者或者是负责人,我经历了一些辛酸的故事:要快速响应所有的问题、要提供贴身的技术支持……。所以,我决定写一篇文章来调侃一下使用者,并解释一下开发者的不易。 基础设施团队的挑战 每当有同事从我司离职时,我们通常的一个反应是,去的是技术为主的部门还是业务为主的部门。因为,从待遇上来说,技术部门和业务部门就是两个截然不同的存在。相同的月薪之下,业务部门可能会多个月的奖金,而技术部门这样的可能性极极极低。在这里我们简化一下这两个概念:...

咨询札记(壹)

去年,因为答应了花仲马要来杭州,我从深圳 rebase 到了上海。因为公司的组织变革,外加市场因素导致的职业发展受限,区域性的组织结构里,找不到一个合适的角色适合我 —— 市场对于岗位的定义越来越明确,使得我这种天性喜欢各式各样开发的人,出现了各种不适应性。在大部分的组织(TW 受限于组织的需求)里, 已经不再需要多样性的选手,只需要一颗真正的组织里。 外加,既然来了上海,就意味是出差,那么出差就变得不可避免了。于是乎,在胡老师的帮助下,我转到了咨询团队。 改变 在我短短几年的 TW 生涯里,我经历了多次的角色转换,经历了不同的地域,感觉了不同的文化氛围。 初始,我在西安,所在的团队是海外交付团队(即如今的袋鼠业务线),掌握了某种意义的好的敏捷实践。 期间,作为一个毕业生,我参加了位于印度的...

编程语言的被淘汰:选错语言毁终身

在我当前所在项目里,其中的某一个子系统是用 Groovy 中的 Gradle 插件。Groovy 作为一个运行在 JVM 上的脚本语言,天生具有胶水的特性。加之,它支持 DSL 与其程式的简洁语法。嗯,如果不考虑性能问题,这真的是不一个不错的语言。 可真的是如此吗? 开始之前,我再次 FBI warning 一下: 关于编程语言的讨论,并非能真实,都存在或多或少的个人偏爱因素。因此,文中的某些观点或许会有些偏颇。若是不正确又或者是出入较大,也希望大家能指正。 这里的场景主要是基于团队协作的场景之下讨论的,而非个人项目,又或者是小项目。也就是说,只有团队协作时,才会出现的问题,才会出现各种讨论。 说起这一点我也是有个人偏好,如业余开发选各种语言,而真正做项目的时候,选的语言便是...

谈系统重构的未来:重构工具 Coca 一周年

一年前,在公司大佬的指点之下,我开始写系统级重构工具 Coca (https://github.com/phodal/coca) 。哦,不,不对,是刚开始学习 Golang,因为我的第一次提交是从一个 Go 的 hello, world 写起的。 commit a685d69080a7abde684e1d0707cbf410092e3173 Author: Phodal HUANG <h@phodal.com> Date: Tue Oct 22 23:01:19 2019 +0800 first commit commit c6b5a0c7f174c6a0ba233a1356aca5c370ba4315 Author: Phodal HUANG <h@phodal.com>...

临时方案传染性

现有的项目里,一次功能变更可能带来了大量的缺陷。于是乎,我试着回溯项目的开发过程,寻找出导致问题的根因。现阶段,我只能想到时的只有实施技术战略性投资,也暂时也想不到更好的方法,以在开发初期解决问题。 我现在所在的项目是一个优化相关的项目,包含性能优化、架构优化等。这是一个差不多一年左右的技术型的软件项目。项目中存在着各种各样的技术挑战:文档的匮乏、缺乏经验丰富的开发者、缺乏领域专家、相关领域的专家无法提供技术支持……。总之,一系列的技术难点使得项目开发越来越困难。 尽管项目并非从无到有,但是仍旧相当多的开发工作需要大量预研。然而,由于 Deadline 的设定使得需求一个接一个的出现,而大量的开发工作又依赖于花时间的预研。因此,这个时候我们就会陷入了一个困境: 大量的功能架构在『临时性方案』之上,原有的临时方案进一步成为新的『临时性方案』的起点。因而,随着功能的进一步堆砌,即使修改少量的代码也会带来大量的问题。...

编程语言的 IDE 支持

或许是出自于对编写编程语言的兴趣,又或许是对于创建 IDE/编辑器的兴趣,对于『IDE/编辑器是如何提供编程语言的支持』,我充满了兴趣。其中的一个主要原因是,这是每天我们打交道最多的工具,另外一个原因可能是,咦,我们怎么没有国产的 IDE(手动狗头)。 编辑器 & IDE 先前,我已经在那篇《编辑器的自制》中介绍了,怎么去创建一个简单的文本编辑器?这是一个相对简单的问题。对于一个可用的代码编辑器来说,我们对它的基本诉求是:快速启动 + 语法高亮,然后能进行基本的文本编辑。不过呢,这是以我角度来看待问题的,我的想法里:一个编辑器,就干好一个编辑器应该做的事情。对于一些开发人员而言,他/她们会配置上强大的各种支持功能,以使它看上去像是一个 IDE。而后呢,它失去了快速启动的能力,或者失去了一部分的快速启动的速度,这便是有些遗憾的。...

Discover, share and read the best on the web

Subscribe to RSS Feeds, Blogs, Podcasts, Twitter searches, Facebook pages, even Email Newsletters! Get unfiltered news feeds or filter them to your liking.

Get Inoreader
Inoreader - Subscribe to RSS Feeds, Blogs, Podcasts, Twitter searches, Facebook pages, even Email Newsletters!