小编yst*_*sth的帖子

您使用哪种编码方式用于三元运算符?

如果它很短,我会保持单线.最近我一直在使用这种风格用于更长或嵌套的三元运算符表达式.一个人为的例子:

$value = ( $a == $b ) 
            ? 'true value # 1'
            : ( $a == $c )
                ? 'true value # 2'
                : 'false value';
Run Code Online (Sandbox Code Playgroud)

个人你使用哪种风格,或找到最可读的?

编辑:( 何时使用三元运算符)

我通常避免使用超过2级深度三元运算符.当我在PHP模板脚本中回显变量时,我倾向于更喜欢2级深度三元运算符而不是2级.

php language-agnostic coding-style ternary-operator

53
推荐指数
7
解决办法
3万
查看次数

交叉编译内核模块

我正在尝试在我的intel x86主机上为ARM体系结构交叉编译helloworld内核(2.6.x)模块.

ARM的代码源工具链位于:/ home/ravi/workspace/hawk/arm-2009q3

内核源代码位于:/ home/ravi/workspace/hawk/linux-omapl1

我的Makefile:

ARCH=arm
CROSS_COMPILE=arm-none-linux-gnueabi
obj-m := Hello.o
KDIR := /home/ravi/workspace/hawk/linux-omapl1
PWD := $(shell pwd)
default:
          $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
clean:
          $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean
Run Code Online (Sandbox Code Playgroud)

当我运行make时,.ko生成的是我的主机,这意味着makefile正在调用本机编译器而不是交叉编译器.我做错了什么?交叉编译器的二进制文件在我的路径中.

makefile cross-compiling kernel-module embedded-linux linux-toolchain

31
推荐指数
4
解决办法
7万
查看次数

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

如何对值进行perl哈希排序并相应地对键进行排序(可能在两个数组中)?

在Perl中,我想按值以数字方式对哈希的键进行排序:

{
  five => 5
  ten => 10
  one => 1
  four => 4
}
Run Code Online (Sandbox Code Playgroud)

生成两个数组:

(1,4,5,10) and (one, four, five, ten)
Run Code Online (Sandbox Code Playgroud)

然后我想规范化值数组,使数字是连续的:

(1,2,3,4)
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?

sorting perl hash perl-hash

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

除最后两个令牌外,Unix裁减

我正在尝试解析特定目录中的文件名.文件名的格式为:

token1_token2_token3_token(N-1)_token(N).sh
Run Code Online (Sandbox Code Playgroud)

我需要使用分隔符来剪切标记'_',并且除了最后两个标记之外需要使用字符串.在上面的检查输出应该是token1_token2_token3.

令牌数量不固定.我已尝试使用命令-f#-选项cut,但没有找到任何解决方案.有任何想法吗?

unix linux bash cut token

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

什么是一个很好的Web爬虫工具

我需要为很多网页编制索引,那里有哪些好的webcrawler实用程序?我最好是在接受.NET可以谈论的东西之后,但这不是一个表明.

我真正需要的是我可以提供网站网址的内容,它将跟随每个链接并存储内容以进行索引.

robot web-crawler

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

如何将reportlab的drawImage与图像URL一起使用?

当我尝试以下内容时:

from reportlab.lib.pagesizes import letter
from reportlab.pdfgen.canvas import Canvas
import urllib
import StringIO
import PIL.Image

image_file = urllib.urlopen('https://www.google.com/images/srpr/logo11w.png')
image_string = StringIO.StringIO(image_file.read())
logo = PIL.Image.open(image_string)

canvas = Canvas('output.pdf', pagesize=letter)
canvas.drawImage(logo, 10, 10)
canvas.showPage()
canvas.save()
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

Traceback (most recent call last):
  File "imagefromurl.py", line 12, in <module>
    canvas.drawImage(logo, 10, 10)
  File "/usr/lib/python2.7/dist-packages/reportlab/pdfgen/canvas.py", line 857, in drawImage
    imgObj = pdfdoc.PDFImageXObject(name, image, mask=mask)
  File "/usr/lib/python2.7/dist-packages/reportlab/pdfbase/pdfdoc.py", line 2090, in __init__
    ext = string.lower(os.path.splitext(source)[1])
  File "/usr/lib/python2.7/posixpath.py", line 96, in splitext
    return genericpath._splitext(p, sep, altsep, extsep)
  File …
Run Code Online (Sandbox Code Playgroud)

python reportlab python-imaging-library python-2.7

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

