小编dur*_*597的帖子

如何使Xcode项目源文件与文件系统目录保持同步?

我是XCode的新手,我发现文件管理非常痛苦.在大多数IDE中,您只需让项目源树引用磁盘上的目录结构即可.这样可以轻松地将新文件添加到项目中 - 您只需将它们放在磁盘上,它们就会自动编译.

使用XCode,似乎我必须创建文件并单独将其添加到项目中(或者被迫通过UI操作文件系统).但这意味着通过源代码控制共享.xcodeproj充满了问题 - 通常,我们会在xcodeproj文件上出现合并冲突 - 当我们不这样做时,我们经常会遇到链接器错误,因为在合并期间会出现一些文件在项目中列出的被删除.所以我必须将它们重新添加到项目文件中,直到我可以编译它,然后重新检查项目文件.

我相信我必须在这里遗漏一些东西.我尝试使用'参考文件夹',但其中的代码似乎没有被编译.构建一个强制每个人在向项目添加或删除文件时修改单个共享文件的IDE似乎很疯狂.

version-control xcode project xcode3.2

16
推荐指数
2
解决办法
3966
查看次数

Java方法重载+双重调度

任何人都可以详细解释在我的测试代码中print(Parent parent)使用Child实例时调用重载方法的原因吗?

这里涉及到Java中的任何虚拟方法或方法的重载/解决方案?有没有直接引用Java Lang Spec?哪个术语描述了这种行为?非常感谢.

public class InheritancePlay {

    public static class Parent {        
        public void doJob(Worker worker) {
            System.out.println("this is " + this.getClass().getName());

            worker.print(this);
        }
    }

    public static class Child extends Parent {
    }

    public static class Worker {
        public void print(Parent parent) {
            System.out.println("Why this method resolution happens?");
        }

        public void print(Child child) {
            System.out.println("This is not called");
        }
    }

