小编Rub*_*ben的帖子

AJAX自动保存功能

什么是已实现自动保存功能的最佳javascript库,或库的插件或扩展?

具体需要是能够"保存"数据网格.想想gmail和Google Documents的自动保存.

如果它已经被发明,我不想重新发明轮子.我正在寻找神奇的autoSave()函数的现有实现.

自动保存:推送到保存到持久存储的服务器代码,通常是数据库.服务器代码框架超出了本问题的范围.

请注意,我不是在寻找一个Ajax库,而是一个更高级别的库/框架:与表单本身进行交互.

daemach在jQuery @ http://daemach.blogspot.de/2007/03/autosave-jquery-plugin.html [script host down] 上引入了一个实现.我不相信它符合轻量级和精心设计的标准.

标准

  • 稳定,轻便,精心设计
  • 保存onChange和/或onBlur
  • 在给定的毫秒数之后不再频繁地保存
  • 处理同时发生的多个更新
  • 如果自上次保存后未发生任何更改,则不保存
  • 每个输入类保存到不同的URL

javascript ajax synchronize

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

控制并精确测量图像的显示时间

对于反应时间研究(如果您感兴趣,请参阅此问题)我们希望控制和测量图像的显示时间.我们想说明在不同用户的机器上重绘所需的时间.

编辑:最初,我只使用内联执行进行计时,并认为我不能相信它可以准确地测量图片在用户屏幕上可见的时间,因为绘画需要一些时间.

后来,我发现了事件" MozAfterPaint ".它需要在用户的计算机上运行配置更改,并且相应的WebkitAfterPaint没有成功.这意味着我无法在用户的计算机上使用它,但我将它用于我自己的测试.我粘贴了相关的代码片段和我下面的测试结果.
我还在Chrome中使用SpeedTracer手动检查了结果.

// from the loop pre-rendering images for faster display
var imgdiv = $('<div class="trial_images" id="trial_images_'+i+'" style="display:none"><img class="top" src="' + toppath + '"><br><img class="bottom" src="'+ botpath + '"></div>');
Session.imgs[i] = imgdiv.append(botimg);
$('#trial').append(Session.imgs);

// in Trial.showImages
$(window).one('MozAfterPaint', function () {
    Trial.FixationHidden = performance.now();
});
$('#trial_images_'+Trial.current).show(); // this would cause reflows, but I've since changed it to use the visibility property and absolutely positioned images, to minimise reflows
Trial.ImagesShown = …
Run Code Online (Sandbox Code Playgroud)

javascript time jquery repaint reflow

26
推荐指数
1
解决办法
811
查看次数

从列表舍入到最接近的任意数字

我基本上是在寻找一种在R中对这个Ruby脚本进行变换的方法.
我有一个任意的数字列表(在这种情况下,回归图的主持人的步骤)彼此之间的距离不相等,而且我d想要将这些数字范围内的值舍入到列表中最接近的数字.范围不重叠.

arbitrary.numbers <- c(4,10,15) / 10
numbers <- c(16:1 / 10, 0.39, 1.45)
range <- 0.1
Run Code Online (Sandbox Code Playgroud)

预期产量:

numbers
## 1.6 1.5 1.4 1.3 1.2 1.1 1.0 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0.39 1.45
round_to_nearest_neighbour_in_range(numbers,arbitrary.numbers,range)
## 1.5 1.5 1.5 1.3 1.2 1.0 1.0 1.0 0.8 0.7 0.6 0.4 0.4 0.4 0.2 0.1 0.4 1.5
Run Code Online (Sandbox Code Playgroud)

我有一个小助手功能,可能会对我的特定问题做,但它不是很灵活,它包含一个循环.我可以在这里发布,但我认为真正的解决方案看起来完全不同.

不同的答案为速度计时(百万数字)

> numbers = rep(numbers,length.out = 1000000)
> system.time({ mvg.round(numbers,arbitrary.numbers,range) })[3]
elapsed 
  0.067 
> system.time({ rinker.loop.round(numbers,arbitrary.numbers,range) })[3] …
Run Code Online (Sandbox Code Playgroud)

r

13
推荐指数
2
解决办法
3867
查看次数

Bookmarklet安全性考虑因素CSRF是关键所在

我的书签可以从任何网站调用,基本上允许用户从远处向他的收藏中插入一行 - 如果他已登录.

现在我想为我的网站启用CSRF保护,因为书签基本上是非伪造的跨网站请求,我想到了我如何区别于伪造的.
这不是一个高安全性的环境,但我也对原则感兴趣.

我以为我有办法做到这一点,但后来意识到它有很多问题.

