小编And*_*rew的帖子

使用传递的参数时,防止 AppleScript 脚本更改其自己的修改日期

我有一个 AppleScript 脚本,用于通过 GeekTool 在我的桌面上显示 iTunes 曲目信息。我on runargv过去常常向脚本传递不同的参数,这样我就可以在不复制脚本的情况下显示曲目信息的不同部分(例如,我可以通过运行获得标题,我可以通过运行osascript itunes.scpt title获得艺术家/专辑osascript itunes.scpt album)。

然而,每次我用参数运行脚本时,实际的文件修改日期都会改变——似乎脚本正在向自己写入一些东西或进行某种修改。

这通常不是问题,除了在 OS X 10.7 中,Lion 为超过 2 周未修改的文件引入了文件锁定。一旦我的 iTunes 脚本被操作系统锁定,它在运行时就不能再进行这些不可见的自我更新,而且我的系统日志中充斥着这样的错误:

osascript: couldn't save changes to script /path/to/script: error -54
Run Code Online (Sandbox Code Playgroud)

我可以通过手动修改脚本来临时解决这个问题(例如,添加空行),但两周后它再次崩溃,因为 Lion 锁定了它。

理论上我可以在系统范围内禁用文件锁定来解决这个问题,但我宁愿不这样做——我喜欢它的其他用途。

那么,如何on run argv更改该脚本的修改日期的情况下将参数传递给 AppleScript 文件呢?

这是一个最小的工作示例。如果您从命令行 ( oscascript test.scpt blah)运行它,脚本的修改日期将会改变。

--test.scpt
on run argv
    tell application "iTunes"
        if player state is playing then
            set trck to current track
            set …
Run Code Online (Sandbox Code Playgroud)

applescript osx-lion

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

使用dplyr计算组平均值,同时排除当前观察值

使用dplyr(优选地),我试图计算每个观察的组平均值,同时从该组中排除该观察结果.

看来,这应该是可行的与组合rowwise()group_by(),但是这两种功能不能同时使用.

鉴于此数据框架:

df <- data_frame(grouping = rep(LETTERS[1:5], 3),
                 value = 1:15) %>%
  arrange(grouping)
df
#> Source: local data frame [15 x 2]
#> 
#>    grouping value
#>       (chr) (int)
#> 1         A     1
#> 2         A     6
#> 3         A    11
#> 4         B     2
#> 5         B     7
#> 6         B    12
#> 7         C     3
#> 8         C     8
#> 9         C    13
#> 10        D     4
#> 11        D     9 …
Run Code Online (Sandbox Code Playgroud)

r dataframe dplyr

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

从数据框中每个分组行的值中减去前一年的值

我试图计算无意中聚合的数据的滞后差异(或实际增加).数据中的每个连续年份包括上一年的值.可以使用以下代码创建示例数据集:

set.seed(1234)
x <- data.frame(id=1:5, value=sample(20:30, 5, replace=T), year=3)
y <- data.frame(id=1:5, value=sample(10:19, 5, replace=T), year=2)
z <- data.frame(id=1:5, value=sample(0:9, 5, replace=T), year=1)
(df <- rbind(x, y, z))
Run Code Online (Sandbox Code Playgroud)

我可以使用lapply()split()计算每个唯一ID的每年之间的差异的组合,如下所示:

(diffs <- lapply(split(df, df$id), function(x){-diff(x$value)}))
Run Code Online (Sandbox Code Playgroud)

但是,由于diff()函数的性质,第1年的值没有结果,这意味着在我用diffs列表压缩列表后Reduce(),我无法将实际的年度增量添加回数据框,如下所示:

df$actual <- Reduce(c, diffs)  # flatten the list of lists
Run Code Online (Sandbox Code Playgroud)

在此示例中,只有10个计算差异或滞后,而数据框中有15行,因此在尝试添加新列时R会引发错误.

如何创建一个新的实际增长列,其中(1)第1年的值和(2)所有后续年份的计算差异/滞后?

这是我最终要寻找的输出.我的diffs列表列表计算了第2年和第3年的实际值.

id value year actual
 1    21    3      5
 2    26    3     16
 3    26    3     14
 4    26    3     10 …
Run Code Online (Sandbox Code Playgroud)

r

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

从Sublime Text 2中的另一个构建系统访问构建系统

我正在尝试在Sublime Text 2中为knitr/Sweave创建一个构建系统.我目前的简单(和工作)构建系统如下:

{
    "cmd": ["bash", "-c", "/usr/bin/R64 CMD Sweave '${file_name}' && pdflatex '${file_base_name}.tex' -interaction=nonstopmode -synctex=1 %S -f -pdf && /Applications/Skim.app/Contents/MacOS/Skim '${file_base_name}.pdf'"], 
    "path": "$PATH:/usr/texbin:/usr/local/bin", 
    "selector": "text.tex.latex.sweave","shell":false,
    "file_regex": "^(...*?):([0-9]+): ([0-9]*)([^\\.]+)"
}
Run Code Online (Sandbox Code Playgroud)

