所以我一直在学习一些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中.
那么顶点着色器是否与每个顶点相互作用?(我希望)因为那是我如何理解的?
现在我使用"Faker"公司名称进行单元测试失败.
看起来好像expect(response.body).to match(@thing.name)搞砸了.
在查看错误时,Faker公司的名称有时会包含"O'Brian Company"或"O'Hare Company"或类似名称.
faker是编码字符串吗?因为我知道匹配编码的字符串不是一个好主意,我真的不想只在Factory im中指定一个特定的公司名称.
谢谢
所以我有些困惑,我正在解决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功能?我想念什么吗?
所以我首先进入Node/Express头(带有学习Javascript中级的东西)并且有点困惑为什么需要像Jade或EJS这样的"视图引擎"?
我似乎找不到使用普通HTML5的东西?或者是我不能用快递将值传递给普通的HTML?
让我假装我有一个index.html页面加载,当我"登录"它加载顶部发布的用户名(例如).我可以不将值传递给快递中的普通.html文件吗?
我正在编写一个“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) 我有点停滞不前,我遵循了思想机器人教程,一切都“看起来”正确了:https ://robots.thoughtbot.com/headless-feature-specs-with-chrome
我的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上运行)
所以我在看: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)后?
谢谢
所以我对 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有关?
对不起,如果这个问题没有意义,我只是想了解这个对象切片是如何发生的。
因此基于 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 主体来说,这很快就会变得丑陋。
我认为必须有更好的方法来做到这一点,但是如果我在 gitlab 中创建一个新项目,我必须从头开始为新项目重新创建所有标签。
到目前为止,我还没有找到一种从另一个项目“复制”标签的好方法,因此我不必每次都重新创建大量标签。我知道这是一项小任务,但这是那些烦人的任务之一,我觉得你应该能够自动完成这些任务,而不是第十次手动完成每一项任务。
我目前有办法做到这一点吗?即使它正在复制一些已经包含所有标签的“假”项目?