小编Mag*_*nus的帖子

组织cython源文件及其测试(使用nosetests)

当玩鼻子并尝试将它与cython结合时,我无法完全按照我喜欢的方式工作.代码组织如下:

.
??? setup.py
??? src
    ??? calc
    ?   ??? factorial.py
    ?   ??? __init__.py
    ?   ??? tests.py
    ??? cycalc
        ??? tests.py
        ??? triangle.pyx
Run Code Online (Sandbox Code Playgroud)

每个tests.py包含2个测试,一个成功,一个失败.运行的结果setup.py nosetests是只calc/tests.py运行.如果我在此运行之后运行nosetests3 src/cycalc了两个测试cycalc/tests.py.但是,如果我清理所有构建文件,它会失败,因为cycalc/triangle.pyx尚未内置到共享库中.

然后我尝试添加文件src/cycalc/__init__.py,现在setup.py nosetests拿起cycalc/tests.py但它找不到所需的模块,它被放入src.

如何安排我的cython源代码和测试以setup.py nosetests找到它需要的一切?

python nose cython

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

vi 模式下清空行会删除上面的行

我在 VI 模式下运行 zsh,并显示两行提示符。每当我使用“cc”清除该行时,提示符上方的一行就会被删除。例如,如果我从

magnus@tatooine 2502  ~
[I] % 
magnus@tatooine 2502  ~
[I] % 
Run Code Online (Sandbox Code Playgroud)

然后我按转义键并“抄送”我得到

magnus@tatooine 2502  ~
magnus@tatooine 2502  ~
[I] % 
Run Code Online (Sandbox Code Playgroud)

其重复性非常强;我可以通过多次重复该序列来清除终端。我需要做什么才能让 ZSH 清除该行而不删除其上方的行?

我的提示是使用以下命令创建的

zstyle ':vcs_info:*' enable git hg svn
zstyle ':vcs_info:(git*|hg*)' get-revision true
zstyle ':vcs_info:(git*|hg*)' check-for-changes true

zstyle ':vcs_info:git*' formats "(%s: %12.12i %c%u %b)" # hash changes branch
zstyle ':vcs_info:git*' actionformats "(%s(%F{yellow}%a%f): %12.12i %c%u %b)"
zstyle ':vcs_info:hg*:*' branchformat "%b" # only show branch

zstyle ':vcs_info:(hg*|git*):*' stagedstr "%F{green}S%f"
zstyle ':vcs_info:(hg*|git*):*' unstagedstr "%F{red}U%f"

zstyle ':vcs_info:git*+set-message:*' hooks git-st git-stash …
Run Code Online (Sandbox Code Playgroud)

zsh

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

让莱宁根缓存包裹

clojurescript项目中,我希望leiningen在我们的CI生成过程中减少对互联网连接的依赖。我希望将其缓存在网络磁盘上(使用该:local-repo设置来创建“共享缓存”),然后将其添加为存储库,以使其首先从那里获取,而仅从clojar和其他外部站点获取它在“共享缓存”中找不到。

我阅读了此内容,删除了我的~/.m2文件夹,并将以下内容添加到我的内容中project.clj

:profiles {:local-cache
           {:local-repo "/shared/disc/clojars-cache"
            :repositories {"local" {:uri "file:///shared/disc/clojars-cache"
                                    :releases {:checksum :ignore}}}}}
Run Code Online (Sandbox Code Playgroud)

的初始构建lein with-profile +local-cache cljsbuild确实确实填充了缓存,但是

  1. 我的~/.m2/repository文件夹重新创建并填充的东西,但它似乎只能是Clojure的通过需要的东西leiningen,和
  2. 删除~/.m2后续重建后,似乎根本不使用本地存储库,而是无论如何都从clojars下载。

显然我正在丢失某些东西……或者也许我正在以完全错误的方式来解决这个问题。

总之,我怎么能得到leiningen

  1. 在网络磁盘上创建程序包的缓存,并
  2. 得到它更喜欢将此缓存作为软件包的来源(而不是像clojars这样的外部来源)?

