小编Gre*_*Cat的帖子

获取Java中某个范围内的键值

假设我在Java中有一个地图,如下所示:

{ 
 39:"39 to 41",
 41:"41 to 43",
 43:"43 to 45",
 45:">=45"
}
Run Code Online (Sandbox Code Playgroud)

如果键是按排序顺序(使用treemap或linkedhashmap).现在,如果我尝试获得> = 39且<41的值.那么我应该得到字符串"39到41".如何有效地执行此操作?

java map range-map

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

长多字节NOP:通常理解的宏或其他符号

x86(和x86_64)处理器不仅具有单字节NOP指令,而且还具有各种类型的多字节NOP类指令,这不是一个大秘密.

我找到了那些:

AMD推荐,参考.用于AMD系列15h处理器的AMD软件优化指南,文档#47414,第5.8节"带操作数大小覆盖和多字节NOP的代码填充",第94页)

90                              NOP1_OVERRIDE_NOP
6690                            NOP2_OVERRIDE_NOP
0f1f00                          NOP3_OVERRIDE_NOP
0f1f4000                        NOP4_OVERRIDE_NOP
0f1f440000                      NOP5_OVERRIDE_NOP
660f1f440000                    NOP6_OVERRIDE_NOP
0f1f8000000000                  NOP7_OVERRIDE_NOP
0f1f840000000000                NOP8_OVERRIDE_NOP
660f1f840000000000              NOP9_OVERRIDE_NOP
66660f1f840000000000            NOP10_OVERRIDE_NOP
6666660f1f840000000000          NOP11_OVERRIDE_NOP
Run Code Online (Sandbox Code Playgroud)

英特尔推荐,参考.英特尔64和IA-32架构软件开发人员手册卷2B:指令集参考,新西兰,"NOP"部分

