小编Rob*_*ugs的帖子

使用端口80运行Node.js时的最佳做法(Ubuntu/Linode)

我正在设置我的第一台Node.js服务器cloud Linux node,我对细节很新Linux admin.(顺便说一句,我不是在尝试同时使用Apache.)

一切都安装正确,但我发现,除非我使用root login,我无法听port 80节点.但是出于安全原因,我宁愿不以root身份运行它.

什么是最佳做法:

  1. 为节点设置好的权限/用户以使其安全/沙盒化?
  2. 允许在这些约束内使用端口80.
  3. 启动节点并自动运行它.
  4. 处理发送到控制台的日志信息.
  5. 任何其他一般维护和安全问题.

我应该将端口80流量转发到不同的侦听端口吗?

谢谢

linux security configuration web-applications node.js

250
推荐指数
4
解决办法
14万
查看次数

使用OpenGL自定义iOS界面方向更改动画

我有一个iPad应用程序,并使用openGL绘制主视图,我想在设备旋转时动画我自己的更改.

请注意,这个应用程序只是偶尔绘制,它不是经常动画.我的场景也是(非常复杂的)2D绘图,而不是3D.我只是希望它在设备方向改变期间简单地围绕显示中心旋转,保持正确的宽高比.

目前我只有以下代码:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    // nothing yet
}

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
    IMMainView *mv = (IMMainView *)self.view;
    [mv createRenderbuffer];
    [mv drawView];
}
Run Code Online (Sandbox Code Playgroud)

我只是重新创建OpenGL渲染缓冲区,以便在旋转完成后匹配新的宽度和高度.

默认的iOS行为似乎会旋转视图,但随着宽高比的变化也会奇怪地延伸它.

我可以为我的绘图参数设置动画,以便在过渡期间更好地显示,但我不明白(1)如何停止iOS动画我的图层和(2)如何从这些与iOS匹配的方法调用设置动画循环动画.

例如,在动画期间,实际视图宽度和高度是否逐渐变化?

另外一个可能的问题是何时重新创建渲染缓冲区,因为如果OpenGL缓冲区与iOS视图边界不匹配,则像素纵横比不正确,图形看起来很糟糕.

任何帮助,将不胜感激.

animation opengl-es interface-orientation ios

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

如何使用C/gcc从外设IO寄存器读取?

我在AVR32上有一个中断服务路由.我需要从中断状态寄存器中读取以取消中断.但是我没有使用读取的结果.我宁愿不使用asm指令,但我担心gcc会将读取优化为虚拟变量.什么是正确的方法?

目前我有:

uint32_t tmp = *(volatile uint32_t *)INTERRUPT_STATUS_REG_ADDRESS;
Run Code Online (Sandbox Code Playgroud)

tmp也应该波动吗?我担心如果没有使用tmp,gcc会跳过读取.

gcc avr volatile isr

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

在模板中使用 typedef 和 typename

我想在模板类中定义一个类型名称,我可以在其他地方使用它来引用类中成员的类型。

template <class T>
class CA
{
public:
    //typedef typename T::iterator iterator_type;
    typedef typename T ElementType1; // compile error on this line
    //typedef T ElementType2;

    T m_element;
};
Run Code Online (Sandbox Code Playgroud)

并像这样使用它:

template <class T>
class CDerived : public CBase<typename T::ElementType1>
{
 //...
};
Run Code Online (Sandbox Code Playgroud)

并声明如下对象:

typedef CDerived<CA> MyNewClass;
Run Code Online (Sandbox Code Playgroud)

这不可能吗?我有一些代码可以在 VS2010 下正确编译,但不能在使用以下行的 Xcode 下编译:

typedef typename T ElementType1;
Run Code Online (Sandbox Code Playgroud)

显然,编译器期望在 typename 之后有一个限定名称,但我不明白模板类型怎么会有一个限定名称。

我不明白 ElementType1 和 ElementType2 在这种情况下的区别。

我查看了许多有关堆栈溢出的问题,但大多数似乎仅涉及示例中的 iterator_type 之类的声明。

c++ templates typedef derived typename

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

使用 CGImageSourceRef 加载图像时旋转错误

我使用下面的代码在 C++ 库中加载图像。加载某些图像时,图像的旋转是错误的。它似乎会影响来自 iPhone 相机的 JPEG。我该如何解决?

据推测,某处有一个标志为相机捕获的 JPEG 设置。我不确定以这种方式加载图像时如何访问它。

CGImageSourceRef source = CGImageSourceCreateWithURL(url, NULL);
CFRelease(url);

