小编eee*_*aii的帖子

如何查看HttpWebRequest类发送的原始HTTP请求?

我知道你们都会回答"使用像Fiddler这样的调试代理服务器",但事情并非那么简单.

这是我的情况:我有一些代码在服务器上运行,在ASP.NET页面代码隐藏(aspx.cs)中,其中(除其他外)建立与另一个服务器的连接,抓取一些东西,然后格式化它并将其返回给浏览器.

问题是其他服务器做错了,所以我希望能够将调试标志传递到页面中(通过查询字符串,例如?debug = true),这样它就会打印出完全原始的 HTTP请求它发送到其他服务器所以我可以看到什么是错的.这段代码在几个地方运行,所以我希望能够在dev,staging或production上传递这个标志,只看到请求,而不必弄清楚生产服务器是否可以与某处存在的代理服务器通信等

你会认为这样做很容易,对吧?所以我觉得我疯了或者别的什么,但我查看了HttpWebRequest及其父类WebRequest的参考资料 - 什么都没有.没有办法.你会认为微软会想到这一点.最接近的是你可以访问"Headers"集合,但是当我尝试它时,它省略了一些非常重要的标题,如"内容长度" - 所以它必须"撒谎"给我(我知道它在撒谎,因为我知道因为远程服务器返回200状态 - 请求成功,它只返回错误/不同/错误的数据)

这是ask-for代码示例:

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://www.whatever.com");
req.Method = ... whatever ...;
... other setup for the request ...
/* At this point we are about to send the request.
   What does the raw HTTP request look like? */
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
Run Code Online (Sandbox Code Playgroud)

c# asp.net debugging proxy httpwebrequest

64
推荐指数
4
解决办法
7万
查看次数

vftable性能损失与switch语句

C++问题在这里.我有一个系统,我将拥有数百个给定超类的迷你子类.他们都会有一个"foo"方法做某事.或者......我将有一个带有一个名为"type"的整数的类,并使用一个巨大的switch语句来决定当我foo时该做什么.

性能是一个重要的考虑因素.非常重要.

问题是,使用switch语句与让C++通过vftable实现它的性能优势/惩罚是什么?如果我将它作为switch语句,我可以将常见的foo放在switch语句的顶部,而不太常见的那些放在底部,希望能够快速进行比较.尝试使用vftable获得这样的效果必然会依赖于编译器,即使我可以弄清楚如何做到这一点......

另一方面,如果没有这些丑陋的switch语句,我的代码将更容易处理.

c++ performance virtual

28
推荐指数
3
解决办法
6288
查看次数

承诺的JDO写入不适用于本地GAE HRD或可能重用的事务

我在app引擎上使用JDO 2.3.我使用Master/Slave数据存储区进行本地测试,最近切换到使用HRD数据存储区进行本地测试,我的部分应用程序正在破坏(这是预期的).正在破坏的应用程序的一部分是快速发送大量写入的地方 - 这是因为1秒限制的事情,它失败了并发修改异常.

好吧,所以这也是预料之中的,所以我让浏览器在失败后再次重试写入(可能不是最好的黑客,但我只是想让它快速运行).

但是一件奇怪的事情正在发生.即使提交阶段完成且请求返回我的成功代码,一些应该成功的写入(不会获得并发修改异常的写入)也会失败.我可以从日志中看到重试的请求工作正常,但是我猜这些似乎在第一次尝试时提交的其他请求从未"应用".但是从我读到的关于Apply阶段的内容来看,再次写入同一个实体应该强制应用......但事实并非如此.

代码如下.有些事情需要注意:

  1. 我试图使用自动JDO缓存.所以这就是JDO使用memcache的地方.除非您在事务中包装所有内容,否则这实际上不起作用.
  2. 所有请求正在执行的是从实体读取字符串,修改字符串的一部分,并将该字符串保存回实体.如果这些请求不在事务中,那么您当然会遇到"脏读"问题.但是对于事务,隔离应该处于"可序列化"的水平,所以我不知道这里发生了什么.
  3. 被修改的实体是根实体(不在组中)
  4. 我启用了跨群组事务

