小编Gur*_*geh的帖子

为什么所有Haskell类型类都有法则?

Typeclassopedia中的所有类型类都有相关的定律,例如某些算子的相关性或可交换性."法律"的定义似乎是一种无法在类型系统中表达的约束.我当然明白为什么你想拥有monad定律,但是有一个根本原因可以在类型系统中完全表达的类型类没有意义吗?

haskell typeclass

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

你如何使表格单元显示尽可能多的文本,如GMail和谷歌阅读器?

制作表格的最佳方法是什么(不一定使用表格标签),其中每行具有固定高度并填充整个可用水平空间,其中一列具有动态宽度,尽可能多地显示文本而不会断行?像Gmail和Google Reader一样.

我非常喜欢这种呈现信息的方式.可扩展的固定高度行是扫描数据列表的好方法,恕我直言.

html css

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

在Sublime Text中的换行符后将缩进对齐到括号

我喜欢将我的行保持在80列以下,所以我经常想重构一个看起来像这样的行:

object.function(a_long_argument, another_long_argument, and_a_third)
Run Code Online (Sandbox Code Playgroud)

对此:

object.function(a_long_argument,
                another_long_argument,
                and_a_third)
Run Code Online (Sandbox Code Playgroud)

但是当我在Sublime中的第一个","后按Enter键时,它只是换行符并将光标缩进几个空格.我想让它与我所处的paranthesis或[]或{}对齐,就像Emacs那样漂亮.

这有选择吗?有插件吗?我必须自己写吗?

我试过寻找它,但我没有找到任何东西.

编辑:

更好的是快捷方式或插件或用于选择几行或整个缓冲区的东西,并让它尝试在好位置自动换行.重构评论.如果它必须是特定于语言的,我希望它主要用于Python和C++.

sublimetext sublimetext2 sublimetext3

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

如何在WAI/scotty中记录整个HTTP请求?

我目前从Network.Wai.Middleware.RequestLogger运行中间件logStdoutDev,但它只记录路径和Accept标头(也可能是其他标头).我也希望看到POST和PUT请求的正文.这个身体恰好是json,所以只需将它打印到stdout即可.

我已经搜索了一个WAI中间件,它记录了所有内容,但没有找到任何内容.我真的不太了解WAI内部的东西来写一些提取POST体的东西,然后把它放回自己,所以我希望现在避免这种学习曲线.

haskell

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

为什么这个constexpr代码会导致GCC占用我所有的RAM?

以下程序将调用fun 2 ^(MAXD + 1)次.最大递归深度不应超过MAXD(尽管我的想法是正确的).因此编译可能需要一些时间,但它不应该吃掉我的RAM.

#include<iostream>

const int MAXD = 20;

constexpr int fun(int x, int depth=0){
  return depth == MAXD ? x : fun(fun(x + 1, depth + 1) + 1, depth + 1);
}

