小编Yev*_*man的帖子

使用Docker在OS X上设置开发环境的正确方法是什么?

介绍

我无法找到使用Docker和Boot2Docker在OS X上设置开发环境的好方法.我遇到的问题是如何管理源代码,以便:

  1. 我可以使用我已安装的工具(文本编辑器,IDE,git等)修改OS X上的代码.
  2. 这些修改反映在Docker容器中,因此如果我重新运行测试或刷新网页,我可以立即看到我的更改.

理论上,通过将我的源代码作为卷安装,这应该很容易做到:

docker run -it -v /path/to/my/source/code:/src some-docker-image
Run Code Online (Sandbox Code Playgroud)

不幸的是,这有两个主要问题使它在OS X上完全无法使用:

问题#1:Virtual Box上安装的卷(使用vboxsf)非常慢

例如,如果源代码是Docker镜像的一部分,这里是Jekyll编译我的主页需要多长时间:

> docker run -it brikis98/yevgeniy-brikman-homepage:v1 bash

root@7aaea30d98a1:/src# time bundle exec jekyll build

[...]

real    0m7.879s
user    0m7.360s
sys     0m0.600s
Run Code Online (Sandbox Code Playgroud)

这是完全相同的Docker镜像,除了这次,我从OS X挂载源代码:

> docker run -it -v $(pwd):/src brikis98/yevgeniy-brikman-homepage:v1 bash

root@1521b0b4ce6a:/src# time bundle exec jekyll build

[...]

real    1m14.701s
user    0m9.450s
sys     0m3.410s
Run Code Online (Sandbox Code Playgroud)

问题#2:文件观看被破坏了

SBT,Jekyll和grunt中的默认监视机制使用诸如inotify之类的技术,如果它们在Docker容器中运行并且在OS X中对安装的文件夹进行了更改,则它们不起作用.

我试过的解决方法

我搜索了解决方案(包括SO上的所有解决方案)并尝试了其中一些,但没有找到成功的解决方案:

  1. 将Boot2Docker切换为使用NFS,但速度一样慢.
  2. 我尝试过Vagrant + NFS,这也很慢.
  3. 我尝试了Samba安装,但该文件夹在Docker容器中始终显示为空.
  4. 我试图使用unison文件系统 …

macos development-environment docker boot2docker

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

简单形式的Wiki或Markdown式语法?

是否有任何类似于Markdown的简单语言或其中一个转换为HTML表单元素的Wiki标记

例如:

name* = ___________
sex = (x) Male () Female
phones = [] Android [x] iPhone [] Blackberry
city = {BOS, (SFO), NYC}
Run Code Online (Sandbox Code Playgroud)

会转换为:

<label>Name (required):</label><input type="text" name="name" id="name"/>
<label>Sex:</label><input type="radio" name="sex" value="Male" checked="checked"/> <input type="radio" name="sex" value="Female"/>
<label>Phones:</label><input type="check" name="phones" value="Android"/> <input type="check" name="phones" value="iPhone" checked="checked"/> <input type="check" name="phones" value="Blackberry"/>
<label>City:</label> 
<select name="city">
  <option value="BOS">BOS</option>
  <option value="SFO" selected="selected">SFO</option>
  <option value="NYC">NYC</option>
</select>
Run Code Online (Sandbox Code Playgroud)

自己创建一个很简单,但如果现有的库/语言已经支持它,它将节省我一些实施,文档和维护时间.如果库在Java中工作(因此我们可以在服务器端运行)或JavaScript(因此我们可以在客户端运行它),这将是更好的选择.

更新:我为此创建了一个github项目,并且maleldil实现了它.随意尝试一下!

html forms markdown wiki

32
推荐指数
2
解决办法
5179
查看次数

客户端和服务器端呈现的模板语言

我正在调查JavaScript模板,以此来呈现我们的观点.目标是能够为已启用JavaScript的用户呈现客户端,以便为那些没有启用JavaScript的用户(和爬虫)呈现相同的模板/数据服务器端.

要求

  1. 客户端渲染.
  2. 服务器端呈现(JVM支持一个很好的).
  3. 对循环,条件,文本操作,部分,宏和扩展/插件的合理支持.
  4. 合理的大/活跃用户社区.

