小编Ric*_*ral的帖子

如何将其他类型导入到我的TypeScript自定义声明文件中?

我有这个TypeScript + React + Webpack + Jest + Enzyme完全正常工作.

我认为需要在我的测试规范中访问一些全局功能.我可以通过将setupTestFrameworkScriptFileJest配置中的选项指向.js文件来实现,我有这样的事情:

const Enzyme = require("enzyme");
const React = require("react");

const getMuiTheme = require("material-ui/styles/getMuiTheme").default;

global.mountWithContext = (node) => {
    return Enzyme.mount(node, {
        context: {
            muiTheme: getMuiTheme()
        },
        childContextTypes: {
            muiTheme: React.PropTypes.object
        }
    });
};
Run Code Online (Sandbox Code Playgroud)

在我可以调用的spec文件中mountWithContext(),当我运行测试时它会正常工作.但我的编辑不承认这个功能.

为了解决这个问题,我/typings/declarations.d.ts用这个创建了一个文件:

declare function mountWithContext(node: any): any;
Run Code Online (Sandbox Code Playgroud)

现在我的spec文件识别该mountWithContext函数,但类型是"错误的".正确的定义更像是这样的:

declare function mountWithContext(node: React.ReactElement<any>): Enzyme.ReactWrapper<P, S>;
Run Code Online (Sandbox Code Playgroud)

React.ReactElement被正确识别,因为@types/react/index.d.ts文件包括这样的:

export = React;
export as namespace React;
Run Code Online (Sandbox Code Playgroud)

酶的情况也是如此.没有全球Enzyme …

typescript reactjs jestjs enzyme typescript-typings

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

为什么我必须在C#中将枚举转换为int?

这是我的代码:

internal enum WindowsMessagesFlags {
    WM_EXITSIZEMOVE      = 0x00000232,
    WM_DISPLAYCHANGE     = 0x0000007e,
    WM_MOVING            = 0x00000216,
}

protected override void WndProc(ref Message m) {
    switch(m.Msg) {
        case (int)WindowsMessagesFlags.WM_DISPLAYCHANGE:
            FixWindowSnapping();
            break;
        case (int)WindowsMessagesFlags.WM_EXITSIZEMOVE:
            SaveWindowProperties();
            break;
        case (int)WindowsMessagesFlags.WM_MOVING:
            KeepProperLocation(ref m);
            break;
    }
}
Run Code Online (Sandbox Code Playgroud)

反正有没有阻止铸造?

c# int enums casting

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

在C中遇到fork(),pipe(),dup2()和exec()时遇到问题

这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <wait.h>
#include <readline/readline.h>

#define NUMPIPES 2

