小编Jør*_*eit的帖子

我可以用Node.js替换Apache吗?

我使用常见的嫌疑人(Apache,MySQL和PHP)在CentOS上运行一个网站.自从这个网站最初推出以来,它已经发展了很多,现在我想用它做更好的事情 - 即实时通知.根据我的阅读,Apache处理这个问题很糟糕.我想知道我是否可以用Node.js替换Apache(因此代替" LAMP "它将"LNMP").

我试过在线搜索解决方案,但还没找到.如果我正确地解释了我读过的东西,似乎大多数人都说Node.js可以同时替换Apache和PHP.我有很多现有的PHP代码,所以我宁愿保留它.

如果它还不是很明显,我很困惑,可以使用一些启示.非常感谢!

apache node.js

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

Delphi中的流畅界面

在Delphi 中使用流畅的接口有什么优缺点?

流畅的接口应该会增加可读性,但我有点怀疑有一个包含大量链接方法的长LOC.

有编译器问题吗?
有任何调试问题吗?
是否有任何运行时/错误处理问题?

Fluent接口用于例如TStringBuilder,THTMLWriterTGpFluentXMLBuilder.


更新:
David Heffernan询问我关注哪些问题.我已经考虑过这个问题了,整体问题是"明确指定它是如何完成"与"让编译器决定如何完成"之间的区别.

AFAICS,没有关于编译器如何实际处理链接方法的文档,也没有关于编译器如何处理链式方法的任何规范.

本文中,我们可以阅读有关编译器如何向声明为函数的方法添加两个额外的var参数,以及标准调用约定在寄存器中放置三个参数以及在堆栈中放置下一个参数的情况.因此,具有2个参数的"流畅函数方法"将使用该堆栈,而具有2个参数的"普通过程方法"仅使用该寄存器.

我们也知道编译器在优化二进制文件方面做了一些魔术(例如字符串作为函数结果,评估顺序,参考本地proc),但有时会给程序员带来惊人的副作用.

因此,内存/堆栈/寄存器管理更复杂以及编译器可能会产生一些无意识的副作用,这对我来说非常臭.因此问题.

在我阅读了答案(非常好的答案)后,我的担忧大打折扣,但我的偏好仍然是相同的:)

delphi fluent-interface

31
推荐指数
3
解决办法
2119
查看次数

在delphi中获取我的文档文件夹路径

我使用以下代码来获取特殊目录

uses
  ActiveX, ShlObj;

{...}

procedure TForm1.Button1Click(Sender: TObject);
// Replace CSIDL_HISTORY with the constants below
var
  Allocator: IMalloc;
  SpecialDir: PItemIdList;
  FBuf: array[0..MAX_PATH] of Char;
  PerDir: string;
begin
  if SHGetMalloc(Allocator) = NOERROR then
  begin
    SHGetSpecialFolderLocation(Form1.Handle, CSIDL_PERSONAL, SpecialDir);
    SHGetPathFromIDList(SpecialDir, @FBuf[0]);
    Allocator.Free(SpecialDir);
    ShowMessage(string(FBuf));
  end;
end;
Run Code Online (Sandbox Code Playgroud)

现在我想得到我的文档路径,所以我使用mydocfolderpath:= string(FBuf)+'\ Documents',我认为它运作良好但我怀疑这是所有Windows PC(个人文件夹/文件)上的mydocuments路径可以用户更改此结构并使我的文档文件夹anywhare else(例如:c:\ documents)如果用户更改路径给我一个正确的方式,我想知道mydocuments文件夹的名称是什么(我的文档或文档)

delphi directory

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

应该在64位Delphi中测试什么

具有64位编译功能的Delphi现在处于测试阶段,但只有受邀的beta测试人员才能获得此版本.

Beta测试人员应该测试什么?

delphi testing 64-bit delphi-xe2

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

我在哪里可以找到第三方单元/组件名称前缀的列表

大多数第三方组件供应商使用特定前缀作为其自己的单元名称和组件名称.

我可以在任何地方找到这些前缀的任何概述吗?

例如

gtUnitname = Gnostice
frxUnitname = FastReport
cxUnitName = Developer Express
Run Code Online (Sandbox Code Playgroud)

两个原因
1)需要找到单元的供应商
2)想在自己的组件中使用唯一的前缀

delphi prefix

7
推荐指数
2
解决办法
339
查看次数

向用户显示累积的消息

我想向用户显示代码执行期间发生的所有相关消息的摘要(例如,解析,算法,转换,验证等).过程完成后,消息应一起显示.

类似的事件可能不会发生,一次或多次.如果事件发生,应通知用户.可能有几种类型的事件.

我不确定方案是否清晰,但也许一些代码会有所帮助:

伪代码:

begin
  //Execute computing process//
  repeat
    Set a flag if an incident occurs
    Set another flag if another incident occurs
  until done

  //Show message to user//
  if AnyFlagIsSet then
    ShowPrettyMessageToUser     
end;
Run Code Online (Sandbox Code Playgroud)

可执行的DELPHI代码:

program Test;

{$APPTYPE CONSOLE}

uses
  SysUtils, StrUtils;