caching clojure leiningen clojurescript

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

在Gitlab CI中的版本之间缓存堆栈数据库

我有一个大型的,使用CMake构建的多语言项目。在其中有一个用Haskell编写的部分,它用于stack构建。CI构建由Gitlab CI处理,并在docker executor中运行。在创建docker映像期间,使用下载ghc stack setup。但是,构建的Haskell部分仍然需要相当长的时间,因为它会为每个构建重新下载并构建所有必需的软件包。

为了缓存我添加的本地数据库

cache:
  paths:
    - src/utils/.stack-work
Run Code Online (Sandbox Code Playgroud)

(堆栈YAML文件位于中src/utils/,三个Haskell软件包也位于目录中。)

但这并没有真正加快构建速度。在更仔细地阅读了堆栈数据库之后,我意识到快照已放入STACK_ROOT~/.stack)中。研究堆栈的选项表明,没有办法指定快照应与分开存储STACK_ROOT

鉴于Gitlab CI似乎只允许在build dir中缓存项目,我想我有两个选择:

  • 用于stack --stack-root <folder under build> ...将放置STACK_ROOT在构建目录中,然后缓存整个内容。这意味着我的缓存从不到100M增长到了约1.6G!
  • 将我们当前正在使用的快照预取到用于构建的docker映像中。

现在我的问题是:

  • 我认为快照始终存储在其中STACK_ROOT是否正确?
  • 有没有一种预取特定快照的方法,类似于如何stack setup提取ghc?

也许我完全错了,并且有一种更好的方法来限制缓存大小。

haskell gitlab-ci haskell-stack

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

使用它编译C lib和OCaml exe,全部使用ocamlfind

我正在尝试使用ocamlfind该C库来编写如何使用编译C库和OCaml可执行文件.

我把一组相当愚蠢的示例文件放在一起.

% cat sillystubs.c
#include <stdio.h>

#include <caml/mlvalues.h>
#include <caml/memory.h>
#include <caml/alloc.h>
#include <caml/custom.h>

value
caml_silly_silly( value unit )
{
    CAMLparam1( unit );
    printf( "%s\n", __FILE__ );
    CAMLreturn( Val_unit );
}

% cat silly.mli 
external silly : unit -> unit = "silly_silly"

% cat foo.ml
open Silly
open String

let _ =
    print_string "About to call into silly";
    silly ();
    print_string "Called into silly"
Run Code Online (Sandbox Code Playgroud)

我相信以下是编译库的方法:

% ocamlfind ocamlc -c sillystubs.c
% ar rc libsillystubs.a sillystubs.o
% ocamlfind …
Run Code Online (Sandbox Code Playgroud)

ocaml ffi ocamlfind

4
推荐指数
1
解决办法
1940
查看次数

linux uinput:简单的例子?

我在使用工作时获得代码的两面遇到了一些问题uinput.

基于uinput入门:用户级输入子系统[死链接; 存档 ]我总结了以下作家(减去错误处理):

