我被一个相当糟糕的网络摄像头困在家里。我正在考虑升级,但后来让我震惊:现在的手机内置了非常好的摄像头。那么为什么不将其用作网络摄像头呢?
然而,当我进一步研究这个时,我对可用的应用程序感到非常失望。据我所知,我们有大致如下工作的 Android 应用程序:
将手机摄像头作为网络连接摄像头呈现。然后您可以使用本地软件将该提要用作网络摄像头。参见例如IP 网络摄像头。这可能就足够了,但这是一个复杂的设置,而且网络延迟使其远非理想。
Android 应用程序将摄像头馈送发送到自定义主机应用程序,该应用程序又会创建一个虚拟网络摄像头。参见例如DroidCam。这基本上解决了延迟问题,但还是比较复杂,而且需要我们安装特定的第三方应用程序,在用户隐私方面很麻烦。特别是因为应用程序是闭源的。
所以,我采用了工程方法,并试图看看是否有可能改善这种情况。据我所知,Android 支持用作自定义 USB配件。查看 USB 视频类文档,我觉得应该可以创建一个 Android 应用程序,将手机显示为通用 UVC 网络摄像头,这样我们就不必求助于上述技巧。
理想情况下,除了调试模式、文件传输等之外,我希望 Android 添加另一个 USB 设备选项(“使用 USB 连接作为网络摄像头”)。然而,这在短期内似乎不太可能发生。
所以,我的问题是:是否已经存在具有上述功能的应用程序?到目前为止,我的搜索没有产生任何结果,但我可能会遗漏一些东西,因为谷歌搜索结果比我预期的要难一些。
或者,我上面的假设是否错误,以至于存在一些基本问题,为什么不能使 Android 应用程序以这种方式工作?
最近才开始将 yasnippet 用于 emacs 并且非常喜欢它的工作方式,但是我遇到了一个小麻烦,如果可能的话,我需要一些帮助来解决。
我特别喜欢的一个片段是“for”片段,即:
# -*- mode: snippet -*-
# name: for
# key: for
# --
for (${1:i = 0}; ${2:i < N}; ${3:i++}) {
$0
}
Run Code Online (Sandbox Code Playgroud)
然而,我最近开始从事一个我们有不同编码风格的项目。只需将上面的代码片段更改为将起始大括号位置更改为:
# -*- mode: snippet -*-
# name: for
# key: for
# --
for (${1:i = 0}; ${2:i < N}; ${3:i++})
{
$0
}
Run Code Online (Sandbox Code Playgroud)
然而,我想轻松地在不同的项目之间切换,从而在不同的编码风格之间切换,而无需手动更改片段或创建许多重复项。所以我认为应该可以在代码片段中编写一些 elisp 代码来自动适应当前活动的编码风格。
环顾一些 Emacs/elisp 文档,我发现了所谓的 c-hanging-brace-alist ( GNU doc ),我觉得我应该能够以某种方式使用它。但是,我从未真正在 elisp 中进行过任何编程,而且我不确定如何实现这一点。任何帮助或建议将不胜感激!
不久前,我考虑为斐波那契数列编写一个通用迭代器,它既可以接受原始数字,也可以接受自定义类型(例如
bignums)。在无法获得适用于原始类型和 的版本后bignums,我偶然发现了这个问题:
其中使用所谓的高排名特征边界来解决这个特定问题的问题。
但是,现在我正在尝试使用类似的策略来使用*_assign
运算符。特别是,我正在尝试获得与此类似的工作:
use std::ops::{Add, AddAssign};
fn add_test<'a, T>(x: &'a T, y: &'a T) -> T
where
for<'b> &'b T: Add<Output = T>,
{
x + y
}
fn add_assign_test<'a, T>(x: &'a mut T, y: &'a T) -> T
where
for<'b> &'b mut T: AddAssign<&'b T>,
T: Clone,
{
x += y;
x.clone()
}
fn main() {
println!("add_test()={}", add_test(&1, &2));
println!("add_assign_test()={}", add_assign_test(&mut 2, &2));
}
Run Code Online (Sandbox Code Playgroud)
add_test()按预期工作,但我无法以add_assign_test()类似的方式工作。我收到的错误表明,对于原始类型的这种行为,实际上可能不存在实现:
use …Run Code Online (Sandbox Code Playgroud)