小编Raf*_*sta的帖子

Javascript Array Concat不能正常工作.为什么?

所以我创建了这个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)

javascript jquery jquery-ui

77
推荐指数
4
解决办法
6万
查看次数

如何处理套接字中的网络端口滥用问题

我有一个用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攻击,你最终会耗尽套接字.

然后还有管理打开的套接字的问题:

  1. 只是不要关闭它.打开套接字永远存在.攻击者的代价:高 - 他们没有鳍.我的成本:更高.我的所有文件描述符最终都会被使用.
  2. 每个插槽生成一个线程以休眠10分钟然后关闭套接字.攻击者的代价:高 - 他们没有鳍.我的成本:更高.虽然我最终关闭了套接字,但是对于每个请求,我使用的套接字比攻击者使用的时间更长,并且我有一个线程的开销.
  3. 生成一个处理所有滥用套接字到期的线程.攻击者的代价:高 - 他们没有鳍.我的成本:更高.像2一样,很多插座都是敞开的.管理它的单个线程的开销.代码复杂,烦恼.

c c++ sockets networking tcp

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

我可以在mem-initializer中初始化一个联合吗?

我很惊讶这不起作用:

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)

c++

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

Javascript:检测文本是否会换行

如何检测一段文字是否会换行?

所以想象一下,我有一个带有标题的UI,文字很大.我希望这里最大的文字在菜单栏中垂直放置.它显示如下数值数据:

LABEL: 9999   LABEL2: 99999
Run Code Online (Sandbox Code Playgroud)

数字部分可以变大.在某些屏幕上 - 例如手机 - 它会导致元素溢出并包裹在应该保留的条形下方.我不想做溢出:隐藏.我希望用户看到整件事.

我希望能够以某种方式计算元素的大小,以及它是否会先切换缩小字体,可能会移动元素以留出空间.

javascript

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

localtime返回在cygwin shell上运行的Windows程序的GMT

请考虑以下代码:

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)

c c++ time cygwin

7
推荐指数
1
解决办法
2734
查看次数

如何使用模板参数键入一个函数指针

考虑一下:

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++ templates function-pointers

7
推荐指数
1
解决办法
4528
查看次数

C++中的流接口问题

所以我在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.

我可以解决两个(坏)方式.

我可以从流明的东西开始明确: …

c++ serialization

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

如何在stash中将stdin重定向到文件

考虑这个非常简单的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方式这样做而不使用"猫".但我无法弄明白.

注意:

  1. 必须在脚本中.我想让脚本在之后对文件内容进行操作.

  2. 必须在一个文件中,在我的情况下,后面的步骤涉及一个只从文件中读取的工具.

  3. 已经有了一个非常好的方法 - 它只是看起来像一个黑客.有原生方式吗?像"/ tmp/file <0"或"0>/tmp/file".我认为bash会有一个原生语法来做到这一点......

bash

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

Http 1.1协议验证

是否有任何服务或库可以验证http1.1服务器?

我实现了一个简单的http服务器,大约一年左右的时间我一直在扩展它,因为我需要一个非常完整和功能齐全的http1.1 web/app服务器.

实际上它的效果非常好 - 例如它似乎为我尝试的所有浏览器提供了强大的功能,cUrl等,但是当你阅读http1.1的规范时,有一百万个极端情况.我确定那里有各种奇怪的小鬼.

是否有可以向服务器发出http请求以验证协议的服务,或者执行此操作的库?

web-services http

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

如何在初始化程序中以编程方式创建对象键?

我有一个对象,我想用动态命名的键初始化.我知道我可以在这样的代码中做到这一点:

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)

我知道这不起作用.我尝试过这个.但有没有类似的方法可行?

javascript

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

迭代字符串数组会产生错误

我传入一组错误消息来解析.一个示例输入是:

"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)

javascript

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

为什么.done()需要匿名函数?

为什么这样做:

$.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)

第二个"数据"没有定义.我花了一段时间才意识到这就是问题所在.但它对我来说是神秘的,为什么它会这样.

javascript jquery

0
推荐指数
2
解决办法
122
查看次数