int main(int argc, char *argv[]) {
    char *bBuffer, *sPtr, *aPtr = NULL, *pipeComms[NUMPIPES], *cmdArgs[10];
    int fdPipe[2], pCount, aCount, i, status, lPids[NUMPIPES];
    pid_t pid;

    pipe(fdPipe);

    while(1) {
        bBuffer = readline("Shell> ");

        if(!strcasecmp(bBuffer, "exit")) {
            return 0;
        }

        sPtr = bBuffer;
        pCount = -1;

        do {
            aPtr = strsep(&sPtr, "|");
            pipeComms[++pCount] = aPtr;
        } while(aPtr);

        for(i = 0; i < pCount; i++) {
            aCount = -1;

            do { …
Run Code Online (Sandbox Code Playgroud)

c fork pipe exec dup2

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

我似乎无法理解这个.NET程序集签名的事情

好吧,我必须愚蠢,因为我已经读过这个:http: //www.csharp411.com/net-assembly-faq-part-3-strong-names-and-signing/

而我仍然没有得到它......

假设我打开项目的属性并转到"签名"选项卡,然后选中"签署程序集"并生成一个带密码的新程序集.创建了带有.pfx扩展名的强名称密钥文件,包括公钥和私钥,VS将在编译时对我的程序集进行数字签名,对吧?

私钥怎么样?不应该是私人和我,开发人员,是唯一拥有它的人吗?组件不应仅使用公钥签名吗?

任何人都可以向我解释这个吗?基本上,我想签署我的项目的程序集,并允许我用户检查程序集是否真的由我开发,我是唯一保留私钥(我认为我应该).

.net strongname assemblies signing

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

使用contains或循环列表之间有什么大的区别?

性能方面,使用之间确实存在很大差异:

  • ArrayList.contains(o)vs foreach | iterator
  • LinkedList.contains(o)vs foreach | iterator

当然,对于foreach | iterator循环,我必须明确地比较这些方法并相应地返回true或false.

我正在比较的对象是一个对象,其中equals()hashcode()都被正确覆盖.

编辑:毕竟不需要知道containsValue,对不起.是的,我很愚蠢...我意识到我的问题是关于containsKey vs foreach是多么愚蠢,没关系,我不知道我在想什么.我基本上想知道上面的内容(编辑出其他内容).

java foreach iterator contains list

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

更好的解决方案而不是Java中的嵌套同步块?

我有一个Bank列表的类Account.银行有一种transfer()方法可以将价值从一个帐户转移到另一个帐户.我们的想法是在转移中锁定fromto帐户.

要解决这个问题,我有以下代码(请记住,这是一个非常简单的例子,因为它只是一个例子):

public class Account {
    private int mBalance;

    public Account() {
        mBalance = 0;
    }

    public void withdraw(int value) {
        mBalance -= value;
    }

    public void deposit(int value) {
        mBalance += value;
    }
}

public class Bank {
    private List<Account> mAccounts;
    private int mSlots;

    public Bank(int slots) {
        mAccounts = new ArrayList<Account>(Collections.nCopies(slots, new Account()));
        mSlots = slots;
    }

    public void transfer(int fromId, int toId, int value) {
        synchronized(mAccounts.get(fromId, toId)) …
Run Code Online (Sandbox Code Playgroud)

java concurrency synchronized

9
推荐指数
2
解决办法
3724
查看次数

如何让'android unlocker'应用程序更安全地对抗破解者?

对于我的应用程序的付费版本,我选择了解锁程序应用程序路由,因为它易于实现,允许开发人员控制台中的各个统计信息,但主要是因为我不需要维护2个代码库(一个用于免费版本和另一个付费版本).即使我使用CVS(我这样做),仍然需要保持合并功能和错误修复.解锁器应用程序更容易实现整体...

但这有一个严重的缺点,它很容易超出安全检查; 除非我在这里遗漏了什么.

无论我做什么,这样的实现总会导致一个简单的if,像这样:

if(Program.isPremiumVersion()) {
    // Remove ads...
}
Run Code Online (Sandbox Code Playgroud)

isPremiumVersion()方法负责检查付费解锁器应用程序安装的所有工作,如果证书匹配和所有这些东西.是的,解锁器应用程序受LVL保护(虽然我已经阅读了一些提到LVL不安全的文章,但现在不是重点).但最终,无论内部代码有多复杂isPremiumVersion(),它总会导致返回一个truefalse值.

覆盖这样的安全功能只需要对代码进行逆向工程并使其始终返回true.不是吗?我们如何保护我们的Android应用免受此攻击?是的,代码使用ProGuard进行混淆.不过,对于足够熟练的人来说,不应该太难.

请注意,我不是在试图打击破解者,我们根本无法获胜.我不会为此而失眠,在"完美解决方案"上浪费了无数个小时.我只是在寻找一种让它更安全的方法.至少在理论上,这似乎很容易破解.我错了吗?

有什么想法可以提高这种功能的安全性吗?

security android cracking reverse-engineering

9
推荐指数
2
解决办法
1982
查看次数

如何"正确"处理PHP中的$ _GET变量?

目前,我有以下代码:

if(isset($_GET['mid']) && !empty($_GET['mid'])) {
    $mid = $_GET['mid'];

    if(is_numeric($mid) && $mid > 0) {
        if(isset($_GET['op']) && !empty($_GET['op'])) {
            $op = $_GET['op'];

            if($op == 'info') {
            }

            if($op == 'cast') {
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但我认为if语句中的if语句太"复杂"了......

你能用不同的方式处理吗?你会如何让它变得更简单?

[编辑]一般承认的答案:

好吧,我已经学到了一些我不知道的小细节和新的PHP函数.我不认为有正确的方法来做我所要求的.我显然是以错误的方式使用一些PHP函数,我会修复它.

在我看来,像这样的输入应该使用PHP过滤器函数进行验证/清理,因此我将Arkh的答案标记为已接受.

但是,对于特定的大学项目(PHP代码完全不相关),我将使用他的答案与Tatu的帮助函数构思混合使用.但是对于一个不同的项目,我会将他的答案与Ignacio的课堂理念混合使用,因为它看起来更好,更有条理.

php variables validation get

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

退化三角形和GL_TRIANGLE_STRIP的问题

我试图绘制多个三角形条带只有一个调用glDrawElements,我对此事的研究告诉我,我需要使用退化三角形.也许我对这个问题的理解是错误的,但我认为这应该允许我从一个条带"跳"到另一个.

我的完整代码可以在我最近发布的问题上找到,如果你认为它是相关的,请看一下.

我基本上试图绘制2个四边形(为了简化目的),当然有4个三角形,但是彼此分开.为此,我使用这样的索引:

unsigned int indices[] = { 0, 256, 1, 257, 257, 2, 2, 258, 3, 259 };
Run Code Online (Sandbox Code Playgroud)

第一个条带的第一个顶点从0开始,第二个条带的第一个顶点从256开始.这是这个索引的最终结果:

http://i.stack.imgur.com/6Q3FD.jpg

这是正确的还是我认为"连接"2个四边形的线不应该存在?

opengl vertex-buffer gl-triangle-strip

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

通知打开活动,按下后退按钮,主要活动是否打开?

我能描述问题的最好方法是这样的:

  1. 在引导时创建通知(带a BroadcastReceiver).
  2. 我的应用程序主要活动已打开,并且按下主页按钮(应用程序仍在后台运行,直到系统关闭它).
  3. 我按下状态栏并按下之前在启动时创建的通知.
  4. 开始了一些与主要活动不同的活动.
  5. 我按下后退按钮,显示主要活动.

我该如何防止最后一步?我想要的后退按钮是回到原来的位置,这是主屏幕(包含所有小部件和应用程序图标的桌面).我的应用程序的主要活动应该是在后台运行,为什么用后退按钮调用它?

如果相关,我创建通知的代码如下:

public void createNotification(int notifyId, int iconId, String contentTitle, String contentText) {
    Intent intent = new Intent(mContext, NewNoteActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.putExtra(AgendaNotesAdapter.KEY_ROW_ID, (long)notifyId);

    PendingIntent contentIntent = PendingIntent.getActivity(mContext, notifyId, intent, 0);

    Notification notification = new Notification(iconId, contentTitle, 0);
    notification.setLatestEventInfo(mContext, contentTitle, contentText, contentIntent);

    mNotificationManager.notify(notifyId, notification);
Run Code Online (Sandbox Code Playgroud)

我试图添加几个标志组合,intent但他们都没有解决我的问题...建议?

notifications android back-button android-intent android-pendingintent

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