小编Tho*_*mas的帖子

C 预处理器:从参数中删除引号

我在构建系统中滥用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 文件中,这真是令人头疼。)

quotes macros c-preprocessor

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

os.walk()python:目录结构的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)

python xml recursion directory-structure os.walk

5
推荐指数
2
解决办法
6695
查看次数

OpenGL半球纹理映射

我需要在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)

c++ opengl textures

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

如何从工作线程导入 Python 异步模块?

我正在使用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)

python multithreading asynchronous signals gitpython

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

为什么我的旋转动画在应用于Activity转换时都很难?

以下动画应该做什么?

<?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时,它确实......

但是当我为活动转换设置动画时,会发生完全不同的事情.活动开始逆时针旋转,但同时它飞离屏幕的右上角.然后它返回,仍然逆时针旋转,现在倒置,然后飞离屏幕的左下角.最后,它回来并直立结束旋转.

不管是什么我指定pivotXpivotY,行为始终是相同的.它们似乎完全被忽略了.无论哪种方式,事情肯定不会围绕任何固定的枢轴旋转!

这是什么废话?这是一个错误吗?

为了完整起见,我将此动画保存为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)

animation android android-activity

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

“ bq”命令行工具抛出CERTIFICATE_VERIFY_FAILED

更新(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)

ssl ssl-certificate google-bigquery gcloud google-cloud-sdk

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

如何创建PostgreSQL db-f1-micro实例?

Cloud SQL for PostgreSQL定价示例中,我看到我应该能够db-f1-micro使用共享CPU和0.6 GB RAM 创建实例,价格为每月9美元。

但是,当我尝试实际创建这样的实例时,没有看到该选项。用户界面仅允许我创建一个自定义机器类型,该机器类型至少具有1个vCPU和3.75 GB RAM,每月费用为$ 51:

Cloud Console创建PostgreSQL实例的屏幕截图

有趣的是,对于MySQL,我确实可以选择创建db-f1-micro实例。但是我不能在这个项目中使用MySQL。

这里的文档有误吗?还是有一个db-f1-micro使用PostgreSQL 实际创建预算实例的技巧?

postgresql google-cloud-sql google-cloud-platform

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

如何找出与我的信号连接的插槽?

使用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不支持报告错误.)

c++ qt

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

如何让 Firefox 直接打开 RSS(像其他 XML 文件一样),而不是下载?

在 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 文件?

rss firefox

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

如何在 Dart 中创建静态扩展方法?

我正在尝试在我的一个类上创建一个静态 扩展方法(它是自动生成的,所以我无法轻松修改它)。根据文档,这应该是可能的:

扩展还可以具有静态字段和静态辅助方法。

然而,即使这个小例子也无法编译:

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)

我究竟做错了什么?

dart

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