小编Lei*_*sen的帖子

授予对git存储库的只读访问权限

我不确定这应该放在这里,还是超级用户(因为它似乎与这两个主题有关),所以我把它放在这里,如果它不合适,我会在超级用户上问它.

无论如何,我有一个git存储库,不能完全开源(否则我只是把它放在github上并完成它),我有一个服务器,我有ssh访问(但不是超级用户访问),这server上已经有了所有的git二进制文件.我需要给某人只读访问这个git-repo(或者至少对某些分支的只读访问权限,尽管我认为这样做要困难得多).

目前我正在使用ssh将本地git repo推送和轮询到此服务器.有没有办法让另一个人只读访问服务器?(我想我和我们两个都拥有对repo的写访问权限,虽然我不知道如何使用unix权限,因为我没有能够创建新的unix组,因为我没有超级用户权限).

谢谢您的帮助.

git permissions ssh

5
推荐指数
1
解决办法
1万
查看次数

Android 中浏览 XML(特别是 rss)的 Intent 过滤器

我有一个活动,我想在每次用户访问浏览器中的 xml(特别是 rss)页面时运行该活动(至少假设用户从可以支持它的应用程序列表中获取它)。

我目前已经有了当前的意图过滤器:

    <activity android:name=".activities.EpisodesListActivity"
        android:theme="@android:style/Theme.NoTitleBar">
        <intent-filter>
            <category android:name="android.intent.category.BROWSABLE"></category>
            <category android:name="android.intent.category.DEFAULT"></category>
            <action android:name="android.intent.action.VIEW"></action>
            <data android:scheme="http"></data>
        </intent-filter>
    </activity>
Run Code Online (Sandbox Code Playgroud)

现在您可以猜到,这是一个邪恶的意图,因为它希望在通过 http 请求页面时打开。但是,当我广告该行时:

<data android:mimeType="application/rss+xml"></data>
Run Code Online (Sandbox Code Playgroud)

做到这一点:

    <activity android:name=".activities.EpisodesListActivity"
        android:theme="@android:style/Theme.NoTitleBar">
        <intent-filter>
            <category android:name="android.intent.category.BROWSABLE"></category>
            <category android:name="android.intent.category.DEFAULT"></category>
            <action android:name="android.intent.action.VIEW"></action>
            <data android:scheme="http"></data>
            <data android:mimeType="application/rss+xml"></data>
        </intent-filter>
    </activity>
Run Code Online (Sandbox Code Playgroud)

该应用程序不再声称能够运行 rss 文件。

另外,如果我将该行更改为:

<data android:mimeType="application/xml"></data>
Run Code Online (Sandbox Code Playgroud)

它也不起作用(甚至对于通用 xml 文件)。

那么我需要做什么意图过滤器才能声明该活动支持 rss。

(另外,如果你能告诉我如何知道用户打开的 URL,那就加分了。到目前为止,我总是使用附加功能将信息从一个活动发送到另一个活动)。

感谢您的帮助

android android-intent

5
推荐指数
1
解决办法
3069
查看次数

告诉git永远不要更新文件

我在git中有一些文件(即配置文件),我需要在git repo中,但我不希望它们更新(出于某种原因,运行它们,make,更改配置文件).

那么有什么方法可以告诉git忽略对文件的任何更改,但保持原始文件仍然在repo中?目前,我发现这样做的唯一方法是将文件添加到.gitignore文件中,然后git直接将文件添加到项目中(使用-f覆盖).有没有更好的方法?

git gitignore

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

在javascript中为对象创建函数

据我所知,有两种主要方法可以在javascript中为对象创建函数.他们是:

方法A,在构造函数中创建:

