小编Den*_*aia的帖子

如何防止GCC优化忙等待循环?

我想为Atmel AVR微控制器编写C代码固件.我将使用GCC编译它.此外,我想启用编译器优化(-Os-O2),因为我认为没有理由不启用它们,并且它们可能比手动编写汇编更快地生成更好的汇编方式.

但我想要一小段没有优化的代码.我想延迟函数的执行一段时间,因此我想写一个do-nothing循环只是为了浪费一些时间.不需要精确,只需等待一段时间.

/* How to NOT optimize this, while optimizing other code? */
unsigned char i, j;
j = 0;
while(--j) {
    i = 0;
    while(--i);
}
Run Code Online (Sandbox Code Playgroud)

由于AVR中的内存访问速度要慢得多,因此我希望i并将j其保存在CPU寄存器中.


更新:我刚刚发现UTIL/delay.hUTIL/delay_basic.hAVR libc库.尽管大多数情况下使用这些功能可能更好,但这个问题仍然有效且有趣.


相关问题:

c optimization gcc avr-gcc

62
推荐指数
4
解决办法
5万
查看次数

如何获取具有CSS3 Transform的元素的MouseEvent坐标?

我想检测,其中一个MouseEvent已经发生,在相对于点击的元素坐标.为什么?因为我想在点击的位置添加绝对定位的子元素.

我知道在没有CSS3转换时如何检测它(见下面的描述).但是,当我添加一个CSS3转换,然后我的算法中断,我不知道如何解决它.

我没有使用任何JavaScript库,我想了解简单JavaScript中的工作原理.所以,请不要回答"只使用jQuery".

顺便说一句,我想要一个适用于所有MouseEvents的解决方案,而不仅仅是"点击".并不重要,因为我相信所有鼠标事件都具有相同的属性,因此相同的解决方案应该适用于所有这些事件.


背景资料

根据DOM Level 2规范,a MouseEvent几乎没有与获取事件坐标相关的属性:

  • screenXscreenY返回屏幕坐标(原点是用户监视器的左上角)
  • clientXclientY返回相对于文档视口的坐标.

因此,为了找到MouseEvent相对于被点击元素内容的位置,我必须做这个数学运算:

ev.clientX - this.getBoundingClientRect().left - this.clientLeft + this.scrollLeft
Run Code Online (Sandbox Code Playgroud)
  • ev.clientX 是相对于文档视口的坐标
  • this.getBoundingClientRect().left 是元素相对于文档视口的位置
  • this.clientLeft 是元素边界和内部坐标之间的边界(和滚动条)的数量
  • this.scrollLeft 是元素内部的滚动量

getBoundingClientRect(),clientLeftscrollLeftCSSOM View Module中指定.

没有CSS变换的实验(它有效)

混乱?尝试以下JavaScript和HTML.点击后,红点应该出现在点击发生的确切位置.这个版本"非常简单",按预期工作.

