小编Fre*_*rik的帖子

从n返回k个元素的所有组合的算法

我想写一个函数,它将一个字母数组作为参数,并选择一些字母.

假设您提供了8个字母的数组,并希望从中选择3个字母.然后你应该得到:

8! / ((8 - 3)! * 3!) = 56
Run Code Online (Sandbox Code Playgroud)

数组(或单词)返回,每个包含3个字母.

algorithm combinations

551
推荐指数
23
解决办法
43万
查看次数

如何与Rails 4同时处理请求?

我试图服务于多个请求,同时在轨道4,这是我能够用做得很轻松config.threadsafe!,并Puma在Rails 3中.

说我有这个控制器

class ConcurrentController < ApplicationController
  def index
    sleep 10000
  end

  def show
  end
end
Run Code Online (Sandbox Code Playgroud)

我以前能够开始使用puma puma -t 2:16 -p 3000(最少2个线程)然后点击index然后show仍然可以show正确渲染.

在Rails 4中,如果我尝试做同样的事情,Puma现在会锁定index请求并且show永远不会被渲染.当我点击Ctrl-C服务器时,Puma给了我这个错误:

Rack app error: #<ThreadError: Attempt to unlock a mutex which is locked by another thread>
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么来获得并发使用Rails 4?config.threadsafe!应该是不需要的(即使我尝试也没有区别)

ruby concurrency ruby-on-rails puma

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

如何实现单例模型

我在rails中有一个站点,并希望在站点范围内进行设置.如果发生特定事件,我的应用程序的一部分可以通过SMS通知管理员.这是我希望通过站点范围设置进行配置的功能示例.

所以我在想我应该有一个环境模型或类似的东西.它需要是一个模型,因为我希望能够使用has_many:SMS通知的联系人.

问题是数据库中只能有一个用于设置模型的帖子.所以我在考虑使用Singleton模型,但这只会阻止创建新对象吗?

我还需要为每个属性创建getter和setter方法,如下所示:

def self.attribute=(param)
  Model.first.attribute = param
end

def self.attribute
  Model.first.attribute
end
Run Code Online (Sandbox Code Playgroud)

直接使用Model.attribute可能不是最佳实践,但总是创建它的实例并使用它吗?

我该怎么办?

singleton ruby-on-rails

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

在Haskell中做有效的数字

我被这篇名为" 只有快速语言很有趣 "的帖子所启发,以便在Haskell中查看他建议的问题(从向量中总结几百万个数字)并与他的结果进行比较.

我是一名Haskell新手,所以我真的不知道如何正确计时或如何有效地做到这一点,我对此问题的第一次尝试如下.请注意,我不是在向量中使用随机数,因为我不确定如何以一种好的方式做.我也打印东西,以确保完整的评估.

import System.TimeIt

import Data.Vector as V

vector :: IO (Vector Int)
vector = do
  let vec = V.replicate 3000000 10
  print $ V.length vec
  return vec

sumit :: IO ()
sumit = do
  vec <- vector
  print $ V.sum vec

time = timeIt sumit
Run Code Online (Sandbox Code Playgroud)

在GHCI中加载并运行time告诉我,运行300万个数字需要大约0.22秒,而3000万个数字需要2.69秒.

与博客作者在郁郁葱葱中的0.02s和0.18s的结果相比,情况要糟糕得多,这使我相信这可以以更好的方式完成.

注意:上面的代码需要运行包TimeIt.cabal install timeit会得到它.

optimization haskell numerics

11
推荐指数
2
解决办法
1176
查看次数

无点风格并使用$

如何结合使用$和无点风格?

一个明显的例子是以下效用函数:

times :: Int -> [a] -> [a]
times n xs = concat $ replicate n xs  
Run Code Online (Sandbox Code Playgroud)

只是写入concat $ replicate产生错误,类似的是你不能写concat . replicate,因为concat期望值而不是函数.

那么你如何将上述功能转变为无点风格呢?

haskell pointfree

10
推荐指数
3
解决办法
578
查看次数

如何进行实时并发编辑?

我正在尝试构建一个rails应用程序,它基本上只是一个文本编辑器(有一些我在其他地方找不到的其他功能 - 这就是为什么我要构建它)

其中一个核心功能是实时并发编辑或实时协作编辑(无论你想称之为什么).