if(source==NULL)
    return IM_ErrFileError;

CGImageRef image = CGImageSourceCreateImageAtIndex(source, 0, NULL);
CFRelease(source);

if(image==NULL)
    return IM_ErrFileError;

int w = (int)CGImageGetWidth(image);
int h = (int)CGImageGetHeight(image);

im::Err err = img.Create(im::IntSize(w, h), bands, sizeof(uint8_t), imgtype);
if(IM_FAILED(err))
{
    CGImageRelease(image);
    return err;
}

img.Clear();

CGColorSpaceRef colorSpace = CGColorSpaceCreateWithName(colorspacename);
if(colorSpace==NULL)
{
    CGImageRelease(image);
    return IM_ErrAlloc;
}

// Create RGBA context
CGContextRef context = CGBitmapContextCreate(img.BytePtr(), w, h, 8, img.StrideBytes(), colorSpace, alphainfo);

if(context==NULL)
{
    CGColorSpaceRelease(colorSpace);
    CGImageRelease(image);
    return …
Run Code Online (Sandbox Code Playgroud)

macos image-rotation cgimagesource

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

我是否需要在关键部分使用volatile关键字进行内存访问?

我正在使用gcc为单处理器32位微控制器编写代码.

我需要从链表中消耗带时间戳的对象.代码的另一部分可以是异步的(可能在ISR中)将它们添加到列表中.

关键部分通过关闭中断和使用该barrier()功能来实现.

我很困惑gcc优化可以通过缓存指向列表项的指针(下一个要删除的最新项目,列表头或空闲列表)来破坏我的代码.我不希望while循环中的任何内容从前一个循环中缓存.内存屏障是否会保护我免受编译器决定在函数启动时加载一次指针而永远不会重新加载它?所有这些列表指针都可以在生产者代码的关键部分中修改(未示出).我试图理解是否pqueue_first应该是一个易失性指针,例如.

据推测,如果没有循环(这是添加到列表的情况),如果函数中的所有代码都在关键部分,我可以吗?

请不要只指向一些关于易失性或关键部分的通用文章,因为我已经阅读了很多部分,但是我很难看到如何将它应用于这个特定的代码.我知道volatile确保编译器每次引用时都会重新加载变量.但我不了解优化的可能范围及其与内存障碍的相互作用.

typedef struct {
    EV_EventQueueEntry_t *pqueue_alloc; // allocation (never changes)
    EV_EventQueueEntry_t *pqueue_head; // head of active queue (ISR can change it)
    EV_EventQueueEntry_t *pqueue_free; // head of free list (ISR can change it)
    EV_EventQueueEntry_t *pqueue_first; // soonest item in queue (ISR can change it)
    EV_EventQueueEntry_t *pqueue_first_prev; // back pointer from soonest item (ISR can change it)
    EV_UInt_t max_event_count;
} EV_EventQueue_t;

void RunLoop(EV_EventQueue_t *pev)
{
    while(not timeout)
    {
        // Enter critical section
        disable_interrupts(); …
Run Code Online (Sandbox Code Playgroud)

c volatile producer-consumer critical-section memory-barriers

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

调试错误"不允许对非寄存器k进行程序分配"

我的Verilog代码看起来像这样.该模块实现了一个具有地址寄存器的查找表ROM,该寄存器在时钟脉冲上递增.对其输出进行解码以得到32位数.我不明白为什么k需要成为一个注册.事实上,我不希望k在地址寄存器改变后有一个时钟延迟.如何addr指定解码?

(注意,似乎与SO上类似命名的其他问题无关,因为我已经检查过了 - 我不想在输出上有一个寄存器.我只是想异步解码计数寄存器的输出.也许我很困惑我假设<=运算符将始终生成一个时钟寄存器,但也许我应该总是使用<=.)

module k_rom (input clk, input reset, output [31:0] k);
// Constants defined by the SHA-2 standard.
reg [5:0] addr;

always @ (addr)
    begin
        case(addr)
            6'h00: k = 32'h428a2f98;
            6'h01: k = 32'h71374491;
            6'h02: k = 32'hb5c0fbcf;
            6'h03: k = 32'he9b5dba5;
            6'h04: k = 32'h3956c25b;
            6'h05: k = 32'h59f111f1;
            6'h06: k = 32'h923f82a4;
            6'h07: k = 32'hab1c5ed5;
            6'h08: k = 32'hd807aa98;
            6'h09: k = 32'h12835b01;
            6'h0a: k = 32'h243185be;                                        
// other constants not shown for …
Run Code Online (Sandbox Code Playgroud)

verilog lookup-tables

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