问题列表 - 第20982页

要(猴子)补丁还是不要(猴子)补丁,这就是问题所在

我正在和一位同事谈论我们使用的某个包的一个意外/不期望的行为.尽管我们有一个简单的解决方法(或至少是解决方法)而没有任何明显的副作用,但他强烈建议通过硬修补并在上游发布补丁来扩展相关代码,希望将来某些时候可以接受.实际上,我们针对在每个新构建上自动应用的多个软件包的特定版本维护补丁.主要论点是,这是正确的做法,而不是"丑陋"的解决方法或脆弱的猴子补丁.另一方面,我赞成实用性而非纯度,我的一般经验法则是"无补丁">"猴子补丁">"硬补丁",至少除了(关键)错误修复之外的其他任何东西.

所以我想知道是否就什么时候(硬)补丁,猴子补丁或只是尝试解决一个不完全符合人们想要的第三方软件包达成共识.它是否主要与补丁的原因(例如修复错误,修改行为,添加缺少的功能),给定的包(大小,复杂性,成熟度,开发人员响应性),其他或没有一般规则和一个应根据具体情况决定?

language-agnostic oop patch monkeypatching

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

为什么crypt/blowfish使用两种不同的盐生成相同的哈希?

这个问题与PHP的实现有关crypt().对于这个问题,盐的前7个字符不计算,所以盐' $2a$07$a'的长度为1,因为它只有盐的1个字符和元数据的7个字符.

当使用长度超过22个字符的salt字符串时,生成的哈希值没有变化(即截断),当使用短于21个字符的字符串时,盐将自动填充($显然有' '字符); 这是相当简单的.但是,如果给出20个字符的盐和21个字符的盐,除了21个长度的盐的最终字符外两个是相同的,两个散列字符串都是相同的.一个长22个字符的盐,除了最后一个字符外,它与21个长度的盐相同,哈希值会再次不同.

代码示例:

$foo = 'bar';
$salt_xx = '$2a$07$';
$salt_19 = $salt_xx . 'b1b2ee48991281a439d';
$salt_20 = $salt_19 . 'a';
$salt_21 = $salt_20 . '2';
$salt_22 = $salt_21 . 'b';

var_dump(
    crypt($foo, $salt_19), 
    crypt($foo, $salt_20), 
    crypt($foo, $salt_21), 
    crypt($foo, $salt_22)
);
Run Code Online (Sandbox Code Playgroud)

会产生:

string(60) "$2a$07$b1b2ee48991281a439d$$.dEUdhUoQXVqUieLTCp0cFVolhFcbuNi"
string(60) "$2a$07$b1b2ee48991281a439da$.UxGYN739wLkV5PGoR1XA4EvNVPjwylG"
string(60) "$2a$07$b1b2ee48991281a439da2.UxGYN739wLkV5PGoR1XA4EvNVPjwylG"
string(60) "$2a$07$b1b2ee48991281a439da2O4AH0.y/AsOuzMpI.f4sBs8E2hQjPUQq"
Run Code Online (Sandbox Code Playgroud)

为什么是这样?

编辑:

一些用户注意到整个字符串存在差异,这是正确的.在salt_20,偏移(28,4)是da$.,而在salt_21,偏移(28,4)是da2.; 但是,重要的是要注意生成的字符串包括散列,盐,以及生成盐的指令(即$2a$07$); 实际上,差异发生的部分仍然是盐.实际哈希值不变UxGYN739wLkV5PGoR1XA4EvNVPjwylG.

因此,这实际上并不是产生的散列的差异,而是用于存储散列的盐的差异,这恰恰是手头的问题:两个盐生成相同的散列.

Rembmer:输出将采用以下格式:

"$2a$##$saltsaltsaltsaltsaltsaHASHhashHASHhashHASHhashHASHhash"
//                            ^ Hash Starts …
Run Code Online (Sandbox Code Playgroud)

php hash crypt blowfish salt

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

如何在c#中强制解锁文件?

我需要删除一个文件.有时,文件可能会被锁定,在这种情况下,我想解锁并删除它.

到目前为止,我在研究中遇到了两种可能性.

System.IO.FileStream.Unlock

