小编ske*_*gse的帖子

Java等待和通知:IllegalMonitorStateException

我不完全了解waitnotify(的Object工作),并因此我不得不瘦下来我尝试到下面的代码部分.

Main.java:

import java.util.ArrayList;

class Main
{
  public static Main main = null;

  public static int numRunners = 4;
  public static ArrayList<Runner> runners = null;

  public static void main(String[] args)
  {
    main = new Main();
  }

  Main()
  {
    runners = new ArrayList<Runner>(numRunners);

    for (int i = 0; i < numRunners; i++)
    {
      Runner r = new Runner();
      runners.add(r);
      new Thread(r).start();
    }

    System.out.println("Runners ready.");
    notifyAll();
  }
}
Run Code Online (Sandbox Code Playgroud)

Runner.java:

class Runner implements Runnable
{
  public void …
Run Code Online (Sandbox Code Playgroud)

java concurrency multithreading

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

如何更新Tkinter Label小部件的图像?

我希望能够在Tkinter标签上换出图像,但我不知道该怎么做,除了更换小部件本身.

目前,我可以显示如下图像:

import Tkinter as tk
import ImageTk

root = tk.Tk()
img = ImageTk.PhotoImage(Image.open(path))
panel = tk.Label(root, image = img)
panel.pack(side = "bottom", fill = "both", expand = "yes")
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

但是,当用户点击时,比如ENTER键,我想更改图像.

import Tkinter as tk
import ImageTk

root = tk.Tk()

img = ImageTk.PhotoImage(Image.open(path))
panel = tk.Label(root, image = img)
panel.pack(side = "bottom", fill = "both", expand = "yes")

def callback(e):
    # change image

root.bind("<Return>", callback)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

这可能吗?

python tkinter python-imaging-library python-2.7

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

Javascript创建新的"线程"

根据javascript,这是一个"线程",但代码似乎不适合传统的线程模型.

关于线程的概念,是否可以使这个代码更清晰?

function test() {
    alert("Test");
}

// this creates a new "thread," but doesn't make much sense to the untrained eye
setTimeout(test, 0); 
Run Code Online (Sandbox Code Playgroud)

还有其他方法可以分支吗?

javascript asynchronous

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

使用HTML5 WebGL着色器进行计算

在我看来,理论上可以使用WebGL进行计算 - 例如计算素数或π或沿着这些线的某些东西.但是,从我看到的很少,着色器本身不是用Javascript编写的,所以我有几个问题:

  1. 什么语言着色器写的?
  2. 考虑到着色器是如何工作的,尝试做这样的事情是否值得?
  3. 如何在运行时来回传递变量?或者如果不可能,在着色器完成执行后如何将信息传回?
  4. 由于它不是Javascript,如何处理非常大的整数(Java中的BigInteger或Javascript中的移植版本)?
  5. 我认为这会自动编译脚本,使其在图形卡中的所有核心上运行,我可以得到确认吗?

如果相关,在这种特定情况下,我试图将相当大的数字作为[非常]扩展的compsci项目的一部分.

编辑:

  1. WebGL着色器是用GLSL编写的.

javascript html5 shader webgl

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

带键盘快捷键的Tkinter下拉菜单?

我想在Tkinter中有一个Dropdown Menu,其中包含与此命令关联的快捷键.这可能吗?

我如何在特定字符下添加下划线,以允许Alt-F-S(文件 - >保存)?

python keyboard-shortcuts tkinter

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

PHP:为数组值添加前缀字符串

向数组添加特定值的最佳方法是什么?有点难以解释,但这应该有所帮助:

<?php
$myarray = array("test", "test2", "test3");
$myarray = array_addstuff($myarray, " ");
var_dump($myarray);
?>
Run Code Online (Sandbox Code Playgroud)

哪个输出:

array(3) {
  [0]=>
  string(5) " test"
  [1]=>
  string(6) " test2"
  [2]=>
  string(6) " test3"
}
Run Code Online (Sandbox Code Playgroud)

你可以这样做:

function array_addstuff($a, $i) {
    foreach ($a as &$e)
        $e = $i . $e;
    return $a;
}
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有更快的方法,或者这个功能是否是内置的.

php arrays

19
推荐指数
3
解决办法
3万
查看次数

Java Enum静态最终实例变量

好哇!

这段代码工作了一段时间,然后我决定添加一个默认颜色,它停止工作.我收到以下错误:

1 error found:
File: Status.java  [line: 20]
Error: Status.java:20: illegal reference to static field from initializer
Run Code Online (Sandbox Code Playgroud)

在编译时使用以下代码.

import java.awt.Color;

enum Status
{
  OFF ("Off"),
  TRAINING ("Training", new Color(255, 191, 128)),
  BEGINNER ("Beginner", new Color(128, 255, 138)),
  INTERMEDIATE ("Intermediate", new Color(128, 212, 255)),
  ADVANCED ("Advanced", new Color(255, 128, 128));

  public final String name;
  public final Color color;

  public static final Color defaultColor = Color.WHITE;

