根据文档,Array.include?在对象上使用==比较.我来自Java,其中(通常)使用.equals()完成这些事情,这很容易覆盖特定对象.
如何在Ruby中覆盖==以允许我指定Array.include的行为?对于我的特定对象?
非常感谢.
我正在编写一个OpenGL3 +应用程序,并且对VAO的使用感到困惑.现在我只有一个VAO,一个围绕原点的标准化四边形集.这个单一的VAO包含3个VBO; 一个用于位置,一个用于表面法线,一个GL_ELEMENT_ARRAY_BUFFER用于索引(因此我只能存储4个顶点,而不是6个).
我已经设置了一些辅助方法来将对象绘制到场景中,例如drawCube()获取位置和旋转值并遵循该过程;
uniform mat4 model顶点着色器变量.glDrawElements()将四边形绘制到此面部的位置.我刚刚开始添加每个立方体颜色的任务,并意识到我不能将我的颜色VBO添加到单个VAO中,因为它会随着每个立方体而改变,这感觉不对.
我刚读过这个问题; OpenGL VAO最佳实践,告诉我我的方法是错误的,并且我应该使用更多的VAO来保存每次设置整个场景的工作.
应该使用多少个VAO?显然,如果场景中的每个静态表面都有VAO,那么我的1的方法并不是最优的吗?移动的是什么?
我正在为每个顶点写一个统一变量,这是正确的吗?我读到uniform着色器变量不应该改变中间帧,如果我能够为我的uniform变量写入不同的值,那么制服与in顶点着色器中的简单变量有何不同?
我正在使用JDBC与我的Postgres数据库交谈.如果我的整个应用程序都运行一个连接,即只有一个呼叫;
DriverManager.getConnection("jdbc:postgresql://host:5432/database", user, pass);
Run Code Online (Sandbox Code Playgroud)
但是这个Connection对象在Java中的多个线程之间共享,我是否正确地假设任何使用SQL事务(BEGIN和COMMIT样式)的尝试只会非常混乱和破坏,因为Java线程可能会交错?请问Connection对象"知道"哪些Java线程使用它来进行查询?
我应该Connection每个Java线程有一个对象并以这种方式使用SQL事务吗?或者我应该在Java中执行所有事务隔离synchronized吗?
我误解了关于C中指针的一些基本信息,这应该很简单,但搜索没有任何结果.我不明白以下代码的行为;
#include <stdlib.h>
#include <stdio.h>
void my_function(char *);
int main(int argc, char *argv[]) {
char *ptr;
ptr = malloc(10);
if(ptr != NULL) printf("FIRST TEST: ptr is not null\n");
else printf("FIRST TEST: ptr is null\n");
my_function(ptr);
if(ptr != NULL) printf("SECOND TEST: ptr is not null\n");
else printf("SECOND TEST: ptr is null\n");
}
void my_function(char *a) {
a = NULL;
}
Run Code Online (Sandbox Code Playgroud)
哪些产出;
FIRST TEST: ptr is not null
SECOND TEST: ptr is not null
Run Code Online (Sandbox Code Playgroud)
为什么第二个测试仍然看到指针不是NULL?我试图使用NULL指针赋值作为一种'返回标志'来指示函数的某个失败.但是在之后测试指针时,它似乎不是NULL.
我认为这是一个非常简单的问题.我来自PhP背景,并且一直都是这样做的,所以我可能会以错误的方式看待这个.
我想在RoR中创建一个ajax处理程序.当用户单击按钮时,javascript将触发POST,并使用jQuery的ajax函数的"success:"参数向用户提供反馈.
问题是,当我真的需要控制器中的几行来完成数据库工作时,RoR正在尝试加载ajax处理程序的视图,并回显出将由用户的javascript解释的状态代码.
这只是一个mailchimp订阅控件页面,所以我只使用'home'控制器.
我的路线;
map.root :controller => 'home'
map.connect '/mcsubscribe', :controller => 'home', :action => 'mcsubscribe'
Run Code Online (Sandbox Code Playgroud)
我的家庭控制器;
class HomeController < ApplicationController
def index
# no content
end
def mcsubscribe
print params[:email]
end
end
Run Code Online (Sandbox Code Playgroud)
我的测试javascript,只是让你了解正在发生的事情;
function mcSubscribe() {
var email = jQuery("#signup_input_email").val();
jQuery.ajax({
type: "POST",
url: "http://domain.com/mcsubscribe",
data: "email=" + email,
cache: false,
success: function(result) {
alert(result);
}
});
}
Run Code Online (Sandbox Code Playgroud)
我认为这将是一个常见的问题,但我已经搜索过,只是设法找到重定向的建议,因为用户永远不会访问/ mcsubscribe页面,这似乎不合适.
我一直在谷歌搜索,每个人似乎有一个不同的解决方案,似乎没有一个对我有用.
我曾经尝试都ProcessBuilder和Runtime.两者都.sh直接调用文件并将其提供给/bin/bash.没有运气.
回到基础,我目前的代码如下;
String cmd[] = { "~/path/to/shellscript.sh", "foo", "bar" };
Process p = Runtime.getRuntime().exec(cmd);
Run Code Online (Sandbox Code Playgroud)
No such file or directory即使手动运行,也会出错;
~/path/to/shellscript.sh foo bar
Run Code Online (Sandbox Code Playgroud)
从bash完美运作.
我需要保留,~因为这个shellcript以三种不同用户的略有不同的形式存在.
我刚刚用了半个小时来解决这个问题,我已经设法修复了我的代码,但是我并不完全理解发生了什么,并且想知道是否有人可以对它进行说明.
我有一个utils类型类,它包含一些静态字段(例如数据库连接端点),这些字段由各种其他程序使用,具体取决于手头的任务.基本上是一个图书馆.
这就是它之前的样子(虽然仍然破碎);
//DBUtils.java
public final class DBUtils {
private static DBConnection myDBConnection = spawnDBConnection();
private static DBIndex myDBIndex = null;
private static DBConnection spawnDBConnection() {
//connect to the database
//assign a value to myDBIndex (by calling a method on the DBConnection object) <- IMPORTANT
//myDbIndex NOT NULL HERE
System.out.println("database connection completed");
//return the DBConnection object
}
public static searchDB(String name) {
//use the myDBIndex to find a row and return it
}
}
Run Code Online (Sandbox Code Playgroud)
简而言之,我使用静态spawnDBConnection()方法为myDBConnection和myDBIndex …
我知道存在系统调用以提供对用户空间中不允许的功能的访问,例如使用read()系统调用访问HDD .我也理解这些是以库调用的形式由用户模式层抽象出来的,例如fread(),以提供跨硬件的兼容性.
所以从应用程序开发人员的角度来看,我们有类似的东西 ;
//library //syscall //k_driver //device_driver
fread() -> read() -> k_read() -> d_read()
Run Code Online (Sandbox Code Playgroud)
我的问题是; 是什么阻止我内联的所有指令fread()和read()功能直接进入我的程序?说明是一样的,所以CPU应该以相同的方式运行?我没有尝试过,但我认为这是因为某些原因我失踪了.否则任何应用程序都可以获得任意内核模式操
TL; DR:什么允许系统调用"进入"应用程序无法复制的内核模式?
我有一个似乎 "使用"同步的同步方法比它应该显着更长.它看起来像;
public static synchronized void myMethod(MyParameter p) {
//body (not expensive)
}
Run Code Online (Sandbox Code Playgroud)
电话看起来像;
myMethod(generateParameter());
Run Code Online (Sandbox Code Playgroud)
凡generateParameter()被称为是一个非常昂贵(需要很长的时间)调用.我的想法是,myMethod在执行过程中类上的互斥锁被阻塞了,generateParameter()这是怎么回事?我发现它是一个不同的调试问题,但这似乎正在发生.
我的情况表现非常重要.在我的算法的核心有一个方法,它使用两个double基元进行一些基本计算.每次运行该算法时,该方法被调用超过一千万次.
代码看起来像这样;
public int compare(double xA, double xB, double yA, double yB);
double x = xA * xB;
double y = yA * yB;
double diff = x - y;
return (diff < 0.0 ? -1 : (diff > 0.0 ? 1 : 0));
}
Run Code Online (Sandbox Code Playgroud)
参数xA并yA从集合中获取它们的值.这个集合可以在代码中调整.我看到很大(大约两倍)性能差异取决于我放入集合的值.似乎如果集合包含a 0.1或a 0.3,性能会受到很大影响.将设置保持为倍数0.5可以获得最佳性能.
是编译器优化x * 0.5为x >> 1等?或者这是因为0.1无法用二进制定义?
我想更好地了解这种情况,以便我可以优化它.我想这可能是一个非常难的问题,除非有人确切地知道javac和jvm(在我们的例子中是热点)如何处理双倍乘法.
我有以下代码来计算数组中不同字符串的实例;
String words[] = {"the","cat","in","the","hat"};
HashMap<String,Integer> wordCounts = new HashMap<String,Integer>(50,10);
for(String w : words) {
Integer i = wordCounts.get(w);
if(i == null) wordCounts.put(w, 1);
else wordCounts.put(w, i + 1);
}
Run Code Online (Sandbox Code Playgroud)
这是一种正确的做法吗?对于一项简单的任务来说似乎有点啰嗦.的HashMap,因为我会被串编入索引的结果对我有用.
我很担心这条线
else wordCounts.put(w, i + 1);
Run Code Online (Sandbox Code Playgroud)
key-value由于这个事实,可能会插入第二对
new Integer(i).equals(new Integer(i + 1));
Run Code Online (Sandbox Code Playgroud)
会是假的,所以两个Integers人最终会在同一个String钥匙桶下面,对吧?或者我只是过度思考自己陷入困境?
我刚刚开始从我们的数据库中删除HTML实体的任务,因为我们做了大量的爬行,并且一些爬虫在输入时没有这样做:(
所以我开始编写一堆看起来像的查询;
UPDATE nodes SET name=regexp_replace(name, 'à', 'à', 'g') WHERE name LIKE '%#xe0%';
UPDATE nodes SET name=regexp_replace(name, 'á', 'á', 'g') WHERE name LIKE '%#xe1%';
UPDATE nodes SET name=regexp_replace(name, 'â', 'â', 'g') WHERE name LIKE '%#xe2%';
Run Code Online (Sandbox Code Playgroud)
这显然是一种非常天真的方法.我一直试图弄清楚我能用解码功能做些什么聪明的事情; 也许通过正则表达式像抓住了HTML实体/&#x(..);/,然后通过刚刚的%1部分到ASCII解码器,以及重建串...或东西...
我应该继续查询吗?可能只有40左右.
我有一个表,events其中有id和venue列.
该events.venue列与列匹配venues.id,这是一个相当典型且简单的设置.
一些场地被"打破",因为它们缺少重要的信息,例如geo_lat.我正在尝试创建一个破坏场地的优先级列表,其中最重要的是在顶部venue托管events,以便我们知道哪些venues是最重要的修复.
Myquery到目前为止看起来像;
select x.venue_id as id, count(x.venue_id) as events
from (
select *
from events e, venues v
where e.venue=v.id and v.geo_lat is null
group by e.venue
) as x order by events desc
Run Code Online (Sandbox Code Playgroud)
哪个给出错误: ERROR:列"e.id"必须出现在GROUP BY子句中或用于聚合函数
我试图实现的输出看起来像;
venue.id | events
---------|-------
12 | 219
214 | 141
36 | 41
1834 | 22
931 | 4
Run Code Online (Sandbox Code Playgroud)
只包含破碎的场地.这样,我知道固定场地 …
java ×6
postgresql ×3
sql ×3
bash ×1
c ×1
count ×1
double ×1
equality ×1
equals ×1
function ×1
group-by ×1
hashcode ×1
hashmap ×1
opengl ×1
overriding ×1
performance ×1
pointers ×1
regex ×1
replace ×1
ruby ×1
runtime ×1
security ×1
system-calls ×1
transactions ×1
vao ×1