vimscript中でコマンドを実行
vimscriptの中で:vsplit variable
のようなことをやりたい。
if cond execute "vsplit " . variable endif
で良い。
if cond vsplit variable endif
だとvariable
は文字列として認識される。
jekyllのliquid templateで配列を扱う
GitHub Pagesは内部でjekyllを利用しmarkdownからhtmlファイルを生成している。 jekyllではrubyのliquid templateが利用できる。 liquid templateで配列を扱う方法がやや特殊なので、めも。
配列の代入
空の配列の代入は以下のように行う。
{% assign array1 = "" | split: "|" %}
array1 = []
のように配列を直接代入する方法は今のところないらしい。
よって、空の文字列をsplit
filterで分割し長さ0の配列を作っている。
"|"
の部分はなんでも良い。
配列への挿入
{% assign array1 = "" | split: "|" %} {% assign array1 = array1 | push: "Hoge" %}
文字列でなくobject(例えばpage)もPushできる。
同様にpop
も使える。
データの篩い分け
空の配列が作れたら、各pageの情報を用いてpageの分類ができる。 各pageのYAML front matterが以下のようになっているとする。
--- title: title1 categories: [hoge] ---
categoriesにhoge
を含むpageのみを抽出したい場合は、次のようにする。
<!-- 空の配列を作成 --> {% assign hoge_pages = "" | split: "|" %} <!-- categoriesにhogeを含むものを抽出 --> {% for site_page in site.pages %} {% if site_page.categories contains "hoge" %} {% assign hoge_pages = hoge_pages | push: site_page %} {% endif %} {% endfor %} {% for hoge_page in hoge_pages %} <!-- 各hoge_pageに何かをする。 --> {% endfor %}
reveal.jsで画像の中央揃えとサイズ変更をする
htmlで書くしかない。 外部markdownファイルを使っている場合も、htmlに直接書いている場合も以下のように書けば良い。
<div style="text-align:center;"> <img src="path/to/img.png" style="width:40%;"/> </div>
- 外側の
sytle="text-align:center;"
が中央揃えの設定である。- 右揃えにしたければ
right
にすれば良い
- 右揃えにしたければ
img
タグに画像ファイルへのpathとサイズをwidth:40%
として書いている
Github Pagesでbuild failureがでる
12/8にGithub Pagesのupdateがあり、今までと仕様がいくつか変わっている。
Publishing with GitHub Pages, now as easy as 1, 2, 3
大きな変更点は、repositoryのmarkdown fileが全てbuildの対象になったという点。
今までは、ヘッダーに---
を記載したMdファイルだけがbuildの対象だったが、デフォルトで全てのmarkdownファイルがBuildの対象となったため、jekyllでbuildが通らないmdファイルなどをおいておくとエラーで落ちる。
今まで公開してなかったファイルを非公開にするには、_config.yml
ファイルをrepositoryのトップにおき、以下を記載する。
exclude: [directory, file]
directory
はbuildに含めないディレクトリfile
はbuildに含めないファイル- 複数指定可
hubでpull-request: Unprocessable Entity (HTTP 422) Invalid value for "head"とでる
ReferenceにあるようにError Messageが適切でない場合があるので、下記の方法で必ずしも解決するかは不明。
github上にbranchがないのにpull-requestを作っているのが問題
--push
で、今いるbranchをpushしてpull requestを作ってくれる。
hub pull-request --push
Reference
boost::numeric::ublas::matrixのiterator
boostのublas::matrixにはbegin1とbegin2のiteratorがある。 どういうものか記載がなかったのでメモ。
答えは、行列の1行目と1列目のitetator
namespace ublas = boost::numeric::ublas; ublas::matrix<double> m(3, 3); m(0, 0) = 0.0; m(0, 1) = 1.0; m(0, 2) = 2.0; m(1, 0) = 3.0; m(1, 1) = 4.0; m(1, 2) = 5.0; m(2, 0) = 6.0; m(2, 1) = 7.0; m(2, 2) = 8.0; for (auto e = m.begin1(); e != m.end1(); ++e) { std::cout << *e << std::endl; } //0 //3 //6 for (auto e = m.begin2(); e != m.end2(); ++e) { std::cout << *e << std::endl; } //0 //1 //2 for (auto e = m.rbegin1(); e != m.rend1(); ++e) { std::cout << *e << std::endl; } //6 //3 //0 for (auto e = m.rbegin2(); e != m.rend2(); ++e) { std::cout << *e << std::endl; } //2 //1 //0
boostでdemangleする
boost/core
にはいくつかのutility系の機能がある。
boost/core/demangle.hpp
はdemangleを提供する。
使い方
#include <boost/core/demangle.hpp> #include <typeinfo> #include <iostream> template<class T> struct X { }; int main() { char const * name = typeid( X<int> ).name(); std::cout << name << std::endl; // 出力は処理系による std::cout << boost::core::demangle( name ) << std::endl; //出力はX<int> }