收起
简介:Awesome-commandline 上大学初学计算机的时候,我们觉得自己只能写出来黑乎乎的命令行,不太酷。一直想做出漂亮的软件,或者优美的网页。然而写程序多年,才发现最喜欢的还是命令行,在命令行中能事半功倍的完成任务,能轻松的结合命令行完成不同的工作。是什么让命令行如此高效,如何利用好命令行?如果你是 ipython 粉,是否想知道如何只通过几行代码,就可以写出具有 ipython 体验的工具? 本期线上分享 iredis 开发的几位同学和大家分享下开发命令行的经验和难点,以及命令行的乐趣。 分享者介绍 赖信涛:iredis 的开发者,dbcli 成员,pgcli core team Wooden-robot:iredis 开发者,splinter 开发者,click 中文文档翻译者 rhchen:iredis 开发者 Timeline 13:30-14:00 开场介绍 分享形式 分享顺序和主题 提问环节 主要分享 14:00- 14:45 赖信涛: awesome commandline 1. 为什么命令行更加高效(演示demo,vim+tmux+shell命令可以互相配合) a. 实例1:如何删掉不用的 git branch,而不用多加思考; b. 实例2:如何在命令行处理 json; c. 示例3:fpp 配合其他工具的例子; d. 示例4:(为何不用GUI 的 vim):vim + tmux 的配合,vim 使用shell操作 buffer,shell 使用 CtrlXE 编辑在 Vim 中编辑命令,Vim 打开新的 Tmux pane 操作等; e. 为什么不用GUI呢? i. GUI无法和其他的工具交互(复制粘贴?); ii. 鼠标操作很慢; iii. 占用资源。命令行可以一件工作做一键自己的事情,GUI每个都需要去处理绘图等资源,比较浪费。另外现在很多GUI都是用 Electron 的,也比较费资源; iv. 如果遇到问题,难以参与开发(对于我来说); v. 跨平台问题,尤其是在服务器处理问题。比如在docker中你可以安装运行命令行,但是无法安装GUI; vi. 开发周期短, 迭代速度快, 是业务系统还没跟进之前的一个能力补充; 2. 大部分时间我们都在和 Vim,终端相处,但是日常的开发工作还离不开另一个角色:REPL a. ipython mysql postgres 终端,这些都叫 REPL; b. 为什么我们需要 REPL 呢?编辑器我们可以配置成非常顺手的体验,但是 REPL 一般是语言、数据库的开发者提供的比较简易的工具; c. 某些数据库有很好用的GUI工具; 3. 所以我们需要更好的命令行的REPL:mycli/pgcli/iredis a. 以iredis为例,展示几个 demo,为什么 iredis 比 redis-cli 更好用; 4. 如何开发这样的工具? a. 介绍 prompt-toolkit,why?100% 类型注解,pure python,处理了各种各样的地狱问题; b. 为什么这些优秀的命令行工具都是用 Python 写的? c. 几个概念(应该选择不同的库): i. TUI(全屏)pingtop; ii. 部分更新的 commandline; iii. fd/rg/awk 这种命令行工具; d. 处理好预定俗称的操作,比如 Emacs 键位,比如Ctrl-X ctrl-E 的功能等; e. 开发教学: i. 如何处理命令行参数; ii. 如何实现补全; iii. 如何自定义按键; iv. prompt-toolkit 到此一游; 5.开发理念? We prioritize being nice more than being right. https://www.dbcli.com/about/ 用户体验优先,有些 feature 实现很复杂,但不应该成为 cli 难用的理由。(客户第一) 6. What next? a. mongo cli? b. ES cli? c. kafka? d. Go REPL? e. 参与 dbcli 中来。 14:45-15:30 WoodenRobot: awesome-pipeline 协助开发 iredis pipeline feature 的始末 shell 的 pipeline原理,常用操作 python 的 subprocess 接口 如何参与开源项目 15:30-16:15 awesome-BNF 什么是 BNF,为什么要用它,能用它做什么?(编译原理的实践应用) 针对 iRedis 的解析需求, 如何设计 BNF? (处理"未输入完全"的字符串) 使用 SLY 解析输入和 iRedis 当前的解析方式的不同点比较 References: https://www.dbcli.com https://www.mycli.net/ https://www.pgcli.com/ https://www.iredis.io/ https://github.com/prompt-toolkit/python-prompt-toolkit Github: Lark-Parser Github: Sly-Parser Wikipedia: LALR Parser Github:iRedis#247 (use SLY to tokenize input command stream) 网易云课堂: 编译原理 -- 华保健 16:15-17:00 提问环节 主办方 「PyChina」是 PyChina.org 的官方微信公众号(ID:PyChinaOrg),创立于 2014 年,目前由 PyChina 主理。所有和 PyChina、PyCon China 大会相关的动态都会第一时间在这里发布,除此之外,你还可以在这里看到 Python 相关的技术分享和最新资讯,欢迎关注! 合作请联系:Cynthia 18516094658 (同微信)
rhchen:
(4年前)
(4年前)
(4年前)
(4年前)
(4年前)
(4年前)