小编bde*_*ham的帖子

Clojure中的工作队列

我正在使用Clojure应用程序从Web API访问数据.我将要发出大量请求,并且许多请求将导致更多请求被发送,因此我希望将请求URL保留在后续下载间隔60秒的队列中.

这篇博文后,我把它放在一起:

(def queue-delay (* 1000 60)) ; one minute

(defn offer!
  [q x]
  (.offerLast q x)
  q)

(defn take!
  [q]
  (.takeFirst q))

(def my-queue (java.util.concurrent.LinkedBlockingDeque.))

(defn- process-queue-item
  [item]
  (println ">> " item)   ; this would be replaced by downloading `item`
  (Thread/sleep queue-delay))
Run Code Online (Sandbox Code Playgroud)

如果我(future (process-queue-item (take! my-queue)))在我的代码中包含一个,然后在REPL我可以(offer! my-queue "something"),我看到">>某事"立即打印.到现在为止还挺好!但是我需要队列在我的程序活动的整个时间内持续.(future ...)我刚才提到的调用工作是将一个项目从队列中拉出来,一旦它可用,但是我想要一些能够持续观察队列的东西,并process-queue-item在有空的时候调用.

而且,与通常的Clojure对并发的热爱相反,我想确保一次只发出一个请求,并且我的程序等待60秒来完成每个后续请求.

我认为这个Stack Overflow问题是相关的,但我不确定如何调整它来做我想做的事情.如何连续轮询我的队列并确保一次只运行一个请求?

queue clojure

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

zsh:如何取回'未扩展'命令

