我已经看过使用Om进行富客户端网站设计.这也是我第一次使用core.async.阅读教程https://github.com/swannodette/om/wiki/Basic-Tutorial我已经看到使用core.async通道来处理删除操作(而不是在处理程序中完成所有工作).我的印象是,仅使用该通道进行删除是因为删除回调是在一个范围内声明的,在该范围内,您有一个项目级别的光标,您实际上想要操纵包含该项目的列表.
为了更深入地了解渠道,我看到了Rich Hickey的讲座http://www.infoq.com/presentations/clojure-core-async,他解释了如何利用渠道从事件回调中获取应用程序逻辑.这让我想知道教程中删除通道的实际目的是否显示构建应用程序的方式.如果是这样,
什么是与该模式相关的最佳实践?
是否应该为各种活动创建个人频道?即如果我添加一个控制器来创建一个新事件,我是否还会为对象创建创建一个新的通道,然后用于将对象添加到应用程序中另一个位置的全局状态?
让我们说我有一个项目列表,一个项目有一个详细/简洁的状态标志.如果detailed?
是true
,将显示更多的信息,如果detailed?
是false
它会显示较少的信息.我关联了一个在om/transact!
游标上使用的点击事件(作为全局状态对象中列表项的视图).
(let [toggle-detail-handler
(fn [e]
(om/transact! (get-in myitem [:state])
#(conj % {:detailed? (not (:detailed? %))})))]
(html [:li {:on-click toggle-detail-handler}
"..." ]))
Run Code Online (Sandbox Code Playgroud)
我意识到这可能是一个非常简洁的代码片段,其中使用渠道为手段,以分离从acutal逻辑变化的回调事件的整体利益呢起初似乎不值得,但更复杂的例子总体效益大于这个.但另一方面,为这种细节引入额外的通道 - 不详细的切换似乎也为源代码增加了相当大的负载.
如果你能对整个设计问题给出一些提示/提示或其他想法并将它们放到透视中,那就太好了.我觉得那里有点失落.
我早就知道C中有位字段,偶尔我会用它们来定义密集的结构:
typedef struct Message_s {
unsigned int flag : 1;
unsigned int channel : 4;
unsigned int signal : 11;
} Message;
Run Code Online (Sandbox Code Playgroud)
当我阅读开源代码时,我经常会发现位掩码和位移操作,以便在手工滚动的位域中存储和检索这些信息.这是如此常见,我不认为作者不知道位字段语法,所以我想知道是否有理由通过位掩码滚动位字段并转移自己的操作而不是依赖编译器生成用于获取和设置此类位字段的代码.
我正在编写一个基于小瓶子的站点,我想使用Ajax将数据从客户端发送到服务器.到目前为止,我只使用Ajax请求从服务器检索数据.这次我想通过POST请求提交数据.
这是烧瓶侧的接收器,我将其减少到几乎没有记录消息,以避免在此路由的实现中出现任何不必要的错误:
@app.route("/json_submit", methods=["POST"])
def submit_handler():
# a = request.get_json(force=True)
app.logger.log("json_submit")
return {}
Run Code Online (Sandbox Code Playgroud)
提交ajax请求时,flask会给我400错误
127.0.0.1 - - [03/Apr/2014 09:18:50] "POST /json_submit HTTP/1.1" 400 -
Run Code Online (Sandbox Code Playgroud)
我也可以在浏览器的Web开发人员控制台中看到这一点
为什么烧瓶没有submit_handler
使用请求中提供的数据进行调用?
var request = $.ajax({
url: "/json_submit",
type: "POST",
data: {
id: id,
known: is_known
},
dataType: "json",
})
.done( function (request) {
})
Run Code Online (Sandbox Code Playgroud) 嗨,我有一个Web应该能够在智能手机和桌面浏览器上运行.虽然我期望在像Iphone这样的小型设备上获得一些奇怪的行为,但我非常有信心它会在Android Galaxy Tab上运行良好,这是我现在可以运行测试的Android设备.
现在我在Galaxy Tab上安装了一堆浏览器来测试:
在我使用过的桌面上
最后我有一个Iphone来测试.
该网站使用HTML5画布进行像素和基于精灵的绘制,没有花哨的变换,滤镜或效果,主要是简单的路径和多边形.我会听触摸事件并使用requestAnimationFrame
正确的重绘.
总体而言,该应用程序在桌面浏览器上运行良好,它在iOS Safari(iPhone)和Firefox-on-Android上运行良好.Androids Native Browser给我带来了麻烦.我已将其设置为当javascript没有响应时屏幕刷新红色,并且在触摸屏幕时它几乎总是闪烁.
所以我想知道Android Native App和HTML5是否存在任何已知问题.由于本机浏览器的名称不存在,因此很难获得有关此内容的Google信息.有什么想法,我可以获得更多信息?什么可能导致本机Android浏览器滞后的想法?
关于这个问题有一些想法:
iOS不支持requestAnimationFrame,因此我将其替换为基于超时的替换.如果我在Android的本机浏览器上使用该替换,问题仍然存在.
我经常使用AJAX(google clojure xhrio)从服务器检索数据.可能是数据检索回调是cloggin我的事件管道?
是否已知日志控制台消息(console.log)会降低应用程序的速度?他们可以触发浏览器重新运行DOM树或任何相关的东西吗?
javascript html5 mobile-website android-browser html5-canvas
我在Clojure(lein repl
)的普通控制台REPL中编写了一些代码.现在我想提取历史记录以获取我在那里编写的代码.我能以某种方式这样做吗?
我有一些python代码,其中gc.collect()似乎释放了大量内存.鉴于Python的引用计数性质,我倾向于认为我的程序包含许多循环引用.由于一些数据结构相当大,我想介绍弱引用.现在我需要找到循环引用,找到一些明显的引用,我想知道是否可以检测循环引用和明确形成环的对象.到目前为止,我只看过如何调用gc.collect et的教程.人.
我采取一个Lua迭代器,我不知道什么迭代器厂(创建它是用来遍历可重复的关闭功能,请list_iter
在http://www.lua.org/pil/7.1.html)应返回什么都没有迭代的情况.
例如,假设我将实现一个列表类型,而我的列表对象根本就没有任何条目.因此,我认为
从未访问过的主体...
,for i in myiterator do ... end
脚本执行继续,好像什么也没发生.
目前我回来了nil
,Lua(jit)抱怨attempt to call a nil value
.如果我没有返回返回值,也会发生同样的情况.
我正在 Rust 中开发一个小型词法分析器。我的想法是将词法分析阶段放入Iterator
特征的实现中。
struct Lexer {
text: String
}
impl Iterator for Lexer {
...
fn next(&mut self) -> Option<LexItem>{
....
// slicing issue
self.text = self.text[i .. self.text.len()]
}
}
Run Code Online (Sandbox Code Playgroud)
我还没有完全理解这里的终身管理。我可以通过为属性定义具有生命周期的结构来解决问题text
,这(可能)会使子切片变得更容易。然而我未能将这样的生命周期纳入我的代码中。另一方面,我很难将切片转换self.text[i .. .....]
为String
再次(不知道是否可能)。
我尝试了以下修改:
struct Lexer<'a> {
text: &'a str
}
impl<'a> Iterator for Lexer<'a> {
...
fn next(&'a mut self) -> Option<LexItem>{
....
// slicing issue
self.text = self.text[i .. self.text.len()]
}
}
Run Code Online (Sandbox Code Playgroud)
我收到错误:
src/lexer.rs:64:5: 81:6 错误:方法 `next` 具有不兼容的特征类型:预期绑定生命周期参数,找到具体生命周期 …
我正在尝试一些HTML5画布绘图,我遇到了高级编译模式的问题.我想用mozDash
Mozilla浏览器的属性来举例说明(虽然这个问题在属性优化功能上非常通用)https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D#Gecko-specific_attributes
javascript canvas.mozDash = ...
代码可以在Clojurescript中表示为[1] (set! (.-mozDash canvas) ...)
或[2] (aset canvas "mozDash" ...)
.
我之前使用过[1]并且它在大多数情况下都有效,但是使用该mozDash
属性,mozDash
标识符在高级编译结果中消失了.因此我尝试了[2]并且似乎mozDash
使用aset
变体保留了标识符.
因此,我的问题是:
(.-fillStyle canvas)
?我有点怀疑默认情况下标准HTML属性受到保护,mozDash
而不支持非标准属性(如).
我想在不丢失任何精度的情况下将浮点变量转换为字符串。
即我希望字符串具有与我的浮点变量包含的信息相同的信息,因为我使用输出进行进一步处理(即使这意味着字符串将非常长且可读)。
为了更清楚地说明这一点,我想要循环转换的功能
var dA = 323423.23423423e4;
var sA = toString(dA);
var dnA = toDouble(sA);
Run Code Online (Sandbox Code Playgroud)
我希望 dnA 和 dA 相等
谢谢
PS:互联网上的资料来源通常谈论如何舍入字符串,但我还没有找到有关确切表示的信息。另外我对任意精度计算不感兴趣,我只需要双精度浮点运算。
javascript ×3
python ×2
ajax ×1
bit-fields ×1
c ×1
c99 ×1
clojure ×1
core.async ×1
flask ×1
html5 ×1
html5-canvas ×1
jquery ×1
lua ×1
luajit ×1
om ×1
principles ×1
rust ×1
struct ×1