    public static void main(String[] args) {
        Child child = new Child();
        Worker worker = …
Run Code Online (Sandbox Code Playgroud)

java oop overloading double-dispatch

16
推荐指数
2
解决办法
4825
查看次数

我在哪里可以找到javax.crypto源代码?

我在哪里可以找到javax.crypto源代码?

--update 感谢OpenJdk版本,但是jdk6版本怎么样?

java cryptography

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

如何制作java.util.Properties对象的副本?

我有以下字段和构造函数:

private final Properties properties;

public PropertiesExpander(Properties properties) {
    this.properties = properties;
}
Run Code Online (Sandbox Code Playgroud)

好的做法是在构造函数中复制每个可变集合.我想制作一份浅薄的独立副本.我怎样才能做到这一点?

我的第一个想法是使用putAll()方法:

private final Properties properties = new Properties();

public PropertiesExpander(Properties properties) {
    this.properties.putAll(properties);
}
Run Code Online (Sandbox Code Playgroud)

有没有更简单,更高效或更惯用的方式呢?也许在Guava或Apache Commons中有一些实用工具?

java collections copy properties copy-constructor

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

为什么"(def vowel?(set"aeiou"))"工作?

我在这里看一下优秀的Clojure教程.在其中一个示例中,它具有以下行的Clojure代码:

(def vowel? (set "aeiou"))
Run Code Online (Sandbox Code Playgroud)

这使元音的元音返回true,辅音返回false:

(vowel? (first "abc")) ; => true
(vowel? (first "cba")) ; => false
Run Code Online (Sandbox Code Playgroud)

为什么是这样?我假设它与变量名后面的问号有关.在教程中找不到任何东西......


编辑我刚刚意识到vowel?不会返回true或false,而是返回元素本身或者nil.看看我自己的答案.

clojure

15
推荐指数
2
解决办法
1695
查看次数

如何衡量源代码统计信息?

是否有一些免费工具(最好是基于命令行),你可以给你的根源目录,它会检查所有文件和子文件夹,并生成一组漂亮的"统计"?例如代码行,类的数量等?

.net statistics code-analysis

15
推荐指数
2
解决办法
4921
查看次数

KCFinder是CKFinder的合法替代品

一方面有http://ckfinder.com/

当我们询问有关他们的信息时,CKFinder或其背后的人一直非常模糊他们的许可证,因此我们并不真正喜欢使用他们的商业许可产品.

所以我找了一个替代品,找到了http://kcfinder.sunhater.com,它带有LGPL许可证,非常适合在商业应用程序中使用,只想使用文件浏览器而不是修改它.

现在他们看起来非常相似,我的问题是:KCfinder是CKfinder的合法替代品吗?或者它是一个精确和修改过的副本?

有谁知道这个或者能找到这个吗?

upload ckfinder

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

如何折叠方法块内注释块的代码?

如何折叠(概述)方法内的注释块,就像方法和区域等一样?

ide folding visual-studio-2010

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

如何将源代码嵌入到pdb中,并让调试器使用它?

注意:我的目标关注点是使用常规MSIL定位CLR的C#,以防有些内容适用于此但不是更常见的情况.

一些现有的源代码调试支持示例

最近发布了Sourcepack项目,该项目允许用户重写pdb文件中的源路径以指向不同的位置.当您拥有程序集的源代码时,这非常有用,但不希望尝试将其放入与构建时完全相同的文件系统位置.

http://lowleveldesign.wordpress.com/2011/08/26/sourcepack-released/

对于开源项目,使用http://www.symbolsource.org/作为简化项目用户获取符号和来源的方法是一个很好的主意.

问题

但是,由于法律或方便的原因,使用这种方法的项目通常不太可行.此外,可能正在调试项目的人员组可能相对较小或包含在内.

默认情况下,项目的pdb包含指向磁盘上文件的指针(IIRC),然后源索引可以添加嵌入源位置指针的功能(例如,在版本控制系统中),然后使用源服务器指向实际获取源的指针.

目标

看起来事情可能更简单(对于某些构建,例如调试和/或仅内部),只需将实际源放入pdb(实际上只是取消引用当前在PDB中写入的指针).看起来你可以跳过整个源服务器部分(至少在理论上)并消除对调试时故事的一些依赖.是否将源存储为压缩源在很大程度上是正交的,但是为了使现有调试器的实现更简单,第一遍可能不会这样做.

由于PDB匹配二进制故事已经非常好,因此将源放入PDB甚至比源服务器指针更好,因为指针可能会随着时间的推移而中断(源控制系统移动或更改为不同的系统,或者无论如何,但坐在PDB中的实际来源是"永远".

这与"源服务器"的支持有何不同?

(这是在Tigran评论之后通过编辑添加的,询问有什么好处)

应该与之进行比较的"基线"场景是使用当今"普通"源服务器实例的"正常"调试体验.在那种情况下,(AFAIK)调试引擎从PDB获取指针(通过备用流),然后使用注册的源服务器尝试通过该指针获取源.由于给定的程序集通常包含多个源文件,因此有一个指针包含一个基本位置,或者PDB中有多个指针(或其他内容),但这应与此讨论正交.

对于保持源隐藏/不可访问的项目(大多数Microsoft产品,例如,包括Windows,Office,Visual Studio等),然后让PDB包含指针,FAR优于包括实际源(即使它是加密).没有必要的网络访问和权限,这样的指针毫无意义,所以这种方法意味着您可以将PDB发送给地球上的任何人,而不必担心他们能够访问您的来源(最糟糕的情况是,他们可以看到您的来源如何树的安排,我想).

但是,有两大组项目(特别是构建),其中"隐藏源"的好处不存在.

第一个是仅供有权访问源的人使用的构建.在你自己的机器上完成不会离开那台机器的构建就是一个很好的例子,因为攻击者无论如何都需要从你的文件系统中读取文件以获取源代码,因此从一个文件(.cs)读取另一个文件(. pdb)在攻击难度/向量方面是一个相对较小的差异.类似地,完成并推送到测试/暂存环境的构建,其中访问机器上的pdb的人员等于或者可以正常访问源的人员的子集.

第二个(有点明显)是开源项目,项目的来源无论如何都已经开放给所有人,因此隐藏任何人的来源没有任何好处.

请注意,这可以相对容易地扩展,以包括加密形式的源(因为我们已经在讨论必须存储格式/编码数据),但增加的复杂性将使这种情况可能不太有用而不仅仅是使用'普通'源服务器.

好处?

通过上面的描述,允许这一点的潜在好处列表包括(但不限于:)这些当下突然出现在我的脑海中:

  • 无需处理设置源服务器支持.它只是工作(IJW),至少在调试器知道如何查看pdb时.
    • 与此同时,你仍然可以做一个"固定"的源服务器,它只是一个虚拟的,它提取源并将其反馈给调用者.这样的配置对于每个人来说都是相同的(例如,使用localhost),仍然消除了实际配置源服务器的当前需求
  • 构建不需要包含'源索引'
    • 由于构建读取源文件并且无论如何都要写入pdb文件,我们只是修改pdb中写入的内容,而不是为了进行网络调用或读取内存中没有的数据而进行任何构建时间性操作.
    • 在'native'构建支持源代码之前,它可能是一个简单的构建后步骤,可能首先通过Sourcepack项目的一个小分支实现,因为它已经完成了读取/修改PDB文件的工作:)
  • 不依赖于具有源控制系统的团队/项目
  • 不依赖于检查到源控制系统的每个文件的特定版本(大多数人不会检查他们在IDE中执行的每个构建)
  • 无需访问具有该文件的特定源控制系统
    • 例如,在DVCS情况下,PDB指针可能是git或mercurial或其他任何"随机"实例,不一定是你有权访问的
    • 源服务器工具跟踪该版本回到您有权访问的源控制服务器实例(如果它甚至存在)尚不存在AFAIK)
  • 如果项目死亡(被删除)或移动,没问题
    • 例如,如果项目从一个移动到另一个:自托管,sourceforge,github,bitbucket,codeplex,code.google.com等.
  • 如果您正在调试的计算机没有(或不充分)网络访问,则没问题
    • 例如,如果您正在将"网络KVM"放入一个用于调试问题的框中,但它没有网络,或者它只能与断开连接的网络通信,以致无法访问您的源控制服务器.
  • 在极端情况下,能够从构建中恢复一些项目源.;)

