小编ond*_*dra的帖子

仅更改Linux中一个线程的UID/GID

有没有办法在多线程进程中只更改一个线程的UID/GID?

这样做的原因是编写一个文件服务应用程序 - 除非调用者的uid/gid设置为正确的用户,否则不会强制执行A​​CL和配额,新的文件/目录不会使用正确的uid/gid等创建.

网络应用程序通常可以在开头fork()并在单独的进程中处理每个用户请求.如果需要共享数据,则必须通过某种共享内存.但是,例如,FUSE(linux用户文件系统)默认使用多线程并与python绑定结合使用,尝试使用分叉模型是不切实际的.

整个过程的"一致"UID似乎是根据POSIX标准,但是老Linux并没有遵循POSIX并允许不同的uid用于不同的线程.新内核似乎遵循POSIX,是否有某种方法允许旧的"破坏"行为?

linux setuid pthreads

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

在Haskell中有效地在列表列表中找到多个最大值

我正在编写一种算法,用于在给定坐标列表(描述路径)的情况下在多个转折点上查找长路径.动态编程算法在O(kn ^ 2)中很好地工作,其中k是转折点的数量和n个点.短篇小说:最慢的部分是2个坐标之间的距离计算; 该算法要求对同一对点重新计算"k"次.记忆不是一种选择(太多点).有可能"反转"算法 - 但不知何故倒置算法在haskell中非常慢并且占用太多内存.

