小编Jak*_*kob的帖子

使用jq或替代命令行工具来区分JSON文件

是否有任何命令行实用程序可用于查找两个JSON文件是否与in-dictionary-key和within-list-element排序的不变性相同?

这可以用jq其他等效工具完成吗?

例子:

这两个JSON文件是相同的

A:

{
  "People": ["John", "Bryan"],
  "City": "Boston",
  "State": "MA"
}
Run Code Online (Sandbox Code Playgroud)

B:

{
  "People": ["Bryan", "John"],
  "State": "MA",
  "City": "Boston"
}
Run Code Online (Sandbox Code Playgroud)

但是这两个JSON文件是不同的:

A:

{
  "People": ["John", "Bryan", "Carla"],
  "City": "Boston",
  "State": "MA"
}
Run Code Online (Sandbox Code Playgroud)

C:

{
  "People": ["Bryan", "John"],
  "State": "MA",
  "City": "Boston"
}
Run Code Online (Sandbox Code Playgroud)

那将是:

$ some_diff_command A.json B.json

$ some_diff_command A.json C.json
The files are not structurally identical
Run Code Online (Sandbox Code Playgroud)

diff json jq

64
推荐指数
6
解决办法
3万
查看次数

为什么版本控制文件系统如此之少?

我做了一些关于版本控制文件系统的文献研究.版本控制在早期的操作系统中已经很普遍,例如有影响但几乎被遗忘的不兼容分时系统(ITS)和TENEX.OpenVMS是TENEX的继承者,似乎仍然在特殊应用程序中使用,它仍然支持版本控制.我发现了一些带有版本控制的实验和历史文件系统(参见ext3cow FAQ).但默认情况下,主要操作系统(Linux,Windows,Mac OS)都不支持版本控制.

为什么现代操作和文件系统不支持40年前可用的功能?当然,您可以以某种方式破解版本到您的系统中,但这应该支持最基本的级别,对应用程序是透明的.只是为了澄清:日记和快照设施(例如Apple的TimeMachine)是一样的.文件系统级别的版本控制意味着:修改文件的每个进程都会自动触发创建可以直接访问后续文本的新版本(例如撤消进程).您可以使用copy-on-write以低成本实现此功能.

我发现版本控制文件系统的唯一现代应用是他们几个月前推出的Amazon S3版本.为什么版本控制文件系统如此之少?计算机系统的进展如何?版本化是一个坏主意吗?

versioning filesystems

31
推荐指数
1
解决办法
9168
查看次数

UML中的构造型和类继承之间有什么区别?

我对UML中"刻板印象"和"超类"之间的区别感到困惑.

假设我想创建一个涉及" WidgetMaker." 的图表. WidgetMaker显然是一个ActorUML标准是刻板它的演员:

<<Actor>> WidgetMaker
Run Code Online (Sandbox Code Playgroud)

但我在Java/Ruby/C++世界中长大了编程.在那个世界里,这种关系是:

class Actor
end

class WidgetMaker < Actor
end
Run Code Online (Sandbox Code Playgroud)

在UML中看起来像这样:

  Actor
    ^
    |
WidgetMaker
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:为什么UML有过一次定型时,你可以很容易地使用模型类的继承,它的概念有.

一旦我们有更多"种类"的演员,问题变得更加模糊:

              Actor
                ^
                |
    ------------------------
    |           |          |
  Person      Robot      Group
    ^
    |
WidgetMaker
Run Code Online (Sandbox Code Playgroud)

<<Actor>> <<Person>> WidgetMaker
Run Code Online (Sandbox Code Playgroud)

inheritance uml stereotype

21
推荐指数
2
解决办法
2万
查看次数

在哪里存储项目之间共享的原型文件?

我有项目 A 和项目 B。它们可能使用不同的编程语言。项目 A 使用 proto 文件公开 API,项目 B 将使用该 API 以项目 B 使用的编程语言生成 API。

但是 proto 文件存储在哪里?使用 protobuf 的常规方法是什么?您是否将从 proto 文件文件生成的文件添加到版本控制?

如果您在项目 A 和项目 B 中都存储了 proto 文件的副本,那么如果项目 A 更改其 API,那么项目 B 将不得不复制它们。当有许多项目使用项目 A 公开的 API 时,这种方法效果不佳。

如果您有一个单独的项目,即项目 C,包含共享的 proto 文件,则可以解决上述问题。但是,您如何从项目 A 和项目 B 生成 proto 文件?

protocol-buffers dependency-management proto

16
推荐指数
2
解决办法
4121
查看次数

是否有支持部分结账/克隆的分布式版本控制系统?

据我所知,所有分布式版本控制系统都要求您克隆整个存储库.因此,将大量内容放入一个存储库并不明智(感谢您的回答).我知道这不是一个bug而是一个功能,但我想知道这是否是所有分布式版本控制系统的要求.

在分布式rcs中,文件(或一大块内容)的历史记录是有向无环图,那么为什么不能克隆这个单个DAG而不是存储库中所有图形的集合?也许我想念一些东西,但以下用例很难做到:

  • 克隆只是存储库的一部分
  • 合并两个存储库(保留它们的历史!)
  • 将一些文件从一个存储库复制到另一个存储库

