小编mig*_*yte的帖子

Haskell中未定义长度列表的二进制序列化

我一直在使用Data.Binary将数据序列化为文件.在我的应用程序中,我逐步向这些文件添加项目.两个最流行的序列化包,二进制和谷物,两个序列化列表作为计数后跟列表项.因此,我无法附加到我的序列化文件.我目前读取整个文件,反序列化列表,附加到列表,重新序列化列表,并将其写回文件.但是,我的数据集越来越大,我开始耗尽内存.我可以绕过拆箱我的数据结构以获得一些空间,但这种方法不能扩展.

一种解决方案是使文件格式下降和更改以更改初始计数,然后只需附加我的元素.但这并不令人满意,更不用说由于打破抽象而对文件格式的未来变化敏感.Iteratees/Enumerators在这里成为一个有吸引力的选择.我找了一个库,将它们与二进制序列化相结合,但没有找到任何东西.有谁知道这是否已经完成?如果没有,那么这个库是否有用?或者我错过了什么?

binary serialization haskell stream lazy-evaluation

19
推荐指数
1
解决办法
809
查看次数

Haskell是否有像ActiveRecord或Sequel这样的SQL查询编写库?

随着Ruby的ActiveRecord的或续集,你可以逐步建立SQL查询,添加wherejoinorder条款,这取决于在运行时条件的查询.

这是一个简单的例子,取自ASCIIcasts:

def index  
  @articles = Article.order('name')  

  if params[:hidden]  
    @articles = @articles.where(:hidden =>(params[:hidden] == "1"))  
  end  

  respond_to do |format|  
    format.html # index.html.erb  
    format.xml  { render :xml => @articles }  
  end  
end
Run Code Online (Sandbox Code Playgroud)

该示例显示了articles如果HTTP请求查询参数名为hiddenequals,WHERE子句如何附加到表上的基础SQL查询1.

我一直在Haskell中看HDBC和postgresql-simple.似乎postgresql-simple故意使得从动态连接的部分构建SQL查询变得困难,以防止SQL注入.HDBC似乎足够灵活,可以根据运行时的条件构建不同结构的SQL查询,但它似乎没有提供ActiveRecord或Sequel提供的抽象级别.

任何人都可以建议使用其中一个Haskell数据库模拟ActiveRecord的动态查询构建工具吗?

如果HDBC是要走的路,我很好.但是可以理解插图.

我想我正在寻找的是能够针对PostgreSQL后端动态组合查询.

haskell hdbc

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

SnapHelper项目位置


我正在使用垂直RecyclerView列出我的项目并SnapHelper捕捉中心项目.这个想法是随机选择,所以用户刷屏或摇动设备,它滚动到随机位置.
项目数量是20,但是我使用Integer.MAX_VALUE的元素数量RecyclerView和初始化RecyclerView的位置Integer.MAX_VALUE / 2来创建某种无穷无尽的列表.
要在设备震动时滚动到随机位置,我需要知道当前捕捉的项目位置.
有什么办法吗?

这是我的片段代码:

public class PlaceListFragment extends Fragment {

private static final String TAG = "PlaceListFragment";
public static final String ARG_KEY1 = "key1";
private ArrayList<PlaceItem> places;

private RecyclerView recyclerView;

private SensorManager sensorManager;
private float accelValue;
private float accelLast;
private float shake;

SnapHelper snapHelper;

Vibrator vibe;


    public static PlaceListFragment newInstance() {

        Bundle args = new Bundle();

        PlaceListFragment fragment = new PlaceListFragment();
        fragment.setArguments(args);
        return fragment;
    }