int main(int ac, char **av)
{
    int fd = open("/dev/uinput", O_WRONLY | O_NONBLOCK);
    int ret = ioctl(fd, UI_SET_EVBIT, EV_ABS);
    ret = ioctl(fd, UI_SET_ABSBIT, ABS_X);

    struct uinput_user_dev uidev = {0};
    snprintf(uidev.name, UINPUT_MAX_NAME_SIZE, "uinput-rotary");
    uidev.absmin[ABS_X] = 0;
    uidev.absmax[ABS_X] = 255;
    ret = write(fd, &uidev, sizeof(uidev));
    ret = ioctl(fd, UI_DEV_CREATE);

    struct input_event ev = {0};
    ev.type = EV_ABS;
    ev.code = ABS_X;
    ev.value = 42;

    ret = write(fd, &ev, sizeof(ev));

    getchar(); …
Run Code Online (Sandbox Code Playgroud)

linux uinput

4
推荐指数
1
解决办法
6133
查看次数

将C#对象方法链接转换为F#

相当愚蠢的问题,但我似乎找不到正确的术语,所以我所有的搜索都失败了.

我有以下C#方法调用链:

container.Register(Component.For<IMyInterface>().ImplementedBy<MyClass>().Named("MyInstance").LifeStyleSingleton);
Run Code Online (Sandbox Code Playgroud)

如何在F#中编写相同的内容?

我可以做这个:

let f0 = Component.For<IMyInterface> () in
let f1 = f0.ImplementedBy<MyClass> () in
let f2 = f1.Named "MyInstance" in
let f3 = f2.LifestyleSingleton () in
ignore (container.Register f3)
Run Code Online (Sandbox Code Playgroud)

但肯定有一些其他更好的方式来构建这样的呼叫.没有?

加成

早期的答案让我找到了一个有效的解决方案(我已经删除了所有提及,ignore因为它无关紧要,只会让读者感到困惑):

container.Register (Component.For<IMyInterface>().ImplementedBy<MyClass>().Named("MyInstance").LifestyleSingleton())
Run Code Online (Sandbox Code Playgroud)

但是,一个回复说明这应该有效:

container.Register <| Component.For<IMyInterface>().ImplementedBy<MyClass>().Named("MyInstance").LifestyleSingleton()
Run Code Online (Sandbox Code Playgroud)

但事实并非如此.后一部分,后面的表达式<|,会产生类型错误

该表达式应该具有类型单元,但这里有类型ComponentRegistration <IMyInterface>.

c# f#

3
推荐指数
1
解决办法
218
查看次数

在Qt中有一个关系和信号

我是Qt开发的新手,我们的设计在几个地方使用了has-a关系.在某些情况下,容器应该暴露内部对象的信号,然后我当前为每个这样的信号写了一个私有插槽,我在实践中再次重新发出信号.Qt中是否有一些快捷方式可以帮助暴露容器内部物体的信号?

c++ qt

1
推荐指数
2
解决办法
104
查看次数

通过 add_filter 配置 WordPress

我刚刚阅读了 WordPress 的自动更新程序。想要禁用它,我搜索并找到了一个描述如何配置 Wordpress 自动更新的页面。起初我尝试使用过滤方法,但是在放置该行之后

add_filter( 'automatic_updater_disabled', '__return_true' );
Run Code Online (Sandbox Code Playgroud)

在我的wp-config.php网站完全崩溃了。我不得不恢复使用

define( 'AUTOMATIC_UPDATER_DISABLED', true );
Run Code Online (Sandbox Code Playgroud)

就我而言,这也同样好。但是说我想做更细粒度的配置,这需要我使用过滤器,我该如何使其工作,如果不在,我应该把配置放在哪里wp-config.php

wordpress

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

为什么在结构中放入struct的大小?

我第一次开始在Windows上使用SetupAPI,并注意到在调用填充结构的函数之前,我总是需要将结构的大小放入结构中.例如:

SP_DEVICE_INTERFACE_DATA dintf_data;
dintf_data.cbSize = sizeof(dintf_data);
SetupDiEnumDeviceInterfaces(di, NULL, &GUID_DEVINTERFACE_USB_DEVICE, 0, &dintf_data);
Run Code Online (Sandbox Code Playgroud)

这样做的原因是什么?

这是实现他们想要达到的目标的好方法,还是有更好的方法?

(我能想到的唯一原因是它是处理API版本控制的一种方式.)

c api

0
推荐指数
1
解决办法
69
查看次数

标签 统计

api ×1

c ×1

c# ×1

c++ ×1

caching ×1

clojure ×1

clojurescript ×1

cython ×1

f# ×1

ffi ×1

gitlab-ci ×1

haskell ×1

haskell-stack ×1

leiningen ×1

linux ×1

nose ×1

ocaml ×1

ocamlfind ×1

python ×1

qt ×1

uinput ×1

wordpress ×1

zsh ×1