小编Kzq*_*qai的帖子

Clojure中的惯用语封装:数据如何与链接行为捆绑在一起?

我试图弄清楚Clojure是否可以完全取代我在其他语言中习惯的范例.我不明白的一件事是如何在Clojure中以惯用方式实现封装(通过封装,我指的是使用对该数据进行操作的方法(或其他函数)捆绑数据).

这是OOP的一个用例:

var apple = {
    type: "macintosh",
    color: "red",
    cost: 5
    markup: 1.5
    getInfo: function () {
        return this.color + ' ' + this.type + ' apple';
    }
    getPrice: function(){
        return this.cost * this.markup;
    }
}
Run Code Online (Sandbox Code Playgroud)

或类似地:

var person = {
    birthdate: '8/30/1980',
    firstname: 'leeroy',
    middleinitial: 'b',
    lastname: 'jenkins',
    getAge: function () {
        return -(new Date()
 - new Date(this.birthdate));
    }
    getFullFormattedName: function () {
        return capitalize(this.firstname+' '+this.middleinitial+' '+this.lastname;
    }
}
Run Code Online (Sandbox Code Playgroud)

以这种方式将行为与数据捆绑在一起通常很方便,但是Clojure允许这个问题解决的惯用方法是什么?

encapsulation functional-programming clojure

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

如何选择相邻行到任意行(在sql或postgresql中)?

我想根据某些条件选择一些行,然后从该集合中取一个条目,在它之前和之后取5行.

现在,如果表上有一个主键,我可以用数字方式执行此操作(例如,主键在数字上比目标行的键小5,比目标行的键多5个).

因此,选择主键为7的行和附近的行:

select primary_key from table where primary_key > (7-5) order by primary_key limit 11;

2
3
4
5
6
-=7=-
8
9
10
11
12
Run Code Online (Sandbox Code Playgroud)

但是如果我只选择某些行开头,我会失去使用主键的数字方法(并且假设键无论如何都没有任何顺序),并且需要另一种方法来获取最接近的行在一定的目标行之后.

这种选择的主键输出可能看起来更随机,因此数学定位的可能性较小(因为某些结果将被过滤,输出,例如使用a where active=1):

select primary_key from table where primary_key > (34-5) 
    order by primary_key where active=1 limit 11;

30
-=34=-
80
83
100
113
125
126
127
128
129
Run Code Online (Sandbox Code Playgroud)

请注意,由于条件中的示例(例如,因为有很多非活动项)导致主键中的间隙,我不再得到最接近的5以上和5以下,而是我得到最接近的1相反,最接近9.

sql postgresql selection

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

断言var是phpunit中没有特定字符的非空字符串

我想声明一个变量是phpunit中的一个(非空白)字符串,但我不想断言字符串必须匹配任何完全字符串.

例如,我想拉一个用户名,并确保我成功获得了一些非空白用户名,但我并不确切知道我的用户名.

我可以很容易断言它是一个非空变量,或者它是一个完全匹配某个字符串的字符串,或断言var是没有phpunit帮助的字符串:

$this->assertNotEmpty($username);
$this->assertSame('myusername', $username);
$this->assertTrue(is_string($username));
Run Code Online (Sandbox Code Playgroud)

这些都接近我所需要的,使用is_string实际上测试正确的条件,但是自己做is_string还不够好,因为当测试失败时我不能再得到有用的,信息丰富的消息了,而不是告诉我实际返回了什么类型的值,错误消息变得无用:

Failed asserting that false is true.
Run Code Online (Sandbox Code Playgroud)

那么如何使用phpunit的断言系统断言var是string类型和非空白?

php phpunit unit-testing assertions

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

轻松尝试和测试Lisp语法的方法?

Clojure向我介绍了Lisp语法的概念,我很感兴趣,但是让Clojure repl设置并在不同的机器上使用它是一件痛苦的事.还有哪些其他资源可用于实际动态测试和使用Lisp语法?

我想象的东西就像一个网站,你可以输入基本的代码,或浏览器插件,甚至只是一个独立的应用程序,引导你通过Lisp(在Linux/Ubuntu上运行的东西).

无法找到类似的东西以简单/可访问的方式启动我.

lisp clojure

15
推荐指数
4
解决办法
8581
查看次数

PHP:如何使用set_error_handler()来正确处理除通知之外的所有错误?

我对如何正确使用set_error_handler()感到困惑,并且php文档并没有真正帮助澄清.

我希望它尽可能多地向我发送电子邮件,但通知除外.

我有以下代码

<?php

if (TRAP_ERRORS) { 
// True on production, false in development, where errors are just echoed out.
    set_exception_handler('globalExceptionHandler');
    set_error_handler('globalErrorHandler', E_USER_WARNING);
}

function globalExceptionHandler($e) {
    //log and email stuff here
}

function globalErrorHandler($errno, $errstr, $errfile, $errline) {
    switch ($errno) {
        case E_NOTICE:
        case E_USER_NOTICE:
            $errors = "Notice";
            break;
        case E_WARNING:
        case E_USER_WARNING:
            $errors = "Warning";
            break;
        case E_ERROR:
        case E_USER_ERROR:
            $errors = "Fatal Error";
            break;
        default:
            $errors = "Unknown Error";
            break;
    }

    error_log(sprintf("PHP %s:  %s in …
Run Code Online (Sandbox Code Playgroud)

php error-handling

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

如何在三个表(40k行)中优化缓慢的"选择不同"查询,只返回22个结果

所以我有其他人写的这个查询,我正在尝试重构,这为项目提供了一些功能/材料(通常是鞋子).

有很多产品,因此有很多连接表条目,但只有少数几个可用的功能.我认为必须有一种方法可以减少触及"大"项目列表的需要,以获得这些功能,我听说要明确避免,但我没有可以替换此处"不同"选项的语句.

根据我的日志,我的结果时间很慢:

Query_time:7 Lock_time:0 Rows_sent:32 Rows_examined:5362862

Query_time:8 Lock_time:0 Rows_sent:22 Rows_examined:6581994

正如消息所说,有时它需要7或8秒,有时或每次查询超过500万行.

这可能是由于同时发生的其他负载,因为这里是直接从mysql命令行在数据库上运行的选择:

mysql> SELECT DISTINCT features.FeatureId, features.Name
       FROM features, itemsfeatures, items
       WHERE items.FlagStatus != 'U'
         AND items.TypeId = '13'
         AND features.Type = 'Material'
         AND features.FeatureId = itemsfeatures.FeatureId
       ORDER BY features.Name;
+-----------+--------------------+
| FeatureId | Name               |
+-----------+--------------------+
|        40 | Alligator          |
|        41 | Burnished Calfskin |
|        42 | Calfskin           |
|        59 | Canvas             |
|        43 | Chromexcel         |
|        44 | Cordovan           |
| …
Run Code Online (Sandbox Code Playgroud)

mysql sql distinct query-optimization

14
推荐指数
2
解决办法
7832
查看次数

如何让Jenkins构建报告故障返回Bitbucket服务器?

我的工作是运行Jenkins和Bitbucket Server(因此它们不是bitbucket云,而是托管自己的bitbucket版本).我习惯于在github和bitbucket云上有传递/失败的构建,立即报告PR和分支是否构建通过或失败.我想在当前的环境中将这份礼物送给我的团队.如何在Bitbucket服务器中获取PR以接收Jenkins构建的成功/失败?


[图1只显示了我想要的功能的一个例子,在github + codeship中的PR上运行]


在github和codeship上构建成功和失败的PR

jenkins jenkins-plugins bitbucket-server

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

创建"更改密码"功能时应采取哪些安全措施?

我正在为我的网页游戏http://ninjawars.net添加一个"更改密码"功能,该网站目前已修复(并且基本上不会更改)密码.

我想避免弄乱它,所以我想确保我有基本的安全基础.

从facebook的做事方式中我可以得到的东西,要记住的关键点要点是:

  • 需要旧密码(当然).
  • 确认两次新密码输入.
  • 注销帐户(仅限所有其他页面,不知何故)?
  • 需要安全的密码长度,并且密码适合每个特定系统上密码所需的所有[插入此处的各种条件].
  • 要求新密码与旧密码不同.
  • 防止多次密码更改尝试.

Facebook还:
- 要求新密码与过去的密码不同.(看起来像边缘情况使用)

这些只是我可以从facebook帐户系统的外部用户界面收集到的政策.提供"更改密码"系统时,我应该涵盖哪些其他安全点?

编辑: 在我的具体情况下,我打算通过[插入各种标准]相对宽容,以确定哪些字符必须进入密码本身.我的网站不是银行,如果玩家想要使用密码"password1",那么他们应该期望他们的帐户被他们的朋友接管. 我的注意力,另一方面,是在确保我的网站为防止"恶意收购"的任何机会,通过在任何一种不安全的密码更改系统本身.

从以下答案中获得更多好处:

  • 将密码更改通知发送给用户的电子邮件.
  • 保持电子邮件的更改和密码的更改,每个都取决于彼此.
  • 使用安全加密(https)连接进行此类更改.

security passwords design-patterns

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

Xdebug无法连接到客户端,我在哪里开始调试调试器?

我在sublime文本中为php设置xdebug,xdebug继续记录与无法连接相关的错误:

Log opened at 2016-08-18 21:06:01
I: Connecting to configured address/port: localhost:9988.
E: Could not connect to client. :-(
Log closed at 2016-08-18 21:06:01
Run Code Online (Sandbox Code Playgroud)

我希望通过访问http://localhost:9988我的浏览器直接调试可能有所帮助,但它只是显示谷歌浏览器错误页面:"localhost拒绝连接".也许错误存在于另一端,那个数据无法推送到sublime文本客户端,我不知道.Sublime文本xdebug确实在我运行tests/etc时显示消息"Reloading /var/log/xdebug/xdebug.log",所以它似乎知道正在运行的php代码,只是没有得到任何进一步.

所以,我从未想过我必须调试xdebug本身,但是:我如何调试xdebug到代码编辑器连接?如果这是nginx,我会开始调试虚拟主机,但因为它是xdebug ......我不知道从哪里开始调试缺少连接的应用程序?

##各种配置设置##

我在ubuntu linux 14.04上.

这是我的xdebug.ini conf,如果相关:

[xdebug]
xdebug.default_enable=1
xdebug.remote_enable=1
xdebug.remote_autostart=1
xdebug.remote_host="localhost"
xdebug.remote_handler="dbgp"
xdebug.remote_port=9988
xdebug.remote_mode = req
xdebug.overload_var_dump=0
xdebug.idekey = sublime.xdebug
xdebug.remote_log="/var/log/xdebug/xdebug.log"
;https://github.com/martomo/SublimeTextXdebug
Run Code Online (Sandbox Code Playgroud)

Xdebug安装:

apt-cache policy php-xdebug
php-xdebug:
  Installed: 2.4.0-5+donate.sury.org~trusty+1
  Candidate: 2.4.0-5+donate.sury.org~trusty+1
  Version table:
 *** 2.4.0-5+donate.sury.org~trusty+1 0
        500 http://ppa.launchpad.net/ondrej/php/ubuntu/ trusty/main amd64 Packages
        100 /var/lib/dpkg/status
Run Code Online (Sandbox Code Playgroud)

模块有效:

php -m | grep -i xdebug …
Run Code Online (Sandbox Code Playgroud)

php xdebug sublimetext3 sublime-text-plugin

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

使用git-svn将svn分支合并回trunk和trunk回到分支

所以我正在使用git并与svn repo进行交互.

我有一个svn TRUNK,看起来像这样:

A-B-C-D
Run Code Online (Sandbox Code Playgroud)

还有一个svn bug_fixes分支,它在提交B或C处分支:

 -c-d-e-f-g-h-i
Run Code Online (Sandbox Code Playgroud)

现在我需要将我的svn分支中的cdefghi提交返回到主分支.

我知道我可以做一个被压扁的提交,让我们称之为壁球SQUASH(它将包含cdefghi),但后来似乎我必须杀死bug_fixes分支并启动一个新的分支以干净地继续.

这里:http://blog.red-bean.com/sussman/?p = 92他们建议:

checkout 分支.

merge 主人的变化进入分支.

Checkout 大师.

merge --reintegrate 分支机构对主人的改变.

继续发展.

不幸的是,git-svn似乎没有认识到svn的任何"merge --reintegrate"命令.

那么我如何干净地使分支和master拥有所有提交,以便使用git-svn的命令继续开发两者?

svn git branch reintegration

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