小编Pet*_*Lee的帖子

如何为多行命令添加行注释

我知道如何在Bash脚本中编写多行命令,但是如何在多行命令中为每一行添加注释?

CommandName InputFiles      \ # This is the comment for the 1st line
            --option1 arg1  \ # This is the comment for the 2nd line
            --option2 arg2    # This is the comment for the 3nd line
Run Code Online (Sandbox Code Playgroud)

但不幸的是,继续角色之后的评论\将打破命令.

bash shell comments

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

使用Boost Library程序选项的必需参数和可选参数

我正在使用Boost程序选项库来解析命令行参数.

我有以下要求:

  1. 一旦提供"帮助",所有其他选项都是可选的;
  2. 一旦未提供"帮助",则需要所有其他选项.

我怎么处理这个?这是我的代码处理这个,我发现它非常多余,我认为必须有一个容易做的,对吧?

#include <boost/program_options.hpp>
#include <iostream>
#include <sstream>
namespace po = boost::program_options;

bool process_command_line(int argc, char** argv,
                          std::string& host,
                          std::string& port,
                          std::string& configDir)
{
    int iport;

    try
    {
        po::options_description desc("Program Usage", 1024, 512);
        desc.add_options()
          ("help",     "produce help message")
          ("host,h",   po::value<std::string>(&host),      "set the host server")
          ("port,p",   po::value<int>(&iport),             "set the server port")
          ("config,c", po::value<std::string>(&configDir), "set the config path")
        ;

        po::variables_map vm;
        po::store(po::parse_command_line(argc, argv, desc), vm);
        po::notify(vm);

        if (vm.count("help"))
        {
            std::cout << desc << "\n";
            return false;
        }

        // There …
Run Code Online (Sandbox Code Playgroud)

c++ boost optional boost-program-options required

73
推荐指数
3
解决办法
4万
查看次数

如何避免在替换所有元素或添加元素集合时多次触发ObservableCollection.CollectionChanged

我有ObservableCollection<T>集合,我想用新的元素集合替换所有元素,我可以这样做:

collection.Clear(); 
Run Code Online (Sandbox Code Playgroud)

要么:

collection.ClearItems();
Run Code Online (Sandbox Code Playgroud)

(顺便说一句,这两种方法有什么区别?)

我也foreach可以collection.Add一个接一个地使用,但这会多次发射

添加元素集合时也一样.

编辑:

我在这里找到了一个很好的库:增强的ObservableCollection能够延迟或禁用通知,但它似乎不支持silverlight.

c# silverlight observablecollection

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

Cron作业不会获取.bashrc中设置的环境变量

这是我的cron工作:

plee@dragon:~$ crontab -l
* * * * * /bin/bash -l -c 'source ~/.bashrc; echo $EDITOR > /tmp/cronjob.test'
Run Code Online (Sandbox Code Playgroud)

和内部~/.bashrc文件,我有export EDITOR=vim,但在最终/tmp/cronjob.test文件中,它仍然是空的?

那么如何获取环境变量(在.bashrc文件中设置)并在我的cron作业中使用它?

plee@dragon:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 12.04 LTS
Release:        12.04
Codename:       precise
plee@dragon:~$ uname -a
Linux dragon 3.2.0-26-generic-pae #41-Ubuntu SMP Thu Jun 14 16:45:14 UTC 2012 i686 i686 i386 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

如果使用这个:

* * * * * /bin/bash -l -c -x 'source ~/.bashrc; echo $EDITOR …
Run Code Online (Sandbox Code Playgroud)

bash cron environment-variables

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

C#Regex中的贪婪,非贪婪,全贪婪的匹配

如何在以下示例中获取所有匹配项:

// Only "abcd" is matched
MatchCollection greedyMatches = Regex.Matches("abcd", @"ab.*");

// Only "ab" is matched
MatchCollection lazyMatches   = Regex.Matches("abcd", @"ab.*?");

// How can I get all matches: "ab", "abc", "abcd"
Run Code Online (Sandbox Code Playgroud)

PS:我希望以通用方式获得所有比赛.上面的例子只是一个例子.

c# regex greedy non-greedy regex-greedy

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

CMake-CPack包装安装路径梦魇

我已经被CMake-CPack感到沮丧了将近一周.

不好的是CMake-CPack在线文档没有很好地记录这部分内容.

谷歌搜索后,我发现这个变量使用:

CPACK_PACKAGING_PREFIX          # NOT documented
CMAKE_INSTALL_PREFIX            # Documented, but the behavior seems weird
CPACK_INSTALL_PREFIX            # NOT documented
CPACK_PACKAGE_INSTALL_DIRECTORY # Documented, but this variable does NOT work as the online document described
CPACK_PACKAGING_INSTALL_PREFIX  # NOT documented
Run Code Online (Sandbox Code Playgroud)

我想要做的是:打包Debian软件包fakeroot make package,当安装软件包时,使用子目录sudo dpkg -i MyProgramPackageName安装它.也就是说,应该安装所有文件./usr/localMyProgramPackageName/usr/local/MyProgramPackageName-V.1.2.3

我一直在尝试(CMake 2.8.3和CMake 2.8.5)来调整这些变量.我尝试了很多组合,但都失败了.

唯一成功的方法是:

Set(CPACK_PACKAGING_INSTALL_PREFIX /usr/local/MyProgramPackageName-V.1.2.3)
Run Code Online (Sandbox Code Playgroud)

但是这个变量甚至没有记录,并且无法保证行为.如果您对我的问题感到困惑,请告诉我何时使用CPACK_PACKAGE_INSTALL_DIRECTORY?因为关于这个变量的文档描述真的很有吸引力,而且它确实是我想要的,但我无法让它工作.

请建议我.

彼得

debian install path cmake cpack

18
推荐指数
2
解决办法
7924
查看次数

存储软件保护目的的保护试用信息的位置

它可能与其他问题重复,但我发誓我搜索了很多并在StackOverflow.com上搜索了很多,我找不到我的问题的答案:

在C#.Net应用程序中,存储保护试用信息的位置,例如到期日期,使用次数?

据我所知,各种软件保护策略都可以被一个狡猾的黑客破解(因为他们几乎总能绕过到期检查步骤).但我现在要做的只是以合理的方式保护它,使"普通"/"高级"用户无法搞砸.

好的,为了证明我在StackOverflow.com上搜索了很多搜索,我列出了我得到的所有策略:

1.注册表项

首先,一些用户可能无法访问甚至读取Registry表.

其次,如果我们将保护试用信息放在注册表项中,则用户可以通过比较软件安装之前和之后的差异来始终找到它.他们可以简单地改变它.

好的,您可能会说我们应该加密保护试用信息,是的,我们可以做到这一点.但是如果用户在安装之前只更改了系统日期呢?

好吧,你可能会说我们也应该把最后使用的日期,如果出现问题,最后使用的日期可以作为保护指南.但是,如果用户只是卸载软件并删除与该软件相关的所有注册表项,然后重新安装软件,该怎么办?

我不知道如何处理这个问题.请帮忙.

普通文件

首先,有一些地方放普通文件:

  • 2.a)软件安装路径下的简单XML文件
  • 2.b)配置文件

