小编Mar*_*Wan的帖子

Restlet,CLAP,Ajax和块超时

我们正在使用RESTlet为我们的项目做一个小的REST服务器.我们在继承自的类中设置了一堆路由Application:

public static void createRestServer(ApplicationContext appCtx, String propertiesPath) throws Exception {

  // Create a component
  Component component = new Component();
  component.getServers().add(Protocol.HTTP, 8081);
  component.getClients().add(Protocol.FILE);
  component.getClients().add(Protocol.CLAP);

  Context context = component.getContext().createChildContext();
  RestServer application = new RestServer(context);

  application.getContext().getParameters().add("useForwardedForHeader", "true");

  application.getContext().getAttributes().put("appCtx", appCtx);
  application.getContext().getAttributes().put("file", propertiesPath);

  // Attach the application to the component and start it
  component.getDefaultHost().attach(application);
  component.start();
}

private RestServer(Context context) {
  super(context);
}

public synchronized Restlet createInboundRoot() {
  Router router = new Router(getContext());

  // we then have a bunch of these
  router.attach("/accounts/{accountId}", AccountFetcher.class); …
Run Code Online (Sandbox Code Playgroud)

java ajax json restlet chunked-encoding

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

node.js用于创建数据库连接一次的设计模式

我正在寻找有关在我的node.js应用程序中创建数据库连接的设计模式的帮助.

这似乎很明显:

模块1:

var db;
exports.get_db = function(callback) {

  if (db == null) {
    dblibrary.create(connection_params, function(error, conn) {
      if (error == null) {
        db = conn;
        callback(null, db);
      }
    });
  } else {
    callback(null, db);
  }
};
Run Code Online (Sandbox Code Playgroud)

模块2:

exports.do_something = function () {
  module1.get_db(function (err, conn) {
    if (err == null) {
      // continue using query
    }
  });
};
Run Code Online (Sandbox Code Playgroud)

让每个想要获得数据库连接的人受到使用回调的惩罚似乎很痛苦.

我能做到这一点:

模块1:

var db;

dblibrary.create_connection(connection_params, function (err, conn) {

  if (err != null) {
     console.log("can't create connection");
     console.log(err);
     process.exit();
  } …
Run Code Online (Sandbox Code Playgroud)

javascript database design-patterns node.js

12
推荐指数
2
解决办法
9950
查看次数

使用select读取和写入相同的套接字(TCP)

我们正在写一个客户端和服务器(我认为是)非常简单的网络通信.多个客户端连接到服务器,然后服务器将数据发送回所有其他客户端.

服务器只是位于阻塞select循环中等待流量,当它到来时,将数据发送到其他客户端.这似乎工作得很好.

问题是客户.在阅读时,它有时会想要写一次.

但是,我发现如果我使用:

 rv = select(fdmax + 1, &master_list, NULL, NULL, NULL);
Run Code Online (Sandbox Code Playgroud)

我的代码将阻塞,直到有新数据要读取.但有时(异步,来自另一个线程)我将在网络通信线程上写入新数据.所以,我希望我的select定期唤醒,让我检查是否有要写的数据,如:

if (select(....) != -1)
{
  if (FD_SET(sockfd, &master_list))
     // handle data or disconnect
  else
     // look for data to write and write() / send() those.
}
Run Code Online (Sandbox Code Playgroud)

我尝试将选择设置为轮询模式(或荒谬的短暂超时):

// master list contains the sockfd from the getaddrinfo/socket/connect seq
struct timeval t;
memset(&t, 0, sizeof t);
rv = select(fdmax + 1, &master_list, NULL, NULL, &t);
Run Code Online (Sandbox Code Playgroud)

但是发现那时客户端永远不会得到任何传入的数据.

我也尝试将socket fd设置为非阻塞,如:

fcntl(sockfd, F_SETFL, O_NONBLOCK);
Run Code Online (Sandbox Code Playgroud)

但这并没有解决问题:

  1. 如果我的客户端select()没有struct …

c sockets select read-write blocking

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

提取文件的高分辨率图标或缩略图

我正在尝试在Windows中获得高分辨率图标或缩略图,给出该文件的完整路径.并不需要成为一个缩略图-一个漂亮的图标将是巨大的.我不在乎它是一个HICON还是一个HBITMAP:我将把它放在一个GDI +对象中并将其渲染到一个设备上下文中.

我已经尝试使用SHGetFileInfo(与标志的各种变化),但从来没有得到超过32×32〜图标回来了,这可怕扩展到128个像素左右,我需要更多.

if (!SHGetFileInfoW(path, 0, &fi, sizeof(fi),
                    SHGFI_ICON | SHGFI_ICONLARGE | SHGFI_TYPENAME))
    return GetLastError();

// fi.hIcon is a valid icon here, but it's horrible quality with
// a black mask on it. I want higher quality, and dare I dream of
// alpha channel? Mask is acceptable, i suppose.
Run Code Online (Sandbox Code Playgroud)

SHGetFileInfo""当我打电话时返回SHGFI_ICONLOCATION(这似乎是该API的已知问题).

我已经使用也试过SHCreateItemFromParsingName名称与得到的意图IThumbnailProvider,但BindToHandler总是返回E_NOTIMPLBHID_ThumbnailHandler...

IShellItem *psi;
hr = SHCreateItemFromParsingName(path, NULL, …
Run Code Online (Sandbox Code Playgroud)

c++ windows winapi

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

以编程方式更改系统网络(代理)设置

有没有办法,从Cocoa应用程序中更改系统网络设置(特别是代理设置).我发现有一个名为的preferences.plist/库/首选项/ SystemConfiguration有我想要的设置,但我无法弄清楚如何让系统处理此文件的变更,无需重新启动.

这可以通过编程方式完成,或至少通过启动一些命令来完成吗?(这个解决方案可能只有10.5.x,我假设)

由于我可以立即在系统偏好设置中更改这些设置,因此必须有某种方式,它只是让我无法实现....

谢谢!

macos settings networking cocoa

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

Win32 - 确定路径是否有可用的巨型图标

我有一些代码从文件中获取巨型图标:

// Get the image list index of the icon
SHFILEINFO sfi;
if (!SHGetFileInfo(pszPath, 0, &sfi, sizeof(sfi), SHGFI_SYSICONINDEX)) return NULL;

// Get the jumbo image list
IImageList *piml;
if (FAILED(SHGetImageList(SHIL_JUMBO, IID_PPV_ARGS(&piml)))) return NULL;

// Extract an icon
HICON hico;
piml->GetIcon(sfi.iIcon, ILD_SCALE|ILD_TRANSPARENT, &hico);
Run Code Online (Sandbox Code Playgroud)

现在,问题是,如果路径没有与之关联的256x256图标,我不希望ImageList返回图标.(它将有助于采用32x32并将其放入256x256图标,我无法使用).

那么,有没有办法找出,如果与路径相关联的图标有一个巨型图标,或者确实只是一个缩放的32x32?如果没有,我将获得常规系统图标.

注意:

最终解决方案受Jonathan的启发:

HBITMAP hbitmapForFile(LPCWSTR path, int w, int h)
{
    IShellItemImageFactory *pif;    
    HBITMAP hbm;

    SIZE sz = { w, h };
    SHCreateItemFromParsingName(path, NULL, IID_PPV_ARGS(&pif));
    pif->GetImage(sz, SIIGBF_RESIZETOFIT, &hbm);
    pif->Release();
    return hbm;
}
Run Code Online (Sandbox Code Playgroud)

我拿出结果 …

c++ windows winapi windows-shell

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

如何在Visual Studio安装项目中运行外部安装程序

我正在使用Visual Studio安装项目为我的新Windows程序(单个EXE文件)创建安装程序.它似乎唯一缺少的是运行组件安装程序的方法.我需要捆绑并运行一个单独的安装程序EXE与我的程序,但每当我尝试将其作为自定义操作运行时,我得到"嵌套安装程序"错误(您无法在安装程序中运行安装程序).

因此,如果没有购买商业安装程序($$$$),有没有办法编写自定义操作来执行此操作?我已经看过这方面的一些教程,它看起来并不那么令人生畏,但是我担心在释放设置事务锁之后(或之前)运行自定义操作以便下一个安装程序可以运行.

建议?

谢谢!

windows installation install visual-studio-2010 visual-studio

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

浮点表示似乎可以正确地进行整数运算 - 为什么?

我一直在玩弄浮点数,根据我过去对它们的了解,事实最终0.1 + 0.2是这样的0.30000000000000004 doesn't surprise me.

\n\n

然而,我惊讶的是整数运算似乎总是 to work just fine and not have any of these artifacts.

\n\n

我首先在 JavaScript 中注意到这一点(node.js 中的 Chrome V8):

\n\n
0.1 + 0.2 == 0.3 // false, NOT surprising\n123456789012 + 18 == 123456789030  // true\n22334455667788 + 998877665544 == 23333333333332 // true\n1048576 / 1024 == 1024  // true\n
Run Code Online (Sandbox Code Playgroud)\n\n

C++(Mac OS X 上的 gcc)似乎具有相同的属性。

\n\n

最终结果似乎是整数只是 \xe2\x80\x94 因为缺乏更好的单词 \xe2\x80\x94工作。只有当我开始使用十进制数字时,事情才会变得不稳定。

\n\n

这是设计的一个特性、数学产物,还是编译器和运行时环境所做的某些优化?

\n

javascript c++ floating-point

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

仅在命令行版本的Emacs中执行.emacs文件中的代码?

我在Mac上运行Carbon Emacs,我的GUI emacs设置了非常令人愉悦的配色方案.不幸的是,在终端窗口中运行"emacs"时看起来很糟糕,它会解析我的根文件夹中的相同.emacs文件.

那么,有没有办法在我的.emacs文件中有条件地执行代码,这样我就可以为命令行和"GUI"emacs选择不同的颜色方案?

谢谢!

emacs configuration command-line

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

Objective-C NSThread引用计数约定(保留vs自动释放)

我的主程序产生一个线程,执行以下命令:

// alloc autorelease pool somewhere before
NSArray *blah = [NSArray arrayWithObject: @"moo"];
[self performSelectorOnMainThread: @selector(boonk:) withObject: blah
      waitUntilDone: NO];
// release autorelease pool somewhere after
Run Code Online (Sandbox Code Playgroud)

现在,这似乎对我来说是错误的,因为自动释放池可以在选择器boonk:完成执行之前释放,这会导致崩溃.

所以,我接下来的自然行动将是:

// alloc autorelease pool somewhere before
NSArray *blah = [[NSArray alloc] initWithObject: @"moo"];
[self performSelectorOnMainThread: @selector(boonk:) withObject: blah
      waitUntilDone: NO];
// release autorelease pool somewhere after


- (void)boonk: (id)data
{
   // do something with data
   [data release];   // release the ref count the thread added
}
Run Code Online (Sandbox Code Playgroud)

这绝对没有错误,但......似乎不自然.是否有一个objective-c引用计数约定或协议来处理这种情况(交叉线程等待发布),或者是第二种解决方案,它的工作方式是什么?

multithreading memory-management conventions objective-c nsthread

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