创见

  • 生成包含在bookmarklet-link中的随机密钥.密钥的哈希值保存在数据库中.随机密钥只允许访问插入此集合的权限,不能在其他任何地方使用.
  • bookmarklet从我的服务器加载一个更长的脚本,所以我可以这样提供CSRF预防令牌
  • 要求用户登录

问题

  • 如果我有bookmarklet密钥,我是否需要反CSRF令牌?
  • 如果用户在恶意网站上点击他的书签,我有什么方法可以保护书签键吗?
  • 我不希望用户名和密码存储在bookmarklet链接中,因为任何有权访问计算机的人都会获得密码,所以我决定使用随机密钥.
    • 但是如果我只存储哈希,我就不能生成两次相同的书签链接,所以当用户想要在另一个浏览器/计算机中使用书签时,他繁琐地必须从旧的链接导入链接或者中断旧的链接.
    • 但是我不应该存储明文密钥,因为获得数据库访问权限的人可以使用此密钥将行插入不属于他的帐户中.
    • 可能的解决方法,我可以要求用户提供他的密码,他随时创建书签和散列密码很多次,并把该散列在URL中,并将该散列我的数据库的哈希值.但当然这会打开更糟糕的安全漏洞.
      • 我可以用"妈妈的娘家姓"这样的东西代替
      • 由于随机盐,我无法使用bcrypt进行散列,对吧?什么哈希函数是正确的?或者你会忽略整个想法?
  • 如果我将书签密钥丢失,恶意网站可以简单地嵌入书签并从中提取有效的CSRF令牌,对吧?

好主意?或者你没有F而没有CSR吗?


编辑,指定用例

我根本没想到的一件事是Sripathi Krishnan建议使用iframe.

我没有指定我的用例,所以是的,iframe是上述问题的有效解决方案.

然而,实际上我的书签目前在运行时确实与网站进行了一些基本的交互(意味着表格已经存在,用户可以在网站DOM中更改他的选择,这应该改变表格).我已经准备好为我的用例解雇这个功能,如果事实证明,没有合理安全的方式来区分伪造的非伪造跨站请求 - 但我仍然对理论水平感兴趣.

security hash bookmarklet csrf

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

用原始语言切换gettext翻译语言

我用德语中的所有文本启动了我的PHP应用程序,然后使用gettext提取所有字符串并将它们翻译成英语.
所以,现在我有一个.po文件,其中包含德语中的所有msgids和英语中的msgstrs.我想切换它们,以便我的源代码包含英文为msgids,原因有两个:

  1. 更多的翻译人员会懂英语,因此只提供一个英文msgids的文件是合适的.我总是可以在我发出文件之前切换文件,然后收到它,但是naaah.
  2. 如果内容文本也是英文的话,它会帮助我写英文对象和函数名称和注释.我想这样做,所以该项目对其他开源合作者更开放(更有可能知道英语而不是德语).

我可以手动执行此操作,这是一种任务,我预计它将花费更多时间为它编写一个自动例程(因为我对shell脚本非常糟糕)而不是手动执行.但我也期望鄙视手动计算机劳动的每一分钟(感觉就像矛盾,对吧?)就像我一直这样.

有人曾经这样做过吗?我认为这将是一个常见的问题,但找不到任何东西.非常感谢.

示例问题:

<title><?=_('Routinen')?></title>

#: /users/ruben/sites/v/routinen.php:43
msgid "Routinen"
msgstr "Routines"
Run Code Online (Sandbox Code Playgroud)

我以为我会把问题缩小..po文件中的开关当然没有问题,就像它一样简单

preg_replace('/msgid "(.+)"\nmsgstr "(.+)"/', '/msgid "$2"\nmsgstr "$1"/', $str);
Run Code Online (Sandbox Code Playgroud)

对我来说问题是在解析.po文件时搜索我的项目文件夹文件_('$msgid')并替换的例程_('msgstr')(在所有.po文件包含包含所有文件路径的注释之后,这可能不是最优雅的方式) msgstr发生).


之后鬼混与akirk的回答一点,我遇到了一些更多的问题.

  1. 因为我有混合_('xxx')_("xxx")调用,所以我必须小心(un)转义.
    • msgstr和msgstrs中的双引号必须是未转义的,但不能删除斜杠,因为可能是双引号也在PHP中被转义
    • 单引号在被替换为PHP时必须进行转义,但是它们也必须在.po文件中进行更改.幸运的是,单引号只出现在英文文本中.
  2. msgids和msgstrs可以有多行,然后它们看起来像这样
    msgid = ""
    "line 1\n"
    "line 2\n"
    msgstr = ""
    "line 1\n"
    "line 2\n"
  3. 当然,复数形式被忽略了,但在我的情况下,这不是问题
  4. poedit希望删除过时的字符串似乎已成功切换,我不知道为什么会在(很多)情况下发生这种情况.

