小编Ste*_* Lu的帖子

Vim:箭头键在插入模式下在一行内移动

我有<Up><Down>nnoremapped gk,gj但这不会让我在编辑模式下使用它们.我尝试使用inoremap,但只是输入gkgj.

所以我当然可以这样做inoremap <Up> <ESC>gki.这是最好也是唯一合理的方法吗?我不喜欢这种方法,因为对于读取设置文件的人来说,它的作用并不明显.不是我可以说我见过的任何vim设置文件.

vim

7
推荐指数
1
解决办法
369
查看次数

将对象展平为数组?

我正在使用一个对象作为哈希表.我想快速打印出它的内容(alert()例如).是否内置了将哈希转换为(键,值)对的数组?

javascript

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

网站性能测试:如何最好地估算计算机性能?

我的网页上有一些浏览器密集型的CSS和动画,我想确定用户是否有快速PC,因此我可以相应地扩展内容以提供最佳体验.

我正在使用http://detectmobilebrowser.com的脚本来检测所有移动设备,我将包括该子句/android|ipad|ipod|playbook|silk/i.test(a)以包括所有平板电脑设备.

然而,这不能也不能真正解决实际的硬件问题.绘制一张我正在寻找的图片并不是很遥远.

例如,iPhone 4S将比移动用户代理检测器匹配的许多设备具有更强大的功能,而这使得它无法将自己与众不同.有人可能会在奔腾II机器上运行谷歌浏览器(不知何故),并希望查看我的页面.(这个人可能没有iPhone 4S)

显然,为了实际获得这个想法,我将不得不做一些实际的性能测试,并且与任何类型的应用程序的性能测试一样,仅测试应用程序实际执行的任务类型的性能是有意义的.

即使考虑到这一点,我觉得在性能测试程序花费太长时间并且用户已经变得不耐烦之前,很难获得任何合理准确的数字.所以这可能意味着继续它,除非我希望第一次初步印象是完美的.嗯,事实恰恰是这种情况.因此,我无法在"第一次运行后"测量性能并稍后调整参数.

所以我剩下的就是基本上尝试在初始页面加载时执行类似的任务,其方式取决于浏览器渲染和处理速度,同时不向用户呈现任何内容(这样他们仍然认为对用户该页面正在加载),然后优选地在一秒或两秒内获得足够精确的数字以设置实际页面的参数以使其成为动画并以不喜欢幻灯片放映的令人愉悦的方式呈现.

也许我可以<div>在我的测试用例上放置一个整页白色,以便我可以阻止用户看到正在发生的事情,并希望浏览器不会通过避免完成所有工作而变得聪明.

有没有人这样做过?

我知道人们会说,"你可能不需要这样做",或者"必须有更好的方法"或"减少影响的数量".

做我在页面上做的任何事情的原因是它看起来很好.这就是它的全部要点.如果我不关心这个问题就不会存在.目标是让javascript能够确定足够的参数,以便在功能强大的计算机上提供出色的体验,并在功能较弱的计算机上提供可通过的体验.当有更多电力时,应该利用它.所以希望这可以解释为什么这些建议不是问题的有效答案.

javascript testing performance html5 performance-testing

7
推荐指数
1
解决办法
513
查看次数

glTexImage2D与宽度/高度相关的Segfault

当我尝试加载771x768图像时,我遇到了段错误.

尝试24x24和768x768图像,他们工作,没问题.

这是预期的吗?为什么它不会因GL错误而优雅地失败?

分段错误发生在glTexImage2D调用中.我正在加载PPM二进制文件,因此每像素打包24位.这个奇数与奇数维相结合可能产生一个非4字节(甚至2字节)的对齐结构(并且在我足够分配的缓冲区之外引用可能是错误的原因但是gdb没有向我显示内存地址(我可以用来查明是否是导致它的原因)).

glTexImage2D(GL_TEXTURE_2D, 0, 3, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, dataptr);
// in this specific case of failure, width = 771, height = 768,
// dataptr contains 1776384 bytes of binary RGB image data (771*768*3 = 1776384)
Run Code Online (Sandbox Code Playgroud)

opengl textures image

6
推荐指数
1
解决办法
4203
查看次数

FBO Blitting无效

我正在尝试将多重采样的场景渲染为纹理,这是我正在使用的代码.我有黑屏.我在init结束时检查fbo完整性,并且他们报告两个fbo都已完成.