90                              NOP
6690                            66 NOP
0f1f00                          NOP DWORD ptr [EAX]
0f1f4000                        NOP DWORD ptr [EAX + 00H]
0f1f440000                      NOP DWORD ptr [EAX + EAX*1 + 00H]
660f1f440000                    66 NOP DWORD ptr [EAX + EAX*1 + 00H]
0f1f8000000000                  NOP DWORD ptr [EAX + 00000000H]
0f1f840000000000                NOP DWORD ptr [EAX …
Run Code Online (Sandbox Code Playgroud)

x86 assembly x86-64 disassembly nop

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

在Linux和BSD中使用和不使用shebang执行Bash脚本执行

当一个类似Bash的脚本作为没有shebang的二进制文件执行时,如何以及由谁决定执行什么?

我想 shebang 运行一个普通的脚本是用binfmt_script Linux模块处理的,它检查一个shebang,parses命令行并运行指定的脚本解释器.

但是当有人在没有shebang的情况下运行脚本时会发生什么?我已经测试了直接execv方法并发现那里没有内核魔法 - 即像这样的文件:

$ cat target-script
echo Hello
echo "bash: $BASH_VERSION"
echo "zsh: $ZSH_VERSION"
Run Code Online (Sandbox Code Playgroud)

运行仅执行execv调用的已编译C程序会产生:

$ cat test-runner.c
void main() {
        if (execv("./target-script", 0) == -1)
                perror();
}
$ ./test-runner
./target-script: Exec format error

但是,如果我从另一个shell脚本执行相同的操作,它将使用与原始shell脚本相同的shell解释器运行目标脚本:

$ cat test-runner.bash
#!/bin/bash
./target-script

$ ./test-runner.bash 
Hello
bash: 4.1.0(1)-release
zsh: 

如果我使用其他shell执行相同的技巧(例如,Debian的默认值sh- /bin/dash),它也可以:

$ cat test-runner.dash   
#!/bin/dash
./target-script

$ ./test-runner.dash 
Hello
bash: 
zsh: 

神秘的是,它与zsh没有达到预期的效果,并且不遵循一般方案./bin/sh毕竟看起来像zsh 在这些文件上执行:

greycat@burrow-debian ~/z/test-runner …

linux bash shell freebsd dash-shell

17
推荐指数
2
解决办法
4069
查看次数

Scala范围/区间映射结构

我有几乎相同的数据结构中提到的问题,可以将一系列键映射到值,但对于Scala.

也就是说,我希望有一个非重叠的1D范围[a [i],b [i])的可变系统,它将映射到某种值v [i].执行此类工作的标准基础数据结构是红黑树.

我希望它拥有的操作,最好是所有操作都应该具有O(log n)的复杂度:

  • 通过指定其中的任何点来查询并获取给定范围(开始,结束,存储值)或缺少它
  • 在此结构中插入新范围
  • 从结构中删除范围

所以,我想到目前为止,我看到以下变种,所有这些都有其缺点:

  • Java的TreeMap上滚动自己的容器- 快速而肮脏,但由于缺乏适当的维护而长期可能不好
  • 使用Guava的RangeMap - 可能,但在Scala集合世界中会非常尴尬
  • 尝试使用Scala的红黑树实现并尝试自己滚动,但是,我想这很难,因为Scala的TreeMap只是不可变的,并且错过了直接的查找方法,例如Java的TreeMapfloorEntry

我在这里错过了什么吗?是否存在使用Scala中心API扩展基本Scala集合的类似Guava的维护良好的集合扩展库?

强烈相关的问题:

scala range red-black-tree guava range-map

17
推荐指数
1
解决办法
2154
查看次数

emacs作为screen/tmux替代 - 从终端分离

众所周知,emacs可以用作终端仿真器(虽然它本身在终端仿真器中运行),因此使其成为更传统的终端终端方法的有效替代方案,例如tmuxscreen.但是,有一件事可以用后者轻松完成term,到目前为止我在emacs中找不到替代品.

无论tmux并且screen可以从终端分离和各项任务跑在窗户上继续在后台运行.它是使用Cb,d in tmuxCa,d in screen默认完成的.后来,我可以返回(重新安装),以我从通过运行这样分离的终端tmux attachscreen -r.此外,在这两个终端多路复用器中运行的会话是持久的 - 即如果我连接到某个远程终端并且连接失败,我可以重新连接并重新连接到终端而不会丢失我的任何工作 - 它确实有助于网络故障偶尔会破坏ssh连接的链接.

有没有像emacs那样的东西?基本上,我希望能够:

  • 从emacs中分离出来并让它在后台运行,所有子进程都在term缓冲区中运行.
  • 稍后重新连接它并找到我的所有进程正在运行.
  • 在收到SIGHUP时从终端自动分离emacs.

emacs gnu-screen tmux

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

HTML布局:将侧栏列添加到现有站点

我有一个看起来像这样的身体的网站:

<body>
  <div id="header">...</div>
  <div id="content">...</div>
  <div id="footer">...</div>
</body>
Run Code Online (Sandbox Code Playgroud)

在这些divs中没有使用绝对/相对定位技巧,但是这些s及其内部元素的样式中有很多floats,clears,margins和paddings div.所有这些都会产生一个看起来像这样的网站:

?????????????????
?     header    ?
?????????????????
?????????????????
?    content    ?
?????????????????
?????????????????
?     footer    ?
?????????????????
Run Code Online (Sandbox Code Playgroud)

我的问题是:如何添加一个独立的固定宽度左栏(侧栏),其中包含额外的内容,这些内容将收缩整个站点(页眉内容页脚)并将它们移到右侧.

?????????????????
?side?? header  ?
?bar ????????????
?    ????????????
?    ?? content ?
?    ????????????
?    ????????????
?    ?? footer  ?
?????????????????
Run Code Online (Sandbox Code Playgroud)

我知道一个几乎理想的解决方案,但它很丑陋,需要重新嵌套现有的div:

<body>
  <table>
    <tr>
      <td id="sidebar">...</td>
      <td>
        <div id="header">...</div>
        <div id="content">...</div>
        <div id="footer">...</div>
      </td>
    </tr>
  </table>
</body>
Run Code Online (Sandbox Code Playgroud)

是否可以优雅地做到这一点,只需在身体的某处添加一个外部侧边栏元素,即,像那样?

<body>
  <div id="sidebar">...</div> …
Run Code Online (Sandbox Code Playgroud)

html css html-table css-float

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

Scala:"map"vs"foreach" - 有没有理由在实践中使用"foreach"?

在Scala集合中,如果想要迭代集合(不返回结果,即对集合的每个元素执行副作用),则可以使用

final def foreach(f: (A) ? Unit): Unit
Run Code Online (Sandbox Code Playgroud)

要么

final def map[B](f: (A) ? B): SomeCollectionClass[B]
Run Code Online (Sandbox Code Playgroud)

除了可能的延迟映射(*)之外,从最终用户的角度来看,我发现这些调用没有差异:

myCollection.foreach { element =>
  doStuffWithElement(element);
}

myCollection.map { element =>
  doStuffWithElement(element);
}
Run Code Online (Sandbox Code Playgroud)

鉴于我可以忽略哪些地图输出.我想不出为什么两种不同的方法应该存在和使用的任何具体原因,当时map似乎包含了所有的功能foreach,事实上,如果智能编译器和VM不会优化,我会非常感动由于它没有分配给任何东西,或者在任何地方读取或使用,因此创建了该集合对象.

所以,问题是 - 我是对的 - 并且没有理由foreach在一个人的代码中调用任何地方?

笔记:

(*)如本问题中所说明的那样,懒惰的映射概念可能会改变一些事情并证明其使用的合理性foreach,但据我所知,一个人特别需要偶然发现LazyMap,正常

(**)如果一个人没有使用集合,而是一个集合,那么很快就会发现for理解语法语法实际上是生成"foreach"调用的语法糖这一事实,即这两行生成完全等效的代码:

for (element <- myCollection) { doStuffWithElement(element); }
myCollection.foreach { element => doStuffWithElement(element); }
Run Code Online (Sandbox Code Playgroud)

因此,如果一个人关心使用该for语法的集合类的其他人,可能仍然想要实现foreach方法.

foreach scala side-effects scala-collections

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

两个音频信号之间的时间延迟估计

我有2个不同麦克风的同一信号的两个录音(例如,WAV格式),但其中一个录音有延迟,例如几秒钟.

当在某种波形观察器中查看这些信号时,很容易在视觉上识别这种延迟 - 即只是在每个信号中发现第一个可见峰值并确保它们是相同的形状:

http://www.greycat.ru/temp/time-delay-peaks.png

但是我如何以编程方式进行 - 找出这个延迟(t)是什么?两个数字化信号略有不同(因为麦克风不同,由于ADC设置等原因位于不同位置).

我已经挖了一下,发现这个问题通常被称为"时间延迟估计",它有无数的方法 - 例如,其中之一.

但是有没有简单的现成解决方案,例如命令行实用程序,库或直接算法?

结论:我发现没有简单的实现,并且自己完成了一个简单的命令行实用程序 - 可从https://bitbucket.org/GreyCat/calc-sound-delay(GPLv3-licensed)获得.它实现了维基百科中描述的非常简单的最大搜索算法.

algorithm signal-processing timedelay delay

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

使用bash从文本文件中删除ANSI颜色代码

我有一个bash脚本运行并输出到文本文件,但它使用的颜色代码也包括我想知道的是如何从文件中删除它们,即

^[[38;1;32mHello^[[39m
^[[38;1;31mUser^[[39m
Run Code Online (Sandbox Code Playgroud)

所以我只想留下Hello和User

bash shell

13
推荐指数
3
解决办法
4752
查看次数

检测图像中的漫画对话气泡区域

我有一个漫画页面的灰度图像,其中包含几个对话气泡(=语音气球等),这些气泡是白色背景的封闭区域和内部包含文本的纯黑色边框,即类似的东西:

漫画图片样本

我想检测这些区域并创建一个掩码(二进制就可以),它将覆盖对话气泡的所有内部区域,即:

样本结果掩模图像

相同的图像,掩盖覆盖,完全清晰:

带透明遮罩覆盖的样本图像

所以,我对算法的基本思想是这样的:

  1. 检测文本的位置 - 在每个气泡中至少生成一个像素.稍微扩张这些区域并应用阈值以获得更好的起跑地; 我做过这部分:

文字位置概述

  1. 使用泛光填充或某种图形遍历,从在步骤1中检测为像素内部气泡的每个白色像素开始,但是处理初始图像,淹没白色像素(应该在气泡内)并停止暗像素(应该是边框或文本).

  2. 使用某种binary_closing操作来移除气泡内的暗区(即与文本对应的区域).这部分工作正常.

到目前为止,第1步和第3步都有效,但我正在努力完成第2步.我目前正在使用scikit-image,我没有看到任何现成的算法,如洪水填充.显然,我可以使用像广度优先遍历这样的微不足道的东西,基本上就像这里建议的那样,但是在Python中完成时它真的很慢.我怀疑在ndimage或scikit-image 中复杂的形态学内容如binary_erosiongenerate_binary_structure,但我很难理解所有形态学术语,基本上我如何用它来实现这样的自定义泛滥填充(即从第1步开始,在原始图像上工作图像并产生输出以分离输出图像).

我愿意接受任何建议,包括OpenCV等建议.

python numpy scipy computer-vision scikit-image

12
推荐指数
1
解决办法
1804
查看次数