到目前为止,我已经使用名为Juggernaut的插件设置了该网站.这使我能够从客户端或服务器向任何其他客户端发送我想要的任何Javascript.因此,当有人输入内容时,我可以将该人输入的内容发送给其他所有客户端,而其他客户端则不必轮询服务器.

问题我归结为我不知道用什么算法来解决冲突并尽可能以最好的方式做到这一点.我已经阅读了一些关于操作转换的内容,但只是简单的不知道如何使用我现在拥有的Javascript/Rails解决方案合理地实现它.

我想要像OT这样的东西,但不知道如何实现它,也不知道从哪里开始.任何有关如何实现这一点的帮助我都会非常高兴!

javascript ruby-on-rails juggernaut

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

带有指针的int矩阵C - 内存分配混乱

我在生成int矩阵时遇到了一些问题而没有产生内存泄漏.我希望能够通过read_matrix()动态地将给定(全局)矩阵制作成任何大小.但后来我希望能够在以后释放内存.所以在我的main方法中,第二个printf应该导致总线错误,因为它不应该分配任何内存.我将如何创建这个?

int**       first_matrix;
int**       second_matrix;
int**       result_matrix;

int** read_matrix(int size_x, int size_y)
{
    int** matrix;
    matrix = calloc(size_x, sizeof(int*));
    for(int i = 0;i<size_x;i++) {
        matrix[i] = calloc(size_y, sizeof(int));
    }
    for(int i = 0;i<size_x;i++) {
        for(int j = 0;j<size_y;j++) {
            matrix[i][j] = i*10+j;
        }
    }
    return matrix;
}

int main(int stackc, char** stack)
{
    first_matrix = read_matrix(10,10);
    printf("9:3 %d - 4:6 %d \n", first_matrix[9][3], first_matrix[4][6]);
    free(*first_matrix);
    free(first_matrix);
    printf("9:3 %d - 4:6 %d \n", first_matrix[9][3], first_matrix[4][6]);
}
Run Code Online (Sandbox Code Playgroud)

c pointers memory-management matrix

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

使用EitherT累积错误

我有一个Web API的小型小样本应用程序,它采用了一个巨大的JSON文档,并且应该分解它并报告每个部分的错误消息.

下面的代码是使用EitherT(和错误包)的一个工作示例.但是,问题是EitherT在遇到的第一个Left上打破了计算,只返回它看到的第一个"错误".我想要的是一个错误消息列表,所有可能产生的消息.例如,如果第一行runEitherT失败,那么就没有什么可以做的了.但是如果第二行失败,那么我们仍然可以尝试运行后续行,因为它们对第二行没有数据依赖性.因此,理论上我们可以一次性生成更多(不一定是所有)错误消息.

是否可以懒惰地运行所有计算并返回我们可以找到的所有错误消息?

