所以我创建了这个jqueryui小部件.它创建了一个div,我可以将错误输入.小部件代码如下所示:
$.widget('ui.miniErrorLog', {
logStart: "<ul>", // these next 4 elements are actually a bunch more complicated.
logEnd: "</ul>",
errStart: "<li>",
errEnd: "</li>",
content: "",
refs: [],
_create: function() { $(this.element).addClass( "ui-state-error" ).hide(); },
clear: function() {
this.content = "";
for ( var i in this.refs )
$( this.refs[i] ).removeClass( "ui-state-error" );
this.refs = [];
$(this.element).empty().hide();
},
addError: function( msg, ref ) {
this.content += this.errStart + msg + this.errEnd;
if ( ref ) {
if ( ref instanceof Array ) …Run Code Online (Sandbox Code Playgroud) 我有一个用c ++编写的web应用程序,使用TCP/IP通过标准网络套接字,在Linux上运行.该服务对野生和羊毛互联网开放.
我会定期收到来自运行自动脚本的垃圾邮件发送者的滥用请求.我可以检测到这些并关闭套接字.现在我只是做一个礼貌的套接字关闭,就像我对已经完成的任何有效请求所做的那样,套接字lib关闭如下:
close( mSocket );
Run Code Online (Sandbox Code Playgroud)
但有时关闭套接字通常会通知垃圾邮件脚本套接字连接已终止,并立即启动另一个欺诈请求.
什么是终止TCP/IP连接的最佳方法,该连接清理系统上的打开套接字,但让远程方挂起.那就是我希望以对我来说成本最低的方式关闭套接字,但是它们的成本最高.
@Nicholas Wilson:
使用TCP_REPAIR似乎是一个好主意.在TCP_REPAIR模式下关闭套接字时,不会发送FIN或RST数据包.远程插座悬空.我打算试试并报告.这是我的(未经测试的)代码:
if ( abuse )
{
int aux = 1;
if ( setsockopt( mSocket, SOL_TCP, TCP_REPAIR, &aux, sizeof( aux )) < 0 )
reportError( "Tried to do a rude socket close... but could not turn on repair mode.\n" );
}
close( mSocket );
Run Code Online (Sandbox Code Playgroud)
我会报告这是否有效.(@edit:测试答案如下)
@"让插座保持开放"的想法:
这可行,但次优.攻击者可以使用开放式套接字使系统饱和.每个请求都会创建一个保持打开的新套接字.有了DOS攻击,你最终会耗尽套接字.
然后还有管理打开的套接字的问题:
我很惊讶这不起作用:
union DlDatum
{
float mFloat;
s32 mInteger;
};
class DlDbE
{
public:
DlDbE( float f ) : mData.mFloat( f ) {};
private:
DlDatum mData;
};
Run Code Online (Sandbox Code Playgroud)
有没有办法在c ++构造函数mem-initializer列表中初始化union?
更新:答案是为union创建构造函数.不知道可以做到的.这是我做的:
union DlDatum
{
float mFloat;
s32 mInteger;
bool mBoolean;
u32 mSymbol;
u32 mObjIdx;
DlDatum( ) : mInteger( 0 ) {}
DlDatum( float f ) : mFloat( f ) {}
DlDatum( s32 i ) : mInteger( i ) {}
DlDatum( bool b ) : mBoolean( b ) {}
DlDatum( u32 s ) …Run Code Online (Sandbox Code Playgroud) 如何检测一段文字是否会换行?
所以想象一下,我有一个带有标题的UI,文字很大.我希望这里最大的文字在菜单栏中垂直放置.它显示如下数值数据:
LABEL: 9999 LABEL2: 99999
Run Code Online (Sandbox Code Playgroud)
数字部分可以变大.在某些屏幕上 - 例如手机 - 它会导致元素溢出并包裹在应该保留的条形下方.我不想做溢出:隐藏.我希望用户看到整件事.
我希望能够以某种方式计算元素的大小,以及它是否会先切换缩小字体,可能会移动元素以留出空间.
请考虑以下代码:
time_t t;
t = time( NULL );
elog << "timezone: " << getenv( "TZ" )
<< ", current local time: " << asctime( localtime( &t ));
Run Code Online (Sandbox Code Playgroud)
如果我使用MSVC构建此代码,并在Windows DOS shell下运行它,我得到正确的本地时间:
timezone: , current local time: Wed Jul 25 13:05:08 2012
Run Code Online (Sandbox Code Playgroud)
但是如果我在像bash这样的cygwin shell下运行相同的程序,这段代码会返回GMT!
timezone: America/New_York, current local time: Wed Jul 25 18:05:08 2012
Run Code Online (Sandbox Code Playgroud)
如果我在Linux或OsX中运行此程序,它也会返回正确的本地时间.
为什么?
@Update:现在是一年之后,我发现我在下面给出的答案并不总是有效.
似乎对某些程序来说,未设置TZ并不总是有效.我不知道为什么.但是有一个繁琐的解决方法.基本上,在您取消设置TZ之后,您必须检查本地时间确实不再返回GMT,但仅当您实际上不在GMT时区时,并且当您调用localtime()时计算对time_t的手动调整或找时间()
u64 localTimeOffset = 0;
static void unsetTz()
{
static bool unsetTZ = false;
if ( !unsetTZ )
{
putenv( "TZ=" );
unsetTZ = true; …Run Code Online (Sandbox Code Playgroud) 考虑一下:
typedef void (*ExecFunc)( int val );
class Executor
{
void doStuff() { mFunc( mVal ); }
void setFunc( ExecFunc func ) { mFunc = func; }
int mVal;
ExecFunc mFunc;
};
void addOne( int val ) { val = val+1; } // this could be passed as an ExecFunc.
Run Code Online (Sandbox Code Playgroud)
非常简单.假设我现在要模板化这个?
typedef void (*ExecFunc)( int val ); // what do I do with this?
template < typename X > class Executor
{
void doStuff() { mFunc( mVal ); }
void …Run Code Online (Sandbox Code Playgroud) 所以我在c ++中有一个虚拟流媒体接口
class KxStream
{
public:
virtual KxStream& operator<< ( u32 num ) = 0;
};
Run Code Online (Sandbox Code Playgroud)
它拥有大量基本的<<运算符,适用于所有内置类型.我刚刚列出了一个.
然后我有一些实现流接口的类.像这样:
class KxCbuf : public KxStream
{
public:
KxStream& operator<<( u32 num );
}
Run Code Online (Sandbox Code Playgroud)
因此在KxCbuf中有一个流接口的实现.到现在为止还挺好.然后我有一些重载流接口的类:
class KxSymbol
{
operator u32() const;
friend KxStream& operator<<( KxStream& os, KxSymbol sym );
};
Run Code Online (Sandbox Code Playgroud)
请注意,此类将运算符强制转换为内置类型.现在,当我尝试将其中一个类流式传输到实现流式接口的类之一时,我收到一个错误:
KxCbuf buf;
KxSymbol sym;
buf << sym; // error!
Run Code Online (Sandbox Code Playgroud)
编译器对使用哪些函数感到困惑.Gcc编译得很好,但是说有很多方法可以做到这一点.MSVC没有编译说有多个重载:
src/variable.cpp(524) : error C2666: 'KxCbuf::operator <<' : 15 overloads have similar conversions
Run Code Online (Sandbox Code Playgroud)
我知道发生了什么,而不是如何令人满意地解决它.所以编译器可以转换KxCbuf - > KxStream,然后调用friend函数,这是正确的事情.或者它可以转换KxSymbol - > u32,然后在KxCbuf中调用u32 <<运算符,继承自KxStream.
我可以解决两个(坏)方式.
我可以从流明的东西开始明确: …
考虑这个非常简单的bash脚本:
#!/bin/bash
cat > /tmp/file
Run Code Online (Sandbox Code Playgroud)
它将管道中的任何内容重定向到文件中.例如
echo "hello" | script.sh
Run Code Online (Sandbox Code Playgroud)
并且"hello"将位于文件/ tmp/file中.这有效...但似乎应该有一个本地bash方式这样做而不使用"猫".但我无法弄明白.
注意:
它必须在脚本中.我想让脚本在之后对文件内容进行操作.
它必须在一个文件中,在我的情况下,后面的步骤涉及一个只从文件中读取的工具.
我已经有了一个非常好的方法 - 它只是看起来像一个黑客.有原生方式吗?像"/ tmp/file <0"或"0>/tmp/file".我认为bash会有一个原生语法来做到这一点......
是否有任何服务或库可以验证http1.1服务器?
我实现了一个简单的http服务器,大约一年左右的时间我一直在扩展它,因为我需要一个非常完整和功能齐全的http1.1 web/app服务器.
实际上它的效果非常好 - 例如它似乎为我尝试的所有浏览器提供了强大的功能,cUrl等,但是当你阅读http1.1的规范时,有一百万个极端情况.我确定那里有各种奇怪的小鬼.
是否有可以向服务器发出http请求以验证协议的服务,或者执行此操作的库?
我有一个对象,我想用动态命名的键初始化.我知道我可以在这样的代码中做到这一点:
obj = {};
prefix = "blah";
i = 0;
obj[prefix + i] = "whatever";
console.log( obj.blah0 );
Run Code Online (Sandbox Code Playgroud)
例如,从这里开始:如何创建要添加到JavaScript对象变量的动态密钥
但这可以在初始化器中完成吗?
obj = { [prefix+i]: "whatever" };
Run Code Online (Sandbox Code Playgroud)
我知道这不起作用.我尝试过这个.但有没有类似的方法可行?
我传入一组错误消息来解析.一个示例输入是:
"An item with this x Id already exists.
An item with this y id already exists.
An item with this barcode already exists.
"
Run Code Online (Sandbox Code Playgroud)
也就是说,字符串实际上是每个上面用\n分隔的行,最后是\n.
function( msg )
{
alert( "\"" + msg + "\"" );
var aLines = msg.split( /\r?\n+/ );
for ( var i in aLines )
{
if ( !aLines[i] ) { alert( "Error!" ); continue; }
alert( i + ": \"" + aLines[i] + "\"" );
}
}
Run Code Online (Sandbox Code Playgroud)
我把它分成几行,然后遍历这些行.在索引3处没有行和第一个条件触发器.这应该不是空行吗?例如""
然后循环实际上再将一个元素转换为4,并显示函数的内容.
那是我得到的 - 五个警报:
0: "An …Run Code Online (Sandbox Code Playgroud) 为什么这样做:
$.ajax({ url: urlIn, dataType: 'json', cache: false })
.done( function( data ) { doStuff( data ) });
Run Code Online (Sandbox Code Playgroud)
但不是这个:
$.ajax({ url: urlIn, dataType: 'json', cache: false })
.done( doStuff( data ) );
Run Code Online (Sandbox Code Playgroud)
第二个"数据"没有定义.我花了一段时间才意识到这就是问题所在.但它对我来说是神秘的,为什么它会这样.
c++ ×5
javascript ×5
c ×2
jquery ×2
bash ×1
cygwin ×1
http ×1
jquery-ui ×1
networking ×1
sockets ×1
tcp ×1
templates ×1
time ×1
web-services ×1