到目前为止找不到令人满意的解决方案

  1. Mustache:支持服务器和客户端呈现,大/活动社区,但"无逻辑"模板似乎非常严格和痛苦.
  2. Node.js下划线:像下划线这样的JS模板提供了我需要的所有模板灵活性,但使用Node.js在服务器端渲染它们非常脆弱.node.js是新的并且相当不稳定,它的包管理(导出...)需要大量的黑客才能使事情正常工作.
  3. 谷歌闭包模板:这些模块编译成JS和Java,并具有我想要的许多功能.遗憾的是,浏览Google群组时,似乎缺少许多基本功能(例如循环关联数组的能力)以及制作自己的插件文档非常稀疏且令人痛苦.此外,我不知道在线社区中有谁在使用它,谷歌不接受开源贡献,而且他们没有带宽来发布新功能.
  4. 同位素:在JS中编写模板,并使用Johnson(Mozilla SpiderMonkey JS运行时的Ruby包装器)来渲染这些模板服务器端.似乎很有希望,但该项目在6个多月内没有提交.
  5. 液体Liquid.js:液体模板语言看起来极好,但liquid.js项目似乎是未经测试(不测试在IE中!),没有任何文件,目前还不清楚是否有人使用它,它一直没有更新等一下.

javascript templates server-side client-side

24
推荐指数
1
解决办法
6674
查看次数

SBT挂起解决依赖关系

我们有一个包含17个项目的SBT 0.13.0多项目构建:1个叶子项目,15个依赖于叶子(但不是彼此)的模块,以及1个依赖于15个模块的聚合器.

这是对Build.scala文件外观的一个非常粗略的想法:

val deps: Seq[Setting[_]] = Seq(libraryDependencies ++= Seq(
  "com.foo" % "foo" % "1.0.0",
  "com.bar" % "bar" % "1.0.0"
))

val leaf = Project("leaf").settings(deps:_*)

val module1 = Project("module1").dependsOn(leaf).settings(deps:_*)
val module2 = Project("module2").dependsOn(leaf).settings(deps:_*)
...
val module15 = Project("module15").dependsOn(leaf).settings(deps:_*)