{-# LANGUAGE OverloadedStrings #-}

module Main where

import Data.ByteString.Lazy.Char8 (pack)
import Web.Scotty as S
import Network.Wai.Middleware.RequestLogger
import Data.Aeson
import Data.Aeson.Types
import Control.Lens hiding ((.=), (??))
import Data.Aeson.Lens
import qualified Data.Text as T
import Control.Error
import Control.Applicative
import qualified Data.HashMap.Strict as H
import Network.HTTP.Types

data TypeOne = TypeOne T.Text TypeTwo TypeThree
  deriving (Show)

data TypeTwo = TypeTwo Double
  deriving (Show)

data TypeThree = TypeThree Double
  deriving (Show)

main :: IO () …
Run Code Online (Sandbox Code Playgroud)

error-handling haskell either

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

Golang(cgo) - 用cgo支持嵌套结构?

我试图使用cgo为x264库编写一个小包装器,并遇到了嵌套结构的问题.该库使用了许多复杂的结构,其中一些字段本身就是匿名结构.

当尝试使用cgo访问这些结构时,我遇到了编译错误,因为声称嵌套结构不存在.

我已经设法将问题归结为.h文件和下面粘贴的.go文件.希望这足以说明问题所在.

有没有人知道这个问题的解决方案或解决方法?

谢谢.

struct.h

typedef struct param_struct_t {
  int a;
  int b;
  struct {
    int c;
    int d;
  } anon;
  int e;
  struct {
    int f;
    int g;
  } anon2;
} param_struct_t;
Run Code Online (Sandbox Code Playgroud)

main.go

package main
/*
#include "struct.h"
*/
import "C"
import (
  "fmt"
)

func main() {
  var param C.param_struct_t
  fmt.Println(param.a) // Works and should work
  fmt.Println(param.b) // Works and should work
  fmt.Println(param.c) // Works fine but shouldn't work
  fmt.Println(param.d) // Works fine but shouldn't work
  // …
Run Code Online (Sandbox Code Playgroud)

c struct go cgo

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

在Phoenix JSON API中接受日期

在菲尼克斯,我有这个模型

schema "events" do
  field :start_time, Ecto.DateTime
  field :end_time, Ecto.DateTime
  belongs_to :calendar, Weozo.Calendar

  timestamps
end

@required_fields ~w(calendar_id start_time end_time)
@optional_fields ~w()

def changeset(model, params \\ :empty) do
  model
  |> cast(params, @required_fields, @optional_fields)
end
Run Code Online (Sandbox Code Playgroud)

我有一个由scaffold生成的JSON API控制器(通过:api),其中create函数看起来像这样

  def create(conn, %{"event" => event_params}) do
    changeset = Event.changeset(%Event{}, event_params)

    case Repo.insert(changeset) do
      {:ok, event} ->
        conn
        |> put_status(:created)
        |> put_resp_header("location", event_path(conn, :show, event))
        |> render("show.json", event: event)
      {:error, changeset} ->
        conn
        |> put_status(:unprocessable_entity)
        |> render(Weozo.ChangesetView, "error.json", changeset: changeset)
    end
  end
Run Code Online (Sandbox Code Playgroud)

这只是默认的锅炉板.现在,我想用Javascript客户端创建一个事件,使用jQuery我这样做:

$.post('/api/events', 
  {"event": {"calendar_id": …
Run Code Online (Sandbox Code Playgroud)

json elixir phoenix-framework

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

箭头表示法中的导线等效

我正在使用hasql库与PostgreSQL数据库进行交互,它使用Arrows进行查询和查询组合.

我有一个这种类型的简单查询:

setCustomerAttributes :: Query (TagData, UserDetails) ()
Run Code Online (Sandbox Code Playgroud)

Query箭头在哪里(TagData, UserDetails)输入并返回().

现在我想编写一个需要多个TagData输入的查询,并为所有这些查询运行此查询.基本上我想做这样的事情

setManyCustomerAttributes :: Query ([TagPair], Customer) ()
setManyCustomerAttributes = proc (pairs, customer) -> do
  returnA -< traverse_ (\pair -> setCustomerAttribute -< (pair, customer)) pairs
Run Code Online (Sandbox Code Playgroud)

然而,这当然会产生错误Arrow command found where expression was expected,因为你不能只混合和匹配箭头符号和正则表达式.

箭头相当于做那样的遍历?

haskell arrows

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

你能帮我重构这段clojure代码来生成seq吗?

我想生成一个seq,我以后可以做(映射).它应该如下所示:

((0 0) (0 1) (0 2) (0 3) ... (7 7))
Run Code Online (Sandbox Code Playgroud)

我现在必须要做的这段代码看起来非常非常难以产生如此简单的结果.我需要一些帮助才能做到这一点.

(loop [y 0 x 0 args (list)]  
  (if (and (= y 7) (= x 7))  
    (reverse (conj args (list y x)))  
    (if (= x 7)  
    (recur (+ y 1) 0 (conj args (list y x)))  
    (recur y (+ x 1) (conj args (list y x))))))  
Run Code Online (Sandbox Code Playgroud)

refactoring clojure

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

用一些动态编程重构?

我在这里有一段代码,我真的可以在重构时使用一些帮助.我需要在rails中以表格形式添加关系数据的不同方法.代码来自http://railscasts.com/episodes/75-complex-forms-part-3,我的问题是我需要有Material模型和Answer模型的方法.所以我需要完全相同的代码两次,"材料"替换为"答案".

这似乎应该通过一些动态编程来解决?但我对此毫无经验.

这是怎么解决的?

after_update :save_materials
after_update :save_answers  

def new_material_attributes=(material_attributes)
  material_attributes.each do |attributes|
    materials.build(attributes)
  end
end

def existing_material_attributes=(material_attributes)
  materials.reject(&:new_record?).each do |material|
    attributes = material_attributes[material.id.to_s]
    if attributes
      material.attributes = attributes
    else
      materials.delete(material)
    end
  end
end

def save_materials
  materials.each do |material|
    material.save(false)
  end
end
Run Code Online (Sandbox Code Playgroud)

ruby metaprogramming ruby-on-rails dynamic

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