int main(){
  constexpr int i = fun(1);
  std::cout << i << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

问题是吃掉我的RAM就是它的功能.当我将MAXD​​设置为30时,我的笔记本电脑在GCC 4.7.2快速分配3 gb左右后开始交换.我还没有尝试使用clang 3.1,因为我现在无法访问它.

我唯一的猜测是,这与GCC试图过于聪明并记住函数调用有关,就像它对模板一样.如果是这样的话,他们没有限制他们做多少memoization,如MRU缓存表的大小或其他东西,这似乎并不奇怪吗?我还没有找到一个禁用它的开关.

我为什么要这样做?我正在研究创建一个高级编译时库的想法,比如遗传编程或其他东西.由于编译器没有编译时尾部调用优化,我担心任何循环都需要递归(即使我调出最大递归深度参数,这看起来有点难看)将快速分配我的所有RAM和填充它与无意义的堆栈帧.因此,我想出了上面的解决方案,可以在没有深度堆栈的情况下获得任意多个函数调用.这种功能可用于折叠/循环或蹦床.

编辑:现在我已经在clang 3.1中尝试了它,它根本不会泄漏内存,无论我使它工作多久(即我制作MAXD有多高).CPU使用率几乎为100%,内存使用率几乎为0%,就像预期的那样.也许这只是GCC中的一个错误.

c++ gcc metaprogramming constexpr c++11

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

用haskell中的aeson解析部分json对象

我在Haskell中使用Warp(可能是Scotty)和酸状态制作一个相当简单的CRUD Web服务.

在酸状态下,我将用户记录存储在Data.Map中(根据示例).我知道这些记录在创建时总是完整的,所以我不需要使用很多MaybeS.但是,在更新用户时,客户端可能会选择发送部分json对象,只填充一些字段.

代表这个的惯用方法是什么?我应该有一个数据声明,FullUser,没有MaybeS和一个与所有可选键,PartialUser前面的MaybeS完全相同,让aeson自动导出后者的编码和解码,最后编写我自己的类型的更新函数:: FullUser - > PartialUser - > FullUser?

这不会是太多的代码,但它感觉有点丑陋,就像它有点违反DRY.它应该是Web服务器中的常见任务,所以也许它已经被一般地解决了(可能是TH)?

我意识到我可以存储json字符串并始终检查缺少的密钥,使其稍微笨拙,但更多的未来样式的架构更改,但我仍然想知道如何以"类型安全"的方式做到这一点.

编辑:或许我应该只有FullUser并使用aeson-lens从FullUser和json字符串编写一个简单的更新函数?

json haskell aeson

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

在使用字符串键构造字典时,我应该在Python中编写dict或{}吗?

这只是一个关于你建议的约定的一个微不足道的问题.最近,我看到很多人写作的例子,dict(key1=val1, key2=val2)而不是我认为更惯用的人{"key1": val1, "key2": val2}.我认为原因是避免使用""钥匙,但我不确定.也许dict()-syntax看起来更接近其他语言?

python coding-style

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

使用zsh的compdef或者compctl完成某个目录下所有命令的_hosts

我使用 afuse 通过 sshfs 将其他主机自动挂载到我的本地文件系统。像这样:

afuse -o timeout=30 -o mount_template=sshfs -C %r:/ %m -o unmount_template=fusermount -u -z %m ~/remote/
Run Code Online (Sandbox Code Playgroud)

这很好用,但我希望能够使用我的 ~/remote 目录自动完成/TAB 命令。Zsh 认为 ~/remote 是空的,这是可以理解的,因为 afuse 是一个神奇的虚拟 FUSE 文件系统。一旦我手动输入主机,子目录就可以正常工作。例如 ~/remote/host/[TAB] 工作正常。

大多数 zsh compdef 教程都专注于为您的自定义命令构建自定义完成程序。那不是我想要的。

我一直在尝试使用 compdef 将特定目录的完成覆盖到我的主机文件中(使用内置的 _hosts 完成功能),但据我所知, compdef 基于每个命令工作。我希望我的完成者能够处理所有试图在该目录上执行普通文件/目录完成的命令。

感觉它是如此基本,以至于它是单线的,如果我知道的话。我怎样才能做到这一点?

zsh fuse sshfs zsh-completion

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

重新缩放整数向量

假设我有一个正整数的向量V. 如果整数之和大于正整数N,我想重新调整V中的整数,使得和<= N.V中的元素必须保持在零以上.V的长度保证<= N.

是否有算法在线性时间内执行此重新缩放?

这不是功课,BTW :).我需要从符号到符号频率重新缩放地图以使用范围编码.

一些快速思考和谷歌搜索没有给出问题的解决方案.

编辑:

好的,这个问题有点不清楚."重新缩放"表示"标准化".也就是说,将V中的整数(例如乘以常数)转换为较小的正整数,从而满足sum(V)<= N的标准.保留整数之间的比率越好,压缩效果越好.

问题是以这种方式开放式的,该方法不需要找到保持比率的最佳(例如,最小二乘拟合感觉)方式,而是"良好"的方式.如建议的那样,将整个向量设置为1是不可接受的(除非强制).例如,"好"足以找到满足求和标准的最小除数(定义如下).

以下天真算法不起作用.

  1. 找到当前的总和(V),Sv
  2. 除数:= int(ceil(Sv/N))
  3. 用除数除以V中的每个整数,向下舍入,但不小于1.

这在v = [1,1,1,10]时失败,N = 5.

divisor = ceil(13 / 5) = 3.
V := [1,1,1, max(1, floor(10/3)) = 3]
Sv is now 6 > 5.
Run Code Online (Sandbox Code Playgroud)

在这种情况下,正确的归一化是[1,1,1,2]

一种可行的算法是对除数(上面定义)进行二元搜索,直到找到满足求和标准的[1,N]中的最小除数.从ceil(Sv/N)开始猜测.然而,这在操作次数上不是线性的,而是与len(V)*log(len(V))成比例.

在一般情况下,我开始认为在线性时间内做不好.我可能会采用某种启发式方法.

algorithm math computer-science integer vector

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

是否有公钥流密码加密?

我有一个程序会定期将敏感数据的小块(比如 8 个字节)附加到许多日志文件中。我希望对这些数据进行加密。我希望程序在启动时自动启动,所以我不想在程序启动时输入密码。我也不希望它在某处存储密码,因为这几乎会破坏加密的目的。

由于这些原因,在我看来,公钥加密将是一个不错的选择。该程序知道我的公钥,但我的私钥在其他地方受密码保护。

到现在为止还挺好。但是当我尝试使用 PyCrypto 对 RSA(或 ElGamal)加密一个 5 字节的小字符串时,输出会爆炸到 128 字节。我的日志文件足够大...另一方面,当我尝试对称加密时,如 Blowfish,输出字符串与输入字符串一样大。

所以,我的问题是:是否有一种相当安全的公钥加密算法,我可以一次加密 8 个字节的数据并且不会让它爆炸?(我想因子为 2 就可以了)。我想我想要的是一个公钥流密码。

如果没有这样的事情,我想我会放弃并使用对称加密并在启动时手动提供密码。

python encryption public-key-encryption

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