同样,用户可以卸载软件并删除这些普通文件,然后重新安装软件.

- 软件本身

如果我们将保护试用信息(到期日期,我们不能将使用次数)放在软件本身中,它仍然容易受到我上面提到的情况的影响.此外,这样做甚至都不酷.

- 试用产品密钥

它的工作方式类似于许可过程,也就是说,我们将试用信息放入RSA签名的字符串中.但是,要求用户尝试使用该软件需要太多步骤(他们可能会失去耐心):

  • 4.a)用户下载软件;
  • 4.b)用户通过提供用户名(或电子邮件)或硬件信息发送电子邮件以请求试用产品密钥;
  • 4.c)服务器接收请求,RSA签名并发回给用户;
  • 4.d)用户现在可以在(到期日期和使用次数)条件下使用它.

现在,服务器记录了用户的用户名或硬件信息,因此用户将被拒绝请求第二次审判.收集硬件信息是否合法?

总之,用户必须再做一个额外的步骤(请求试用产品密钥)只是为了尝试使用该软件,这并不酷(将自己视为用户).

注意:此问题与许可无关,而是与存储试用信息的位置有关.试用期结束后,用户应该要求许可证(CD-Key/Product-Key).我将使用RSA签名(绑定到用户硬件)

PS:我的软件将针对中国市场,其软件市场与美国不同.在中国大多数人,他们只购买硬件,他们通常不会购买Micosoft Windows/Office等软件(他们只使用盗版).但是,一些针对特定领域的专业软件,研究人员仍然愿意购买它,如果没有破解版本或破解版本很难安装.

c# protection store trial

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

C#:如何让黑客/破解者更难以绕过或绕过许可检查?

首先,我了解几乎所有应用程序都可以被破解(特别是用C#编写).我的问题是让它更难破解.

假设用户已将Application文件保存在Application.StartupPath下,所有用户都可以读取该文件.

然后,每次应用程序启动时,它都会检查是否可以找到并验证许可证文件.

如果应用程序可以查找和验证,我们让用户继续使用全部功能.

如果没有,我们会提示MessageBox显示"未许可,继续使用试用版,功能有限".

我的问题是,如果我是黑客/黑客,我会尝试绕过或绕过许可检查而不是破解许可文件,因为,如果我们使用RSA签名,则很难破解许可文件.

那么我们应该在哪里进行许可检查?

PS:而且,如果我设置一个全局变量IsLicensed(true/false)来限制功能,它是否安全?黑客是否容易改变IsLicensed = true?

c# licensing

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

使用uint或int

当然,我知道无符号整数(uint)和有符号整数()之间的基本区别int.

我注意到在.NET公共类中,一个被调用的属性Length总是使用有符号整数.

也许这是因为无符号整数不符合CLS.

但是,例如,在我的静态函数中:

public static double GetDistributionDispersion(int tokens, int[] positions)
Run Code Online (Sandbox Code Playgroud)

参数tokens和所有元素positions都不能为负数.如果它是否定的,最终结果是无用的.因此,如果我同时使用intfor tokenspositions,我必须在每次调用此函数时检查值(如果发现负值,则返回非感知值或抛出异常),这很乏味.

好的,那么我们应该使用uint两个参数.这对我来说真的很有意义.

然而,我发现,在许多公共API中,它们几乎总是在使用int.这是否意味着在他们的实现中,他们总是检查每个值的负面(如果它应该是非负的)?

总而言之,我该怎么办?

我可以提供两种情况:

  1. 这个功能只能由我自己在我自己的解决方案中调用;
  2. 此功能将被其他团队中的其他人用作库.

我们应该对这两种情况使用不同的方案吗?

彼得

PS:我做了很多研究,仍然没有理由说服我不要使用uint:-)

c# int uint

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

如何在HTML5/JavaScript(无Flash)中调用SPEEX音频解码/编码

我正在开发一个项目,需要通过HTTP向/从服务器流式传输音频数据.

我们需要使用SPEEX压缩音频数据.

在Flash中,我们可以使用Alchemy和LibSpeex,但我们如何在JavaScript中完成它.可以使用HTML5.

谢谢.

彼得

javascript html5 speex audio-streaming

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