    public static …
Run Code Online (Sandbox Code Playgroud)

java android android-recyclerview

10
推荐指数
1
解决办法
7319
查看次数

使用Ansible安装快照包

我正在使用Ansible 自动化Canonical Kubernetes 安装.安装过程需要snap才能出现在主机上.

是否有一种标准方法可以安装Ansible的快照包?

ansible

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

Haskell,Snap:简单的snaplet结构.我们什么时候使用snaplet和库?

我想了解简单的snaplet结构.另外,我什么时候需要制作一个snaplet和一个简单的侧库?如果我确实需要一个如何从库中取出它?

例如,我有一堆数据库函数,我在其中包装我的SQL代码,如下所示.

data Person = Person {personName :: ByteString, personAge :: Int}

connect :: IO Connection
connect = connectSqlite3 "/somepath/db.sqlite3"

savePerson :: Person -> IO ()
savePerson p = do
c <- connect
run c "INSERT INTO persons (name, age) \
      \VALUES (?, ?)"
      [toSql (personName p), toSql (personAge p)]
commit c
disconnect c
Run Code Online (Sandbox Code Playgroud)

每个函数都会启动一个新连接并在提交后关闭连接.我想制作一个snaplet是避免每个功能连接的方法吗?在我的处理程序中,我会像这样使用它:

insertPerson :: Handler App App ()
insertPerson = do
  par <- getPostParams
  let p = top par
  liftIO $ savePerson p
where
  top m = …
Run Code Online (Sandbox Code Playgroud)

haskell haskell-snap-framework

9
推荐指数
1
解决办法
751
查看次数

如何使用Eclipse git merge工具进行"我们的"合并?

我正在尝试合并,我有冲突,一个文件大量分歧.eclipse git merge工具非常适合小的更改,但我的一个文件很大,并且有数百个明确标记的冲突部分.我不能为我的生活找到一个简单的方法来使用我们的"我们的"策略只使用我的版本并放弃远程版本进行合并.

在Linux或Mac上,我很容易从命令行执行此操作,但我在公司的Windows计算机上并且没有命令行git.我甚至尝试了从包资源管理器中的文件的上下文菜单中执行"替换为" - >"头部修订"的解决方法,但由于存储库处于合并冲突模式,因此该操作被禁用.这将是一个很好的解决方案,但是仍然可以更好地将"我们的"或"他们的"策略应用于合并工具中的整个文件.

我不得不求助于硬复位,复制我的文件,进行合并,然后用我的干净副本替换合并版本.我错过了一个更简单的方法吗?

eclipse egit

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

如何避免使用snapframework在haskell中的不同"字符串"类型之间进行转换?

我想为POST数据生成解码结果.在转换'字符串'时,很多代码都被"浪费"了.这使代码变得丑陋.更好的解决方案?

import           Codec.Binary.Url (decode')
import qualified Data.ByteString.Lazy.Char8 as L (unpack)
import qualified Data.ByteString.Char8 as S (unpack, pack)
import qualified Data.ByteString.Lazy as LBS (pack)

decodeUrlHandler :: Snap()
decodeUrlHandler = do
    body <- readRequestBody (maxBound :: Int64)
    writeLBS $ LBS.pack $ map (fromMaybe 0) $ decode' $ L.unpack body
Run Code Online (Sandbox Code Playgroud)

你的代码为此目的是什么?

haskell type-conversion haskell-snap-framework

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

Heist:如何将子模板的动态列表插入模板?

我正在为在线调查写一个网站.我有一个问题列表,所有问题都在一个html页面上进行,列表的长度未知.每个问题都有表格存储在模板中qu1.tpl,页面是qu.tpl.现在我想:

  1. qu1.tpl为每个问题替换一些名称

  2. qu.tpl一次性更换一些东西

  3. 并坚持的所有实例qu1.tplqu.tpl

用我在教程中了解到,我试图递归更换标签<qulist/><apply template="qu1.tpl"><qulist/>qu.tpl使用localHeistbindString但这不能工作,因为qu.tpl这样的新插入的应用标签不能解决已经呈现.

我该怎么做呢?

(我想这是一个更普遍的问题.如果您能想到答案适用的其他应用程序,请为搜索引擎添加文本和标签.)

haskell web-applications haskell-snap-framework heist

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

手风琴不会崩溃

以下手风琴代码对我不起作用.

<div class="accordion" id="accordion1">
    <div class="accordion-group">
      <div class="accordion-heading">
        <a class="accordion-toggle" data-toggle="collapse"
           data-parent="#accordion1" href="#note1">
          Foo
        </a>
      </div>
      <div class="accordion-body collapse" id="note1">
        <div class="accordion-inner">
          <pre>Foo body</pre>
        </div>
      </div>
    </div>
    <div class="accordion-group">
      <div class="accordion-heading">
        <a class="accordion-toggle" data-toggle="collapse"
           data-parent="#accordion1" href="#note2">
          Bar
        </a>
      </div>
      <div class="accordion-body collapse" id="note2">
        <div class="accordion-inner">
          <pre>Bar body</pre>
        </div>
      </div>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

它显示并且项目正确展开,但项目不会折叠.当我单击打开的项目时,它会短暂折叠,然后再次展开.我在bootstrap版本2.1.0和2.1.1上看到过这种行为.此外,我正在使用JQuery 1.7.2和1.8.2并在Chrome 22中查看.

javascript accordion collapse twitter-bootstrap

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

为什么我的"apply"标签不再适用于Heist 0.11.0.1?

我最近升级了我正在使用的Heist版本.这主要是一个随意的决定,我仍然看到该行动的后果,主要是更令人愉快的代码结构.

但是,我非常依赖模板中的"apply"标签来引入样板组件,例如我的站点标题和菜单.对我来说,典型的模板如下所示:

<html>
<head>
    <title> <PageTitle /> </title>
    <link rel="stylesheet" type="text/css" href="/styles/style.css" />
    <link rel="alternate" type="application/rss+xml" title="${PageTitle} Feed" href="http://www.savannidgerinel.com/rss" />
</head>
<body class="center">

<apply template="header" />

<div id="content">
<h1><PageTitle /></h1>
<ul>
<PageMetadata />
</ul>

<PageContent />
</div>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

而且,我现在正在加载这样的模板:

setup_heist template_dir = do
    templates <- Heist.loadTemplates template_dir
    hs <- Heist.initHeist (Heist.HeistConfig [] [] [] [] templates)
    return hs
Run Code Online (Sandbox Code Playgroud)

这与我以前加载模板的方式(仍然使用该loadTemplates函数)没有太大的不同,但它是设置我不习惯的Heist状态的另一种方式.

但是,现在没有apply任何标签有任何影响.我的"包含"模板永远不会加载,在生成的HTML中我看到这个:

<apply template='header'></apply>
Run Code Online (Sandbox Code Playgroud)

haskell heist

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