小编msm*_*114的帖子

OpenGL:布局限定符?

所以我一直在学习一些OpenGL,这需要很多东西,我只是一个初学者,但我不理解GLSL中的"布局限定符".

所以像这样:

layout (location = 0) in vec3 position;
Run Code Online (Sandbox Code Playgroud)

在一个简单的顶点着色器,如下所示:

#version 330 core
layout (location = 0) in vec3 position; // The position variable has attribute position 0

out vec4 vertexColor; // Specify a color output to the fragment shader

void main()
{
    gl_Position = vec4(position, 1.0); // See how we directly give a vec3 to vec4's constructor
    vertexColor = vec4(0.5f, 0.0f, 0.0f, 1.0f); // Set the output variable to a dark-red color
}
Run Code Online (Sandbox Code Playgroud)

我理解out vec4(因为那会进入片段着色器).例如,vertexColor是有意义的.

但也许我不理解"位置",这究竟意味着什么呢?有人关心解释吗?opengl wiki老实说没帮我.

但也许我误解了什么是顶点着色器(我当然还是对管道有点不确定).但根据我的理解,顶点规范是我们做的第一件事吗?(如果需要,可以使用顶点/指数)并将它们存储到VAO中.

那么顶点着色器是否与每个顶点相互作用?(我希望)因为那是我如何理解的?

opengl glsl

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

Rspec控制器测试失败了撇号字符?

现在我使用"Faker"公司名称进行单元测试失败.

看起来好像expect(response.body).to match(@thing.name)搞砸了.

在查看错误时,Faker公司的名称有时会包含"O'Brian Company"或"O'Hare Company"或类似名称.

faker是编码字符串吗?因为我知道匹配编码的字符串不是一个好主意,我真的不想只在Factory im中指定一个特定的公司名称.

谢谢

factory rspec ruby-on-rails faker

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

forEach / for ...不返回值?

所以我有些困惑,我正在解决freeCodeCamp上的一个挑战。

挑战如下

一切都是真实的

检查谓词(第二个参数)在集合的所有元素(第一个参数)上是否为真。

解决了,但是我不明白为什么我必须采取额外的步骤。我的代码是这样的:

function truthCheck(collection, pre) {
    collection.forEach(function(element) {
        for (key in element) {
            if (!element.hasOwnProperty(pre)) {
                return false;
            } else if (key === pre) {
                if (!Boolean(element[key])) {
                    return false;
                }
            }
        }
    });
    return true;
}

truthCheck([
    {"user": "Tinky-Winky", "sex": "male"},
    {"user": "Dipsy"},
    {"user": "Laa-Laa", "sex": "female"},
    {"user": "Po", "sex": "female"}
], "sex");
Run Code Online (Sandbox Code Playgroud)

因此在这种情况下,它应该会失败,因为其中的第二个元素collection没有该sex属性。如果pre参数(在这种情况下sex不是真值)也将失败。

当这些被击中时(我可以通过控制台日志告诉它们),但我认为它会跳出循环并从truthCheck函数中返回.....但是没有,最终它将返回真正。

我可以通过定义一个变量,然后将该值设置为false并在最后返回该变量来规避此问题。有没有更好的办法?似乎这些返回应该突破该truthCheck功能?我想念什么吗?

javascript

6
推荐指数
3
解决办法
8607
查看次数

Express/Node需要View Engine吗?

所以我首先进入Node/Express头(带有学习Javascript中级的东西)并且有点困惑为什么需要像Jade或EJS这样的"视图引擎"?

我似乎找不到使用普通HTML5的东西?或者是我不能用快递将值传递给普通的HTML?

让我假装我有一个index.html页面加载,当我"登录"它加载顶部发布的用户名(例如).我可以不将值传递给快递中的普通.html文件吗?

node.js express

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

在没有表单组件的情况下反应输入表单?

我正在编写一个“Todo”应用程序来学习 React,这是我的第一个应用程序(它使用 Rails 作为后端)。目前我有两个处理状态的组件,这就是我遇到问题的地方。

ListContainer 保存“List”的状态,“List”保存各个ListItem 的状态。现在列表工作得很好,但是我想为我的“列表”组件添加一个简单的输入框,可以快速将新的列表项添加到列表中。目前我可以很好地添加“测试”值。

一种方法是创建一个 ListItemForm 组件,但这似乎没有必要只发送一个值。我更像是一个后端人员,所以我确信有一种简单但不明显的方法。我的 JavaScript 也很生疏,所以我确信它充满了错误。

无论如何,这是List组件:

import React, { Component } from 'react';
import axios from 'axios';
import ListItem from './ListItem';


class List extends Component { 
    constructor(props){
        super(props)
        this.state = {
            listItems: []
        }
    }

    componentDidMount() {
        axios.get(`/api/v1/lists/${this.props.list.id}/list_items.json`)
        .then(response => {
            console.log("Getting List 'listitems'")
            console.log(response.data)
            console.log(this.state.listItems)
            this.setState({
                listItems: response.data
            })
            console.log(this.state)
        })
        .catch(error => console.log(error))
    }