在我看来,问题在于:你得到一个固定大小的数组(加上一些动态计算的值 - 例如,这将是使用列表压缩值的结果:

arr = [ (2, [10,5,12]), (1, [2,8, 20]), (4, [3, 2, 10]) ]
Run Code Online (Sandbox Code Playgroud)

我试图找到列表元素的最大值加上固定值:

[12, 9, 21]
Run Code Online (Sandbox Code Playgroud)

我在做什么 - 比如:

foldl' getbest (replicate 3 0) arr
getbest acc (fixval, item) = map comparator $ zip acc item
comparator orig new
    | new + fixval > orig = new + fixval
    | otherwise = orig
Run Code Online (Sandbox Code Playgroud)

问题是每次调用'getbest'时都会构建一个新的'acc' - 这是n ^ 2,这是很多.分配是昂贵的,这可能是问题.你知道如何有效地做这件事吗?

为了说清楚:这是函数的实际代码:

dynamic2FreeFlight :: Int -> [ Coord ] -> [ Coord ] …
Run Code Online (Sandbox Code Playgroud)

performance haskell list

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

haskell中的高效数据序列化

我需要序列化一长串相对扁平的结构(它可以是递归的,但大部分时间都不是) - 它只是一个Map数字,文本,字节串,bool,utctime(和一些集合和列表)的和类型作为价值观.关键是大部分时间我只是序列化数据而几乎从不读取数据,因此我需要尽可能快地进行序列化.

最初我用过safecopy,然后我切换到binary(Generic实例),最后我尝试了aeson(0.10.0.0 HEAD - 0.10编码明显更快,HEAD有一个固定的实例UTCTime).的aeson串行化优于二进制和safecopy(这是基于cereal)通过的2倍,同时提供较短的输出.

我不想将它编码为JSON,因为默认情况下我的JSON编码是有损的,所以我必须编写第二个编码器和解析器来处理和类型,但它可能是可行的 - 也许我甚至可以使用通用实例从aeson包中.但我仍然想知道 - 是否有任何序列化方法可以提供更短的输出(输出发送到DB,更短的输出 - 更好),同时比aeson更快?我没有尝试msgpack,但它是基于binary所以我对它没有太多信心.

更新:暂时,我最终使用aeson.令人惊讶的是它比BufferBuilder(比仍然更快binary)更快.我不能使用泛型实例,因为我不想定义ToJSONByteString-所以我最终手写整个实例.在我看来,msgpack建立在相同基础上的东西aeson将是一种很好的序列化数据的方法.

serialization haskell

6
推荐指数
0
解决办法
766
查看次数

类型推断 - 无法推断出Monad

我正在构建一种向用户显示对话框的方法.

data DialogConfig t m b e =
  DialogConfig { _dialogConfig_title :: Dynamic t T.Text
               , _dialogConfig_content :: b -> m (Dynamic t (Maybe b))
               , _dialogConfig_footer :: Dynamic t (Maybe b) -> m (Event t e)
               }
dialog :: MonadWidget t m =>
           DialogConfig t m b e -> Event t b -> m (Event t (DialogEvent e))
Run Code Online (Sandbox Code Playgroud)

我想用某种形式的"默认"实例的初始化DialogConfigdialog功能,这样我就可以使用它作为如defaultConfig{_dialogConfig_content=content}.但是,我正在与类型推理作斗争.这有效:

confirmDialog :: forall t m. MonadWidget t m =>
                 T.Text -> Event t T.Text …
Run Code Online (Sandbox Code Playgroud)

haskell reflex

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

haskelldb中的部分SQL插入

我刚刚开始一个新项目,并希望在开始时使用HaskellDB.我创建了一个包含2列的数据库:

create table sensor (
    service text,
    name text
);
Run Code Online (Sandbox Code Playgroud)

..找出如何做基本的HaskellDB机器(哦......文档),并想做一个插入.但是,我想做一个部分插入(应该有更多的列),类似于:

insert into sensor (service) values ('myservice');
Run Code Online (Sandbox Code Playgroud)

转换为HaskellDB:

transaction db $ insert db SE.sensor (SE.service <<- (Just $ senService sensor))
Run Code Online (Sandbox Code Playgroud)

但是......这根本行不通.如果我以不同的顺序指定列名称,那么也不起作用,这也不是完全相同的.有没有办法在haskelldb中进行部分插入?

我得到的错误代码是 - 当我刚插入另一列('name')作为第一个时:

Couldn't match expected type `SEI.Service'
       against inferred type `SEI.Name'
  Expected type: SEI.Intsensor
  Inferred type: Database.HaskellDB.HDBRec.RecCons
                   SEI.Name (Expr String) er
When using functional dependencies to combine
  Database.HaskellDB.Query.InsertRec
    (Database.HaskellDB.HDBRec.RecCons f (e a) r)
    (Database.HaskellDB.HDBRec.RecCons f (Expr a) er),
etc..
Run Code Online (Sandbox Code Playgroud)

当我将'服务'作为第一个 - 也是唯一的 - 字段时,我得到:

Couldn't match expected type …
Run Code Online (Sandbox Code Playgroud)

sql haskell

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

如何在Haskell中编写常见的"if"分支

我有以下代码片段:

srcaddr <- getIfaceAddr iface >>= inet_ntoa . fromJust 
dstaddr <- getDestAddr iface >>= inet_ntoa . fromJust 
-- I want to perform actions only if neither getIfaceAddr 
-- nor getDestAddr returned Nothing
action1 srcaddr dstaddr
action2 srcaddr dstaddr
action3 srcaddr dstaddr

getIfaceAddr :: String -> IO (Maybe HostAddress)
getDestAddr :: String -> IO (Maybe HostAddress)
Run Code Online (Sandbox Code Playgroud)

如何在'漂亮的Haskell'中编写这段代码?我在考虑MaybeT monad,但不知何故无法使它工作.我试图做一些"提升",但无法将这些类型组合在一起.我可以更改getIfaceAddr/getDestAddr的签名.

作为旁注:为什么inet_ntoa'HostAddress-> IO String'?我不认为有任何副作用,是吗?

haskell

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

是否可以在连接时从GSM/CDMA调制解调器读取信号质量?

我知道我可以使用AT命令与GSM/CDMA调制解调器通信.但是,据我所知,这在连接时不起作用 - 有没有办法在连接时读取状态信息(信号强度,GSM/HSDPA模式等)?

我不确定modemmanager是否会产生这些信息,我用诺基亚手机试过它并没有 - 但我想主要用于高通芯片组调制解调器(华为),有没有人有从这些调制解调器读取实时信号信息的经验?

gsm driver at-command

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

在反射域中处理模态对话框的正确方法是什么?

我只是从reflex-dom库开始,我无法完全弄清楚使用对话框的正确和便捷的方法。

显示对话框通常意味着<body>在用户的末尾添加一些元素,并在用户单击某个按钮,背景或按下按钮(例如转义)时将其删除。但是,从某些嵌套的小部件执行此操作意味着将事件(“显示对话框”)冒泡到顶部,这可能很笨拙。还有其他方法可以很好地做到这一点吗?我只是看了markup.rocks,似乎使用了一些JS / jQuery hacks。

可以决定不使用模式对话框(毕竟这可能不是一个坏选择),但是对于某些事情,我可能真的需要它。

haskell reflex

5
推荐指数
0
解决办法
437
查看次数

如何正确定义您的"公司"序曲

我已决定将自己Prelude的项目用于更大的项目(包含一些库和一些可执行文件).Prelude不会导出某些部分函数并导出一些常用函数(即来自Control.Monad等).但是,我正在努力解决这个问题.我试过了:

  1. base-noprelude.Prelude.hs在模块中创建my-common-module.

  2. 与上面相同,但在my-common-module创建中My.Prelude.在所有其他模块创建一个目录"前奏",把它变成hs-source-dirs小集团部分,创建一个文件prelude/Prelude.hsimport My.Prelude

问题是在1)我不能只是跑ghci,因为我有冲突basemy-common-module.在2)ghci工作,cabal repl不知何故不会因为"试图使用未加载的模块'Prelude'(prelude/Prelude.hs)而神秘地失败'.此外,base-noprelude似乎不喜欢ghcjs,我想用于项目的一部分(代码共享).

在我看来,目前唯一的方法是启动每个文件:

import Prelude ()
import My.Prelude
Run Code Online (Sandbox Code Playgroud)

要么

{-# LANGUAGE NoImplicitPrelude #-} -- or extensions: NoImplicitPrelude in .cabal
...
import My.Prelude
Run Code Online (Sandbox Code Playgroud)

'extensions:NoImplicitPrelude'选项在我看来最好,因为它需要导入每个文件,My.Prelude否则它将无法正常工作.我是否遗漏了一些明显的方法来实现自定义Prelude并同时使用cabal replghcjs

更新:当我手动删除GHC.Event的重新导出时,base-noprelude与GHCJS一起使用.

更新:好的,我花了一些时间,我应该花更多的钱.在我看来,1)是正确的方法.cabal repl作品(感谢Yuras),ghci必须加载ghci -hide-package base并且也能正常工作.

haskell

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

获取purescript中的当前时间/日期

这在我看来,一个奇怪的问题,但我已经通过了purescript-datetime,并purescript-js-date和我不能找到一个办法让电流DateTime.是否有一些隐藏的库函数或者我必须通过FFI?

purescript

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

Purescript铝热剂和腹板

我正在尝试使用purescript-thermite来构建一个使用websockets的应用程序.这个想法是应用程序使用websockets连接到某个服务器并实时更新HTML页面.但是,我找不到如何将其连接到thermite工作流程的方法.

我有一个specrender和组成的performAction.在render访问的dispatch功能.但是,我需要在渲染元素之前启动websockets(我可能会把它放到例如main),但是在消息到达时,我需要理想地dispatch从外部向组件发送事件.最好的方法是什么?

purescript

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