我试图弄清楚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允许这个问题解决的惯用方法是什么?
我想根据某些条件选择一些行,然后从该集合中取一个条目,在它之前和之后取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.
我想声明一个变量是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类型和非空白?
Clojure向我介绍了Lisp语法的概念,我很感兴趣,但是让Clojure repl设置并在不同的机器上使用它是一件痛苦的事.还有哪些其他资源可用于实际动态测试和使用Lisp语法?
我想象的东西就像一个网站,你可以输入基本的代码,或浏览器插件,甚至只是一个独立的应用程序,引导你通过Lisp(在Linux/Ubuntu上运行的东西).
无法找到类似的东西以简单/可访问的方式启动我.
我对如何正确使用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) 所以我有其他人写的这个查询,我正在尝试重构,这为项目提供了一些功能/材料(通常是鞋子).
有很多产品,因此有很多连接表条目,但只有少数几个可用的功能.我认为必须有一种方法可以减少触及"大"项目列表的需要,以获得这些功能,我听说要明确避免,但我没有可以替换此处"不同"选项的语句.
根据我的日志,我的结果时间很慢:
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) 我的工作是运行Jenkins和Bitbucket Server(因此它们不是bitbucket云,而是托管自己的bitbucket版本).我习惯于在github和bitbucket云上有传递/失败的构建,立即报告PR和分支是否构建通过或失败.我想在当前的环境中将这份礼物送给我的团队.如何在Bitbucket服务器中获取PR以接收Jenkins构建的成功/失败?
[图1只显示了我想要的功能的一个例子,在github + codeship中的PR上运行]
我正在为我的网页游戏http://ninjawars.net添加一个"更改密码"功能,该网站目前已修复(并且基本上不会更改)密码.
我想避免弄乱它,所以我想确保我有基本的安全基础.
从facebook的做事方式中我可以得到的东西,要记住的关键点要点是:
Facebook还:
- 要求新密码与过去的密码不同.(看起来像边缘情况使用)
这些只是我可以从facebook帐户系统的外部用户界面收集到的政策.提供"更改密码"系统时,我应该涵盖哪些其他安全点?
编辑: 在我的具体情况下,我打算通过[插入各种标准]相对宽容,以确定哪些字符必须进入密码本身.我的网站不是银行,如果玩家想要使用密码"password1",那么他们应该期望他们的帐户被他们的朋友接管. 我的注意力,另一方面,是在确保我的网站为防止"恶意收购"的任何机会,通过在任何一种不安全的密码更改系统本身.
从以下答案中获得更多好处:
我在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) 所以我正在使用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的命令继续开发两者?
php ×3
clojure ×2
sql ×2
assertions ×1
branch ×1
distinct ×1
git ×1
jenkins ×1
lisp ×1
mysql ×1
passwords ×1
phpunit ×1
postgresql ×1
security ×1
selection ×1
sublimetext3 ×1
svn ×1
unit-testing ×1
xdebug ×1