如果我从多个项目中重用其他人的代码部分,我无法保留其完整的历史记录.至少在git中我可以想到一个(相当复杂的)解决方法:

  1. 克隆完整的存储库
  2. 删除我不感兴趣的所有内容
  3. 重写历史记录以删除主文件中没有的所有内容
  4. 将剩余的存储库合并到现有存储库中

我不知道Mercurial或Bazaar是否也可以这样做,但至少它根本不容易.那么是否有任何支持部分检出/克隆的分布式rcs?它应该支持一个简单的命令,从一个存储库获取包含其历史记录的单个文件,并将其合并到另一个存储库 这样您就不需要考虑如何将内容构建到存储库和子模块中,但您可以根据需要快乐地拆分和合并存储库(极端情况是每个文件的一个存储库).

git version-control mercurial dvcs bazaar

15
推荐指数
4
解决办法
3121
查看次数

部署Perl应用程序

部署Perl应用程序的最佳实践是什么?假设您正在部署到安装了少量CPAN模块的香草盒上.什么是理想的构建,部署方法?Module :: Build,ExtUtils :: MakeMaker,其他?我正在寻找那些为大规模应用反复做过的人的一些最佳实践想法.

应用程序正在部署到服务器上.它不是CPAN或脚本.它实际上是一个PSGI Web应用程序.也就是说,一吨Perl包.

我目前有一个部署脚本,它使用Net :: SSH :: Expect来SSH到新服务器,安装一些工具并配置服务器,然后从源代码控制中下拉所需的应用程序分支.这感觉很对,但这是最好的做法吗?

下一步是构建应用程序.跟踪和管理依赖项,从CPAN安装这些依赖项以及确保应用程序已准备好运行的最佳实践是什么?

谢谢

deployment perl psgi

14
推荐指数
2
解决办法
3302
查看次数

是否有工具可以在ANTLR和其他形式的BNF之间进行转换?

是否有任何工具可以将ANTLR语法语法转换为其他BNF语法?Backus-Naur形式(BNF,EBNF,ABNF,W3C-BNF,XBNF ......)有几种形式,有规格,例如见此列表.ANTLR语法语法似乎只是通过示例描述.我知道ANTLR语法文件包含的不仅仅是无上下文语法的规范,但你应该能够至少转换公共子集 - 有人自动完成吗?

antlr bnf context-free-grammar

10
推荐指数
3
解决办法
3214
查看次数

XML :: LibXSLT无法在Heroku上安装

我无法在Heroku上安装XML :: LibXSLT.尽管在Heroku stack cedar和cedar-14中列出了已安装的Ubuntu软件包,但看起来并没有安装所需的库.在这个问题中已经报告类似的问题,但是没有在Heroku上报告,并且不允许安装新的Ubuntu软件包.gdbm

要重现错误,请创建一个最小的存储库,需要XML :: LibXSLT cpanfile:

$ git init
$ echo 'requires "XML::LibXSLT";' > cpanfile
$ echo 'sub { [200,[], ['Hello World']] }' > app.psgi
$ git add cpanfile app.psgi
$ git commit -m "initial commit"
Run Code Online (Sandbox Code Playgroud)

使用heroku-buildpack-perl创建一个新的Heroku应用程序来运行cpanm:

$ heroku create --stack cedar --buildpack https://github.com/miyagawa/heroku-buildpack-perl.git
$ git push heroku master
Run Code Online (Sandbox Code Playgroud)

错误日志包含

! Installing XML::LibXSLT failed. See /app/.cpanm/work/1412752363.1663/build.log for details. Retry …
Run Code Online (Sandbox Code Playgroud)

perl heroku libxslt

8
推荐指数
1
解决办法
285
查看次数

如何在Perl代码中简明地记录方法?

我赞成一种文字编程风格,在他们记录的代码旁边有POD注释.不幸的是,这膨胀了代码,这不是非常Perlish ;-)我现在能找到的最好的方法是使用Dist :: ZillaPod :: Weaver一样:

package Foo;
#ABSTRACT: Foobar helper module for Foos

=method foo ( $bar, $doz )

Lorem ipsum hopladi and hoplada.

=cut

sub foo {
   ...
}
Run Code Online (Sandbox Code Playgroud)

人们可能会争论删除空行,但这也会降低可读性.有没有办法写更简洁,没有任何重复和不必要的语法,如下所示:

package Foo;
#ABSTRACT: Foobar helper module for Foos

#METHOD: Lorem ipsum hopladi and hoplada.
sub foo { # $bar, $doz
   ...
}
Run Code Online (Sandbox Code Playgroud)

并将此扩展到完整的POD:

=head1 NAME 

Foo - Foobar helper module for Foos

=head1 METHODS

=head2 foo ( $bar, $doz )

Lorem ipsum hopladi and …
Run Code Online (Sandbox Code Playgroud)

perl perldoc pod dist-zilla

6
推荐指数
1
解决办法
1028
查看次数

如何在一个空格中替换空格序列,但不在XSLT中修剪?

该函数normalize-space删除前导和尾随空格,并用单个空格替换空白字符序列.我怎么能在XSLT 1.0单个空格替换一系列空白字符?例如"..x.y...\n\t..z."(为了便于阅读,用点替换的空格)应该成为".x.y.z.".

xslt xpath xslt-1.0 removing-whitespace

5
推荐指数
2
解决办法
2400
查看次数