在Rails 3,我发现我每次调用框架,无论是从rake,rails server或其他任何东西,我得到以下警告:
Nokogiri was built against LibXML version 2.7.7, but has dynamically loaded 2.7.3
Run Code Online (Sandbox Code Playgroud)
在Google上搜索会产生一些博客文章,所有帖子都建议使用显式库和包含路径重建Nokogiri.例如:
http://mrflip.github.com/2009-08/nokogiri-hates-libxml2-on-osx.html
但是,这并没有为我解决问题.
打字nokogiri -v给我这个:
---
warnings: []
ruby:
engine: mri
version: 1.8.7
platform: i686-darwin10.4.0
libxml:
loaded: 2.7.7
binding: extension
compiled: 2.7.7
nokogiri: 1.4.4
Run Code Online (Sandbox Code Playgroud)
这似乎表明我的构建运行正常,Nokogiri正在加载正确的库版本.为什么Rails会抱怨?
我实际上找到了答案,我想我会在这里分享.请参阅下面的答案.
我想列出一些我认为我已经学到的东西,但我不确定:
glGenBuffers和创造的glBufferData.glVertexAttribPointer,而不是glVertex,glNormal等.glDrawElements 可以与顶点缓冲区和索引缓冲区一起使用,以有效地渲染具有大量共享顶点的几何体,例如横向网格.假设到目前为止所有这些都是正确的,这是我的问题.我读过的关于现代OpenGL的所有教程都完全省略了glEnableClientState.但OpenGL手册页说没有glEnableClientState,glDrawElements什么都不做:
http://www.opengl.org/sdk/docs/man/xhtml/glDrawElements.xml
关键的通道是:"如果GL_VERTEX_ARRAY没有启用,则不构造几何图元."
这引出了以下问题:
glEnableClientState在调用之前没有教程使用glDrawElements.这是否意味着手册页错误或过时?GL_VERTEX_ARRAY似乎是启用,如果你要使用的东西glVertexPointer,同样你会使用GL_NORMAL_ARRAY与glNormalPointer,等等.但是,如果我没有使用这些函数,而是使用通用顶点属性glVertexAttribPointer,那么为什么需要启用GL_VERTEX_ARRAY?考虑这个应该返回给定文件扩展名的函数Path.
pub fn get_extension<'a>(path: &'a Path) -> Option<&'a str> {
let path_str = path.as_str().unwrap();
let ext_pos = regex!(".[a-z0-9]+$").find(path_str);
match ext_pos {
Some((start, _)) => {
return Some(path_str.as_slice().slice_from(start))
},
None => return None
}
}
Run Code Online (Sandbox Code Playgroud)
错误消息如下:
`path_str` does not live long enough
Run Code Online (Sandbox Code Playgroud)

