我想为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.h和UTIL/delay_basic.h从AVR libc库.尽管大多数情况下使用这些功能可能更好,但这个问题仍然有效且有趣.
相关问题:
我想检测,其中一个MouseEvent已经发生,在相对于点击的元素坐标.为什么?因为我想在点击的位置添加绝对定位的子元素.
我知道在没有CSS3转换时如何检测它(见下面的描述).但是,当我添加一个CSS3转换,然后我的算法中断,我不知道如何解决它.
我没有使用任何JavaScript库,我想了解简单JavaScript中的工作原理.所以,请不要回答"只使用jQuery".
顺便说一句,我想要一个适用于所有MouseEvents的解决方案,而不仅仅是"点击".并不重要,因为我相信所有鼠标事件都具有相同的属性,因此相同的解决方案应该适用于所有这些事件.
根据DOM Level 2规范,a MouseEvent几乎没有与获取事件坐标相关的属性:
screenX并screenY返回屏幕坐标(原点是用户监视器的左上角)clientX并clientY返回相对于文档视口的坐标.因此,为了找到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(),clientLeft并scrollLeft在CSSOM View Module中指定.
混乱?尝试以下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) 我正在使用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为我的应用程序编写一些测试用例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)
这种方法使得以非常紧凑的方式描述每个对象的期望值非常容易,并且无需实际创建完整对象.
但是......当一个对象未通过断言时,不会比较其他对象,这会使调试变得更加困难.我想编写一个自定义方法,无条件地比较所有对象,然后显示所有失败的对象,而不是只显示第一个.
从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文件).
我正在使用Python和Tkinter,我需要知道小部件的当前尺寸(宽度,高度).
我已经尝试了somewidget["width"],但它只返回一个固定值,并且每当窗口小部件大小改变时(例如调整窗口大小时)都不会更新.
看一下关于套接字编程的例子,我们可以看到有些人在使用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_*.
在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的禅宗)
Hive文档再次缺乏:
我想将查询结果写入本地文件以及列的名称.
Hive支持这个吗?
Insert overwrite local directory 'tmp/blah.blah' select * from table_name;
Run Code Online (Sandbox Code Playgroud)
另外,另外一个问题:StackOverflow是获得Hive帮助的最佳位置吗?@Nija,非常乐于助人,但我不打扰他们......
我不明白为什么这段代码不起作用.仅检测到退格键和返回键.监听器不会触发任何其他密钥.我的设备是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) 我正在验证我的代码,并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>
关闭路径的正确方法是什么?