我今晚必须停止工作.似乎仍然使用解析器而不是RegExps不会有点矫枉过正.

php regex parsing gettext poedit

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

如何更快地对群内观察进行排名?

我有一个非常简单的问题,但我可能没有想到vector-y足以有效地解决它.我尝试了两种不同的方法,现在他们已经在两台不同的计算机上循环了很长时间.我希望我可以说比赛让比赛变得更加精彩,但是... ......

在群体中排名观察

我有很长的数据(每人多行,每人观察一行),我基本上想要一个变量,告诉我这个人已经被观察过的频率.

我有前两列,想要第三列:

person  wave   obs
pers1   1999   1
pers1   2000   2
pers1   2003   3
pers2   1998   1
pers2   2001   2
Run Code Online (Sandbox Code Playgroud)

现在我正在使用两种循环方法.两者都非常缓慢(150k行).我确定我错过了一些东西,但我的搜索查询对我来说并没有真正帮助我(很难说出问题).

感谢您的任何指示!

# ordered dataset by persnr and year of observation
person.obs <- person.obs[order(person.obs$PERSNR,person.obs$wave) , ]

person.obs$n.obs = 0

# first approach: loop through people and assign range
unp = unique(person.obs$PERSNR)
unplength = length(unp)
for(i in 1:unplength) {
   print(unp[i])
   person.obs[which(person.obs$PERSNR==unp[i]),]$n.obs = 
1:length(person.obs[which(person.obs$PERSNR==unp[i]),]$n.obs)
    i=i+1
   gc()
}

# second approach: loop through rows and reset counter at …
Run Code Online (Sandbox Code Playgroud)

optimization r

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

功能检测bfcache?

当使用后退按钮转到DOM已被修改的页面时,我对IE10中的这个问题感到惊讶:

对于行为1或2,我会很满意,但不是3:

  1. 正确恢复整个状态(如FF和Chrome一样)
  2. 重新加载页面(因为它不应该被缓存)并且可以重新创建当前状态,因为通过Ajax将更改推送到服务器(IE8执行此操作)
  3. 但IE10回到了初始的,未经修改的页面(它保留了表单输入,如果初始页面上有任何内容,但不是整个状态)

因为我赶时间,所以如果有人在进行DOM修改后访问页面(这条信息存储在哈希中),我就强迫重新加载,这是一个非常愚蠢的解决方案(FF和Chrome不需要重装,但现在做).

一个建议是使用localStorage来记住状态,我猜这种功能也被归入history.js.

保持备用副本以便进行比较/以防状态未恢复似乎过度,特别是因为在我们的情况下这是一个可能会影响0.01%用户的问题.就我的目的而言,如果状态尚未完全保存在bfcache中,则强制重新加载就足够了.

我可以"简单地"检测是否存在一个包含所有状态的bfcache?如果是这样,当有人回到DOM被修改的页面时,我可以强制重新加载吗?

javascript caching

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

使用PHPexcel以便宜的方式查找最高的非空列/行(在Google表格导出中)

当导入在PHPExcel,PHPexcel方法谷歌表导出的.xlsx文件$worksheet->getHighestDataColumn(),并$worksheet->getHighestDataRow()都返回谷歌文档的最大集,包括完全空白单元格,这通常是26x1000.

在Google表格/ Excel中打开它们时,单元格与常规空Excel单元格一样空,即无空格.

也许谷歌表格使用略微不同的方法来"保留"列和行而不是Excel(即时生成它们).

我想获得最高的非空行,以便在循环遍历行时不会不必要地分配大量内存.尊重我正在使用的格式,我可以在空行中保存一些评估,但最后,我被迫简单地遍历所有行并检查所有单元格是否为空.

php google-sheets phpexcel

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

如何在R和服务器之间建立安全的密码保护连接

我编辑了这个问题,以澄清为什么我再次提出这个问题(我有弱Google-Fu,发现这些相当古老的1 2 3只是在发布后非常重复).

访问我在野外看到的受密码保护的资源的方法.

  1. 脚本中的纯文本存储(可能经常最终被共享,或者在Dropbox中)
  2. 配置脚本中的纯文本存储
  3. 你可以做password = readline("Password: ")但当然密码最终以控制台中的明文形式出现(因此在控制台日志等中),所以不妨将它存储在纯文本配置文件中.
  4. 我发现这个小技巧可以避免在终端中显示密码,但system("stty -echo")在OS X Mavericks上运行会导致错误stty: stdin isn't a terminal,所以我想它不会特别便携.
  5. tcltk.有不幸的效果使Rstudio崩溃并且难以安装.
  6. 钥匙扣.它不是在CRAN上,所以我认为我不能将它作为一线方法使用,我还想更详细地了解密码存储在各种系统中的位置和方式(即最终会以明文形式显示)视窗?).
  7. 访问令牌,OAuth等似乎也有类似的问题.

