我在构建系统中滥用C预处理器,从同一源文件生成“自述”纯文本文件和网页。构造是这样的:
实际的定义在data.h:
#define WEBSITE "http://example.com"
Run Code Online (Sandbox Code Playgroud)
请注意,//URL 中的 必须加引号,否则将被视为评论的开始。,在参数中使用 a 时也会出现类似的问题;引号是必需的,否则逗号将被视为参数分隔符。
使用此标头,文件将通过Creadme.txt.pp预处理器运行:
#include "data.h"
Visit the website at WEBSITE!
Run Code Online (Sandbox Code Playgroud)
当然,预处理器的输出是:
Visit the website at "http://example.com"!
Run Code Online (Sandbox Code Playgroud)
引号出现在输出中。有什么方法或解决方法可以让此代码给出输出:
Visit the website at http://example.com!
Run Code Online (Sandbox Code Playgroud)
我正在使用 Visual C++ 2008。我知道预处理器不是这项工作的理想工具;也欢迎使用其他内置 VC++ 功能的建议。(我尝试使用 XSLT 来构建 XML,但是不可能将一个 XML 文件包含到另一个 XML 文件中,这真是令人头疼。)
所以我试图使用os.walk()来生成目录结构的XML表示.我似乎得到了大量的重复.它正确地将目录放在彼此之间,并将文件放在xml文件的第一部分的正确位置; 但是,在它正确完成后,它会继续错误地遍历.我不太清楚为什么......
这是我的代码:
def dirToXML(self,directory):
curdir = os.getcwd()
os.chdir(directory)
xmlOutput=""
tree = os.walk(directory)
for root, dirs, files in tree:
pathName = string.split(directory, os.sep)
xmlOutput+="<dir><name><![CDATA["+pathName.pop()+"]]></name>"
if len(files)>0:
xmlOutput+=self.fileToXML(files)
for subdir in dirs:
xmlOutput+=self.dirToXML(os.path.join(root,subdir))
xmlOutput+="</dir>"
os.chdir(curdir)
return xmlOutput
Run Code Online (Sandbox Code Playgroud)
fileToXML只是解析列表,所以不必担心.
目录结构很简单:
images/
images/testing.xml
images/structure.xml
images/Hellos
images/Goodbyes
images/Goodbyes/foo
images/Goodbyes/bar
images/Goodbyes/square
Run Code Online (Sandbox Code Playgroud)
并生成的xml文件变为:
<structure>
<dir>
<name>images</name>
<files>
<file>
<name>structure.xml</name>
</file>
<file>
<name>testing.xml</name>
</file>
</files>
<dir>
<name>Hellos</name>
</dir>
<dir>
<name>Goodbyes</name>
<dir>
<name>foo</name>
</dir>
<dir>
<name>bar</name>
</dir>
<dir>
<name>square</name>
</dir>
</dir>
<dir>
<name>foo</name>
</dir>
<dir>
<name>bar</name>
</dir>
<dir> …Run Code Online (Sandbox Code Playgroud) 我需要在opengl中使用半球.我发现了一个drawSphere函数,我修改了它来绘制一半的拉特(最终绘制了球体的一半),这就是我想要的.它正确地做到了这一点
但是,我不知道我应该用glTexCoordf做什么来让纹理正确映射到这个半球上.对于opengl,我真的不太好,而且我尝试了无数的变化,但我无法让纹理正确地显示在它上面.
void drawHemisphere(double r, int lats, int longs)
{
int i, j;
int halfLats = lats / 2;
for(i = 0; i <= halfLats; i++)
{
double lat0 = M_PI * (-0.5 + (double) (i - 1) / lats);
double z0 = sin(lat0);
double zr0 = cos(lat0);
double lat1 = M_PI * (-0.5 + (double) i / lats);
double z1 = sin(lat1);
double zr1 = cos(lat1);
glBegin(GL_QUAD_STRIP);
for(j = 0; j <= longs; j++)
{
double lng = 2 …Run Code Online (Sandbox Code Playgroud) 我正在使用GitPython 包从 Python 访问 Git 存储库。这会引入async 包。在 中async/__init__.py,发生以下情况:
def _init_signals():
"""Assure we shutdown our threads correctly when being interrupted"""
import signal
# ...
signal.signal(signal.SIGINT, thread_interrupt_handler)
_init_signals()
Run Code Online (Sandbox Code Playgroud)
如果一切都在主线程中,这可以正常工作。然而,当第一次导入git(和因此async) 发生在另一个线程上时,事情会变得繁荣:
ValueError: signal only works in main thread
Run Code Online (Sandbox Code Playgroud)
由于所有这些都在 Django 框架内运行,因此我无法控制线程。
我发现的一种解决方法是 put import asyncinto settings.py,它(显然)在主线程上导入。然而,这需要在每次安装的基础上完成,所以对我的 Django 应用程序的用户来说不是很好。
我尝试捕获异常,但引发异常的导入未完全完成,因此下一个import async也会失败。
你能想出任何半途而废的方法来解决这个问题吗?
更新:我注意到 Apache 的 mod_wsgi 足够聪明,可以忽略signal调用:
[Tue Sep 07 19:53:11 2010] [warn] mod_wsgi (pid=28595): Callback registration for …Run Code Online (Sandbox Code Playgroud) 以下动画应该做什么?
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:toDegrees="360"
android:pivotX="50%"
android:pivotY="50%"
android:interpolator="@android:anim/linear_interpolator"
android:duration="1000" />
Run Code Online (Sandbox Code Playgroud)
很容易.它应代表围绕中心的顺时针旋转.只需旋转一下,然后停下来.对?
当我将它应用于View时,它确实......
但是当我为活动转换设置动画时,会发生完全不同的事情.活动开始逆时针旋转,但同时它飞离屏幕的右上角.然后它返回,仍然逆时针旋转,现在倒置,然后飞离屏幕的左下角.最后,它回来并直立结束旋转.
不管是什么我指定pivotX和pivotY,行为始终是相同的.它们似乎完全被忽略了.无论哪种方式,事情肯定不会围绕任何固定的枢轴旋转!
这是什么废话?这是一个错误吗?
为了完整起见,我将此动画保存为res/anim/spin.xml,并按如下方式调用它:
startActivity(intent);
overridePendingTransition(R.anim.spin, R.anim.spin);
Run Code Online (Sandbox Code Playgroud)
(对于in和out使用相同的动画没有任何意义,但这是最小的例子.)
我已经整理了一个最小的Android项目来演示这个问题.主要活动如下:
package com.example.animtest;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
public class MainActivity extends Activity {
private View rootView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
rootView = getLayoutInflater().inflate(R.layout.main, null);
setContentView(rootView);
}
public void animateRootView(View view) {
Animation spin = AnimationUtils.loadAnimation(getApplicationContext(), …Run Code Online (Sandbox Code Playgroud) 更新(2019-02-07):该问题现已修复,因此如果仍然遇到此问题,请尝试gcloud components update。
在过去几个月中的某个时候,我的bq工具停止工作了。即使是简单的事情也会显示此错误:
$ bq show
BigQuery error in show operation: Cannot contact server. Please try again.
Traceback: Traceback (most recent call last):
File "/opt/google-cloud-sdk/platform/bq/bigquery_client.py", line 685, in BuildApiClient
response_metadata, discovery_document = http.request(discovery_url)
File "/opt/google-cloud-sdk/platform/bq/third_party/oauth2client_4_0/transport.py", line 176, in new_request
redirections, connection_type)
File "/opt/google-cloud-sdk/platform/bq/third_party/oauth2client_4_0/transport.py", line 283, in request
connection_type=connection_type)
File "/opt/google-cloud-sdk/platform/bq/third_party/httplib2/__init__.py", line 1626, in request
(response, content) = self._request(conn, authority, uri, request_uri, method, body, headers, redirections, cachekey)
File "/opt/google-cloud-sdk/platform/bq/third_party/httplib2/__init__.py", line 1368, in _request
(response, …Run Code Online (Sandbox Code Playgroud) 在Cloud SQL for PostgreSQL定价示例中,我看到我应该能够db-f1-micro使用共享CPU和0.6 GB RAM 创建实例,价格为每月9美元。
但是,当我尝试实际创建这样的实例时,没有看到该选项。用户界面仅允许我创建一个自定义机器类型,该机器类型至少具有1个vCPU和3.75 GB RAM,每月费用为$ 51:
有趣的是,对于MySQL,我确实可以选择创建db-f1-micro实例。但是我不能在这个项目中使用MySQL。
这里的文档有误吗?还是有一个db-f1-micro使用PostgreSQL 实际创建预算实例的技巧?
使用Qt 5.11.通过覆盖QObject::connectNotify,如果插槽连接到我的信号,我会收到通知:
void connectNotify(const QMetaMethod &signal) override {
if (signal == QMetaMethod::fromSignal(&PromiseBase::resolved()) && isResolved()) {
// Here, I want to call the slot immediately.
}
}
Run Code Online (Sandbox Code Playgroud)
当发生这种情况时,我想立即调用插槽 - 只是那个插槽,而不是所有可能连接到信号的其他插槽.我怎样才能做到这一点?Qt框架给了我信号,但不是槽.
上下文:我正在开发一个类似于JavaScript承诺的Promise类.期望将插槽连接到resolved信号将始终只调用一次插槽,无论承诺是否已解决或仍未决定.
(我正在编写自己的Promise而不是使用QFuture,因为没有记录和支持的方法来创建自己的QFuture对象,QFuture不支持报告错误.)
在 Arch Linux 上使用 Firefox 70.0.1。(我意识到这个问题在技术上可能属于 SuperUser,但我怀疑没有非开发人员需要这样做。)
我正在尝试通过直接在 Firefox 的 XML 查看器中查看来调试生成 RSS 提要的代码。
当我输入一个提要 URL(如https://en.blog.wordpress.com/feed/ )时,Firefox 会弹出一个对话框,询问我如何处理该文件。它称之为“RSS 摘要”,我可以选择打开它或将其保存到磁盘。
我可以选择在 Firefox 中打开它,但是文件首先下载到磁盘,然后从file://URL打开。结果就是无法按F5刷新;我必须重新输入 URL。
这仅在Content-Type标题为application/rss+xml. 直接打开作为普通文件application/xml(例如https://xkcd.com/rss.xml使用)的文件。
我怎样才能告诉 Firefoxapplication/rss+xml应该接受相同的处理并且只被视为一个普通的 XML 文件?
我正在尝试在我的一个类上创建一个静态 扩展方法(它是自动生成的,所以我无法轻松修改它)。根据文档,这应该是可能的:
扩展还可以具有静态字段和静态辅助方法。
然而,即使这个小例子也无法编译:
extension Foo on String {
static String foo() => 'foo!';
}
void main() {
print(String.foo());
}
Run Code Online (Sandbox Code Playgroud)
Error: Method not found: 'String.foo'.
print(String.foo());
^^^
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?