最近,Web浏览器改进和实现新技术(例如HTML5)的速度似乎已经大大加快.与此同时,用于开发Web应用程序的工具(例如jQuery)或无数的Web框架也使Web开发变得更加容易.
我们现在是否有必要使用Web技术开发纯粹的单用户桌面应用程序?假设我们可以将最新的浏览器与我们的应用程序一起安装,我们不必担心与旧版浏览器的兼容性.
我需要将一个由4字节整数(小端)组成的二进制文件读入我的Android应用程序的2D数组中.我目前的解决方案如下:
DataInputStream inp = null;
try {
inp = new DataInputStream(new BufferedInputStream(new FileInputStream(procData), 32768));
}
catch (FileNotFoundException e) {
Log.e(TAG, "File not found");
}
int[][] test_data = new int[SIZE_X][SIZE_Y];
byte[] buffer = new byte[4];
ByteBuffer byteBuffer = ByteBuffer.allocate(4);
for (int i=0; i < SIZE_Y; i++) {
for (int j=0; j < SIZE_X; j++) {
inp.read(buffer);
byteBuffer = ByteBuffer.wrap(buffer);
test_data[j][SIZE_Y - i - 1] = byteBuffer.order(ByteOrder.LITTLE_ENDIAN).getInt();
}
}
Run Code Online (Sandbox Code Playgroud)
这对于2k*2k阵列来说非常慢,大约需要25秒.我可以在DDMS中看到垃圾收集器正在加班,所以这可能是缓慢的原因之一.
必须有一种更有效的方法来使用ByteBuffer将该文件读入数组,但我现在还没有看到它.关于如何提高速度的任何想法?
我正在使用本教程中的以下代码对WebGL中的片段着色器中的浮点纹理执行线性过滤:
float fHeight = 512.0;
float fWidth = 1024.0;
float texelSizeX = 1.0/fWidth;
float texelSizeY = 1.0/fHeight;
float tex2DBiLinear( sampler2D textureSampler_i, vec2 texCoord_i )
{
float p0q0 = texture2D(textureSampler_i, texCoord_i)[0];
float p1q0 = texture2D(textureSampler_i, texCoord_i + vec2(texelSizeX, 0))[0];
float p0q1 = texture2D(textureSampler_i, texCoord_i + vec2(0, texelSizeY))[0];
float p1q1 = texture2D(textureSampler_i, texCoord_i + vec2(texelSizeX , texelSizeY))[0];
float a = fract( texCoord_i.x * fWidth ); // Get Interpolation factor for X direction.
// Fraction near to valid data.
float pInterp_q0 …Run Code Online (Sandbox Code Playgroud) docker 守护进程不再在我的计算机(Linux / Centos 7)上启动,我强烈怀疑在这种情况下应该归咎于设置为自动重启的容器。如果我手动启动守护程序,我看到的最后一行是“加载容器:启动”,然后它就挂了。
我想做的是在不启动任何容器的情况下启动守护进程。但我找不到任何选项来做到这一点。docker 中是否有任何选项可以启动守护进程而不启动设置为自动重启的容器?如果没有,有没有办法手动删除不需要运行 docker 守护进程的容器?
我使用 CSS Grid 布局来创建页面的基本布局,而我最初是在 Chrome 中工作的。我现在也在 Firefox 中对此进行了测试,并注意到一些我不理解的行为,并且似乎不符合我理解的规范。
我创建了一个显示行为的简化示例。问题是搜索标题 div 的高度。这被设置为 max-content 并且应该和所包含的元素一样大。
这在 Chrome 66 中按预期工作,但不适用于 Firefox 52 ESR 或 Firefox 62 开发人员版(均在 Linux 上)。在 Firefox 中,搜索头 div 更大并且超出了包含的范围。这只发生在搜索侧栏 div 中有输入元素时,并且我添加的元素越多,搜索标题 div 就越大。
我是否误解了 max-content 应该如何工作?为什么 Firefox 和 Chrome 在这种情况下表现不同?我该如何解决这个问题?
.search {
display: grid;
grid-template-columns: minmax(200px, 1fr) 4fr;
grid-template-rows: max-content auto;
grid-gap: 10px;
height: 95vh;
width: 100%;
align-self: stretch;
background: #FFF;
overflow: hidden;
margin-top: 5px;
}
.search-sidebar {
grid-column: 1 / 2;
grid-row: 1 / 3;
background: #CCFFFF;
padding: …Run Code Online (Sandbox Code Playgroud)我正在Android上尝试一些OpenGL,而且我之前没有任何3D编程经验.显然我在程序中犯了很多错误.
当我遇到问题并发现glGetError产生错误代码时,我只是glGetError在每次调用我的绘图代码中的OpenGL命令后添加了调用.虽然这很有效,但我发现了我的错误,我的绘图代码现在是我认为的两倍大,难以阅读.
有没有办法摆脱所有这些显式调用,glGetError并自动调用它?优选地,如果发生OpenGL错误,我的app应该只是中止错误,指示哪个命令负责.
我正在试验OpenGL ES 3.0并在快速参考表中找到以下声明:
"#version 300 es"必须出现在用GLSL ES 3.00版编写的着色器程序的第一行.如果省略,着色器将被视为目标版本1.00.
所以我尝试在着色器的开头添加它,但这只会导致错误
由于顶点着色器无效,链接失败.
据报道.glGetProgramInfoLog.如果我使用"#version 300 gl"语句删除第一行,则着色器将编译并运行.
这是我的顶点着色器的代码
private final String vertexShaderCode =
"#version 300 es \n" +
"uniform mat4 uMVPMatrix; \n" +
"attribute vec2 a_TexCoordinate; \n" +
"attribute vec4 vPosition; \n" +
"varying vec2 v_TexCoordinate; \n" +
"void main() { \n" +
" v_TexCoordinate = a_TexCoordinate; \n" +
" gl_Position = uMVPMatrix * vPosition; \n" +
"} \n";
Run Code Online (Sandbox Code Playgroud)
我还将version语句添加到顶点和片段着色器,仍然得到相同的错误.
我setEGLContextClientVersion(3)在我的GLSurfaceView中调用,并添加<uses-feature android:glEsVersion="0x00030000" android:required="true" />到我的清单中以表明该应用程序需要OpenGL ES 3.0.
我是否读错了OpenGL ES文档,我不需要添加此版本声明?如果我需要添加它,我做错了什么总是会导致错误?
我一直在尝试使用Typescript,但我现在对如何有效地使用async/await感到困惑.
我正在将一堆记录插入到数据库中,我需要获取每个插入返回的ID列表.以下简化示例通常起作用,但它并不像我想的那么优雅,而且完全是顺序的.
async function generatePersons() {
const names = generateNames(firstNames, lastNames);
let ids = []
for (let name of names) {
const id = await db("persons").insert({
first_name: name.firstName,
last_name: name.lastName,
}).returning('id');
ids.push(id[0])
}
return ids
}
Run Code Online (Sandbox Code Playgroud)
我试图用来map避免ids手动创建列表,但我可以让它工作.
我还想拥有的是有限的并行性.所以我的异步调用应该并行发生,直到某个限制,例如,我只想要有10个开放请求,但不是更多.
在Typescript或Javascript ES7中使用async/await实现这种有限的并行性是否有一种相当优雅的方式?或者我是否试图让这个功能做一些不适合的事情?
PS:我知道有数据库的批量插入方法,这个例子有点人为,因为我可以使用它来解决这个特定的问题.但它让我想知道我没有预定义批量方法的一般情况,例如网络请求
我有一段非常简单的 Typescript 代码,可以解析特定的数据格式,输入是 UInt8Array。我已经尽可能地优化它,但我认为这个相当简单的解析器应该能够比我让它作为 JS 运行得更快。我想尝试使用 AssemblyScript 在 web 程序集中编写它,以确保我没有遇到任何 Javascript 引擎的怪癖。
正如我现在发现的,我不能只是将 TypedArray 传递给 Wasm 并让它自动工作。据我所知,我可以传递一个指向数组的指针,并且应该能够直接从 Wasm 访问它而无需复制数组。但是我不能让它与 AssemblyScript 一起工作。
以下是一个最小示例,显示了我如何无法将 ArrayBuffer 传递给 Wasm。
设置 Wasm 导出的代码主要来自自动生成的样板:
const fs = require("fs");
const compiled = new WebAssembly.Module(
fs.readFileSync(__dirname + "/build/optimized.wasm")
);
const imports = {
env: {
abort(msgPtr, filePtr, line, column) {
throw new Error(`index.ts: abort at [${line}:${column}]`);
}
}
};
Object.defineProperty(module, "exports", {
get: () => new WebAssembly.Instance(compiled, imports).exports
});
Run Code Online (Sandbox Code Playgroud)
下面的代码调用了 WASM,index.js 是上面的胶水代码。
const m = require("./index.js");
const data …Run Code Online (Sandbox Code Playgroud) 我想使用Drupal 6来管理时间表,有几个设备管理员分发那些使用该设备的人.
基本上我想要一个设备表与一周中的一天.该计划显示整个星期所有设备的占用情况.
更复杂的是,时间表的编辑应该非常简单快捷.通常人们有多天的设备,所以应该能够例如拖动一个条目并以这种方式填写更多天.我还希望有一些人可以看到,人们可以拖到时间表上并以这种方式填写.我假设一个人可以用javascript做到这一点,但我没有经验.
是否可以使用Drupal Forms API创建类似的东西?
拖动javascript的任何指针/示例?
或者是否有一些现有的软件或Drupal模块可以做到这一点?
javascript ×4
android ×3
opengl-es ×3
html ×2
typescript ×2
async-await ×1
css ×1
css-grid ×1
docker ×1
drupal ×1
drupal-6 ×1
endianness ×1
file-io ×1
forms ×1
glsl ×1
java ×1
performance ×1
php ×1
webassembly ×1
webgl ×1