function click_handler(ev) {
    var rect = this.getBoundingClientRect();
    var left = ev.clientX - rect.left - this.clientLeft + this.scrollLeft;
    var top = ev.clientY - …
Run Code Online (Sandbox Code Playgroud)

javascript css html5 transform css3

47
推荐指数
3
解决办法
2万
查看次数

如何过滤(或替换)UTF-8中超过3个字节的unicode字符?

我正在使用Python和Django,但我遇到了由MySQL限制引起的问题.根据MySQL 5.1文档,它们的utf8实现不支持4字节字符.MySQL 5.5将支持使用4字节字符utf8mb4; 而且,将来的某一天utf8也可能会支持它.

但我的服务器还没有准备好升级到MySQL 5.5,因此我只限于需要3个字节或更少的UTF-8字符.

我的问题是:如何过滤(或替换)超过3个字节的unicode字符?

我想用官方\ufffd(U + FFFD REPLACEMENT CHARACTER)替换所有4字节字符,或用?.

换句话说,我想要一种与Python自己的str.encode()方法非常相似的行为(传递'replace'参数时).编辑:我想要一个类似的行为encode(),但我不想实际编码字符串.我想在过滤后仍然有一个unicode字符串.

我不想在存储到MySQL之前转义字符,因为这意味着我需要从数据库中获取所有字符串,这非常烦人且不可行.

也可以看看:

[编辑]添加了有关建议的解决方案的测试

所以到目前为止我得到了很好的答案 谢谢,人!现在,为了选择其中一个,我做了一个快速测试,找到最简单和最快的一个.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# vi:ts=4 sw=4 et

import cProfile
import random
import re

# How many times to repeat each filtering
repeat_count = 256

# Percentage of "normal" …
Run Code Online (Sandbox Code Playgroud)

python mysql django unicode

38
推荐指数
2
解决办法
3万
查看次数

如何在Python中编写自定义`.assertFoo()`方法?

我正在使用Python为我的应用程序编写一些测试用例unittest.现在我需要将一个对象列表与另一个对象列表进行比较,以检查第一个列表中的对象是否是我所期望的.

如何编写自定义.assertFoo()方法?它该怎么办?它应该在失败时引发异常吗?如果是,哪个例外?以及如何传递错误信息?错误消息应该是unicode字符串还是字节串?

不幸的是,官方文档没有解释如何编写自定义断言方法.

如果你需要一个真实的例子,继续阅读.


我写的代码有点像这样:

def assert_object_list(self, objs, expected):
    for index, (item, values) in enumerate(zip(objs, expected)):
        self.assertEqual(
            item.foo, values[0],
            'Item {0}: {1} != {2}'.format(index, item.foo, values[0])
        )
        self.assertEqual(
            item.bar, values[1],
            'Item {0}: {1} != {2}'.format(index, item.bar, values[1])
        )

def test_foobar(self):
    objs = [...]  # Some processing here
    expected = [
        # Expected values for ".foo" and ".bar" for each object
        (1, 'something'),
        (2, 'nothing'),
    ]
    self.assert_object_list(objs, expected)
Run Code Online (Sandbox Code Playgroud)

这种方法使得以非常紧凑的方式描述每个对象的期望值非常容易,并且无需实际创建完整对象.

但是......当一个对象未​​通过断言时,不会比较其他对象,这会使调试变得更加困难.我想编写一个自定义方法,无条件地比较所有对象,然后显示所有失败的对象,而不是只显示第一个.

python unit-testing

36
推荐指数
2
解决办法
7677
查看次数

需要解释Linux bash builtin exec命令行为

Bash参考手册我得到以下关于execbash builtin命令:

如果提供了命令,它将替换shell而不创建新进程.

现在我有以下bash脚本:

#!/bin/bash
exec ls;
echo 123;
exit 0
Run Code Online (Sandbox Code Playgroud)

执行了,我得到了这个:

cleanup.sh  ex1.bash  file.bash  file.bash~  output.log
(files from the current directory)
Run Code Online (Sandbox Code Playgroud)

现在,如果我有这个脚本:

#!/bin/bash
exec ls | cat
echo 123
exit 0
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

cleanup.sh
ex1.bash
file.bash
file.bash~
output.log
123
Run Code Online (Sandbox Code Playgroud)

我的问题是:

如果在exec调用它取代了壳,而无需创建一个新的进程,为什么放时| cat,将echo 123被打印出来,但是没有它,它不是.所以,如果有人能解释这种行为的逻辑,我会很高兴.

谢谢.

编辑:@torek回复后,我更难解释行为:

1. exec ls>out命令创建out文件并输入ls命令结果;

2. exec ls>out1 ls>out2只创建文件,但不要放入任何结果.如果命令按照建议工作,我认为命令编号2应该与命令编号1具有相同的结果(更多,我认为它不应该创建out2文件).

linux bash flow exec

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

如何在tkinter中找出当前的小部件大小?

我正在使用PythonTkinter,我需要知道小部件的当前尺寸(宽度,高度).

我已经尝试了somewidget["width"],但它只返回一个固定值,并且每当窗口小部件大小改变时(例如调整窗口大小时)都不会更新.

python tkinter

34
推荐指数
3
解决办法
5万
查看次数

AF_INET和PF_INET常量之间有什么区别?

看一下关于套接字编程的例子,我们可以看到有些人在使用AF_INET其他人时使用PF_INET.另外,有时它们都用在同一个例子中.问题是:它们之间有什么区别吗?我们应该使用哪一个?

如果你能回答这个问题,另一个问题就是......为什么有这两个相似(但相等)的常数?


到目前为止,我发现了什么:

socket手册页

在(Unix)套接字编程中,我们有socket()接收以下参数的函数:

int socket(int domain, int type, int protocol);
Run Code Online (Sandbox Code Playgroud)

该联机帮助页说:

所述domain参数指定的通信区域; 这将选择将用于通信的协议族.这些系列在<sys/socket.h>中定义.

并且该手册页引用了该参数AF_INET以及其他一些AF_常量domain.此外,在NOTES同一手册页的部分,我们可以阅读:

4.x BSD下用于协议族的清单常量是PF_UNIX,PF_INET等,而AF_UNIX等用于地址族.但是,BSD手册页已经承诺:"协议族通常与地址族相同",后续标准在任何地方都使用AF_*.

C标头

sys/socket.h实际没有定义这些常量,而是包括bits/socket.h.这个文件定义了大约38个AF_常量和38个PF_常量,如下所示:

#define PF_INET     2   /* IP protocol family.  */
#define AF_INET     PF_INET
Run Code Online (Sandbox Code Playgroud)

蟒蛇

Python的插座模块是非常相似的C API.但是,有许多AF_常量但只有一个PF_常量(PF_PACKET).因此,在Python中我们别无选择,只能使用AF_INET.

我认为这个仅包括AF_常数的决定遵循一个指导原则:"应该有一个 - 最好只有一个 - 明显的方法来做到这一点." (Python的禅宗)

其他信息

此论坛帖子 …

c python unix sockets

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

Hive:将列标题写入本地文件?

Hive文档再次缺乏:

我想将查询结果写入本地文件以及列的名称.

Hive支持这个吗?

Insert overwrite local directory 'tmp/blah.blah' select * from table_name;
Run Code Online (Sandbox Code Playgroud)

另外,另外一个问题:StackOverflow是获得Hive帮助的最佳位置吗?@Nija,非常乐于助人,但我不打扰他们......

syntax hive

28
推荐指数
4
解决办法
6万
查看次数

onKeyListener无法在虚拟键盘上工作

我不明白为什么这段代码不起作用.仅检测到退格键和返回键.监听器不会触发任何其他密钥.我的设备是Nexus One.

我试图覆盖活动的OnKeyDown方法,这更糟糕.唯一检测到的按钮是硬件后退按钮.

我看到有关使用TextWatcher和onTextChanged的建议,虽然这可能在某些情况下有用,但这不是真正的解决方法.例如,如果文本框为空,则不会检测用户是否按BackSpace(删除)按钮.那么任何想法?

        TextView txtInput = (TextView)findViewById(R.id.txtInput);
    txtInput.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            makeToast(keyCode + " key pressed");
            return true;
        }
    });
Run Code Online (Sandbox Code Playgroud)

android onkeypress onkeydown virtual-keyboard

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

关闭SVG标签,显式还是自闭?

我正在验证我的代码,并Tag cannot be self-closing. Use an explicit closing tag.在IE中为我的svg路径得到以下错误,因为它是自动关闭的.

<path d="m53.911,10.023c-1.46-.898-3.195-1.019-4.699-1.019h-3.439c" />

现在我知道HTML5中的meta标签不需要前进短划线/,只需将它们关闭即可>.同样的事情是否适用于svg标签?像这样:

<path d="m53.911,10.023c-1.46-.898-3.195-1.019-4.699-1.019h-3.439c" >

或者......使用明确的结束标记?像这样:

<path d="m53.911,10.023c-1.46-.898-3.195-1.019-4.699-1.019h-3.439c" > </path>

关闭路径的正确方法是什么?

html html5 svg

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