(text.text.latex.sweave上下文在Sweave Textmate包中定义,哪种在Sublime Text中有效)

构建系统接受一个.Rnw文件,将其转换为TeX,然后pdflatex在其上运行.这个构建系统可以工作,但它在打开Skim的方式上相当有限(它只是打开PDF - 这就是全部).LaTeXTools Sublime Text包更加强大,可以在突出显示修改后的线条并提供Skim魔术反向搜索的同时打开/刷新Skim.

我不想重写LaTeXTools构建系统,特别是因为它使用单独的Python脚本完成了大部分繁重的工作(和Skim魔法).但是,我真的希望能够用它来构建一个从Sweave生成的TeX文件.

理想情况下,我喜欢以某种方式嵌套构建系统 - 将.Rnw文件转换为TeX,然后立即运行已存在的LaTeXTools构建系统.在伪代码中:

{
    [CONVERT RNW TO ${file_name}.tex && RUN THE LATEXTOOLS BUILD SYSTEM ON ${file_name}.tex]
}
Run Code Online (Sandbox Code Playgroud)

是否可以从另一个构建系统内部访问构建系统(或者从bash访问构建系统)?

r knitr sublimetext2

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

使用 R 中的 sf 将美学映射到 LINESTRING 几何图形

sfR的 new-ish包使得在 R 中处理地理数据变得非常容易,并且开发版本ggplot2有一个新的 geom_sf()层来绘制 sf 风格的地理数据。

sf处理数据的范式中,是否可以将 ggplot 美学映射到LINESTRING几何?

例如,使用标准 ggplot,可以 使用 ggplot 和此数据重新创建Minard 著名的 1812 年拿破仑大军的幸存者情节,并根据幸存者的数量确定军队的路径:

# Install the dev version of ggplot2 for geom_sf()
# devtools::install_github("tidyverse/ggplot2")
library(tidyverse)

troops <- read_csv("https://gist.githubusercontent.com/andrewheiss/69b9dffb7cca392eb7f9bdf56789140f/raw/3e2a48635ae44837955765b5e7747c429b0b5d71/troops.csv")

ggplot(troops) +
  geom_path(aes(x = long, y = lat, color = direction, 
                group = group, size = survivors),
            lineend = "round")
Run Code Online (Sandbox Code Playgroud)

我们可以sf通过创建一个新geometry列来将这些部队数据作为一个对象来处理 ,如下所示:

library(sf)
#> Linking to GEOS 3.6.1, GDAL …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 r-sf

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

编织器在文档中产生错误,但无论如何均能正确生成图形