val aggregator = Project("aggregator)".dependsOn(
  module1,
  module2,
  ...
  module15
).settings(deps:_*)
Run Code Online (Sandbox Code Playgroud)

所有这些项目都列出了完全相同的外部依赖项集libraryDependencies.出于某种原因,当我们update在聚合器中运行命令时,每个项目大约需要一分钟(总共大约15分钟!),即使没有单一的新依赖项可以解析或下载.

更糟糕的是,我们最近添加了一个依赖项,现在update命令导致SBT膨胀到~5GB内存,有时在解析期间完全挂起.我们如何调试这个?

我们尝试过YourKit来描述它,它可能是一个阅读鲱鱼,但到目前为止,我们唯一看到的是一些sbt.MultiLogger班级在BufferedOutputStream.flush通话中花费了大量时间.

sbt

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

SBT多项目建设与动态外部项目?

假设我们有一个SBT项目bar依赖于某些工件foo:

val bar = Project('bar', file('.')).settings(    
  libraryDependencies += "com.foo" % "foo" % "1.0.0"
)
Run Code Online (Sandbox Code Playgroud)

但是,在某些情况下,我想检查源代码foo并让SBT从我的文件系统而不是已发布的工件加载源代码; 这样,我可以对其进行局部更改foo并立即对其进行测试,bar而无需发布任何内容.

val foo = Project('foo', file('foo'))

val bar = Project('bar', file('.')).dependsOn(foo)
Run Code Online (Sandbox Code Playgroud)

我们spec.json在根文件夹中有一个文件bar已经指定是foo应该从源使用还是作为工件使用.有没有办法设置我的构建来读取此文件并添加dependsOnlibraryDependencies基于值spec.json?"

这样做很容易libraryDependencies:

val bar = Project('bar', file('.')).settings(    
  libraryDependencies ++= 
    if (containsFoo(baseDirectory.value / "spec.json")) {
      Seq()
    } else {
      Seq("com.foo" % "foo" % "1.0.0")
    }
)
Run Code Online (Sandbox Code Playgroud)

但是,我们找不到任何方法来设置做任何"动态" dependsOn,比如阅读baseDirectory SettingKey …

scala build sbt playframework-2.0

7
推荐指数
1
解决办法
443
查看次数

上传前拆分文件?

在网页上,是否可以在将文件上传到服务器之前将大文件拆分为块?例如,将10MB文件拆分为1MB块,并在显示进度条的同时一次上传一个块?

听起来JavaScript没有任何文件操作功能,但是Flash和Java applets呢?

这需要在IE6 +,Firefox和Chrome中运行.更新:忘了提及(a)我们正在使用Grails和(b)这需要在https上运行.

javascript flash applet file-upload

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

开源项目:如何处理私有/秘密配置数据?

我正在考虑在Github上为我的实时网站开源代码.到目前为止,我一直在将代码存储在私人仓库中,我唯一担心的是有一些与我的生产环境(数据库密码,API密钥等)相关的配置文件,我不想这样做公开可见.

在不暴露私人数据的情况下开放此类项目的典型方法是什么?你只是维护两个回购,一个公共的和一个相同的私人数据,添加私人数据,偶尔合并两者之间?

security open-source github

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

无法删除当前连接的用户

我正在尝试重新初始化Oracle数据库,并且看到以下错误:

  [sql] Failed to execute:  drop user conns cascade
  [sql] java.sql.SQLException: ORA-01940: cannot drop a user that is currently connected
  [sql] Failed to execute:  create user conns identified by conns default tablespace tbs_conns temporary tablespace temp1
  [sql] java.sql.SQLException: ORA-01920: user name 'CONNS' conflicts with another user or role name
Run Code Online (Sandbox Code Playgroud)

问题是NO ONE已连接:这是我本地计算机上的一个实例,没有外部连接,我只是重新启动并且没有运行任何其他操作.我唯一能想到的是Oracle可能有一些背景(清理?)任务正在运行导致这个问题,但我不知道如何找到/管理它.有任何想法吗?

更新:这个脚本实际上丢弃并重新初始化了一堆表,并且在尝试重新运行它几次之后,我得到了相同的错误消息但是在另一个表上:Failed to execute: drop user csmy cascade.经过几次尝试后,它转移到了另一个用户身上:Failed to execute: drop user deb cascade.似乎有些东西按字母顺序锁定这些表,一次一个!

更新2 …

oracle oracle11g

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

如何使用预先排序的数据初始化TreeMap?

我的应用程序使用TreeMap来保持数据排序并具有log(n)查找和插入.这在应用程序运行时的一般情况下效果很好,但是当应用程序首次启动时,我需要初始化具有数百万个long的TreeMap,我按排序顺序(升序).

由于这些初始化值已经排序,有没有办法将它们插入TreeMap而不支付树插入和重新平衡的log(n)成本?

java initialization treemap sortedmap insertion

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

在Scala中使用泛型实现Java接口,并返回null

我有一个看起来像这样的Java接口:

public interface Foo {
  public <T> T bar();
}
Run Code Online (Sandbox Code Playgroud)

我想在Scala中实现这个接口,我的所有代码都使用它Option.但是,由于Java用户将使用该接口,我想返回null而不是None.我尝试了以下方法:

class FooImpl extends Foo {
  def bar[T](): T = {
    val barOpt: Option[T] = getBar()
    barOpt.orNull
  }
}
Run Code Online (Sandbox Code Playgroud)

这导致以下编译错误:

Expression of type Null does not conform to expected type T
Run Code Online (Sandbox Code Playgroud)

这是有道理的,类型T是不受限制的,它可能是一种Int或其他类型的不可能null.没问题,只需添加即可T >: Null完成,对吧?

class FooImpl extends Foo {
  def bar[T >: Null](): T = {
    val barOpt: Option[T] = getBar()
    barOpt.orNull
  }
}    
Run Code Online (Sandbox Code Playgroud)

不,还是没有骰子.现在你得到一个新的编译错误:

[error] …
Run Code Online (Sandbox Code Playgroud)

java scala

2
推荐指数
1
解决办法
1356
查看次数

在TypeScript接口中,是否可以将一个属性中的键限制为另一个属性的值?

请考虑以下TypeScript接口:

interface Foo {
  list: string[];
  obj: { [index: string]: string; };
}
Run Code Online (Sandbox Code Playgroud)

有没有办法指定类型,以便键入obj必须是其中一个值list

例如,以下内容有效:

class Bar implements Foo {
  list = ["key1", "key2"]
  obj = {"key1": "value1"}
}
Run Code Online (Sandbox Code Playgroud)

但是,以下是编译错误:

class Bar implements Foo {
  list = ["key1", "key2"]
  // COMPILE ERROR
  // "some-other-key" is not in list
  obj = {"some-other-key": "value1"}
}
Run Code Online (Sandbox Code Playgroud)

我试图限制obj使用keyof和查找类型的类型,但没有成功.

typescript typescript2.0

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