  Status(String name)
  {
    this(name, defaultColor);
  }
  Status(String name, Color color)
  {
    this.name = name;
    this.color …
Run Code Online (Sandbox Code Playgroud)

java enums static final compiler-errors

15
推荐指数
3
解决办法
3万
查看次数

Node.js无状态/无Cookie会话API身份验证

我正在构建一个API并尝试在许多上下文中找出身份验证.

会话和密码验证

API需要为我们创建和部署的客户端应用程序提供服务,并使用密码处理经过身份验证的请求.对每个请求发送密码并不是一个好主意,因此首先点击登录端点并获取会话ID更有意义.有问题的webapp是用AngularJS编写的,应该在localStorage中跟踪它自己的会话,以减轻会话劫持并消除对cookie的依赖以跟踪会话.

webapp需要在每个请求中发送会话标识符,并且当前在请求正文中这样做.这很容易碎片,并与API紧密结合.我宁愿以一种方式通过标题传递所有身份验证信息,最好是 - 而不是遍布请求正文,URL和标题的许多不同字段.

会话存储

当然,Redis太棒了.会话存储很简单,并自动进行垃圾收集.不幸的是,redis中的会话很难管理:我不能轻易撤销给定用户的所有会话.通过将会话存储在真正的redis-datastructure而不是全局键空间中来添加该功能会删除添加键控TTL的功能.我目前的解决方案是在MongoDB用户集合中存储会话列表,并在会话活动(例如登录/注销)上垃圾收集过期的会话.

会话使用connect-redis模块以redis形式存储,但随着每个请求发送它们都不包含在cookie中.目前,我有一小块中间件,它将会话标识符从请求主体中取出并将其放入一个req.cookies对象中.

var express = require('express');
var RedisStore = require('connect-redis')(require('connect'));

var app = express();
app.use(function(req, res, next) {
  req.cookies = {session: req.body.session};
});
app.use(express.session({
  store: new RedisStore({
    client: redisClient,
    prefix: 'session:'
  }),
  key: 'session',
  secret: 'all mine'
});
Run Code Online (Sandbox Code Playgroud)

这种方法很好,除了express.session在表达响应时最终设置cookie,而这不是理想的行为.

如何在Express的上下文中正确设置?

API密钥

我们的API还应支持第三方应用程序的API密钥,以获得对我们系统的有限和受控访问.我所知道的最常见的机制是将API密钥分发给感兴趣的开发人员,并让开发人员在请求中传递API密钥.这遇到了会话/密码身份验证遇到的相同困境:每个API都要求API密钥位于请求的不同部分,从正文到网址到标头.

扩展和开放标准

虽然我们不打算在初始版本中支持OpenAuth和OpenID等开放式身份验证标准,但我们确实希望创建一个框架,其中添加所述标准非常简单.其中一部分可能是统一授权凭证如何传递给API,如会话/密码和API Key支持的身份验证.

另一个问题是,自定义HTTP Authorization标头是一个好主意,还是自定义标头是一个更好的主意.

CRUD支持

为了支持RESTful API的CRUD范例,不在身体中提供身份验证信息是有意义的,因为这会限制所有对POST请求的API请求,而CRUD建议使用各种HTTP方法.

TLDR

两件事情:

  1. 如何在不使用基于cookie的会话的情况下使用connect-redis这样的模块.
  2. 我们应该如何配置身份验证信息以获得最大的灵活性和互操

authentication cookies session node.js express

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

Java N维数组

我需要能够有一个n维字段,其中n基于构造函数的输入.但我甚至不确定这是否可行.是吗?

java constructor multidimensional-array

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

iOS禁用页面滚动,使用溢出滚动:触摸

因此,假设我们希望通过"添加到主屏幕"使webapp感觉像本机应用程序.其中一个步骤是禁用默认滚动.容易,对吗?

// window or document
window.addEventListener("touchmove", function(event) {
    // no more scrolling
    event.preventDefault();
}, false);
Run Code Online (Sandbox Code Playgroud)

这一切都很好,花花公子,直到你加入overflow-scrolling混合.确切地说,在iOS上它将是-webkit-overflow-scrolling: touch.

/* #scrollable happens to be a ul */
#scrollable {
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
}
Run Code Online (Sandbox Code Playgroud)

通过添加事件预防,容器中的硬件加速滚动不起作用,显然不是预期的效果.

显而易见的解决方案看起来像这样:

// you could do this for multiple elements, of course
var scrollable = document.querySelector("#scrollable");
scrollable.addEventListener("touchmove", function(event) {
    // no more bubbling :)
    event.stopPropagation();
}, false);
Run Code Online (Sandbox Code Playgroud)

此解决方案引入了一个问题,但是,如果您尝试向左或向右滚动#scrollable,它将恢复为默认滚动侦听器.显然,您应该监控事件以查看touchmove事件是向左还是向右追踪,对吧?不幸的是,在我不完全理解的情况下,不会在容器中垂直滚动时恢复默认滚动侦听器.

怎么办?更糟糕的是,我们理想情况下能够处理click或点击个人事件li(阅读:) touchstart:

var items = scrollable.querySelectorAll("#scrollable li"); …
Run Code Online (Sandbox Code Playgroud)

javascript css scroll dom-events ios

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