function MyObject() {
    this.myFunc1 = function() {
        ...
    }
    this.myFunc2 = function() {
        ...
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

方法B,将其添加到原型中:

function MyObject() {
    ...
}

MyObject.prototype.myFunc1 = function() {
    ...
}

MyObject.prototype.myFunc2 = function() {
    ....
}
Run Code Online (Sandbox Code Playgroud)

显然,如果你这样做:

MyObject.myFunc3 = function() {
    ....
}
Run Code Online (Sandbox Code Playgroud)

然后myFunc3将与MyObject本身相关联,而不是与new关键字一起创建的任何新对象.为清楚起见,我们将其称为方法C,即使它不适用于使用new关键字创建新对象.

所以,我想知道两者之间的区别是什么.据我所知,它们在逻辑上具有相同的效果,即使机器上发生的事情有所不同.

如果我猜测我会说唯一真正的区别是当你在方法A中的构造函数中定义它们时,它会为每个创建的对象创建一个全新的函数对象,而方法B只保留它的一个副本(在MyObject中),它指的是它被调用的任何时间.如果是这种情况,你为什么要以另一种方式做到这一点.否则,方法A和方法B之间有什么区别.

javascript

5
推荐指数
1
解决办法
117
查看次数

无法在Racket中的用户输入上使用eval

我正在学习Scheme(使用Racket),但我遇到的一个挑战是尝试执行以下代码,这意味着使用eval以下方法从用户输入执行Racket代码:

(display (eval (read)))
Run Code Online (Sandbox Code Playgroud)

 

这是我到目前为止观察到的一些奇怪的行为:

  1. (display (eval (read)))在定义窗口中,在运行定义时,按预期提示键盘输入.但是,提供输入
    ((lambda (x) (+ x 1)) 1)
     
    会产生错误
    ?: function application is not allowed; no #%app syntax transformer is bound in: ((lambda (x) (+ x 1)) 1)

  2. 另一方面,使用(display ((eval (read)) 1))和提供输入会
    (lambda (x) (+ x 1))
     
    返回错误
    lambda: unbound identifier; also, no #%app syntax transformer is bound in: lambda

  3. 但是,在控制台窗格中运行(display (eval (read)))和提供((lambda (x) (+ x 1)) 1)(而不是定义窗格2)会按预期打印出来.

这种行为的原因是什么?

lisp scheme racket

5
推荐指数
1
解决办法
457
查看次数

Racket 类中的私有字段(或成员变量)

我有一个类counter%,它将计数器存储为字段,并提供方法get-and-inc, 来获取当前计数器的值并递增它。

(define counter%
  (class object%
    (super-new)
    (field [counter 0])
     (define/public (get-and-inc)
      (begin0 counter
              (set! counter (add1 counter))))))
Run Code Online (Sandbox Code Playgroud)

虽然此代码确实可以准确计数:

> (define x (new counter%))
> (send x get-and-inc)
0
> (send x get-and-inc)
1
Run Code Online (Sandbox Code Playgroud)

问题是计数器现在是公开的:

> (set-field! counter x 42)
> (send x get-and-inc)
42
> (send x get-and-inc)
43
Run Code Online (Sandbox Code Playgroud)

这里的问题是我希望该counter字段是私有的,以便实例化该类的人无法修改它。Racket 的等级系统可以做到这一点吗?

class object racket

5
推荐指数
1
解决办法
582
查看次数

使用 Racket 创建一个新的 snip%

我正在尝试在 DrRacket 的文本窗口中创建一个新的 GUI 元素,如图片或语法对象。据我所知,最标准的方法是使用snip%. 1

不幸的是,创建新片段的文档虽然全面,但有点难以理解,并留下了一些问题需要回答。

首先, asnip%和 a 有snip-class%什么区别?为什么要把它们分成两类,而不是简单地合并为一类?是因为多个 snips 会使用一个 snip 类吗?

第二关,什么是snip-reader<%>?不仅为什么它需要是一个单独的类,而且为什么应该安装提供它的模块?2如果它确实需要一个新的类,为什么不能直接引用它。为什么要经历构建然后解析形式的字符串的整个过程:"(lib ...)\n(lib ...)"

我的意思是,这种设计现在可能有任何原因,它可能只是旧 API 的残余。如果是这样,有没有人想过制作一个新的更一致的 API?或者,如果这种设计是有原因的,请您告诉我它是什么,因为文档似乎没有说清楚。

我的意思是,截至目前,我可以复制/粘贴文档中提供的关于创建新片段的示例。但是我很难理解这里的设计,所以我可以正确地使用它们。

1我知道还有其他方法可以做到,但我也想要交互式按钮等等。

2我知道它本身不需要作为库安装,但文档似乎强烈地推动你朝这个方向前进。

graphics user-interface editor racket

5
推荐指数
0
解决办法
135
查看次数

动态要求一个相对于 Racket 中当前模块路径的模块(或者如何在 Racket 中找到当前模块路径)

如果我想在运行时选择性地需要一个模块,我可以使用 [ dynamic-require' 1。如果我想需要已安装的软件包,这非常有用,例如:

(dynamic-require 'racket/match 'match)
Run Code Online (Sandbox Code Playgroud)

这将(假设我已经racket/match安装)要求racket/match并评估match该库中的绑定。

但是,当我想要需要本地未安装的模块时,我遇到了麻烦。假设我有一个名为 的模块eat.rkt,它提供一个功能bite::

#lang racket ;; eat.rkt
(provide bite)
(define (bite) "Nom nom")
Run Code Online (Sandbox Code Playgroud)

现在假设我们想要创建一个lunch.rkt需要eat.rkt并调用该函数的模块。此外,假设我将它们放在同一目录中:

#lang racket ;; lunch.rkt
(require "eat.rkt")
(bite) ; => Nom Nom
Run Code Online (Sandbox Code Playgroud)

这很好,因为我使用了 static require,但是当我想做一个dynamic-require

#lang racket ;; lunch2.rkt
(define bite (dynamic-require "eat.rkt" 'bite)
(bite) ; => Nom Nom
Run Code Online (Sandbox Code Playgroud)

虽然这看起来没问题,但事实证明,所需的模块dynamic-require不是基于模块的路径所必需的,而是基于current-directory. 因此,如果我在定义模块的目录中运行程序,那很好,但如果我在另一个目录中,一切都会中断:

$ racket lunch2.rkt
"Nom Nom"
$ cd …
Run Code Online (Sandbox Code Playgroud)

module racket

5
推荐指数
1
解决办法
774
查看次数

在Linux上动态链接到libc时调用`atexit`

如果我有用C编写的以下程序(在Debian 8.7上使用GCC编译),我可以atexit()按照您的预期调用:

#include <stdlib.h>

void exit_handler(void) {
    return;
}

int main () {
    atexit(exit_handler);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我编译并运行它时:

$ gcc test.c
$ ./a.out
Run Code Online (Sandbox Code Playgroud)

输出什么都没有,就像你期望的那样.事实上,当我跑步时ldd,我得到:

$ ldd a.out
    linux-vdso.so.1 (0x00007fffbe592000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fe07d3a8000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fe07d753000)
Run Code Online (Sandbox Code Playgroud)

但是,libc似乎没有任何符号atexit,amd只有__cxa_atexit__cxa_threaded_atexit_impl:

$ nm --dynamic /lib/x86_64-linux-gnu/libc.so.6 | grep 'atexit'
0000000000037d90 T __cxa_atexit
0000000000037fa0 T __cxa_thread_atexit_impl
Run Code Online (Sandbox Code Playgroud)

正如您所期望的那样,如果我尝试libc动态链接,我实际上无法调用atexit(),例如在下面的Racket程序中链接libc并尝试查找atexit:

#lang racket

(require ffi/unsafe)

(get-ffi-obj 'atexit (ffi-lib "libc" '("6")) (_fun …
Run Code Online (Sandbox Code Playgroud)

c linux shared-libraries dynamic-linking racket

5
推荐指数
1
解决办法
389
查看次数

结构属性与球拍中的泛型

Racket似乎有两种机制可以为结构添加每种类型的信息:genericsproperties.遗憾的是,文档似乎并未表明何时优先于另一个.文档说:

通用接口在结构类型属性之上提供高级API.

但是,当我应该使用一个而不是另一个时,这似乎并没有提供良好的直觉.它似乎很清楚,define-generic提供了比它更高级别的界面make-struct-type-property.但是许多结构类型仍然只使用属性,这似乎表明仍然存在低级API是首选的情况.

所以问题是,何时使用struct属性系统比使用泛型属性系统更好,或者属性库是否仅作为历史遗迹存在?

methods struct racket

5
推荐指数
1
解决办法
249
查看次数