应该不难吧?对?
我目前正在搜索 OpenAFS 代码库以查找 pioctl 的标头定义。我已经把所有的东西都扔了:检查 ctags,搜索 pioctl 的源代码等。我最接近线索的是,有一个包含定义的文件 pioctl_nt.h,除了它是实际上不是我想要的,因为没有一个用户空间代码直接包含它,而且它是特定于 Windows 的。
现在,我不希望您去下载 OpenAFS 代码库并为我找到头文件。不过,我很好奇:当其他一切都失败时,您有什么技巧可以找到所需的头文件?最坏的情况是什么,可能导致代码库中 pioctl 的 grep 实际上没有提出任何看起来像函数定义的东西?
我还应该注意,我可以访问两个已经正确完成的独立用户空间程序,因此理论上我可以对函数进行 O(n) 搜索。但是没有一个头文件弹出给我,而且 n 很大......
编辑:当前问题已解决:pioctl() 是隐式定义的,如下所示:
AFS.xs:2796: error: implicit declaration of function ‘pioctl’
Run Code Online (Sandbox Code Playgroud) 我有这个ncurses应用程序正在执行标准配方,暂时退出ncurses,运行外部编辑器/ shell /等等,然后在完成后退回到ncurses.
这几乎是有效的,除了之后ncurses得到的前几个按键显然是假的; 如果我按两次向上箭头,ncurses认为^ [和A分别被看到.
以前有人见过这种行为并知道解决这个问题的神奇之处是什么?如果它有帮助,这是Ruby ncurses库.
开发和生产之间的一个常见模式是开发网站将使用sqlite,因为它是零设置,但随后在生产中使用PostgresSQL或MySQL.但是,在Yesod生成的默认Settings.hs脚手架文件中,只指定了一个持久后端.有没有办法让开发配置使用一个持久后端,而生产配置又使用另一个?此外,这些应具有不同的数据库设置YAML文件,以便可以为sqlite配置简单的文件名,但生产数据库凭据永远不会访问VCS存储库.
在我工作的项目中,我们有一个主要功能分支,即将合并到主分支中.有很多提交不应单独审核,所以我为分支创建了一个PR并查看了每个文件的差异https://github.com/haskell/cabal/pull/2952/files
但是,有一些新文件超过了GitHub的1500行差异限制.我可以单击查看该文件,但GitHub的评论界面不再可用.
所以问题是,如何在GitHub上添加文件,文件中有超过1500行?
在我的旅行过程中,我写了这个模式的同义词:
pattern ConsK :: a -> D k (StreamK k a) -> StreamK k a
pattern ConsK x xs <- StreamK (Cons x ((UnsafeD . StreamK) -> xs)) where
ConsK x (UnsafeD (StreamK xs)) = StreamK (Cons x xs)
Run Code Online (Sandbox Code Playgroud)
最后一行捕获了此模式同义词的意图:虚拟构造函数ConsK包装(with StreamK)和unwraps(xs)其参数.当我在这个构造函数上进行模式匹配时,我只想让包装操作解包,并且需要包装的解包操作.
不幸的是,据我所知,我必须写一个非常难看的ViewPatternsed模式同义词.有没有办法写得更好?
这是一个涉及循环绑定和无限数据结构的函数式编程难题.有一点背景,所以请紧紧抓住.
那个设定.让我们定义一个表示递归数据类型的数据类型:
type Var = String
data STerm = SMu Var STerm
| SVar Var
| SArrow STerm STerm
| SBottom
| STop
deriving (Show)
Run Code Online (Sandbox Code Playgroud)
即t ::= ??. t | ? | t ? t | ? | ?.请注意,⊥表示没有居民的类型,而⊤表示所有居民的类型.请注意(??. ?) = ?,因为μ是最小的固定点运算符.
我们可以解释递归的数据类型为无限树,从多次展开产生??. t到t[? ? ??. t].(有关此过程的正式描述,请参阅http://lucacardelli.name/Papers/SRT.pdf)在Haskell中,我们可以定义一种懒惰树,它没有μ-binders或变量:
data LTerm = LArrow LTerm LTerm
| LBottom
| LTop
deriving (Show)
Run Code Online (Sandbox Code Playgroud)
并且,在普通的Haskell中,转换函数从一个到另一个:
convL :: [(Var, LTerm)] -> STerm -> …Run Code Online (Sandbox Code Playgroud) 当我使用 编译时-fsanitize=address,GCC/Clang 隐式地使用 ASAN 动态库,该库为 ASAN 提供运行时支持。如果您构建的库是由另一个应用程序动态加载的,则必须设置LD_PRELOAD为包含此动态库,以便它在应用程序启动时运行。
通常不清楚libasan.so希望使用哪个GCC/Clang副本,因为您的系统上可能有多个 ASAN 副本(如果您安装了多个编译器。)是否有可靠的方法来确定您需要的共享库的位置装载?
我将给出一个 GitHub GraphQL API 的具体示例(这是我想要解决的特定问题),但这个问题似乎可以概括为 GraphQL。
假设我想为存储库 pytorch/pytorch 上的问题 #1234 添加“高优先级”标签。根据API文档,我应该使用突变https://developer.github.com/v4/mutation/addlabelstolabelable/输入要求:
labelIds ([ID!]!)
The ids of the labels to add.
labelableId (ID!)
The id of the labelable object to add labels to.
Run Code Online (Sandbox Code Playgroud)
好的,请问如何获取 ID?在我的代码中,我知道我想要标签“高优先级”,但为了实际将其传达给此突变,我必须首先将“高优先级”解析为 ID,但首先执行另一个 GraphQL 调用。我想要标记的内容也是如此:我有一个 pytorch/pytorch#1234 形式的唯一标识符,但我没有 ID,我必须查找它。)
因此,在一天结束时,我必须执行3 个API 调用来标记某些内容,而我本可以在 REST 中完成,而不是通过一次调用来完成。一般来说,我看到很多 GraphQL 突变 API 只在 ID 中进行交互(即使系统有其他可用的规范标识符),我最终不得不进行额外的往返。我做错了吗?或者这确实是 GraphQL 的设计方式吗?
关于在JavaScript中测试两个对象以实现深度相等的主题,已经有很多墨水.但是,没有人关心区分以下两个对象:
var o1 = [{},{}];
var subitem = {};
var o2 = [subitem, subitem];
var o3 = [{}, {}];
Run Code Online (Sandbox Code Playgroud)
大多数深度相等算法会说o1,o2并且o3是相同的.我想要一个算法,说明o1并且o2不相等,但是o1并且o3相等.换句话说,我想要一个算法,告诉我指针图是否具有相同的结构.我关心这个因为如果我对第一个元素进行了修改,则反映在第二个元素中o2,而不是在第二个元素中o1.
这意味着循环结构的深度相等应该起作用:
var o1 = [];
o1.push(o1);
var o2 = [];
o2.push(o2);
// deepGraphEqual(o1, o2) == true
var o3 = [[]];
o3[0].push(o3);
// deepGraphEqual(o1, o3) == false
Run Code Online (Sandbox Code Playgroud)
如果你要避免改变项目,你可能需要ECMAScript6地图,所以我会接受使用它们的解决方案.
在命令行上获取进度条的一种流行方法是使用回车符,它会覆盖上一行,如以下脚本所示:
#!/bin/bash
echo -ne '[# ] 25%\r'
sleep 1
echo -ne '[## ] 50%\r'
sleep 1
echo -ne '[### ] 75%\r'
sleep 1
echo -ne '[####] 100%\r'
Run Code Online (Sandbox Code Playgroud)
这是可行的......如果你只需要打印一个进度条。但是更复杂的脚本可能希望在输出诊断输出的同时打印进度条。您希望命令行应用程序的缓冲区按如下方式演变(以 分隔----):
[# ] 25%
----
msg1
[# ] 25%
----
msg1
msg2
[# ] 25%
----
msg1
msg2
[## ] 50%
Run Code Online (Sandbox Code Playgroud)
等等。现在,流行的方法失败了:
#!/bin/bash
echo -ne '[# ] 25%\r'
echo "msg 1"
sleep 1
echo "msg 2"
echo -ne '[## ] 50%\r'
echo "msg 3"
sleep 1
echo "msg …Run Code Online (Sandbox Code Playgroud) haskell ×3
bash ×1
c ×1
clang ×1
coinduction ×1
ecmascript-6 ×1
gcc ×1
git ×1
github ×1
github-api ×1
graphql ×1
header ×1
infinite ×1
javascript ×1
ncurses ×1
openafs ×1
ruby ×1
shell ×1
terminal ×1
yesod ×1