小编sea*_*owg的帖子

在用户交互方面,OO vs Simplicity

作为一个夏季的项目,我从Uni有一些停机时间,我打算建立一个垄断游戏.然而,这个问题更多的是关于问题的一般概念,而不是我正在尝试执行的具体任务.

我决定采用自下而上的方法构建它,创建围绕四十个空间板的运动,然后继续与空间交互.我意识到我完全不确定如何处理这个问题,而且我在两个设计思想之间徘徊:

  1. 为每个空间提供自己的对象,空间对象的所有子类,以便空间对象本身可以定义交互.我可以通过为每种类型的空间实现不同的land()方法来实现这一点.

  2. 只给出属性和实用程序(因为每个属性都有独特的功能)对象,并创建方法来处理程序主类(或我称之为Board)中的购买/租赁等.像go和super tax这样的空间可以通过一小组条件来实现,以检查玩家是否在特殊空间.

选项1显然是OO(我觉得是正确的)做事方式,但我只想处理来自程序主类的用户交互.换句话说,我不希望空间物体与玩家交互.为什么?Errr.到目前为止,我所做的很多编码都具有这种简单性,但我不确定这对于大型项目是否是一个梦想.我真的应该在一个完全独立的类中处理用户交互吗?

你可以看到我对这种情况很困惑.这有什么办法吗?并且,有没有人对实际的OO设计有任何建议可以帮助一般?

编辑:请注意,我觉得我对这个问题失去了一点关注.我对组合OO和任何外部操作(命令行,网络,GUI,文件管理等)的一般方法感兴趣.

java oop

9
推荐指数
2
解决办法
324
查看次数

多个参数闭包参数类型未推断

我有一段代码,我不能按照我喜欢的方式行事.我有一个以下面的方式定义的类(为此被剥离):

class Behaviour[T](private val rule: Time => T) {
  def map1[U, V](behaviour: Behaviour[U], func: (T, U) => V): Behaviour[V] = {
    new Behaviour(time => func(this.at(time), behaviour.at(time)))
  }
}
Run Code Online (Sandbox Code Playgroud)

在玩这堂课的时候,我尝试了一些我认为微不足道的东西:

val beh = Behaviour(time => 5)
val beh2 = Behaviour(time => 5)
beh.map1(beh2, (a, b) => a + b)
Run Code Online (Sandbox Code Playgroud)

对于最后一行,我收到以下错误:

<console>:13: error: missing parameter type
          beh.map1(beh2, (a, b) => a + b)
                             ^
Run Code Online (Sandbox Code Playgroud)

我当然可以指定闭包参数类型,它可以正常工作,但为什么不在这里键入推理?当然,我也可以为函数指定泛型类型(请参阅下面的两个解决方案).

我认为Scala进行了一次'扫描'来推断类型,并且会看到beh2并传递给函数并假设U在这里Int.有没有什么方法可以解决这个问题,而无需指定输入参数的类型(对于闭包或泛型)?

编辑:我有两个修复示例:

beh.map1[Int, Int](beh2, (a, b) => a + b)
beh.map1(beh2, …
Run Code Online (Sandbox Code Playgroud)

compiler-construction types programming-languages scala type-inference

9
推荐指数
1
解决办法
1779
查看次数

如何使用Python/CGI进行文件上传

我正在尝试创建一个文件上传页面,它会提示用户输入文件,并在显示进度时上传.

目前我已经设法创建一个可以调用我的python脚本的简单HTML页面.然后python脚本将获取文件并以1000字节的块上传.

我有两个主要问题(主要是由于对此全新):

1)我无法获得文件大小来计算百分比2)我不知道如何在服务器端python和页面中的任何内容之间进行通信以更新进度状态;大概是javascript.

我是否会采取错误的方式?或者我的困境有解决方案吗?

这是我的python代码:

#!/usr/local/bin/python2.5 
import cgi, os
import cgitb; cgitb.enable()

try:
    import msvcrt
    msvcrt.setmode (0, os.O_BINARY) 
    msvcrt.setmode (1, os.O_BINARY) 

except ImportError:
    pass

form = cgi.FieldStorage()
upload = form['file']

if upload.filename:
    name = os.path.basename(upload.filename)
    out = open('/home/oetzi/webapps/py/' + name, 'wb', 1000)
    message = "The file '" + name + "' was uploaded successfully"

    while True:
        packet = upload.file.read(1000)
        if not packet:
            break
        out.write(packet)
    out.close()
else:

message = "Derp... could you try that again please?"

