我不确定这应该放在这里,还是超级用户(因为它似乎与这两个主题有关),所以我把它放在这里,如果它不合适,我会在超级用户上问它.
无论如何,我有一个git存储库,不能完全开源(否则我只是把它放在github上并完成它),我有一个服务器,我有ssh访问(但不是超级用户访问),这server上已经有了所有的git二进制文件.我需要给某人只读访问这个git-repo(或者至少对某些分支的只读访问权限,尽管我认为这样做要困难得多).
目前我正在使用ssh将本地git repo推送和轮询到此服务器.有没有办法让另一个人只读访问服务器?(我想我和我们两个都拥有对repo的写访问权限,虽然我不知道如何使用unix权限,因为我没有能够创建新的unix组,因为我没有超级用户权限).
谢谢您的帮助.
我有一个活动,我想在每次用户访问浏览器中的 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,那就加分了。到目前为止,我总是使用附加功能将信息从一个活动发送到另一个活动)。
感谢您的帮助
我在git中有一些文件(即配置文件),我需要在git repo中,但我不希望它们更新(出于某种原因,运行它们,make,更改配置文件).
那么有什么方法可以告诉git忽略对文件的任何更改,但保持原始文件仍然在repo中?目前,我发现这样做的唯一方法是将文件添加到.gitignore文件中,然后git直接将文件添加到项目中(使用-f覆盖).有没有更好的方法?
据我所知,有两种主要方法可以在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之间有什么区别.
我正在学习Scheme(使用Racket),但我遇到的一个挑战是尝试执行以下代码,这意味着使用eval以下方法从用户输入执行Racket代码:
(display (eval (read)))
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止观察到的一些奇怪的行为:
(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)
另一方面,使用(display ((eval (read)) 1))和提供输入会
(lambda (x) (+ x 1))
返回错误
lambda: unbound identifier;
also, no #%app syntax transformer is bound in: lambda
(display (eval (read)))和提供((lambda (x) (+ x 1)) 1)(而不是定义窗格2)会按预期打印出来.这种行为的原因是什么?
我有一个类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 的等级系统可以做到这一点吗?
我正在尝试在 DrRacket 的文本窗口中创建一个新的 GUI 元素,如图片或语法对象。据我所知,最标准的方法是使用snip%. 1
不幸的是,创建新片段的文档虽然全面,但有点难以理解,并留下了一些问题需要回答。
首先, asnip%和 a 有snip-class%什么区别?为什么要把它们分成两类,而不是简单地合并为一类?是因为多个 snips 会使用一个 snip 类吗?
第二关,什么是snip-reader<%>?不仅为什么它需要是一个单独的类,而且为什么应该安装提供它的模块?2如果它确实需要一个新的类,为什么不能直接引用它。为什么要经历构建然后解析形式的字符串的整个过程:"(lib ...)\n(lib ...)"?
我的意思是,这种设计现在可能有任何原因,它可能只是旧 API 的残余。如果是这样,有没有人想过制作一个新的更一致的 API?或者,如果这种设计是有原因的,请您告诉我它是什么,因为文档似乎没有说清楚。
我的意思是,截至目前,我可以复制/粘贴文档中提供的关于创建新片段的示例。但是我很难理解这里的设计,所以我可以正确地使用它们。
1我知道还有其他方法可以做到,但我也想要交互式按钮等等。
2我知道它本身不需要作为库安装,但文档似乎强烈地推动你朝这个方向前进。
如果我想在运行时选择性地需要一个模块,我可以使用 [ 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) 如果我有用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) Racket似乎有两种机制可以为结构添加每种类型的信息:generics和properties.遗憾的是,文档似乎并未表明何时优先于另一个.文档说:
通用接口在结构类型属性之上提供高级API.
但是,当我应该使用一个而不是另一个时,这似乎并没有提供良好的直觉.它似乎很清楚,define-generic提供了比它更高级别的界面make-struct-type-property.但是许多结构类型仍然只使用属性,这似乎表明仍然存在低级API是首选的情况.
所以问题是,何时使用struct属性系统比使用泛型属性系统更好,或者属性库是否仅作为历史遗迹存在?