错误信息很清楚,很遗憾我无法自己解决这个问题.我在理论上理解它,但对我来说还有一些模糊的东西.
据我所知,编译器想告诉我,path_str活动时间不够长,因为返回值标记为生命周期'a.
但这就是它停止的地方:
据我所知,对path(输入参数)的引用应该与str对Option(包含在输出参数中)的引用完全一样长
因为我们回来了,Some(path_str.as_slice().slice_from(start))我认为在实践中,这意味着只path_str需要生活path.
我不明白的是到底为什么不path_str不活足够长的时间,我怎么能解决这个问题?是什么让它很快死去?
UPDATE
正如在评论中指出的那样以及IRC中删除superflous as_slice()使代码编译.有谁知道那是为什么?还有人指出存在一种直接获得扩展的方法.但是,我实际上更感兴趣的是学习问题背后的故事.
这主要是关于解释HTTP规范的最佳方式的哲学问题.没有目录索引的目录(例如index.html)是应该返回404还是403?(403是Apache中的默认值.)
例如,假设存在以下URL并且可以访问:
http://example.com/files/file_1/
http://example.com/files/file_2/
Run Code Online (Sandbox Code Playgroud)
但是没有什么在:
http://example.com/files/
Run Code Online (Sandbox Code Playgroud)
(假设我们使用301s强制所有URL使用斜杠.)
我认为应该考虑几件事:
http://example.com/files/ 不是资源,它内部映射到目录的事实应该与状态代码无关.总而言之,您认为最好的方法是什么?我们应该只说"资源是一种资源,如果它不存在,它就是404?" 或者我们应该说,"如果它有斜杠,它看起来像客户端的目录,因此如果没有索引它就是403?"
如果你在403阵营,你认为即使内部实现不使用目录,你也应该尽力返回403s?例如,假设您有一个带有此URL的动态Web应用程序:http://example.com/users/joe,它映射到生成Joe的配置文件页面的某些代码.假设您没有写出列出所有用户的内容,应该http://example.com/users/返回403吗?(在这种情况下,许多(如果不是所有)Web框架都返回404.)
apache http http-status-codes http-status-code-403 http-status-code-404
使用LWJGL时,指定GLSL版本会出现语法错误.我没有尝试在LWJGL之外重现这个问题.这是在运行Lion的多台Mac上发生的.
我已经使顶点和片段着色器无需使用即可工作#version.但我即将使用该texture函数,这似乎需要一个#version指令.
这是最简单的失败示例:
#version 120
void main() {
gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
}
Run Code Online (Sandbox Code Playgroud)
编译此片段着色器并调用glGetShaderInfoLog会出现此错误:
ERROR: 0:1: '' : syntax error #version
Run Code Online (Sandbox Code Playgroud)
替换120其他任何东西,例如110,也会出错.但奇怪的是,如果我使用130或更高,它会给出相同的错误以及对不支持的版本的抱怨.(我知道我的系统没有GLSL 1.3,但是当编译器表现得像它不理解版本标签时,显示此错误仍然很奇怪.)
我在Mac上使用ATI的Radeon HD 4670. GL_VERSION是2.1 ATI-7.12.9和GL_SHADING_LANGUAGE_VERSION是1.20.
鉴于此,我认为没有任何理由说明为什么GLSL 1.20不可用.对我来说,这#version是一个非常奇怪的说它是一个语法错误,而不是说一个不受支持的GLSL版本.
我有一个MiniTest套件.我使用的是基本的Minitest::Unit::TestCase,而不是规格.我setup和teardown我的定义方法TestCase的子类.当我运行这样的测试文件时,它们完美地工作:ruby test/whatever_test.rb.但是当我跑步rake test,setup并teardown没有被召唤.我的Rakefile的相关部分是:
require 'rake/testtask'
Rake::TestTask.new do |t|
t.test_files = FileList['test/*_test.rb']
t.verbose = true
end
Run Code Online (Sandbox Code Playgroud)
为什么不setup和teardown被运行时Rake::TestTask使用?
我将测试用例代码粘贴到这里,但是它有很多.如果你想看到一个特定的部分,我肯定会粘贴它的某个子集.
我在Ruby 1.9.3-p194上运行Minitest 4.3.2.
假设如下:
我有一个名为World代表一些模拟状态的类型.我也有这种类型的同义词:
type Update = World -> World
Run Code Online (Sandbox Code Playgroud)
Haskell是否能够序列化Update类型以便它可以通过网络传递?或者还有其他方法吗?也许我不是在寻找代码逻辑的序列化,因为某种指针或标识符可以在另一端读取.发送和接收进程都运行相同的Haskell程序.
我无法理解代数数据类型中的特征规则.这是一个简化的例子:
use std::rc::Rc;
use std::cell::RefCell;
trait Quack {
fn quack(&self);
}
struct Duck;
impl Quack for Duck {
fn quack(&self) { println!("Quack!"); }
}
fn main() {
let mut pond: Vec<Box<Quack>> = Vec::new();
let duck: Box<Duck> = Box::new(Duck);
pond.push(duck); // This is valid.
let mut lake: Vec<Rc<RefCell<Box<Quack>>>> = Vec::new();
let mallard: Rc<RefCell<Box<Duck>>> = Rc::new(RefCell::new(Box::new(Duck)));
lake.push(mallard); // This is a type mismatch.
}
Run Code Online (Sandbox Code Playgroud)
以上无法编译,产生以下错误消息:
expected `alloc::rc::Rc<core::cell::RefCell<Box<Quack>>>`,
found `alloc::rc::Rc<core::cell::RefCell<Box<Duck>>>`
(expected trait Quack,
found struct `Duck`) [E0308]
src/main.rs:19 lake.push(mallard);
Run Code Online (Sandbox Code Playgroud)
为什么它pond.push(duck)有效,但lake.push(mallard) …
假设我有一个记录,例如Person,我希望能够通过多个数据结构查看此人.也许有一个名字的索引,一个人的邮政编码的另一个索引,以及该人当前纬度和经度的另一个索引.也许还有更多的数据结构.所有这些都存在,因为我需要有效地查找具有不同标准的人.
如果我只需要阅读一个人的属性,这是没有问题的.但现在假设我需要使用其中一个数据结构查找一个人,然后更新该人的数据.
在OOP语言中,每个数据结构都指向内存中的同一个人.因此,当您更新一个时,您也隐式更新其他数据结构的引用.这几乎是副作用和杂质的定义.我知道这完全违背了Haskell范式,我并不期望Haskell以这种方式工作.
那么,什么是Haskell-ish方法呢?要清楚,问题是这样的:我通过一个数据结构查找一个人,并将该人(可能还有一些其他任意数据)传递给一个类型的函数ArbitraryData -> Person -> Person.如何在所有各种查找结构中传播此更改?
作为Haskell的相对新人,我的第一直觉是每次更新一个人时,都会使用新更新的人重建每个查找结构.但这似乎很多仪式,我有充足的机会搞砸了GHC无法察觉的方式,而且一点也不优雅.Haskell以其优雅而闻名,我无法想象它缺乏这种常见和基本问题的优雅解决方案.所以我想我错过了一些东西.
作为参考,这个问题扩展了我在以下问题中讨论的一些问题:
编辑
我想到的一个解决方案:不要在主状态中维护每个查找结构的副本.只保留一个存在的所有人的列表,这是我们更新人员时唯一需要更新的事项.每次你需要通过邮政编码进行查询时,将所有人员的列表传递给一个生成有效的by-zip-code数据结构的函数.然后对结果执行查找.
我不知道这是否有效.如果它导致CPU在每次使用时实际重新计算查找结构,则这是不可接受的.但我知道Haskell有时可以避免重新评估相同的表达式.不幸的是,在这种情况下我仍然没有想到.所以我不知道这种方法是否可行.
换句话说:我可以编写我的函数,就好像他们每次都在计算查询一样,实际上GHC会在底层数据没有改变的情况下优化它吗?因为那将是我上面提到的问题的一个非常优雅的解决方案.
背景:在Rust中,通常会调用多个源文件mod.rs.例如:
app_name
src
main.rs
foo
mod.rs
bar
mod.rs
Run Code Online (Sandbox Code Playgroud)
问题:mod.rs在设置LLDB断点时,我无法找到区分彼此的方法:
$ cargo build
$ rust-lldb target/debug/app_name
(lldb) breakpoint set -f mod.rs -l 10
Breakpoint 1: 2 locations.
(lldb) breakpoint set -f foo/mod.rs -l 10
Breakpoint 2: no locations (pending).
WARNING: Unable to resolve breakpoint to any actual locations.
(lldb) breakpoint set -f src/foo/mod.rs -l 10
Breakpoint 3: no locations (pending).
WARNING: Unable to resolve breakpoint to any actual locations.
Run Code Online (Sandbox Code Playgroud)
这个问题最常见mod.rs.更一般地说,任何时候多个源文件共享相同的名称就会出现.
问题:有没有办法在第10行foo/mod.rs而不是第10 …