有没有办法在多线程进程中只更改一个线程的UID/GID?
这样做的原因是编写一个文件服务应用程序 - 除非调用者的uid/gid设置为正确的用户,否则不会强制执行ACL和配额,新的文件/目录不会使用正确的uid/gid等创建.
网络应用程序通常可以在开头fork()并在单独的进程中处理每个用户请求.如果需要共享数据,则必须通过某种共享内存.但是,例如,FUSE(linux用户文件系统)默认使用多线程并与python绑定结合使用,尝试使用分叉模型是不切实际的.
整个过程的"一致"UID似乎是根据POSIX标准,但是老Linux并没有遵循POSIX并允许不同的uid用于不同的线程.新内核似乎遵循POSIX,是否有某种方法允许旧的"破坏"行为?
我正在编写一种算法,用于在给定坐标列表(描述路径)的情况下在多个转折点上查找长路径.动态编程算法在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) 我需要序列化一长串相对扁平的结构(它可以是递归的,但大部分时间都不是) - 它只是一个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)更快.我不能使用泛型实例,因为我不想定义ToJSON为ByteString-所以我最终手写整个实例.在我看来,msgpack建立在相同基础上的东西aeson将是一种很好的序列化数据的方法.
我正在构建一种向用户显示对话框的方法.
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)
我想用某种形式的"默认"实例的初始化DialogConfig的dialog功能,这样我就可以使用它作为如defaultConfig{_dialogConfig_content=content}.但是,我正在与类型推理作斗争.这有效:
confirmDialog :: forall t m. MonadWidget t m =>
T.Text -> Event t T.Text …Run Code Online (Sandbox Code Playgroud) 我刚刚开始一个新项目,并希望在开始时使用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) 我有以下代码片段:
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'?我不认为有任何副作用,是吗?
我知道我可以使用AT命令与GSM/CDMA调制解调器通信.但是,据我所知,这在连接时不起作用 - 有没有办法在连接时读取状态信息(信号强度,GSM/HSDPA模式等)?
我不确定modemmanager是否会产生这些信息,我用诺基亚手机试过它并没有 - 但我想主要用于高通芯片组调制解调器(华为),有没有人有从这些调制解调器读取实时信号信息的经验?
我只是从reflex-dom库开始,我无法完全弄清楚使用对话框的正确和便捷的方法。
显示对话框通常意味着<body>在用户的末尾添加一些元素,并在用户单击某个按钮,背景或按下按钮(例如转义)时将其删除。但是,从某些嵌套的小部件执行此操作意味着将事件(“显示对话框”)冒泡到顶部,这可能很笨拙。还有其他方法可以很好地做到这一点吗?我只是看了markup.rocks,似乎使用了一些JS / jQuery hacks。
我可以决定不使用模式对话框(毕竟这可能不是一个坏选择),但是对于某些事情,我可能真的需要它。
我已决定将自己Prelude的项目用于更大的项目(包含一些库和一些可执行文件).Prelude不会导出某些部分函数并导出一些常用函数(即来自Control.Monad等).但是,我正在努力解决这个问题.我试过了:
用base-noprelude.Prelude.hs在模块中创建my-common-module.
与上面相同,但在my-common-module创建中My.Prelude.在所有其他模块创建一个目录"前奏",把它变成hs-source-dirs小集团部分,创建一个文件prelude/Prelude.hs与import My.Prelude
问题是在1)我不能只是跑ghci,因为我有冲突base和my-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 repl和ghcjs?
更新:当我手动删除GHC.Event的重新导出时,base-noprelude与GHCJS一起使用.
更新:好的,我花了一些时间,我应该花更多的钱.在我看来,1)是正确的方法.cabal repl作品(感谢Yuras),ghci必须加载ghci -hide-package base并且也能正常工作.
这在我看来,一个奇怪的问题,但我已经通过了purescript-datetime,并purescript-js-date和我不能找到一个办法让电流DateTime.是否有一些隐藏的库函数或者我必须通过FFI?
我正在尝试使用purescript-thermite来构建一个使用websockets的应用程序.这个想法是应用程序使用websockets连接到某个服务器并实时更新HTML页面.但是,我找不到如何将其连接到thermite工作流程的方法.
我有一个spec由render和组成的performAction.在render访问的dispatch功能.但是,我需要在渲染元素之前启动websockets(我可能会把它放到例如main),但是在消息到达时,我需要理想地dispatch从外部向组件发送事件.最好的方法是什么?
haskell ×7
purescript ×2
reflex ×2
at-command ×1
driver ×1
gsm ×1
linux ×1
list ×1
performance ×1
pthreads ×1
setuid ×1
sql ×1