在我的mochiweb应用程序中,我使用长期持有的HTTP请求.我想检测与用户的连接何时死亡,我想通过这样做来弄清楚如何做到这一点:
Socket = Req:get(socket),
inet:setopts(Socket, [{active, once}]),
receive
{tcp_closed, Socket} ->
% handle clean up
Data ->
% do something
end.
Run Code Online (Sandbox Code Playgroud)
这适用于:用户关闭其选项卡/浏览器或刷新页面.然而,当互联网连接突然死亡(说wifi信号突然丢失),或者当浏览器异常崩溃时,我无法检测到tcp关闭.
我错过了什么,或者还有其他方法可以实现这一目标吗?
我正在使用Google Maps API(v3)来渲染世界地图.当我一直缩放(缩放级别1)并开始拖动画布时,我可以移出地图边界,外面的区域显示为灰色.我想阻止用户在世界地图边界之外拖动地图.我怎么做?
我对软件开发世界相对较新.我目前正在进行一个相当大的项目,它是一个不错的OO代码 - 主要遵循领域驱动设计原则.然而,通常这在理论上听起来很棒,实际上整个对象关系阻抗非常糟糕,这意味着只使用ORM层系统的某些部分很慢,除非我们编写优化的SQL查询来覆盖这些情况.此外,有时我们似乎陷入困境,试图看看我们是否应该根据SQL的性能与OO原则对域进行建模.
这让我问这个 - 这是大多数应用程序的构建方式吗?含义 - 是的,面向对象很好 - 但是我发现很难相信与这个对象关系不匹配相关的所有问题,这是构建应用程序的最佳方式吗?我能想到的替代方法是抛弃ORM并进行域建模,并直接手动编写本机SQL查询.我想知道是否实际上有这种方式构建了足够大小的软件系统.
如果我听起来很吵,我很抱歉 - 但我是新人,想知道其他方法是什么.
我正在为node.js应用程序使用node-mysql驱动程序.我没有为每个类似模型的模块反复设置mysql连接,而是这样做:
// DB.js
var Client = require('mysql').Client;
var DB_NAME = 'test_db';
var client = new Client();
client.user = 'user';
client.password = 'pass';
client.connect();
client.query('USE '+DB_NAME);
module.exports = client;
// in User.js
var db = require("./DB");
// and make calls like:
db.query(query, callback);
Run Code Online (Sandbox Code Playgroud)
现在,我注意到DB.js仅使用DB连接初始化一次.因此,随后使用相同的client对象...如何构建DB.js,以便当我从模型中需要它时,每次设置新的数据库连接?我知道它与使用有关new,但我无法绕过它.
我写了一个简单的录音机程序.我将输出格式设置为THREE_GP,但生成的文件的mime类型设置为视频(当我尝试查看文件详细信息时).
知道为什么吗?
mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mRecorder.setOutputFile(recordingFilePath);
Run Code Online (Sandbox Code Playgroud) 如果我想在客户的服务器上销售Web应用程序作为可安装的产品,那么执行许可的最佳方法实践是什么,以至于它不容易被盗用和盗版?
我必须维护一个包含30-40个属性的JavaScript对象,我每隔几秒就会更新一次.我已经读过在JavaScript中没有"释放"内存,浏览器会自动垃圾收集未使用的内存.
我的问题是:是否足以将对象本身设置为null,或者我是否需要将其所有属性设置为null然后将其设置为null?
var obj = [];
obj[prop1] = "123";
obj[prop2] = "456";
//...and so on...
// now to release the obj, is it enough if I just did:
obj = null;
Run Code Online (Sandbox Code Playgroud) 我无法使我的按钮的高度变小.这是我在xml中的内容:
<Button xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/button_small_left"
style="?android:attr/buttonStyleSmall"
android:layout_height="10px"
android:height="10px"
android:minHeight="10px"
android:maxHeight="10px"
android:padding="0px"
android:textSize="6dip"
android:text="asd"
/>
Run Code Online (Sandbox Code Playgroud)
在此之后,该按钮仍会显示一个大的顶部和底部填充.文字出现在中间.该按钮用于相对布局.
我从master创建了一个实验分支,并在实验分支上做了四次提交.与此同时,大师仍然保持着最后的状态.现在,我希望以这样的方式合并我的实验分支,以便将来能够轻松撤消此合并.
当我尝试搜索时,撤消合并的最简单方法在我看来就像git revert hash_of_merge_commit.
但是,这仅在我将master与实验分支合并时获得合并提交哈希时才有效.在这种情况下,由于master的HEAD没有进展,当我尝试合并时,我只是将四个新的提交添加到master,这意味着要撤消此合并,我需要手动记住并还原每个这些单独的提交在未来.
有更好的方法吗?
我正在使用 mt19937 从给定种子生成随机字符串,如下所示:
std::string StringUtils::randstring(size_t length, uint64_t seed) {
static auto& chrs = "abcdefghijklmnopqrstuvwxyz";
thread_local static std::mt19937 rg(seed);
thread_local static std::uniform_int_distribution<std::string::size_type> pick(0, sizeof(chrs) - 2);
std::string s;
s.reserve(length);
while(length--) {
s += chrs[pick(rg)];
}
return s;
}
Run Code Online (Sandbox Code Playgroud)
我想保证随机数序列(以及生成的随机字符串)在同一架构的不同机器上是相同的,根据这个问题的答案应该是这样的。
但是,当我重建二进制文件(不更改任何依赖项或库)时,同一种子的随机数序列会发生变化(与使用相同种子的先前构建生成的序列相比)。
如何从同一机器架构+映像(x86_64 Linux)上不同二进制文件的给定种子生成有保证的随机数序列?