我有一个我推送到Heroku的node.js应用程序.它使用MongoDB进行存储.Heroku提供免费的MongoDB作为您的应用可以连接的插件.现在我的问题是,因为连接字符串是这种格式:mongodb:// dbuser:dbpass @ host:port/dbname,并且由于Heroku使用git来推送,如何在不泄露我的情况下将我的代码推送到公共GitHub仓库每个人的用户名和密码?
有没有办法让数据库打开,但仅限于来自我的Heroku应用程序的连接?
我不得不承认我对整件事感到非常困惑.
我希望能够以某种方式标记一个函数(属性可能?),这样当从任何地方调用它时,其他一些代码会处理参数并返回一个值而不是被调用的函数,或者可以让函数正常执行.
我会用它来轻松缓存.
例如,如果我有一个名为Add10的函数,它将如下所示:
int Add10 (int n)
{
return n + 10;
}
Run Code Online (Sandbox Code Playgroud)
如果函数以相同的值重复调用(Add10(7)),它将始终给出相同的结果(17),因此每次重新计算都没有意义.当然,我不会用这么简单的功能来做,但我相信你能理解我的意思.
C#是否提供了我想要的任何方式?我需要一种方法将函数标记为缓存,以便当有人执行Add10(16)某些代码首先运行以检查字典时,我们已经知道Add10值为16并返回它,如果我们这样做,计算,存储和如果我们不回来.
我有一个用node.js编码的TCP服务器。我想将其放在Heroku上,因为它是一项免费服务,除了他们的免费计划所提供的服务之外,我不需要什么。
现在,我对Heroku的内部运作方式知之甚少,而且我对整个事情还很陌生,所以我有几个问题。
首先,是否有可能部署TCP(非Web)服务器?我读到Heroku不喜欢node.js的网络,因为它不支持websockets,我应该使用socket.io。
因此,我已将服务器切换到socket.io。我认为。因为我的代码或多或少看起来都是一样的。我也这样做了:https : //devcenter.heroku.com/articles/using-socket-io-with-node-js-on-heroku
我在Procfile中放入什么而不是“ web”?另外,当我尝试部署当前拥有的资源时,日志显示我的应用程序无法绑定到$ PORT。什么是PORT?以及如何将其更改为所需的端口?
实际上,如果不进行更改,我怎么知道它是什么,以便我的应用程序可以连接到该服务器?
我想将 OpenTK 库的矢量与 JSON 相互转换。我认为它的工作方式只是制作一个自定义 JsonConverter,所以我这样做了:
class VectorConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(Vector4);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var obj = JToken.Load(reader);
if (obj.Type == JTokenType.Array)
{
var arr = (JArray)obj;
if (arr.Count == 4 && arr.All(token => token.Type == JTokenType.Float))
{
return new Vector4(arr[0].Value<float>(), arr[1].Value<float>(), arr[2].Value<float>(), arr[3].Value<float>());
}
}
return null;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
var …Run Code Online (Sandbox Code Playgroud) 我的程序有一个客户端和一个需要通信的服务器组件.他们每个人都有一个变异的状态.突变以下列方式明确完成:
有一种关系
class Diff a b where
commit :: a -> b -> a
Run Code Online (Sandbox Code Playgroud)
这就是说类型b可以被认为是类型的"块" a,你可以a通过"提交" 类型的对象来修改类型的对象b.
因此,您修改状态,这些块被记录并传输到客户端,该客户端也具有上述关系的实例,仅用于不同类型a.
现在,这是交易.我的服务器状态是一个包含许多字段的记录.所有这些都可以改变,因为,你知道,这是一个国家.这就是它的作用.这使我不得不为每个可能的字段在我的"块"类型中编写一个单独的案例,以便我可以通过网络传输它们.如果我可以以某种方式传输任何state -> state功能,那将是可爱的,但我不认为这发生了.客户端共享服务器代码,因此它确实了解我的"块"的结构,并且它必须解释它们以更新它自己的本地状态的部分是我可以管理的.
我想知道的是,如果我可以在这里使用镜头来自动生成更新块.毕竟,我所有的'chunk'类型都是一个笨拙的setter,它具有我可以序列化的通用结构.
什么是避免重复代码的最佳方法?
为了让您更好地了解我的代码当前的外观,下面是服务器状态如何寻找乒乓球游戏的示例.
data State = State
{ playerPaddle :: Double
, aiPaddle :: Double
, ball :: Vec2 Double
, ballV :: Vec2 Double } deriving Show
data Update = BallPos (Vec2 Double)
| BallVel (Vec2 Double)
| PlayerPos Double
| AIPos Double
instance Diff …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个将在Haskell中公开但在C++中实现的数据结构.到目前为止,我已经在一个.cpp文件中实现了它,声明了我需要的所有函数extern "C",并将源文件添加到文件中的c-sources字段.cabal.当我构建项目(在这种情况下stack build),似乎建立良好.
我知道它正在对C++文件做一些事情,因为如果有错误它不会编译.
我还没有尝试运行该项目,因为它是一个库,到目前为止它没有写任何"runnable",但repl似乎不起作用.
当我尝试运行它(stack repl在这种情况下)时,我得到一个丢失的符号错误,其中包含一些错误的名称,可能是也可能不是我文件中的名称.
unknown symbol `_ZdlPv'
linking extra libraries/objects failed
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?我之前遇到过类似的问题,我通过手动将源代码编译成动态库来修复,然后在我的项目中使用该库.我不想这样做,因为它将我绑定到一个平台,因为使用GHC已经拥有的工具无法使用项目编译简单的C++是没有意义的.我希望能够把它放在hackage上.
有什么我想念的吗?如果没有,这是一个错误,是否有计划修复它?
我不知道我是如何实现它的,我假设可能没有办法实现它.是否有证据或令人信服的论据无法完成?
有什么ContT特别的?
记忆是一个有用的东西,因为它与函数密切相关,我假设Haskell有一个正确的机制来以至少相当简单的方式实现它.
var memo = function (f) {
var cache = {};
return function (x) {
if (cache[x]) return cache[x];
else return cache[x] = f(x);
}
}
//Usage:
var fib = memo(function (x) {
if (x == 0) return 1;
if (x == 1) return 1;
return fib(x - 1) + fib(x - 2);
});
fib(100);
Run Code Online (Sandbox Code Playgroud)
这是我用JavaScript编写的代码,可以满足我的需求.对Haskell有什么好的翻译可以提供类似的实用性和性能?
为了减少问题的模糊性,我对复制JS解决方案的一般性并不感兴趣,因为Haskell是强类型的.带有类型签名的东西
memo :: (Int -> b) -> (Int -> b)
Run Code Online (Sandbox Code Playgroud)
可以手动扩展多个参数,甚至可能是各种类型.
因此,据我所知,约定是定义您的类型,然后使用对该类型进行操作的函数定义具有相同名称的模块.
我正在尝试这样做,所以我有这个代码
namespace Rand
type ImmutableRandom
module ImmutableRandom =
open System
val fromSeed : int -> ImmutableRandom
val int : ImmutableRandom -> int
val intInRange : ImmutableRandom -> int -> int -> int
val double : ImmutableRandom -> double
val next : ImmutableRandom -> ImmutableRandom
Run Code Online (Sandbox Code Playgroud)
我收到的错误是ImmutableRandom(模块的名称带下划线)正在重新定义类型或模块.
在同一个项目中,相同的设置适用于不同的类型,唯一的区别是该类型具有通用参数,而ImmutableRandom则没有.
我究竟做错了什么?
假设我有这样的代码
let a = new List<int>()
let b = a :> obj :?> List<obj>
Run Code Online (Sandbox Code Playgroud)
它抛出一个异常,说它无法做到这一点,因为List<int>当我试图将其变成List<obj>. 我明白为什么这是一个问题。它不能神奇地为我创建一个用 obj 替换所有 int 类型的接口,但是我在这里能做什么呢?
我有一个对象,我知道它是一个列表。我如何访问元素而不关心它们的类型?
我的具体示例不使用列表,因此我需要一个通用的解决方案,而不是特定于列表的解决方案。