我一直在使用Data.Binary将数据序列化为文件.在我的应用程序中,我逐步向这些文件添加项目.两个最流行的序列化包,二进制和谷物,两个序列化列表作为计数后跟列表项.因此,我无法附加到我的序列化文件.我目前读取整个文件,反序列化列表,附加到列表,重新序列化列表,并将其写回文件.但是,我的数据集越来越大,我开始耗尽内存.我可以绕过拆箱我的数据结构以获得一些空间,但这种方法不能扩展.
一种解决方案是使文件格式下降和更改以更改初始计数,然后只需附加我的元素.但这并不令人满意,更不用说由于打破抽象而对文件格式的未来变化敏感.Iteratees/Enumerators在这里成为一个有吸引力的选择.我找了一个库,将它们与二进制序列化相结合,但没有找到任何东西.有谁知道这是否已经完成?如果没有,那么这个库是否有用?或者我错过了什么?
随着Ruby的ActiveRecord的或续集,你可以逐步建立SQL查询,添加where或join或order条款,这取决于在运行时条件的查询.
这是一个简单的例子,取自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后端动态组合查询.
我正在使用垂直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) 我想了解简单的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) 我正在尝试合并,我有冲突,一个文件大量分歧.eclipse git merge工具非常适合小的更改,但我的一个文件很大,并且有数百个明确标记的冲突部分.我不能为我的生活找到一个简单的方法来使用我们的"我们的"策略只使用我的版本并放弃远程版本进行合并.
在Linux或Mac上,我很容易从命令行执行此操作,但我在公司的Windows计算机上并且没有命令行git.我甚至尝试了从包资源管理器中的文件的上下文菜单中执行"替换为" - >"头部修订"的解决方法,但由于存储库处于合并冲突模式,因此该操作被禁用.这将是一个很好的解决方案,但是仍然可以更好地将"我们的"或"他们的"策略应用于合并工具中的整个文件.
我不得不求助于硬复位,复制我的文件,进行合并,然后用我的干净副本替换合并版本.我错过了一个更简单的方法吗?
我想为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)
你的代码为此目的是什么?
我正在为在线调查写一个网站.我有一个问题列表,所有问题都在一个html页面上进行,列表的长度未知.每个问题都有表格存储在模板中qu1.tpl,页面是qu.tpl.现在我想:
qu1.tpl为每个问题替换一些名称
qu.tpl一次性更换一些东西
并坚持的所有实例qu1.tpl进qu.tpl
用我在教程中了解到,我试图递归更换标签<qulist/>与<apply template="qu1.tpl"><qulist/>在qu.tpl使用localHeist和bindString但这不能工作,因为qu.tpl这样的新插入的应用标签不能解决已经呈现.
我该怎么做呢?
(我想这是一个更普遍的问题.如果您能想到答案适用的其他应用程序,请为搜索引擎添加文本和标签.)
以下手风琴代码对我不起作用.
<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中查看.
我最近升级了我正在使用的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)