注意:另一种方法是在实际程序集中包含源代码(例如,作为资源),但pdb是一个更好的选择(很容易发布没有pdb的构建,如果源代码在pdb中,则没有正常的运行时性命中因为程序集是相同的代码和相同的大小等)

如何实施?

从表面上看,这种支持看起来似乎不太难添加,但我觉得这是因为我对所涉及的机制并不是很了解,而不是实际上是一件简单的事情.实施.:)

我的猜测将是:

  1. 添加一个类似于Sourcepack的构建后步骤,但不是更改指针,而是用实际源代替它.
    • 根据源服务器需要执行的操作,可能需要获取前缀,或者实际源将位于不同的备用数据流中,并且"指针"会更新为'source-in-pdb:ads-foo.cs ' 管他呢.前缀或指针可以包括源文件的存储方式(未压缩,gzip,bzip2等,以及文件的编码)
  2. 实现一个"源服务器",它实际上从有问题的pdb中提取源并将其返回.
    • 不知道源服务器'API'是否有足够的信息来获取PDB的位置,更不用说它是否有权实际读取内容.

完整性检查?

随着上面的喋喋不休,问题实际上是:

  • 这种事情已经存在吗?(如果有,请提供指示!)
  • 假设它还不存在,上述内容是否有意义作为首次实现?以上是否存在陷阱或复杂性?
  • 假设上述情况为"否"和"是",是否有一个现有的项目在接受它(它已接近或在其现有范围内)方面有意义?

c# debugging source-server pdb-files

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

@WebFilter排除url-pattern

我使用过滤器来检查登录用户的URL模式.

但是我需要过滤许多URL模式.

{ "/table/*", "/user/*", "/contact/*", "/run/*", "/conf/*", ..., ..., ...}
Run Code Online (Sandbox Code Playgroud)

它变得不可维护.排除以下内容会更简单:

{ "/", "/login", "/logout", "/register" }
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

@WebFilter(urlPatterns = { "/table/*","/user/*", "/contact/*","/run/*","/conf/*"})
public class SessionTimeoutRedirect implements Filter {

    protected final Logger logger = LoggerFactory.getLogger("SessionFilter");

    @Override
    public void doFilter(ServletRequest req, ServletResponse res,
            FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;
        if (request.getSession().getAttribute("Id") != null) {
            chain.doFilter(req, res);
        } else {
            logger.debug("session is null:"+request.getRequestURL());                    
            response.sendRedirect(request.getContextPath()+"/login");
        }
    }

    @Override
    public void init(FilterConfig arg0) …
Run Code Online (Sandbox Code Playgroud)

java servlets url-pattern servlet-filters

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