我们正在使用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); …我正在寻找有关在我的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);
  }
};
模块2:
exports.do_something = function () {
  module1.get_db(function (err, conn) {
    if (err == null) {
      // continue using query
    }
  });
};
让每个想要获得数据库连接的人受到使用回调的惩罚似乎很痛苦.
我能做到这一点:
模块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();
  } …我们正在写一个客户端和服务器(我认为是)非常简单的网络通信.多个客户端连接到服务器,然后服务器将数据发送回所有其他客户端.
服务器只是位于阻塞select循环中等待流量,当它到来时,将数据发送到其他客户端.这似乎工作得很好.
问题是客户.在阅读时,它有时会想要写一次.
但是,我发现如果我使用:
 rv = select(fdmax + 1, &master_list, NULL, NULL, NULL);
我的代码将阻塞,直到有新数据要读取.但有时(异步,来自另一个线程)我将在网络通信线程上写入新数据.所以,我希望我的select定期唤醒,让我检查是否有要写的数据,如:
if (select(....) != -1)
{
  if (FD_SET(sockfd, &master_list))
     // handle data or disconnect
  else
     // look for data to write and write() / send() those.
}
我尝试将选择设置为轮询模式(或荒谬的短暂超时):
// 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);
但是发现那时客户端永远不会得到任何传入的数据.
我也尝试将socket fd设置为非阻塞,如:
fcntl(sockfd, F_SETFL, O_NONBLOCK);
但这并没有解决问题:
select()没有struct …我正在尝试在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.
SHGetFileInfo""当我打电话时返回SHGFI_ICONLOCATION(这似乎是该API的已知问题).
我已经使用也试过SHCreateItemFromParsingName名称与得到的意图IThumbnailProvider,但BindToHandler总是返回E_NOTIMPL了BHID_ThumbnailHandler...
IShellItem *psi;
hr = SHCreateItemFromParsingName(path, NULL, …有没有办法,从Cocoa应用程序中更改系统网络设置(特别是代理设置).我发现有一个名为的preferences.plist在/库/首选项/ SystemConfiguration有我想要的设置,但我无法弄清楚如何让系统处理此文件的变更,无需重新启动.
这可以通过编程方式完成,或至少通过启动一些命令来完成吗?(这个解决方案可能只有10.5.x,我假设)
由于我可以立即在系统偏好设置中更改这些设置,因此必须有某种方式,它只是让我无法实现....
谢谢!
我有一些代码从文件中获取巨型图标:
// 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);
现在,问题是,如果路径没有与之关联的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;
}
我拿出结果 …
我正在使用Visual Studio安装项目为我的新Windows程序(单个EXE文件)创建安装程序.它似乎唯一缺少的是运行组件安装程序的方法.我需要捆绑并运行一个单独的安装程序EXE与我的程序,但每当我尝试将其作为自定义操作运行时,我得到"嵌套安装程序"错误(您无法在安装程序中运行安装程序).
因此,如果没有购买商业安装程序($$$$),有没有办法编写自定义操作来执行此操作?我已经看过这方面的一些教程,它看起来并不那么令人生畏,但是我担心在释放设置事务锁之后(或之前)运行自定义操作以便下一个安装程序可以运行.
建议?
谢谢!
windows installation install visual-studio-2010 visual-studio
我一直在玩弄浮点数,根据我过去对它们的了解,事实最终0.1 + 0.2是这样的0.30000000000000004 doesn't surprise me.
然而,令我惊讶的是整数运算似乎总是 to work just fine and not have any of these artifacts.
\n\n我首先在 JavaScript 中注意到这一点(node.js 中的 Chrome V8):
\n\n0.1 + 0.2 == 0.3 // false, NOT surprising\n123456789012 + 18 == 123456789030  // true\n22334455667788 + 998877665544 == 23333333333332 // true\n1048576 / 1024 == 1024  // true\nC++(Mac OS X 上的 gcc)似乎具有相同的属性。
\n\n最终结果似乎是整数只是 \xe2\x80\x94 因为缺乏更好的单词 \xe2\x80\x94工作。只有当我开始使用十进制数字时,事情才会变得不稳定。
\n\n这是设计的一个特性、数学产物,还是编译器和运行时环境所做的某些优化?
\n我在Mac上运行Carbon Emacs,我的GUI emacs设置了非常令人愉悦的配色方案.不幸的是,在终端窗口中运行"emacs"时看起来很糟糕,它会解析我的根文件夹中的相同.emacs文件.
那么,有没有办法在我的.emacs文件中有条件地执行代码,这样我就可以为命令行和"GUI"emacs选择不同的颜色方案?
谢谢!
我的主程序产生一个线程,执行以下命令:
// alloc autorelease pool somewhere before
NSArray *blah = [NSArray arrayWithObject: @"moo"];
[self performSelectorOnMainThread: @selector(boonk:) withObject: blah
      waitUntilDone: NO];
// release autorelease pool somewhere after
现在,这似乎对我来说是错误的,因为自动释放池可以在选择器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
}
这绝对没有错误,但......似乎不自然.是否有一个objective-c引用计数约定或协议来处理这种情况(交叉线程等待发布),或者是第二种解决方案,它的工作方式是什么?
multithreading memory-management conventions objective-c nsthread
c++ ×3
windows ×3
javascript ×2
winapi ×2
ajax ×1
blocking ×1
c ×1
cocoa ×1
command-line ×1
conventions ×1
database ×1
emacs ×1
install ×1
installation ×1
java ×1
json ×1
macos ×1
networking ×1
node.js ×1
nsthread ×1
objective-c ×1
read-write ×1
restlet ×1
select ×1
settings ×1
sockets ×1