这是使用文件系统创建锁的标准方法.例如,visudo使用它:
[ -f ".lock" ] && exit 1
touch .lock
# do something
rm .lock
Run Code Online (Sandbox Code Playgroud)
1)我很困惑,因为有竞争条件,但Linux使用它
2)有没有更好的方法来锁定shell中的文件?
3)或者我必须使用目录吗?
找到解决方案:man lockfile.
在Rails应用程序我想测试一个引导模式与jQuery的TokenInput场使用水豚用在Rspec的capybara-webkit驱动程序.有问题的部分如下:
click_link 'Create Team Modal'
sleep 1
within('div#modal_popup') do
fill_in 'input#token-input-team_name', with: 'Fancy team name'
sleep 1
fill_in 'input#token-input-team_name', with: '\t'
sleep 1
click_button 'Create Team'
end
page.should have_content('Fancy team name')
Run Code Online (Sandbox Code Playgroud)
这只适用于所有这些sleep 1; 否则Capybara崩溃have_content,最终导致服务器错误,因为团队名称永远无法正确选择.但是,没有 TokenInput字段的其他Bootstrap模式sleep 1在加载之前不需要.
尽管如此,有没有办法摆脱睡眠并让这一切正常进行?Capybara 2取出wait_until(有充分的理由),因为它将在默认的等待时间内等待测试某些东西......但这似乎没有反映在我的上述测试中; 就好像Capybara在进入/退出这个模态时没有参与等待期.有人对此有经验吗?使用Rails 3.2.10,Rspec 2.12,Capybara 2,capybara-webkit 0.14.0,TokenInput 1.6.
ruby-on-rails capybara jquery-tokeninput twitter-bootstrap capybara-webkit
似乎GHC在它决定解码的字符编码中至少是不一致的.
考虑一个文件,omatase-shimashita.txt其中包含以下内容,以UTF-8编码:お待たせしました
readFile 似乎正确地读了这个......
Prelude> content <- readFile "/home/chris/Desktop/omatase-shimashita.txt"
Prelude> length content
8
Prelude> putStrLn content
????????
Run Code Online (Sandbox Code Playgroud)
但是,如果我编写一个简单的"echo"服务器,它不会使用默认的UTF-8进行解码.请考虑以下处理传入客户端的代码:
handleClient handle = do
line <- hGetLine handle
putStrLn $ "Read following line: " ++ toString line
handleClient handle
Run Code Online (Sandbox Code Playgroud)
以及相关的客户端代码,明确发送UTF-8:
Data.ByteString.hPutStrLn handle $ Codec.Binary.UTF8.Generic.fromString "????????"
Run Code Online (Sandbox Code Playgroud)
这不是不一致的行为吗?有这种疯狂的方法吗?我打算重写我的应用程序以显式使用ByteString对象并使用显式编码和解码Codec.Binary.UTF8,但是最好知道这里发生了什么......:o /
更新:我在Ubuntu Linux版本10.10上运行,其语言环境为en_US.UTF-8 ...
$ cat /etc/default/locale
LANG="en_US.UTF-8"
$ echo $LANG
en_US.UTF-8
Run Code Online (Sandbox Code Playgroud) 具体来说,替换字符串中特殊 XML字符的最简单,最惯用的方法是什么.例如,转换<Jack & Jill>为最简单,最惯用的方法是什么<Jack & Jill>.
我有一个Haskell脚本,通过使用该runhaskell实用程序的shebang线运行.例如..
#! /usr/bin/env runhaskell
module Main where
main = do { ... }
Run Code Online (Sandbox Code Playgroud)
现在,我希望能够从脚本本身确定该脚本所在的目录.因此,如果脚本存在/home/me/my-haskell-app/script.hs,我应该能够使用相对或绝对路径从任何地方运行它,它应该知道它位于/home/me/my-haskell-app/目录中.
我认为System.Environment模块中可用的功能可能会有所帮助,但它有点短暂. getProgName似乎没有提供有用的文件路径信息.我发现环境变量_(这是一个下划线)有时会包含脚本的路径,因为它被调用了; 但是,只要通过其他程序或父脚本调用脚本,该环境变量似乎就会失去其值(我需要从另一个父应用程序调用我的Haskell脚本).
同样有用的是我是否可以使用相同的技术或其他方式确定预编译的Haskell可执行文件所在的目录.
考虑一下filterNot(基本上与之相反filter)的实现:
def filterNot(f, sequence):
return filter(lambda x: not f(x), sequence)
Run Code Online (Sandbox Code Playgroud)
参数f可以是"函数"或"方法"或lambda- 甚至是类定义的对象__call__.
现在考虑一下这个参数的docstring行:
:param ??? f: Should return True for each element to be abandoned
Run Code Online (Sandbox Code Playgroud)
现在,应该取代什么?- 如何在docstring中引用参数类型f.callable是显而易见的选择(如果我发号施令,我会指示:P)但是有没有既定的惯例?
我正在运行Ubuntu 10.10,我transformers通过Ubuntu软件包安装了模块libghc6-transformers-dev.出于某种原因,默认情况下隐藏此包:
ghc --make -i./src/ src/fastcgi.hs -o myapp.fcgi
src/MyApp/Webapp.hs:6:7:
Could not find module `Control.Monad.IO.Class':
It is a member of the hidden package `transformers-0.2.1.0'.
Use -v to see a list of the files searched for.
Run Code Online (Sandbox Code Playgroud)
所以,我的第一个问题是,"为什么?".我的第二个问题是,"取消隐藏"该模块的正确方法是什么(无需通过命令行明确指定模块)?这是一个好/坏的想法吗?
注意,我可以通过显式传递包名来获得ghc编译,如下所示:
ghc --make -package transformers -i./src/ src/fastcgi.hs -o myapp.fcgi
Run Code Online (Sandbox Code Playgroud) 如何为sbt基于项目的项目指定自定义目录布局?我一直在看在线sbt资料,但我很难找到这些信息......
我在文档中找到的是默认位置:
src/main/scala和src/main/javasrc/test/scala和src/test/javasrc/main/resources和src/test/resourceslib/如何在build.sbt文件中覆盖这些?
我的项目结构目前如下:
[workspace]/sandbox-scala/src/sbt/myFirst/[workspace]/java-lib/common/lib/任何帮助赞赏.
有没有更好的方法将ResultSet从SQL查询转换为Scala中的Array/List?
下面显示的天真的方式不是Scala.我想知道如何改进它.
val rs = pstmt.executeQuery()
var nids = List[String]()
while (rs.next()) {
nids = nids :+ rs.getString(1)
}
rs.close()
Run Code Online (Sandbox Code Playgroud)