我不知道任何使用PGP进行连接的R包?对于新手用户来说可能也有点困难.

我主要不是要求自己,但我想为非技术用户提供一些合理的默认设置,这些用户可能存储明文密码,可以访问Dropbox中的敏感数据.

与其他提出类似问题的人不同,如果我有更好的方法,我也可以改变服务器方面的问题.

我目前缺少最佳实践方法吗?我对交互式会话的关注是因为我认为大多数非技术类型都使用R,但当然如果它在例如knitr报告生成期间也能工作则会很好.

security r

7
推荐指数
1
解决办法
1107
查看次数

使用接受捕获的polyfill文件输入(使用getUserMedia捕获?)

我想在调查框架中启用图像(和音频和视频)上传.为此,输入文件几乎足以满足我的需要.

在某些移动浏览器<input type="file" accept="image/*;capture=camera">上,让用户选择上传现有图片或拍摄新图片是一种非常简单的方法.当然,也提供了用于在图片中查看和选择的UI.

桌面浏览器没有走这条路.相反,一些相当不错的东西似乎可以使用getUserMedia().
我没有找到任何将收集的用户媒体上传到服务器的工作示例(例如,我通过这个答案找到了https://github.com/codepo8/interaction-cam/.它显示了视频,但没有捕获到我的Firefox并没有"意识到"它,它在Safari中根本不显示视频).我不确定这有多少是特定于硬件的(我的Macbook Air的相机已经在Chrome中打开/关闭了很长时间).

是否存在某种用于上传捕获图像的polyfill,如果出现故障/访问拒绝,可以回退到简单的文件输入?

javascript html5 file-upload polyfills getusermedia

6
推荐指数
1
解决办法
1994
查看次数

使用Javascript捕获反应时间,准确性问题

我正在建立一个点探测任务(人们必须在图像消失后迅速对一个点做出反应)我们需要测量反应时间并显示预定间隔的刺激,以便在在线治疗研究中使用.

我们已经决定使用Javascript,我们愿意对用户施加一些限制,即排除IE等.但我们不能完全禁止Windows.

我阅读了John Resig关于该主题的帖子,根据这一点,除了Firefox和Chrome之外,我们必须禁止Windows上的所有浏览器.

此外,这个答案建议使用console.time();FF和Chrome作为最佳实践.

我有一些后续问题,考虑到Resig的帖子现在已经4年了,上面的问题是关于测量函数执行时间(这意味着执行代码偏移计时器是好的,不像我们的情况那样糟糕)而不是关于反应时间的研究.

以下类似的问题只是要求"最好的网络语言",并且只接受了使用JS的一揽子建议(这是几个已发表的研究所做的,但他们没有公布技术细节).

  1. 我们能以某种方式使用更好的准确度console.time()吗?我想不是,因为它只返回到控制台,即它无法在变量中捕获.
  2. 过去4年中,计时准确度是否有任何重大变化?我很自在地禁止使用IE浏览器有很多原因,但是在Windows上Safari和Opera可能会有所改变吗?
  3. 我是否应该使用与执行过程相关的第二种方法来进行另一组比较/交叉验证?

javascript time

5
推荐指数
1
解决办法
2591
查看次数

在 ggplot2 图中自动使用标签(避风港语义)

我正在绘制使用避风港语义标记的数据,即变量和值具有通过属性定义的标签。

通常,这些标签也是我想要的轴标题和刻度。

library(ggplot2)
mtcars$mpg = haven::labelled(mtcars$mpg, labels = c("low" = 10, "high" = 30))
attributes(mtcars$mpg)$label = "miles per gallon"
ggplot(mtcars, aes(mpg, cyl)) + geom_point() + 
scale_x_continuous(attributes(mtcars$mpg)$label, 
     breaks = attributes(mtcars$mpg)$labels, 
     labels = names(attributes(mtcars$mpg)$labels))
Run Code Online (Sandbox Code Playgroud)

我可以编写一个帮助程序,用更容易迭代的内容来替换费力的scale_x_continuous 语句吗?例如类似的东西 scale_x_continuous(label_from_attr, breaks = breaks_from_attr, labels = value_labels_from_attr)。或者甚至可以+ add_labels_from_attributes()更换整个东西?

我知道我可以编写/使用帮助程序,例如Hmisc::label稍微缩短上面的属性代码,但这不是我想要的。

r ggplot2 r-haven

5
推荐指数
1
解决办法
1258
查看次数