Zsh具有扩展球体的一个很好的功能.例如,击球Tabls **/*.js

ls app/assets/javascripts/application.js vendor/assets/javascripts/Markdown.Converter.js
Run Code Online (Sandbox Code Playgroud)

有没有办法将其折叠回原始的glob版本?或者我应该禁用glob扩展?

我想要它的原因是,当我正在调试一个glob并且我Tab只是为了仔细检查一些东西时,没有办法找回并完成模式.我必须从头开始.

zsh zsh-zle

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

"程序入口点...无法找到"错误的DLL中

我从Haskell代码创建了一个DLL,我从C++调用这个DLL.当我在Visual Studio 2010中以调试模式运行它时,我的应用程序工作正常,但是当我进行发布版本并安装它时,我收到错误

无法在动态链接库SpectrumMath.dll中找到过程入口点LVSpecData_GetGlob.

SpectrumMath.dll是我的基于Haskell的DLL.奇怪的是函数LVSpecData_GetGlob不在那个DLL中 - 它在我链接的另一个DLL中,并且当我添加Haskell DLL时,没有关于 DLL或我的应用程序对它的使用的改变.

此错误消息似乎表明Windows对哪些函数存在于哪些DLL中感到困惑.这可能会出错?

c++ dll haskell

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

如何在多个端口上运行Nginx

我试图在具有相同实例的两个端口上配置nginx,例如在端口80和端口81上,但到目前为止没有运气.这是我想要做的一个例子:

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen  80;
        server_name  chat.local.com;

        location / {
            proxy_pass http://127.0.0.1:8080;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "Upgrade";
            proxy_set_header Host $host;
            proxy_buffering off;

        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }

    server {
        listen  81;
        server_name  console.local.com;
        location / {
            proxy_pass http://127.0.0.1:8888;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "Upgrade";
            proxy_set_header Host $host;
            proxy_buffering …
Run Code Online (Sandbox Code Playgroud)

nginx

9
推荐指数
2
解决办法
2万
查看次数

在没有双重评估的情况下在Clang中实现min()和max()

min函数的经典预处理器版本看起来像

#define min(a, b) ((a) < (b) ? (a) : (b))
Run Code Online (Sandbox Code Playgroud)

这使你可以进行双重评估 - 你做的情况min(f(), g()),忘记fg有副作用,你必须花费数小时试图找出你的功能运行两次的原因.为了防止这种情况,你可以做到

#define min(a, b) ({__typeof__(a) _a = (a); \
    __typeof__(b) _b = (b); \
    _a < _b ? _a : _b;})
Run Code Online (Sandbox Code Playgroud)

这在GCC下运行得很好,但是如果你通过-Wgnu套装运行它- 这套警告属于-pedantic你的保护范围内- 你得到的错误就像

test.c:5:10: error: use of GNU statement expression extension [-Werror,-Wgnu]
        int a = min(3, 7);
                ^
test.c:1:22: note: expanded from macro 'min'
#  define min(a, b) ({__typeof__(a) _a = (a); __typeof__(b) …
Run Code Online (Sandbox Code Playgroud)

c clang

9
推荐指数
2
解决办法
3498
查看次数

iOS网络应用是否支持新的"快速点按"行为?

我正在编写一个旨在通过iOS下的主屏幕快捷方式使用的Web应用程序.我添加了元标记

<meta name="viewport" content="width=device-width,
                               initial-scale=1,
                               user-scalable=no"/>
Run Code Online (Sandbox Code Playgroud)

利用新的快速敲击行为.这在Safari中很有用,但是当我将应用程序添加到我的主屏幕并以这种方式使用它时,我得到了较旧的"慢速"行为.我尝试添加CSS

body {
    touch-action: manipulation;
}
Run Code Online (Sandbox Code Playgroud)

但那也不起作用.

这种网络应用程序是否不支持新的快速点击行为?

iphone-standalone-web-app

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

我可以使用matplotlib.units在图表上显示的单位之间切换吗?

我正在使用matplotlib在桌面应用程序中渲染图形,我对matplotlib对单位的支持感到有些困惑.我想让用户更改图表x轴上显示的单位:所有计算都将以纳米为单位进行,但图表可以以纳米或千兆赫为单位显示.(请注意,这两个单位之间存在反向关系,而非线性关系.)

有两种显而易见的方法:"手动"或使用matplotlib.在前一种情况下,matplotlib对单位一无所知; 当用户更改单位时,我只需重新计算所有数据点,更改轴的边界和标签,并告诉matplotlib重绘.但我希望matplotlib具有内置功能来做同样的事情.

有一些轻量级文档matplotlib.units,但据我所知,这是用于绘制用户指定对象的数组,而不是浮点数组.我的数据实际上是一个浮点数组,由于每个图表有数十万个数据点,我无法将每个值包装在某个自定义模型类中.(即使这个简单的例子将每个数据点包装在一个模型类中,整个例子都是如此通用,我无法告诉我如何根据我的需要调整它.)无论如何,原始数据点总是具有相同的单位,因此只需要将值转换另一个单位.

我怎样才能告诉matplotlib我的单位然后只是用axes.set_xunit它们之间的东西来改变它们?

matplotlib

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

单击wx.Dialog中的"确定"或"取消"按钮时,为什么没有触发EVT_CLOSE?

我有一个wx.Dialog子类,当用户单击OK按钮时需要执行几个清理操作.该的wx.Dialog文件称,点击确定或取消应该发射EVT_CLOSE事件:

EVT_CLOSE:用户或以编程方式关闭对话框(请参阅Window.Close).用户可以生成此事件,单击关闭按钮(通常是标题栏右上角的"X")(如果存在)(请参阅CLOSE_BOX样式)或单击带有ID_CANCEL或ID_OK ID的按钮.

但是,我正在使用WX 2.9.5.0(通过wxPython),当我在此测试应用程序中单击"确定"或"取消"时,不会调用OnClose方法.单击系统的关闭按钮(我正在使用OS X)时调用OnClose.我是否实现了此事件处理错误或者wx.Dialog是否真的不符合其文档?在后一种情况下,拦截单击"确定"按钮的最佳方法是什么?

from __future__ import print_function
import wx

class TestDialog(wx.Dialog):
    def __init__(self, parent):
        wx.Dialog.__init__(self, parent, title='Test Dialog')

        sizer = wx.BoxSizer(wx.VERTICAL)

        message = wx.StaticText(self, wx.NewId(), 'This is some dummy text')
        sizer.Add(message)

        ok_button = wx.Button(self, wx.ID_OK, 'OK')
        cancel_button = wx.Button(self, wx.ID_CANCEL, 'Cancel')

        btn_sizer = self.CreateStdDialogButtonSizer(wx.OK | wx.CANCEL)
        btn_sizer.Add(cancel_button)
        btn_sizer.Add(ok_button)
        sizer.Add(btn_sizer)

        self.SetSizer(sizer)

        self.Bind(wx.EVT_CLOSE, self.OnClose)

    def OnClose(self, event):
        print('In OnClose')
        event.Skip()

if __name__ == '__main__':
    app = wx.App(False)

    dialog = TestDialog(None)
    result = dialog.ShowModal()
    print('Result: {}'.format(result))
Run Code Online (Sandbox Code Playgroud)

wxwidgets wxpython

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

将信号和插槽附加到QSharedPointer中的对象

我的应用程序包含几个这样的函数:

void SomeClass::set_data_provider(DataProvider *data_provider)
{
    connect(data_provider, SIGNAL(data_available(int)),
        this, SLOT(data_available(int)));
}
Run Code Online (Sandbox Code Playgroud)

为了避免传递原始指针,我已将所有出现的更改DataProvider *QSharedPointer<DataProvider>.后者几乎是前者的直接替代,除了你不能传递QSharedPointer QObject::connect.我通过从QSharedPointer中提取原始指针来解决这个问题:

void SomeClass::set_data_provider(QSharedPointer<DataProvider> data_provider)
{
    connect(data_provider.data(), SIGNAL(data_available(int)),
        this, SLOT(data_available(int)));
}
Run Code Online (Sandbox Code Playgroud)

这似乎工作正常,但它看起来不优雅,我担心像这样访问原始指针.有没有更好的方法连接到在QSharedPointer中传递的对象?

c++ qt qsharedpointer

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

如何确定UIImage是否为空?

如何检查a UIImage是否为空?

class UserData {
    ...
    var photo: UIImage = UIImage()
}
Run Code Online (Sandbox Code Playgroud)

我的ViewController代码看起来像:

var userData = UserData()
    ...

func preparePhoto(){
        if (self.userData.photo == nil) {
            ...
        }else{
            ...
        }
    }
Run Code Online (Sandbox Code Playgroud)

self.userData.photo == nil 不适用于Swift.

Xcode说: UIImage is not convertible to MirrorDisposition

uiimage ios swift

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