我在macOS上编织了一个R Markdown文件,并knitr::opts_chunk$set(dev = c("png", "cairo_pdf"))用来将图的输出同时保存为PNG和PDF文件。我还使用了Cairo PDF库,因为它默认情况下可以正确嵌入字体(请参阅此处

当我编织并创建使用自定义字体的绘图时,knitr会使用开罗正确地保存PNG和PDF文件:

图形输出

但是,在实际的R Markdown针织文档中,R抱怨缺少字体并提供了数十种警告。这很奇怪,因为它在后台运行良好。

这是MWE:

---
title: "So many warnings?"
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(fig.path = "fig/",  # Save images to a subdirectory
                      echo = FALSE,  # Hide code for now
                      dpi = 300,  # High resolution PNGs
                      # Save all figures as Cairo PDFs and PNGs
                      dev = c("png", "cairo_pdf"),
                      dev.args = list(png = list(type = "cairo")))
```

```{r load-libraries}
library(ggplot2)
```

```{r warningless-plot}
# This will save two files …
Run Code Online (Sandbox Code Playgroud)

r knitr r-markdown

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

根据PHP中的字形检查字符串的语言

我有一个MySQL数据库,其中包括英语和阿拉伯语的书籍标题,我使用的PHP类可以自动将阿拉伯语文本音译为拉丁文.

我希望我的输出HTML看起来像这样:

<h3>A book</h3>
<h3>???? <em>(kitaab)</em></h3>
<h3>Another book</h3>
Run Code Online (Sandbox Code Playgroud)

有没有办法让PHP根据其中使用的Unicode字符和字形确定字符串的语言?我想要得到这样的东西:

$Ar = new Arabic('EnTransliteration');
while ($item = mysql_fetch_array($results)) {
    ...
    if (some test to see if $item['item_title'] has Arabic glyphs in it) {
      echo "<h3>$item[item_title] <em>(" . $Ar->ar2en($item['item_title']) . ")</em></h3>";
    } else {
      echo "<h3>$item[item_title]</h3>";
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

幸运的是,当输入拉丁字符时,类不会窒息,所以理论上我可以通过转换发送每个结果,但这似乎是浪费处理.

谢谢!

编辑: 我还没有找到检查字形或字符的方法.我想我可以将所有阿拉伯字符放在一个数组中,并检查数组中的任何内容是否与字符串的一部分匹配...

但是,我确实找到了一个可能最终工作正常的临时解决方案.无论语言如何,它都会通过转换放置每个标题,但只有在字符串发生更改时才输出括号音译:

while ($item = mysql_fetch_array($mysql_results)) {
    $transliterate = trim(strtolower($Ar->ar2en($item['item_title'])));
    $item_title = (strtolower($item['item_title']) == $transliterate) ? $item['item_title'] : $item['item_title'] . " <em>($transliterate)</em>";

    echo "<h3>$item_title</h3>";
}
Run Code Online (Sandbox Code Playgroud)

php mysql unicode arabic

4
推荐指数
1
解决办法
4020
查看次数

如何使用LibXML和Perl对XML条目进行排序?

我正在使用LibXML解析XML文件,需要按日期对条目进行排序.每个条目都有两个日期字段,一个用于发布条目,另一个用于更新条目.

<?xml version="1.0" encoding="utf-8"?>
...
<entry>
  <published>2009-04-10T18:51:04.696+02:00</published>
  <updated>2009-05-30T14:48:27.853+03:00</updated>
  <title>The title</title>
  <content>The content goes here</content>
</entry>
...
Run Code Online (Sandbox Code Playgroud)

XML文件已按更新日期排序,最新的第一个.我可以轻松地将其反转为将旧条目放在第一位:

my $parser = XML::LibXML->new();
my $doc = $parser->parse_file($file);
my $xc = XML::LibXML::XPathContext->new($doc->documentElement());

foreach my $entry (reverse($xc->findnodes('//entry'))) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

但是,我需要按发布日期反向排序文件,而不是按更新日期排序.我怎样才能做到这一点?时间戳看起来有点不稳定.我需要先将其标准化吗?

谢谢!

更新:在摆弄XPath命名空间并失败之后,我创建了一个解析XML并在哈希中存储我需要的值的函数.然后我用裸露sort来对哈希进行排序,现在效果很好.

xml sorting perl libxml2

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

mysql_num_rows是否有效和/或标准实践?

不久之前,我正在尝试使用SQLite,试图将我的一些网站移植到使用它而不是MySQL.我很想知道缺少一个计算结果的函数,比如PHP mysql_num_rows().稍微搜索一下后,我发现了这个邮件列表,据我所知,SQLite没有这个功能,因为它效率低下.它声明编写需要知道返回多少行的代码是不好的形式.

我通常mysql_num_rows用来检查空的返回结果.例如:

$query = "SELECT * FROM table WHERE thing = 'whatever'";
$results = mysql_query($query);

if (mysql_num_rows($results)) {
    while ($row = mysql_fetch_array($results)) {
        echo "<p>$row[whatever]</p>";
    }
} else {
    echo "<p>No results found</p>";
}
Run Code Online (Sandbox Code Playgroud)

mysql_num_rows()对SQLite社区概念的强烈厌恶使我想知道它是否对PHP中的常规MySQL非常有效.

有没有更好的,更可接受的方法来检查PHP中的MySQL结果集的大小mysql_num_rows()

编辑:我不只是mysql_num_rows用来计算 - 我会用它来COUNT查询.在输出所有内容之前,我用它来检查是否有任何结果.这对于显示搜索结果等内容非常有用 - 并不总能保证会有结果.在SQLite世界中,我必须发送一个COUNT查询,检查是否有什么,然后发送SELECT查询以获取所有内容.

php mysql sqlite

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

查找其他列表项中列表项的列表索引

我有一个长字符串列表,我想得到列表元素的索引与另一个列表中的字符串的子字符串匹配.检查是否列表项包含AA单字符串列表里面是很容易做到与列表理解,像这样的问题:

my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
thing_to_find = "abc"
matching = [i for i, x in enumerate(my_list) if thing_to_find in x]
Run Code Online (Sandbox Code Playgroud)

但是,我不仅要检查是否"abc"x,但是如果列表中有另一个列表中的任何字符串,如下所示:

my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
things_to_find = ['abc', 'def']
Run Code Online (Sandbox Code Playgroud)

这显然不起作用(但如果它真的很酷):

matching = [i for i, x in enumerate(my_list) if things_to_find in x]
Run Code Online (Sandbox Code Playgroud)

如果我单独运行命令,我可以找到列表索引,但它很乏味和可怕:

print([i for i, x in enumerate(my_list) if 'abc' in x])
# [0, 3]
print([i for i, x in enumerate(my_list) if 'def' in x])
# [1]
Run Code Online (Sandbox Code Playgroud)

找到一个列表中的元素在另一个列表中找到的所有实例的索引的最佳方法是什么?

python list-comprehension python-3.x

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