//unlock file
[DllImport("kernel32.dll", SetLastError = true)]
internal static extern bool UnlockFile(IntPtr handle, int offsetLow, int offsetHi);`  
Run Code Online (Sandbox Code Playgroud)

这两种方法中的任何一种都有效吗?如果是这样,请你提供样品,因为我没有得到这些中的任何一个.或者,还有另一种更好的方法吗?

c# io file-io

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

IE7默认表单方法是"GET".如何判断它是用户输入还是默认?

如果用户创建没有方法属性的表单,似乎大多数浏览器将在表单提交时处理此问题.因此,在DOM准备好之后检查表单元素时,您可以看到表单元素对象没有"方法"attr.

但是,IE7显然在没有方法值的所有表单上设置了"GET"的默认方法值.我不想争论GET或POST是否是最合理的默认值,我只是想找到一种方法使POST成为所有浏览器的默认表单方法.

我的问题是我无法判断用户是否为表单方法输入了"GET"值,或者IE是否将该值注入默认值.如果表单没有方法属性,很明显用户没有指定一个,所以我可以安全地将其默认为POST.但是如果我看到一个表单方法的GET值,我无法判断用户是否指定了它,或者它是否为黑色并且IE7在解析HTML时设置了GET.

有人有主意吗?

javascript browser internet-explorer dom

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

错误:JDWP无法获得JNI 1.2环境

我在Eclipse中调试后得到此错误.但调试成功了.

ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2
JDWP exit error AGENT_ERROR_NO_JNI_ENV(183):  [../../../src/share/back/util.c:820]
Run Code Online (Sandbox Code Playgroud)

这是什么意思?

java eclipse jdwp

72
推荐指数
3
解决办法
9万
查看次数

具有多项活动的Android应用

我有一个非常简单的游戏,只包含一个活动,我想添加一个标题屏幕.

如果标题屏幕是另一个活动,我需要对清单文件进行哪些更改才能首先打开标题屏幕?

游戏活动称为Leeder,标题屏幕活动称为LeederTitleScreen

这是我当前的清单文件.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="org.nifong.leeder"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name="Leeder"
                  android:label="@string/app_name"
                  android:configChanges="keyboardHidden|orientation"
                  android:screenOrientation="landscape">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    <uses-sdk android:minSdkVersion="5" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
</manifest>
Run Code Online (Sandbox Code Playgroud)

android android-manifest android-activity

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

UpdatePanel不执行部分页面更新,并且IsInAsyncPostBack始终为false

我正在尝试使用UpdatePanel,但无法使部分页面更新生效.

当我查看ScriptManager的IsInAsyncPostBack属性时,它总是错误的.

这是一个重现问题的页面.它有一个ScriptManager,一个UpdatePanel,一个更新面板中的LinkBut​​ton,以及一个通过Triggers集合连接到UpdatePanel的Button.

<%@ Page Language="C#" %>
<script runat="server">
    protected void Page_Load(object sender, EventArgs e)
    {

        Label1.Text = DateTime.Now.ToString();

        if (IsPostBack)
            Label1.Text += " - Postback!";
        if (ScriptManager1.IsInAsyncPostBack)
            Label1.Text += " - Async!";
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<body>
    <form id="form1" runat="server">
            <asp:ScriptManager ID="ScriptManager1" EnablePartialRendering="true" runat="server"  />

            <asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server">
                <ContentTemplate>Panel 1:<asp:Label runat=server ID=Label1 /><br />
                <asp:LinkButton runat=server ID="LinkButton1" Text="Update!"></asp:LinkButton></ContentTemplate>
                <Triggers><asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" /></Triggers>
            </asp:UpdatePanel>
            <asp:Button ID="Button1" Text="Refresh Panel 1" runat="server" UseSubmitBehavior=false />

    </form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

如果我运行此代码并单击其中一个按钮,我会看到"Panel 1:2/8/2010 3:38:41 PM …

c# asp.net updatepanel scriptmanager

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

使用LINQ从另一个LINQ集合中获取结果

我有一个LINQ语句从一个集合中提取前N个记录ID,然后是另一个查询,它提取所有具有这些ID的记录.它感觉非常笨重和低效,我想知道是否有更简洁,LINQy的方式来获得相同的结果

var records = cache.Select(rec => rec.Id).Distinct().Take(n);

var results = cache.Where(rec => records.Contains(rec.Id));
Run Code Online (Sandbox Code Playgroud)

仅供参考 - 将有多个具有相同ID的记录,这就是为什么有Distinct()以及为什么我不能首先使用简单的Take().

谢谢!

c# linq

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

在C#中启动非exe进程时可以使用Impersonation吗?

我需要能够以不同的用户身份运行流程,并且我已经找到了大量资源和不同的方法来实现这一目标.问题是,我需要运行一个非exe进程,例如带有html扩展名的路径,或者在我的情况下,运行" http://somewebserver/someApp.application ".

存在一个已知问题,即启动的进程不从其启动器继承模拟上下文,并且还存在一个已知问题,即在不同凭据下启动的进程需要是可执行文件(.exe).

但是,我如何以不同的用户身份启动.application文件(例如)?

(我尝试了各种p /调用CreateProcessWithLoginW的组合,在ProcessStartInfo中设置用户/密码凭证等.每个都面临上面提到的相同限制.)

impersonation process

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

具有ActiveMQ群集的Apache Camel

我正在尝试确定用于集群化ServiceMix 3.3.1/Camel 2.1/AMQ 5.3应用程序的选项.我正在执行高容量消息处理,我需要集群以实现高可用性和水平可伸缩性.

这基本上就是我的应用程序所做的... HTTP-> QUEUE-> PROCESS-> DATABASE-> TOPIC

从( "码头:http://0.0.0.0/inbound ").要(" ActiveMQ的:inboundQueue");

from("activemq:inboundQueue?maxConcurrentConsumers = 50").process(decode()).process(transform()).process(validate()).process(saveToDatabase()).to("activemq:topic:ouboundTopic" );

所以,我已经阅读了所有ServiceMix和AcitveMQ集群页面,但我仍然不确定要走哪条路.

我知道我可以使用HA的主/从设置,但这对可伸缩性没有帮助.

我读过有关经纪人的网络,但我不确定这是如何适用的.例如,如果我在群集中的多个节点上部署相同的Camel路由,它们将如何"完全"交互?如果我将HTTP生成器指向一个节点(NodeA),哪些消息将被发送到NodeB?是否在节点A/B之间共享队列/主题...如果是,如何分割或复制消息?另外,外部客户端如何准确地订阅我的"outboundTopic"(并获取所有消息等)?

或者,我一直在想我应该在多个ServiceMix实例之间共享代理.那将是更清洁的,因为只需要管理一组队列/主题,我可以通过添加更多实例来扩展.但是,现在我受限于单个经纪人的可扩展性,我又回到了单点故障......

如果有人能为我澄清权衡......我会很感激.

activemq-classic cluster-computing apache-camel

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