相关代码(这是简化版):

PersistenceManager pm = PMF.getManager();
Transaction tx = pm.currentTransaction();
String responsetext = "";
try {
    tx.begin();
    // I have extra calls to "makePersistent" because I found that relying
    // on pm.close didn't always write the objects to cache, maybe that
    // was only a DataNucleus 1.x issue though
    Key userkey = obtainUserKeyFromCookie();
    User u = pm.getObjectById(User.class, userkey);
    pm.makePersistent(u); // to make sure it gets cached for next …
Run Code Online (Sandbox Code Playgroud)

java google-app-engine memcached jdo

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

共享库或dylib中未定义符号的处理是什么?

我有一个用于Linux的Makefile,我将其移植到达尔文.makefile接受一堆.o文件并将它们链接到一个.so共享对象中.好吧,所以我想(我错了吗?)达尔文最好的模拟是dylib.所以我将-shared标志更改为-dynamiclib.

现在我连接到dylib的代码依赖于许多外部库.当我尝试构建dylib时,我得到错误,说有未定义的引用.但是Linux Makefile没有在创建.so文件的构建步骤中指定任何-lwhatever或-L/path/whatever选项.嗯?这是因为当您创建ELF .so文件时,默认情况下它会保留未解析的外部引用,然后在加载共享库时递归加载您正在加载的共享库所依赖的共享库?如果共享库依赖于.a或.o文件,您是否必须将它们静态链接到共享库中,否则您无法在运行时链接?除非引用也是可动态加载的库,否则如何在运行时加载的库中使用未定义的引用?

无论如何,如果我指定

-undefined suppress -flat_namespace
Run Code Online (Sandbox Code Playgroud)

在创建共享库时,它不需要我添加-l和-L选项.但我仍然不明白这最终会如何发挥作用.

c++ gcc darwin shared-libraries dylib

19
推荐指数
2
解决办法
6867
查看次数

删除VIM中的所有空缓冲区

我现在在Vim打开了120个缓冲区.这些缓冲区中约有50%是空文件.我想以某种方式使用bufdo!关闭所有空的缓冲区.有没有办法可以说:

bufdo! (something)
Run Code Online (Sandbox Code Playgroud)

当前缓冲区(something)的条件命令bdeleteIF在哪里,该缓冲区的长度/大小为零?

vim

16
推荐指数
3
解决办法
3442
查看次数

GAE交易失败和幂等性

Google App Engine文档包含以下内容:

注意:如果您的应用程序在提交事务时收到异常,则并不总是意味着事务失败.在已提交事务并最终成功应用事务的情况下,您可以收到DatastoreTimeoutException,ConcurrentModificationException或DatastoreFailureException异常.尽可能使数据存储区事务处于幂等状态,这样,如果重复某个事务,最终结果将是相同的.

等等,什么?似乎有一类非常重要的事务只是简单地不能成为幂等的,因为它们依赖于当前的数据存储状态.例如,一个简单的计数器,如同一个按钮.事务需要读取当前计数,递增计数并再次写出计数.如果交易看起来"失败"但没有真正失败,并且我无法在客户端告诉我,那么我需要再次尝试,这将导致一次点击产生两个"喜欢".当然有一些方法可以通过GAE来防止这种情况发生?

编辑:

似乎这是分布式系统中固有的问题,除了Guido van Rossum以外的其他问题 - 请看这个链接:

app engine数据存储区事务异常

因此,如果您想要高度可靠性,那么设计幂等事务几乎是必须的.

我想知道是否有可能在整个应用程序中实施全局系统以确保幂等性.关键是在数据存储区中维护事务日志.客户端将生成GUID,然后将该GUID包含在请求中(在重试同一请求时将重新发送相同的GUID).在服务器上,在每个事务开始时,它将在数据存储区中查找具有该ID的Transactions实体组中的记录.如果它找到了,那么这是一个重复的事务,所以它会在没有做任何事情的情况下返回.

当然,这需要启用跨组事务,或者将单独的事务日志作为每个实体组的子级.如果失败的实体密钥查找速度很慢,那么性能也会受到影响,因为几乎每个事务都包含失败的查找,因为大多数GUID都是新的.

就额外数据存储交互方面的额外$ cost而言,这可能仍然小于我必须使每个事务都是幂等的,因为这需要大量检查每个级别的数据存储区中的内容.

google-app-engine transactions google-cloud-datastore

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

声明如何与自身发生冲突?

这是我在尝试编译一些使用taucs(而不是我的代码)的代码时遇到的错误:

.../taucs/src/taucs.h:554: error: conflicting declaration ‘typedef struct taucs_ccs_matrix taucs_ccs_matrix’
.../taucs/src/taucs.h:554: error: ‘taucs_ccs_matrix’ has a previous declaration as ‘typedef struct taucs_ccs_matrix taucs_ccs_matrix’
Run Code Online (Sandbox Code Playgroud)

笏?它与自己相冲突?

在我捏自己之后,我创建了一个测试标题,并提出了一个相互冲突的定义,只是为了确保我对此是正确的:

在文件testit.h中:

#include "somethingelse.h"

typedef struct
{
  int n;
} foobar;
Run Code Online (Sandbox Code Playgroud)

在somethingelse.h文件中:

typedef struct
{
  int n;
} foobar;
Run Code Online (Sandbox Code Playgroud)

果然,我得到:

testit.h:6: error: conflicting declaration ‘typedef struct foobar foobar’
somethingelse.h:4: error: ‘foobar’ has a previous declaration as ‘typedef struct foobar foobar’
Run Code Online (Sandbox Code Playgroud)

或者如果我在testit.h中有这个:

typedef struct
{
  int n;
} foobar;

typedef struct
{
  int n;
} foobar;

testit.h:9: error: conflicting …
Run Code Online (Sandbox Code Playgroud)

c++ g++ solver

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

传递编译器标志来增强需要编译的库(如Thread)

所以我知道boost库主要是仅限头文件,但有一些需要编译,例如Boost.Thread.在Darwin中,如何编译这些并传递-m32标志,以便将它们编译成32位(i386)二进制文件?有这个Jamroot的东西,我从来没有听说过,我不知道从哪里开始.

澄清:我不是问如何使用-m32标志编译程序并使用boost库.我问如何使用-m32标志编译Boost库本身.

c++ macos boost darwin

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

.NET跟踪不适用于Diagnostics.TraceSource,仅适用于Diagnostics.Trace

我正在尝试设置.NET跟踪.我可以通过System.Diagnostics.Trace获得基本的跟踪工作,但由于复杂的原因,我必须通过System.Diagnostics.TraceSource对象(自.NET 2.0以来的新方法)激活跟踪,而不是使用System .Diagnostics.Trace.我已经尝试了一切,但它只是不想使用TraceSource.我在ASP.NET代码隐藏(aspx.cs)中执行跟踪

以下是一些相关的网址:

http://msdn.microsoft.com/en-us/library/ty48b824.aspx
http://msdn.microsoft.com/en-us/library/64yxa344.aspx
http://msdn.microsoft.com/en- us/library/sk36c28t.aspx
http://blogs.msdn.com/b/bclteam/archive/2005/03/15/396431.aspx
http://msdn.microsoft.com/en-us/library/b0ectfxd% 28V = VS.100%29.aspx

目前,根据web.config中的内容,它应该从这段代码跟踪文件和页面:

TraceSource ts = new TraceSource("mysource", SourceLevels.All);
Trace.Write("Trace (old way)"); // this one works
ts.TraceInformation("Trace (new way)"); // this one doesn't work
ts.Flush();
ts.Close();
Run Code Online (Sandbox Code Playgroud)

这是相关的web.config部分:

 <system.diagnostics>
       <trace autoflush="false">
            <listeners> <!-- these listeners activate the "old way" of tracing. -->
                 <add       name="pagelistener" />
                 <add       name="filelistener" />
            </listeners>
       </trace>

       <sources>
            <source name="mysource" switchName="myswitch">
                 <listeners>  <!-- these listeners activate the "new way" -->
                       <add name="pagelistener" />
                       <add name="filelistener" />
                 </listeners> …
Run Code Online (Sandbox Code Playgroud)

.net c# asp.net trace web-config

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

使用Adobe Illustrator使用"移动到"命令创建SVG路径

因此,当您将Adobe Illustrator文件导出为SVG格式时,路径将使用SVG路径语法进行编码:

http://www.w3.org/TR/SVG/paths.html

如果查看"path data"元素,可以将"移动到"命令嵌入到路径中:

http://www.w3.org/TR/SVG/paths.html#PathData

换句话说,您在路径中绘制几条线,拿起笔并将其移动到其他位置,然后继续相同的路径.

我一直试图弄清楚如何在Illustrator中做到这一点无济于事.您可以添加到现有路径,但似乎您只能通过从其中一个端点扩展路径来执行此操作.我不想这样做:我想从其他地方继续前进.

你可以通过分组两个不相交的路径来得到类似的东西.但是当Illustrator执行svg导出时,它只会创建两个<path>标记并将它们放在<g>标记内,这不是我想要的.如果我用文本编辑器手动编辑svg文件,添加"移动到"命令,然后我导入它们,看起来像Illustrator正在做的是创建一个组,但我不知道因为我不知道如何选择和反对并弄清楚它是否是一个群体.

svg adobe-illustrator

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

切割和粘贴时如何在VIM中保留折叠?

在vim中,你可以用zf创建一个折叠,所以如果是%,你可以整齐地折叠一个分隔的块.

  • 有没有办法在视觉模式中选择一些文本并自动折叠?

  • 我注意到如果我选择一个封闭的折叠并使用dd来删除它,那么去其他地方并使用P粘贴它,折叠将消失并且折叠将被展开.我想切割折叠的东西并将其粘贴并将其粘贴,折叠仍然完好无损并关闭.

vim

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

GLSL几何着色器的性能出乎意料地慢

我正在尝试学习如何编程GLSL几何着色器.我的测试项目是这样的:我有N个VBO,它们正在模拟"草叶".如果没有着色器,每片草叶基本上都是一条带有20段的线条.几乎N = 10k刀片,我能够或多或少地平滑动画,这样就可以达到200,000行.

着色器采用每个线段并将其吹出到以该线段为中心的相同长度的圆柱体,因此草叶现在是具有维度的管.因此CPU中没有任何变化,但现在我正在尝试利用GPU来添加更多几何体,以便我可以遮挡刀片.圆柱体有30个截面,因此每个刀片有60个三角形,1200个三角形.

问题是,为了让它顺利进行动画,我不得不缩小到只有25个刀片.这只是30k三角形,基本上比我之前处理时没有使用着色器时的LESS几何形状.

这是在Macbook Pro,Snow Leopard,AMD Radeon HD 6750M上运行的.不知道这是不是一张好牌.

着色器代码非常简单 - 顶点着色器只有gl_Position = gl_Vertex.照明发生在几何着色器中:简单的环境,镜面和漫反射组件,基本上直接来自教程.片段着色器同样简单,只是将草色乘以从几何着色器传递的光强度.

顺便说一句,这是OpenGL的旧版本,2.1 - 所以它是GLSL 1.2,因此要使用地理着色器,它需要GL_EXT.如果是相关的.

此外,堆栈是在Java顶部的JOGL顶部的GLGraphics之上处理.如果这是一个因素,我会感到惊讶,除非它以某种方式模仿CPU上的着色器代码,但我不认为OpenGL会自动为你做这种事情.

无论如何,这些数字看起来是否合理,或者我做错了什么?我不切实际地期望地理着色器能够创造奇迹吗?

java opengl processing shader glsl

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