print """\
Content-Type: text/html\n …
Run Code Online (Sandbox Code Playgroud)

html javascript python cgi

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

Heroku动作缓存似乎不起作用

我一直在Heroku上玩不同的缓存策略,并添加了他们的memcached插件,旨在为我的应用添加动作缓存.

当我在当前应用程序上查看Rails.cache.stats时(安装了memcached并使用dalli gem),在执行应缓存的操作后,我将current和total_items设置为0.

在我想要缓存的操作的控制器顶部,我有:

caches_action :show
Run Code Online (Sandbox Code Playgroud)

另外,我修改了我的环境配置(对于在Heroku上运行的配置)

config.cache_store = :dalli_store
Run Code Online (Sandbox Code Playgroud)

是否有一些其他的统计数据,我可以看看它是否有效或我做错了什么?

ruby memcached ruby-on-rails heroku action-caching

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

在FRP中实现快照

我在Scala中实现了一个FRP框架,我似乎遇到了一个问题.在一些思考的启发下,这个问题我决定限制我的框架的公共接口,所以行为只能在'现在'中进行评估,即:

behaviour.at(now) 
Run Code Online (Sandbox Code Playgroud)

这也符合Conal在Fran论文中的假设,即行为只会在不断增加的时间进行评估/抽样.它确实限制了行为的转换,但是我们发现自己遇到了代表一些输入的行为的巨大问题:

val slider = Stepper(0, sliderChangeEvent) 
Run Code Online (Sandbox Code Playgroud)

使用此行为,评估未来值将是不正确的,并且评估过去的值将需要无限量的内存(必须存储"slider"事件中使用的所有事件).

鉴于此限制,我在行为上的"快照"操作规范方面遇到了问题.我的问题最好用一个例子解释(使用上面提到的滑块):

val event = mouseB // an event that occurs when the mouse is pressed 
val sampler = slider.snapshot(event) 
val stepper = Stepper(0, sampler) 
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果执行此代码时发生'mouseB'事件,那么'stepper'的当前值将是'slider'的最后一个'样本'(最后一次出现时的值).如果最后一次出现的时间是过去那么我们将最终使用过去的时间来评估"滑块",该时间打破了上面的规则集(以及您的原始假设).我可以看到几种解决方法:

  1. 我们"记录"过去(保持事件中所有过去的事件),允许用过去时间评估行为(使用无限量的内存)
  2. 我们修改'snapshot'以获取时间参数("此时间之后的样本")并强制执行该时间> = now
  3. 在一个更古怪的举动中,我们可以以某种方式将FRP对象的创建限制为程序的初始设置,并且仅在此设置完成后才开始处理事件/输入

我也可以简单地不实现'sample'或删除'stepper'/'switcher'(但我真的不想做这些事情中的任何一个).有没有人对此有任何想法?我在这里误解了什么吗?

haskell programming-languages scala frp semantics

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

使用 Selenium 清除浏览器缓存

我一直在使用 Ruby selenium-webdriver gem 对工作中的 Web 应用程序执行一些测试。一件很棒的事情是能够在执行定时页面加载等之前以编程方式清除浏览器缓存,但我似乎在文档中找不到任何内容。

有谁知道是否有一种简单的方法可以用宝石做到这一点?

ruby testing selenium web-testing

5
推荐指数
1
解决办法
4125
查看次数

'Vary:If-None-Match'分别缓存移动和桌面请求

注意:如果我的任何假设错误,请纠正我.我不太确定这个......

我一直在玩Heroku上的HTTP缓存,并尝试在Heroku上使用Varnish进行缓存时尝试区分移动和桌面请求.

我的第一个想法是我可以设置一个Vary标题,以便缓存变化If-None-Match.由于Rails自动发回从内容散列生成的etags,etag会在桌面和移动请求(不同的模板)之间变化,因此最终会缓存两个版本(不是事实,只是我原来的想法).我一直在玩这个,但我认为它不起作用.

首先,我无法包围我/当有任何东西被缓存,因为肯定If-None-Match会有条件获得请求吗?其次,在实践中,新的请求(没有If-None-Match的请求)有时会收到移动站点.这是因为缓存不知道是否提供移动或桌面缓存版本,因为If-None-Match标头不存在?

听起来很可能,我很困惑.这种方法会以任何方式运作,还是我很傻?另外,如果我无法达到Varnish配置(因为我在Heroku上),无论如何都要实现单独的缓存版本?

我在Rails中用来设置缓存头的确切代码是:

response.headers['Cache-Control'] = 'public, max-age=86400'
response.headers['Vary'] = 'If-None-Match'
Run Code Online (Sandbox Code Playgroud)

编辑:我知道我可以使用,Vary: User-Agent但如果可能的话,尽量避免它,因为它有很高的漏洞率(很多很多用户代理).

ruby-on-rails heroku varnish http-caching

5
推荐指数
1
解决办法
1157
查看次数

我应该使用RMI进行Java多人游戏吗?

我正在建立一个Java的大富翁游戏,我希望它能够通过网络支持游戏(关键在于我和我在A的美国的朋友们可以玩).

网络是我尚未进入的整个编程领域,因此我发现很难确定如何完成它.总的来说,我认为正确的工作方式是拥有一个服务器应用程序,其中包含所有Monopoly游戏代码,然后是app客户端,只需一个带远程方法调用的GUI.

RMI对于这个项目来说是否过于复杂,还是最好的方式?你有什么建议或提示吗?

更新:这个游戏将是100%Java.所以不用担心客户需要安装Java.此外,获得有关使用RMI的一些提示会很棒.

java networking rmi

4
推荐指数
1
解决办法
4208
查看次数

Scala不处理':'函数的非显式类型闭包

所以基本上我想编写一个可以像这样编写的函数:

{ println(_) } =: thing
Run Code Online (Sandbox Code Playgroud)

在这里,我希望它真正做到thing.=:(println(_)).让我们说为了=:具有以下实现的论证:

def =:(block : Int => Any) {
    block(5)
}
Run Code Online (Sandbox Code Playgroud)

所以我试着用上面的方式调用它然后得到:

<console>:10: error: type mismatch;
   found   : Unit
   required: Int => Any
             println(_) =: thing
Run Code Online (Sandbox Code Playgroud)

然后我尝试这样做:

thing.=:(println(_))
Run Code Online (Sandbox Code Playgroud)

这样我就可以很好地5打印到终端了.然后我尝试了这个:

{ value => println(value) } =: thing
Run Code Online (Sandbox Code Playgroud)

这又失败了,告诉我有一个"缺少参数类型".我猜这是因为Scala尝试在这种情况下首先解析/编译函数参数,并且不会像它那样猜测类型(我在这里完全猜测),当它被称为更传统的方式时(使用点运算符).

任何人都可以更多地了解这里的问题,也可能建议一个最接近我原定目标的方法吗?

PS对这个标题抱歉.一旦我对问题有了更好的理解,我就会重命名.

compiler-construction types programming-languages functional-programming scala

4
推荐指数
1
解决办法
331
查看次数

在给定时间查找.wav的"音量"

我正在为我的第四年项目(处理功能反应式编程)开发一个小型示例应用程序.我们的想法是创建一个简单的程序,可以播放.wav文件,然后显示播放歌曲当前音量的"弹跳"动画(如音频录制软件).我在Scala中构建它,因此主要是查看Java库和现有解决方案.

目前,我已经设法轻松播放.wav文件,但我似乎无法实现第二个目标.基本上有一种方法可以解码.wav文件,这样我可以在任何给定的时间访问'音量'吗?按体积我认为我的意思是它的幅度,但我可能错了 - 高等物理学不久前......

显然,我对此一点都不太了解,所以如果有人能指出我正确的方向,那就太棒了!

java audio scala signal-processing wav

4
推荐指数
2
解决办法
2694
查看次数

事件应该是外部可变的吗?

我正在玩FRP,并且想知道应该如何公开处理事件"发生"的行为.通过这个,我的意思是程序员应该能够在FRP上下文中执行以下操作:

event.occur(now, 5)
Run Code Online (Sandbox Code Playgroud)

我从未在任何FRP论文中看到这样的例子,对我来说感觉不对.我觉得FRP框架应该真正隐藏这种类型的动作,并且事件的发生应该仅在幕后发生.我在想这个是正确的吗?

为了澄清,我的方法是"发生"只能由Event类本身访问.如果需要某些外部源的抽象(例如鼠标),可以通过扩展Event类来构建.通过这种方式,所有处理事件创建的逻辑都被抽象出来了.

haskell programming-languages functional-programming scala frp

4
推荐指数
1
解决办法
222
查看次数

RMI:通过价值或参考?

我很难找到这个问题的明确答案,所以我想我会在这里用自己的具体例子问:

我正在创建一个mulitplayer垄断游戏.实际的垄断代码在服务器上运行,客户端本质上是一个访问和控制此代码的GUI.垄断游戏由一个名为"银行"的类控制.

假设我在客户端的main()中执行了此操作:

Bank banker = server.getBank(); //gets the bank object from server
bank.turn(); //moves the current player
Run Code Online (Sandbox Code Playgroud)

这会调用服务器上的Bank对象上的turn()还是本地机器上的它的副本?

更新:银行没有实现远程.它是一个可序列化的对象.

java remoting rmi

3
推荐指数
1
解决办法
3156
查看次数

黑莓操作系统版本

如果我为操作系统版本6.0开发Blackberry应用程序,该应用程序是否与操作系统版本4.5兼容?如果没有,有没有办法轻松移植应用程序?

mobile blackberry java-me

3
推荐指数
2
解决办法
1048
查看次数