与Jeffrey Ryan Thalhammer的访谈
Jeffrey Ryan Thalhammer是Perl::Critic、Pinto和现在的Stratopan(一个基于云的安全托管Perl模块自定义仓库的服务)的创建者。我们与Jeffrey取得了联系,了解最新的Stratopan动态,并学习了他使用Perl进行编程的工具、技巧和技术。
首先,Stratopan的公测版进展如何?非常好,现在已经上线3周了,用户数量已经超过500人,所以我非常高兴。其中大约有一半的人创建了仓库并以有意义的方式使用这个工具,这和我预期的差不多。目前我们收到了很多很好的反馈,人们发现了错误并提出了改进建议,所以我正坐着等待这些信息。一旦我收集到关于人们重视的信息,我们就会开始优先处理并逐步改进。我希望将产品推向商业可行,这是下一个重要里程碑,让Stratopan成为企业每月支付少量费用即可使用的产品。
除了你收到的公测版反馈,你认为Stratopan的功能是否完善?当然不是!目前它只是一个最小可行产品。它做到了足够的程度以使其有用 - 你可以在云中创建一个仓库,这几乎是全部价值(尽管这已经是价值的百分之七十五)。另外百分之二十五是使它成为可行业务的功能。这意味着协作功能,你可以控制谁可以读取和写入仓库,而不是由单个所有者控制。我们需要更多地展示Pinto的功能:固定发行版、合并堆栈等。API将是一个杀手级功能,因为人们可以在Stratopan之上构建自己的想法,自动化它并以巧妙的方式与之交互。所以还有很多路要走才能使功能完善!
你有没有一个偏好的开发方法?我追求测试驱动开发,但并不总是从这个起点开始。我需要花些时间来构建足够的框架,以便我知道要测试什么以及如何测试,并且测试成本低。一旦我建立了这个框架,我就很擅长测试驱动开发,并采用某种测试优先的方法。但在达到这一点之前,我更倾向于探索性开发,直到我有一些具体的代码可以操作,我才不进行测试。Stratopan现在正在进行这种过渡。它从非正式测试套件转变为使用WWW::Mechanize的测试套件,这样测试的成本就非常低,我现在可以以比6个月前更低的成本进行测试驱动开发。
关于文本编辑器或集成开发环境,你首选什么工具来编写Perl代码? 在过去几年里,我已经成为了一个 Sublime Text 用户。我真的很喜欢它。我之前长期使用EMACS,但从未真正掌握它。你可以用一生来掌握EMACS和Vi。我甚至买过官方的GNU EMACS手册,但这并没有对我有多大帮助。EMACS有点晦涩难懂,我不想费心学习Lisp——我的脑子里已经有很多东西了,我不想再费心学习了。所以我对于EMACS感到沮丧,转而使用 Sublime Text,并且非常喜欢它。它可以做我想做的所有事情,对我来说,用Python扩展它比为EMACS编写Lisp要容易得多。
我不想费心学习Lisp——我的脑子里已经有很多东西了
Sublime Text 作为应用程序运行吗?你能从Sublime Text轻松访问命令行吗? 你可能可以,尽管我的操作模式是始终在桌面上有一个终端窗口和一个文本编辑器。所以我在这两者之间切换,我原本会用命令行做的很多事,现在都在 Sublime Text 中直接完成。例如,Sublime Text 有一个用于执行Git提交的钩子,我本可以在命令行中执行,但在 Sublime Text 中只需要几个按键。所有其他工具(EMACS、Vi等)也能做到这一点,所以我不想暗示这些功能不存在,只是在我看来,它们在 Sublime Text 中更容易访问。
你主要在哪个操作系统上编码? 我在一台非常老的Mac笔记本电脑上编码,运行OSX Lion,现在大约有六年的历史了,是我升级的时候了。它的速度比我妻子的新电脑慢得多。我觉得“圣诞老人需要一个新的玩具”。
你在OSX上使用Perl时发现有任何兼容性问题吗? 有时我会在OSX和我要部署的某个Linux发行版之间发现差异。使用 homebrew(一个OSX社区包管理器)构建依赖C的模块变得容易多了。有了 homebrew,你可以轻松地获取那些C库。我发现一些CPAN作者在CPAN上发布他们的模块时,已经将C库集成到模块中(以某种方式)。我最近注意到的一个例子是 Git::Raw,它是基于libgit2的Perl绑定。所以当你安装 https://metacpan.org/pod/Git::Raw 时,它会为你构建libgit2的C库,你不需要去获取任何额外的东西。这有点像我以前想象事情应该一直是这样做的,我不知道人们在过去那些不得不自己追踪库并手动构建它们的日子里是如何生存下来的。这对我来说感觉很尴尬,但我想我现在是懒惰了。我希望按下一个按钮,就能以安装手机应用同样的简单方式安装模块。我希望 [Stratopan](https://stratopan.com/)(以某种方式)能让我们朝着这个目标迈进;通过修复 Stratopan 上的怪癖,用户只需将安装程序指向他们的存储库,就无需考虑配置了。
我希望按下一个按钮,就能以安装手机应用同样的简单方式安装模块
你使用什么工具来创建模块? 我以前都是手动做的,但大约两年前我开始使用 Dist::Zilla。在那之前,我制作过几次自己的“模块启动器”风格的套件。我非常喜欢 Dist::Zilla;你可以在编辑器中打开它,做一些更改,然后将其发送到CPAN。 Dist::Zilla 精美地处理了这个过程,而且我离开家的时候不会不带它!
关于Perl::Critic,你将它与Dist::Zilla集成了吗?你经常使用它吗? 我确实使用了Perl::Critic;它已经是我多年来的主食。但我的使用方式已经和以前不一样了。以前我非常严格,要求一切都要符合Damian Conway推荐的最佳实践。现在,我更加放松,并偏好宽松的配置,不需要在发布前让所有代码都符合最佳实践。我仍然会定期使用Perl::Critic,以确保我没有完全偏离轨道!
你在团队工作时使用Perl::Critic吗?或者,可能作为接受拉取请求的要求? 当有拉取请求时,我会使用Perl::Critic检查,看看是否有任何问题出现。现在这已经不再是问题,因为我只寻找真正严重的错误,而不是陷入低级样式问题。我发现随着时间的推移,我倾向于将其他人的拉取请求转换为我对他们代码的理解。我的大脑已经习惯于以Perl::Critic期望的方式编写代码。我已经使用了很长时间,对我来说,它已经变得自动。
关于其他辅助工具,你将它们与你的Dist::Zilla过程相结合了吗? Podchecker肯定与Dist::Zilla结合,有一个测试来验证所有POD的语法正确性。对于整理,有一个由Jonathan Schwartz编写的工具,名为Code::TidyAll。它类似于Perl::Tidy、HTML::Tidy和Perl::Critic的包装,你可以将其与其他类型的linters插入。所以对我来说,这是一个命令就可以控制一切——它一次性运行所有预提交分析和整理工具。它也很智能——Code::TidyAll跟踪更改,不会在文件自上次迭代以来没有更改的情况下重新运行进程,这使得它变得更快。我非常喜欢它!
Code::TidyAll…对我来说,这是一个命令就可以控制一切
在之前的采访中,你提到与Objective-C合作。你希望看到其他语言(如Objective-C)的开发工具融入Perl工具链吗? 我喜欢Objective-C的原因是Apple提供了一个全面且一致的框架。例如,有一个完整且一致的功能集来管理文件——一个相当普通的任务。但如果你想要用Perl做这件事,你需要加载3个或4个不同的库来创建路径、递归移动文件等。而且,Perl库都是由不同的作者编写的,具有不同的接口和风格。这种不一致性让我感到烦恼。但另一方面,我已经学会了接受它,因为这就是Perl的本质。它是由不同想法混合而成的。它永远不会像Cocoa(一个苹果框架)那样,由一个实体策划,拥有资源和能力在所有库中强制执行一致的API和架构。回答这个问题,我希望标准Perl库中能有更多的统一性。
几个月前你提到了一个商业机会(《开发工具作为服务是摇钱树》)—— 自那时起你的观点有改变吗? 目前旧金山软件即服务(SaaS)分析在Web应用领域正迎来一个繁荣时期。像New Relic和AppDynamics这样的公司提供这些服务,用于从浏览器到数据库对Web应用进行监控。他们追踪操作所需的时间并识别瓶颈、潜在错误,并将不同类型的事件相关联,以便您能追踪到难以发现的错误。目前还没有针对Perl的此类服务。您必须自己手动实现解决方案。这些实际上是非常有利可图的业务,我希望Perl有这些功能。如果有人有勇气将这些现有框架(New Relic和AppDynamics)移植到Perl,这是可能的,但那些运行这些应用程序的公司经济上无法自行完成此事。我对此仍然持强烈看法。《Perl::Critic》可以作为一个软件即服务来实现。类似工具已经出现在Ruby上,我认为我们会在其他语言中看到它们。有用于分析代码的工具:静态分析、复杂度分析、安全性分析等。所有这些事情都是有价值的服务和合法的业务。当我建立PerlCritic.com时,我没有那样的愿景。我现在非常愿意这样做,或者看到社区中的其他人这样做,因为Perl当然有工具和能力。这只是一个尝试围绕它构建业务的风险问题。
让我们换个话题——当你遇到棘手的Perl问题时,你到哪里寻求支持? 我在使用IRC上变得更好,因为像所有程序员一样,我有点急躁,所以当我提问时,我希望尽可能让更多的人看到。我过去使用Perl Monks,尽管我喜欢写作,但我写得非常慢。所以,每次我想在Perl Monks上或一般地发帖时,我需要花很长时间才能想出一些我觉得足够充分的内容。而在IRC上,我只需要说出自己的想法——这更容易脱口而出,而且没有压力要语法正确,这对我很有帮助。发帖需要我更多的努力和专注(所以我不会经常这么做)。在IRC上,我总是连接到#Moose、#PerlQA和#MetaCPAN频道,我通常也在#Pinto和#PerlHelp频道。
在IRC上,我只需要说出自己的想法——这更容易脱口而出,而且没有压力要语法正确,这对我很有帮助
你在Perl中有最喜欢的小技巧或代码语法功能吗(也许在其他语言中不可行)? 我不敢确定这在其他语言中是否不可用,但我非常喜欢modulino模式。我想这个术语是由brian d foy提出的。以你通常写的脚本为例,比如一个实用程序。而不是以脚本格式逐行程序化地编写程序,你可以将它包装成一个你可以执行模块。你可以加载该模块并对它进行测试,同时你也可以作为脚本执行它并用于工作。我真的很喜欢这个。总的来说,我认为Perl中的一行脚本很有趣。我认为没有其他语言在命令行上具有相当的表达力。有一个Perl单行脚本的推特账号(@perloneliner),我订阅了它。我喜欢从@perloneliner那里每周得到一到两条推文,这些推文给我带来新的想法,并展示我甚至不知道Perl能做什么的事情。
我认为没有其他语言在命令行上具有相当的表达力
你在最近的Perl活动上吗?在旧金山Craigslist办公室,Larry在那里露面了? 我在那里,活动结束后我和Larry喝了几杯啤酒。他告诉我Perl 6的最新进展,我问他关于语法的想法,因为我对Perl 6从静态分析的角度很感兴趣。我想知道,如果我为Perl 6编写Perl::Critic,它会是怎样的?Perl 5的一个挑战是,只有Perl 5可以解析Perl 5,这一点至今仍未改变。PPI的开发历时很久,它仍然只是一个近似,是对如何解析Perl 5的最佳猜测。所以我希望Perl 6有一个正式的语法和某种可以访问或操作抽象语法树。听起来它可能大部分都会这样,但有一些东西只能在运行时才能确定。
Perl 6是一种下一代语言,感觉他们希望能在Perl 6中做所有的事情... 这超出了我的能力范围。Perl 6开始感觉真实,比过去几年都要多。我认为Perl 6团队在过去的几年里做了很多工作,Rakudo也取得了长足的进步。这可能是一个真正的转折点。Larry和我谈论了O'Reilly是否会出版这本书——我认为看到O'Reilly出版这本书将非常酷。
Larry提到他正在写一本新书,相当于Camel书,但针对Perl 6的吗? 是的;我认为这将是一个语言的重大里程碑(拥有全面的手册)。这可能是一个真正的转折点。Larry和我讨论了O'Reilly是否会出版这本书——我认为看到O'Reilly出版这本书将非常酷。
更多信息链接
- Jeffrey使用Sublime Text来编写Perl代码。
- 他使用Dist::Zilla来创建模块Dist::Zilla有一个网站。
- Jeffrey依赖Code::TidyAll来运行所有他的linting过程(“一招胜过所有”)。
- homebrew帮助他在OSX上管理C库。
- 他是Perl::Critic的作者,这是一个Perl的静态代码分析工具。在线版本在这里这里。
- Jeffrey目前正在开发Stratopan;在12月15日之前注册,即可获得终身免费账户。Stratopan基于Jeffrey的Perl应用程序Pinto。
- 他在Twitter上关注@perloneliner——你也应该关注!
- brian d foy的modulino概念在他的书Mastering Perl(O'Reilly即将出版的第二版预览)中有介绍。
- Larry出现在Mike Friedman关于MongoDB的优秀演讲的结尾(视频)。
- 你可以在这里了解更多关于Perl 6的信息官方网站。
这篇文章最初发布在PerlTricks.com。
标签
反馈
这篇文章有什么问题吗?请通过在GitHub上打开问题或pull request来帮助我们。