遗留gcc编译器问题

我们正在使用基于gcc 2.6.0的遗留编译器来交叉编译我们仍在使用的旧嵌入式处理器(是的,它自1994年以来一直在使用!).为这款芯片做gcc端口的工程师早就开始了.虽然我们可以从网络上的某个地方恢复gcc 2.6.0源代码,但这个芯片的更改集已经在公司历史的大厅中消失了.直到最近,由于编译器仍然运行并生成可行的可执行文件,我们一直糊涂,但是从Linux内核2.6.25(以及2.6.26)开始,它失败并显示消息gcc: virtual memory exhausted......即使在没有参数的情况下运行或仅运行-v.我已经使用2.6.24内核重新启动了我的开发系统(从2.6.26开始)并且编译器再次工作(使用2.6.25重启不会).

我们有一个系统,我们保留在2.6.24只是为了为这个芯片做构建,但是感觉有点暴露,以防linux世界转移到我们不能再重建一个将运行的系统的程度编译器(即我们的2.6.24系统死机,我们无法在新系统上安装和运行2.6.24,因为某些软件部分不再可用).

有没有人有任何想法,我们可以做一些更现代的安装,以使这个遗留的编译器运行?

编辑:

回答一些评论......

遗憾的是,这是我们芯片特有的源代码更改丢失了.这种损失发生在两个主要的公司重组和几个系统管理员(其中一些确实留下了一团糟).我们现在使用配置控制,但这对于这个问题来说太晚关闭了谷仓门.

使用VM是一个好主意,也可能是我们最终要做的.谢谢你的想法.

最后,我尝试了strace作为ephemient建议,发现最后一次系统调用是brk(),它在新系统(2.6.26内核)上返回错误并在旧系统(2.6.24内核)上返回成功.这表明我真的用完了虚拟内存,除了tcsh"limit"在旧系统和新系统上返回相同的值,而/ proc/meminfo显示新系统有更多的内存和更多的交换空间.也许这是一个碎片问题或程序加载的地方?

我做了一些进一步的研究,并在内核2.6.25中添加了"brk randomization",但是CONFIG_COMPAT_BRK默认情况下会启用(禁用brk随机化).

编辑:

好的,更多信息:它看起来真的像brk随机化是罪魁祸首,传统的gcc正在调用brk()来改变数据段的结束并且现在失败,导致传统的gcc报告"虚拟内存耗尽".有一些记录的方法可以禁用brk随机化:

  • sudo echo 0 > /proc/sys/kernel/randomize_va_space

  • sudo sysctl -w kernel.randomize_va_space=0

  • setarch i386 -R tcsh(或"-R -L")开始一个新的shell

我已经尝试了它们,它们确实有效,因为brk()返回值与没有它们(并且在内核2.6.25和2.6.26上都试过)不同(并且总是相同),但是brk()仍然失败,所以传统的gcc仍然失败:-(.

此外,我已经设置vm.legacy_va_layout=1vm.overcommit_memory=2没有改变,我已经与重新启动vm.legacy_va_layout=1,并kernel.randomize_va_space=0保存在/etc/sysctl.conf中的设置.仍然没有变化.

编辑:

使用kernel.randomize_va_space=0内核2.6.26(2.6.25和)在以下brk的结果()通过所报告的呼叫strace legacy-gcc:

brk(0x80556d4) = 0x8056000

这表明brk()失败了,但看起来它失败了,因为数据段已经超出了请求的范围.使用objdump,我可以看到数据段应该以0x805518c结束,而失败的brk()表示数据段当前以0x8056000结束:

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .interp       00000013  080480d4  080480d4  000000d4  2**0 …

linux legacy gcc cross-compiling virtual-memory

7
推荐指数
2
解决办法
1887
查看次数

在shell命令中插入perl变量

我希望将日期作为User的输入并将该输入传递给下面的shell命令.

例如

$date = ARGV[0];
`cd xyz $date`
Run Code Online (Sandbox Code Playgroud)

这个变量会在perl中插值吗?

perl

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

在perl -e行之后花括号的目的是什么

我知道一些真正的perl基础知识,而且我一直在使用这个衬里来重命名文件:

find . -type f -exec perl -e 'rename($_,lc) for @ARGV' {} \;
Run Code Online (Sandbox Code Playgroud)

该查找将一个文件列表传递给perl one liner,然后将它们重命名为小写 - 但最后是什么{}

perl find

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