void init_rendered_FBO() {
    glGenFramebuffers(1,&fbo);
    glBindFramebuffer(GL_FRAMEBUFFER, fbo);
    glGenTextures(1,&fbo_tex);
    glBindTexture(GL_TEXTURE_2D, fbo_tex);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    // glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width_screen, height_screen, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
    glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, width_screen, height_screen);
    glBindTexture (GL_TEXTURE_2D, 0);
    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, fbo_tex, 0);
    int objectType;
    glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE,&objectType);
    ASSERT(objectType == GL_TEXTURE);
    int objectName;
    glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME,&objectName);
    ASSERT(glIsTexture(objectName) == GL_TRUE);
    int wid, hei, fmt;
    glBindTexture(GL_TEXTURE_2D, objectName);
    glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &wid);
    glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &hei);
    glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_INTERNAL_FORMAT,
            &fmt);
    glBindTexture(GL_TEXTURE_2D, …
Run Code Online (Sandbox Code Playgroud)

opengl graphics fbo multisampling

6
推荐指数
1
解决办法
3886
查看次数

为什么标准化设备坐标系左撇子?

起初我想知道为什么NDC范围从-1到1,而不是从0到1.我想可能在中心的原点对某些东西有用.

但为什么它使用左手坐标系?

是否可以使更远的物体的Z值更高?这对我来说是个充分的理由.

opengl

6
推荐指数
2
解决办法
4054
查看次数

提取-webkit-transform matrix3d值

我正在尝试使用<canvas>(2d上下文)渲染3D形状,这意味着我必须执行一些手动投影变换.

能够从CSS中检索3D变换矩阵值对我有很大帮助.

可以这样做吗?

如果没有,我如何构建由-webkit-perspective-origin执行的转换?我仅仅考虑了视角的变换,但是在x = y = 0的情况下,视角起源并非总是如此.

我意识到这个特定的情况(在某些点x,y,z的原点的透视)可能会变成一个简单的x,y,z平移,紧接着是透视变换(或者反过来),但理想的答案是是一种提取实际4x4 3D矩阵的方法.如果我有矩阵,我不再需要重新跟踪我为转换我的CSS3元素所做的步骤,以便将相同的变换应用于我打算使用的几何体<canvas>.

我在这里查看(http://www.w3.org/TR/css3-3d-transforms/)以供参考,但它们看起来并不像他们描述了在应用不同的可能转换时分配给矩阵的实际值.我认为应该有一些规格表确实如此详细.我似乎记得甚至在某处瞥见它(具有许多trig函数的矩阵定义).

编辑:我更深入地了解了浏览器在此处执行转换所需的步骤.不回答我的问题,但它确实让我更接近我的临时目标.

javascript 3d graphics html5 css3

6
推荐指数
1
解决办法
2823
查看次数

Javascript函数用于循环

这是一个简单的JS循环不按预期运行的情况的示例,因为循环变量不在单独的范围内.

经常提出的解决方案是构造一个令人不愉快的循环代码,如下所示:

for (var i in obj) {
    (function() {
        ... obj[i] ... 
        // this new shadowed i here is now no longer getting changed by for loop
    })(i);
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,这可以改进吗?我可以用这个:

Object.prototype.each = function (f) {
    for (var i in this) {
        f(i,this[i]);
    }
};

// leading to this somewhat more straightforward invocation
obj.each(
    function(i,v) {
        ... v ...
        // alternatively, v is identical to
        ... obj[i] ...
    }
);
Run Code Online (Sandbox Code Playgroud)

当我确定我需要一个"范围循环"?它看起来更干净,应该具有与常规for循环类似的性能(因为它以相同的方式使用它).

更新:似乎做事Object.prototype是一个巨大的禁忌,因为它几乎打破了一切.

这是一个不那么具有侵入性的实现: …

javascript

6
推荐指数
1
解决办法
141
查看次数

了解OpenCV的不失真功能

我正在寻找使用我为相机计算的失真系数来改变图像,而不改变相机矩阵.这正是undistort()如此,但我想将输出绘制为更大的画布图像.

当我尝试这个时:

Mat drawtransform = getOptimalNewCameraMatrix(cameraMatrix, distCoeffs, size, 1.0, size * 2);
undistort(inputimage, undistorted, cameraMatrix, distCoeffs, drawtransform);
Run Code Online (Sandbox Code Playgroud)

它仍然写出了相同大小的图像,但只有左上角四分之一的按比例放大的未失真结果.就像文档说的那样,undistort会写入相同大小的目标图像.

很明显,我可以复制并重新实现一个稍微调整过的版本,undistort()但是我在理解它在做什么时遇到了一些麻烦.这是来源:

void cv::undistort( InputArray _src, OutputArray _dst, InputArray _cameraMatrix,
                    InputArray _distCoeffs, InputArray _newCameraMatrix )
{
    Mat src = _src.getMat(), cameraMatrix = _cameraMatrix.getMat();
    Mat distCoeffs = _distCoeffs.getMat(), newCameraMatrix = _newCameraMatrix.getMat();

    _dst.create( src.size(), src.type() );
    Mat dst = _dst.getMat();

    CV_Assert( dst.data != src.data );

    int stripe_size0 = std::min(std::max(1, (1 << 12) / std::max(src.cols, 1)), src.rows);
    Mat map1(stripe_size0, src.cols, …
Run Code Online (Sandbox Code Playgroud)

c++ opencv computer-vision

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

如何使用 fetch 处理流数据?

我在使用 node.js 处理来自进程的输出流方面使用 async 取得了巨大成功,但我正在努力获得一些我希望可以“使用”浏览器fetchAPI 的东西。

这非常适合异步处理来自进程的输出流:

for await (const out of proc.child.stdout) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

(当然在异步函数上下文中)

我试图在浏览器中做类似的事情,我想在数据从服务器发送给我的同时访问数据。

for await (const chunk of (await fetch('/data.jsonl')).body) {
  console.log('got', chunk);
}
Run Code Online (Sandbox Code Playgroud)

这在 Chrome ( Uncaught TypeError: (intermediate value).body is not async iterable) 中不起作用。

对于我的用例,这不是必需的,所以我现在只是let data = await (await fetch(datapath)).text();在我的客户端代码中使用。这类似于在等待的获取上使用.json()而不是的典型用法.text(),因此在浏览器接收到整个响应之前不能开始处理。由于显而易见的原因,这并不理想。

我在看Oboe.js(我认为相关的 impl 就在这里附近),它几乎处理了这个问题,但它的内部结构相当丑陋,所以看起来这可能是目前唯一的方法?

如果没有实现异步迭代(意味着 async for 还不能使用)是不是还有另一种以实用方式使用 ReadableStream 的方法?

html javascript asynchronous async-await fetch-api

6
推荐指数
2
解决办法
3118
查看次数