    addNewListItem = (list_id, content) => {
        axios.post(`/api/v1/lists/${list_id}/list_items`, {
            content: content
          })
        .then(response => {
            console.log(response) …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs

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

使Headless Chrome与Capybara配合使用

我有点停滞不前,我遵循了思想机器人教程,一切都“看起来”正确了:https ://robots.thoughtbot.com/headless-feature-specs-with-chrome

  • 我已经确认我的Chrome是59版
  • 我已经用brew安装了chromedriver,并确认它至少是2.3版

我的rails_helper文件(相关部分)如下所示:

Capybara.register_driver :chrome do |app|
  Capybara::Selenium::Driver.new(app, browser: :chrome)
end

Capybara.register_driver :headless_chrome do |app|
  capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
    'chromeOptions:' => { args: %w(headless disable-gpu) }
  )

  Capybara::Selenium::Driver.new app,
    browser: :chrome,
    desired_capabilities: capabilities
end

Capybara.javascript_driver = :headless_chrome
Run Code Online (Sandbox Code Playgroud)

使用chromedriver-helper宝石确实可以让我很好地使用铬,但是它不会无所事事。另外,当我检查它时,我会在镶边上确认自动化测试使用了没有--headless标志出现。

现在使用它给我的brew install chromedriver是:

Selenium::WebDriver::Error::WebDriverError:
       unable to connect to chromedriver 127.0.0.1:9515
Run Code Online (Sandbox Code Playgroud)

所以似乎有些不对劲……。似乎不知道如何连接brew chromedriver版本。。但是,大多数教程似乎都没有说任何有关使用brew版本连接任何东西的事情。

有任何想法吗?(我在Rails 4.1 btw上运行)

ruby-on-rails capybara selenium-chromedriver

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

RSpec"计数"改变了吗?

所以我在看:https://rubyplus.com/articles/1491-Basic-TDD-in-Rails-Writing-Validation-Tests-for-the-Model

只是看到测试技术,我看到了这个:

require 'rails_helper'

describe Article, type: :model do
  it 'is valid if title and description fields have value' do
    expect do
      article = Article.new(title: 'test', description: 'test')
      article.save
    end.to change{Article.count}.by(1)
  end
end
Run Code Online (Sandbox Code Playgroud)

特别是最后一行:end.to change{Article.count}.by(1).阅读https://relishapp.com/rspec/rspec-expectations/v/3-7/docs/built-in-matchers/change-matcher

它特别说:

更改匹配器用于指定代码块更改某些可变状态.您可以使用以下两种形式之一指定更改内容:

这是有道理的.但是Article.count在代码块中进行测试实际上并没有"做"任何事情(这article.save实际上是什么改变了,Article.count所以这究竟是如何工作的?测试是否会在代码块运行之前看看它们是什么?"prerun "它...比较.by(1)后?

谢谢

ruby-on-rails rspec-rails

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

避免对象切片

所以我对 C++ 感到耳目一新,老实说已经有一段时间了。我制作了一个控制台乒乓球游戏作为一种复习任务,并获得了一些关于使用多态性从我的类派生自基本“GameObject”(具有一些将对象绘制到屏幕的基本方法)的输入。

其中一个输入是(我后来问过)是从基类派生时内存是如何工作的。因为我并没有真正做过很多高级 C++。

例如,假设我们有一个基类,现在它只有一个“draw”方法(顺便说一句,为什么我们需要说它virtual?),因为所有其他派生对象实际上只共享一个公共方法,并且正在绘制:

class GameObject
{
public:

    virtual void Draw( ) = 0;
};
Run Code Online (Sandbox Code Playgroud)

例如,我们还有一个球类:

class Ball : public GameObject
Run Code Online (Sandbox Code Playgroud)

我收到的输入是,在适当的游戏中,这些可能会保存在某种 GameObject 指针向量中。像这样的东西:std::vector<GameObject*> _gameObjects;

(所以是指向游戏对象的指针向量)(顺便说一句,为什么我们在这里使用指针?为什么不只是纯游戏对象?)。我们将使用以下内容实例化这些游戏对象之一:

_gameObjects.push_back( new Ball( -1, 1, boardWidth / 2, boardHeight / 2 ); ); 
Run Code Online (Sandbox Code Playgroud)

new返回一个指向对象的指针是否正确?IIRC)。根据我的理解,如果我尝试执行以下操作:

Ball b;
GameObject g = b;
Run Code Online (Sandbox Code Playgroud)

事情会变得一团糟(如下所示:什么是对象切片?

但是......当我这样做时,我不是简单地自己创建派生对象,new Ball( -1, 1, boardWidth / 2, boardHeight / 2 );还是自动将其分配为游戏对象?我真的无法弄清楚为什么一个有效而一个无效。例如,它是否与通过newvs创建对象Ball ball有关?

对不起,如果这个问题没有意义,我只是想了解这个对象切片是如何发生的。

c++ object-slicing

4
推荐指数
2
解决办法
2844
查看次数

Cypress 在 body 中使用 JSON 夹具?

因此基于 Cypress 请求文档:https ://docs.cypress.io/api/commands/request.html

看起来我应该能够很轻松地发送带有 JSON 正文的 POST 请求。这就是我尝试过的:

cy.fixture('test_create').as('create_test')
cy.request({
  method: 'POST',
  url: 'http://localhost:8080/widgets',
  body: '@create_test',
  headers: {
    'Authorization': this.token,
    'Content-Type': 'application/json;charset=UTF-8'
  }
})
Run Code Online (Sandbox Code Playgroud)

然而,当我查看 Cypress 发送的“命令”时,它按照字面意思发送正文Body: @create_test

是否无法在 POST 请求正文中使用固定装置?我确认夹具加载正确。我确认当我将整个 JSON 粘贴到选项中时它也可以工作body......但是对于大型 JSON 主体来说,这很快就会变得丑陋。

cypress

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

在 Gitlab 中重用项目标签?

我认为必须有更好的方法来做到这一点,但是如果我在 gitlab 中创建一个新项目,我必须从头开始为新项目重新创建所有标签。

到目前为止,我还没有找到一种从另一个项目“复制”标签的好方法,因此我不必每次都重新创建大量标签。我知道这是一项小任务,但这是那些烦人的任务之一,我觉得你应该能够自动完成这些任务,而不是第十次手动完成每一项任务。

我目前有办法做到这一点吗?即使它正在复制一些已经包含所有标签的“假”项目?

gitlab

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