var
  i: Integer;
  tmpFlags: Array[1..4] of Boolean;
  tmpMessage: String;
  tmpChar: Char;
begin
  Randomize;
  repeat
    //Initialization//
    for i := 1 to 4 do
      tmpFlags[i] := False;

    //Will insident occur?//
    for i := 0 to 5 do
    begin
      if (Random(10) …
Run Code Online (Sandbox Code Playgroud)

delphi user-interface coding-style

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

如何模拟另一个类负责实例化的类?

请考虑以下代码:

type
  TFoo1 = class
  public
    procedure DoSomething1;
  end;

  TFoo2 = class
  private
    oFoo1 : TFoo1;
  public
    procedure DoSomething2;
    procedure DoSomething3;
    constructor Create;
    destructor Destroy; override;
  end;


procedure TFoo1.DoSomething1;
begin
  ShowMessage('TFoo1');
end;

constructor TFoo2.Create;
begin
  oFoo1 := TFoo1.Create;
end;

destructor TFoo2.Destroy;
begin
  oFoo1.Free;
  inherited;
end;

procedure TFoo2.DoSomething2;
begin
  oFoo1.DoSomething1;
end;

procedure TFoo2.DoSomething3;
var
  oFoo1 : TFoo1;
begin
  oFoo1 := TFoo1.Create;
  try
    oFoo1.DoSomething1;
  finally
    oFoo1.Free;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

我正在为一个班级创建单元测试,我坚持下去.我的问题都是关于模拟对象和我应该使用的设计模式的最佳方法.我是单元测试的类不是由我创建的.

  1. 在下面的示例中,我需要模拟,Foo1因为它向我在单元测试期间无法调用的Web服务发送请求.但是Foo1正在由TFoo2构造函数创建,我无法模仿它.在这种情况下我该怎么办?我应该修改TFoo2构造函数来接受这样的Foo1对象吗?

    constructor TFoo2.Create(aFoo1 …
    Run Code Online (Sandbox Code Playgroud)

delphi unit-testing design-patterns dependency-injection mocking

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

如何手动执行"OnCalcFields"事件?

假设我暂时想要在TClientDataSet上执行耗时的操作期间禁用OnCalcFields事件(例如,通过设置cdsCalcFields := nil).当我重新附加OnCalcFields方法时,如何告诉TClientDataSet重新计算计算字段?

可能需要手动重新计算的另一种情况是某些计算字段取决于其他数据集的情况(例如,计算字段用于临时保存来自其他数据集的某些聚合值).这在大多数情况下都可以正常工作,因为OnCalcFields事件的执行频率足以从其他数据集中获取正确的值.但在某些情况下,需要重新计算才能从其他数据集中获取正确的值.

AutoCalcFields属性设置为False也可能会使您进入需要手动重新计算的某些情况.

我已经看到了关于如何减少OnCalcFields事件执行的几个解释,但我找不到一个简单的方法来执行重新计算......

有什么建议?

delphi tclientdataset

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

为什么此代码会生成异常?

我今天写了一些代码,列出了PE文件中的所有部分...代码可以工作,但最后它给出了一个例外:无效的指针操作......我不知道为什么......有人可以找到错误

这是代码

procedure TForm1.Button1Click(Sender: TObject);
var
  IDH:PImageDosHeader;
  buf:Pointer;
  INH:PImageNtHeaders;
  ISH:array of TImageSectionHeader;
  FS:TFileStream;
  i,total:Word;
begin
  if OpenDialog1.Execute then
    begin
        Self.Caption:=OpenDialog1.FileName;
        FS:=TFileStream.Create(OpenDialog1.FileName,fmOpenRead or fmShareDenyNone);
        GetMem(buf,FS.Size);
        FS.Read(buf^,FS.Size);
        FS.Free;
        IDH:=buf;
        INH:=Ptr(Cardinal(buf)+Cardinal(IDH^._lfanew));
        ISH:=Ptr(Cardinal(buf)+Cardinal(IDH^._lfanew) + Sizeof(TImageNtHeaders));
        total:=INH^.FileHeader.NumberOfSections - 1 ;
        for i:=0 to total  do
        begin
              ListBox1.Items.Add(PAnsichar(@ISH[i].Name));
              Application.ProcessMessages;
        end;

    end;
end;
Run Code Online (Sandbox Code Playgroud)

delphi pointers dynamic-arrays

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

你怎么写一个无操作声明?

在Delphi中编写无操作语句的最佳方法是什么?

拿这个代码:

if a=b then
  SomeOldStatement
else
  AnotherStatement;
Run Code Online (Sandbox Code Playgroud)

并说你暂时想要退出SomeOldStatement.

你会选择这个解决方案吗?

if a=b then
  //SomeOldStatement
else
  AnotherStatement;
Run Code Online (Sandbox Code Playgroud)

就个人而言,我不喜欢空白then部分,并希望在那里有一些可编辑的东西 ......

if a=b then
  NoOp
  //SomeOldStatement
else
  AnotherStatement;
Run Code Online (Sandbox Code Playgroud)

delphi coding-style no-op

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