Rokiのチラ裏

学生による学習のログ

2017-01-01から1年間の記事一覧

Template non-type arguments (Variadic templates) によるコンパイル時乱数生成

C++

Variadic templates でコンパイル時に乱数を生成してみた。現段階ではエンジンとして linear congruential, Xorshift, mersenne twister を、Discrete Uniform Distribution として uniform_int_distribution を実装してみた。ただし Template non-type argu…

P0707R1 Metaclasses の Design principles

P0707R1 は メタクラスという新しい概念、言語機能についての提案論文である。論文の中身そのものとは少し離れるのだが、1.1 の Design principles が中々良いデザイン原則で他のものにも流用できるな〜と感じたので引用してメモ。 The primary design goal …

Unity 導入から簡単なスターファイターを作るまでのチュートリアル

学校やその周辺で、Unity が〜…とよく聞くのだが、なんだかんだ触った事がなかったので、先日初めて Unity を触ってみた。そこそこお遊びとしても楽しめたので、わざわざまとめておく事もないかなと思っていたのだが、まあ無駄な事はないだろうと思ったので…

モナドの概念をC++に導入して冗長なエラーハンドリングを回避する

C++

モナドの概念をC++に導入する事についての Jonathan Boccara 氏による投稿のシリーズを見て、興味深く感じたので、個人的なメモ。尚ソースからは若干コードなどが改変されているところがある。 さて、この具体的な方法は、新たに関数を作成する場合と、既存…

C++20 進捗

C++

先日、ISO C++委員会は、カナダのトロントで次の国際標準であるC++20の作業を開始し、技術仕様の開発が続かれた。C++ 20ドラフトには、以下の機能が追加された。 Concepts Explicit generic lambdas _VA_OPT_ Default bit-field initializers Fixed const-…

最近 srook/cxx17/mpl/any_pack に加えた機能

C++

テンプレートパラメータにautoを使える喜びを噛み締めて遊ぶ - Rokiのチラ裏 にて取り上げてから、いくつかの機能を追加したのでその紹介をしてみる。 cos table [追記: any_pack によるコンパイル時コサインテーブルの構築。これは、srook/cxx17/mpl/any_pa…

stack overflow からの小ネタメモ #2

C++

前回。 stackoverflow.com 質問者は、void_t detection idiom によるSFINAEを試行している。void_t には、確かにテンプレート型に依存するパラメータが渡されているが、C++14 N3936 [temp.alias] を参照すると、テンプレートパラメータのエイリアステンプレ…

JPEG エンコーダ書いた

以前、JPEGに関する画像圧縮技術やデータ構造などついて学んだので、折角だし自分で作ってみようと思い、フルスクラッチで書いて見た。といっても、性能自体はそんなに良いものではないと思うし、簡単のために色々と制限を設けているので実用的ではないと思…

量子力学と量子コンピューターについての学習メモ #3

前回の続き。 データベース検索 データベースの例として電話帳を取り上げる。電話帳は、名前の五十音順に番号が付けられている。これは昇順ソートされたリストであると解釈できるので、バイナリーサーチの手法によって比較的高速かつ簡単にアクセスできる。…

stack overflow からの小ネタメモ

C++

stack overflow で得たちょっとした小ネタをメモがてら羅列してみる。 stackoverflow.com 質問は、ざっくり書くと、ラムダを関数ポインタに変換する明示的な記述なしでそのような事ができる方法はあるか?であるが、これに対して operator+ を適用すると、変…

量子力学と量子コンピューターについての学習メモ #2

前回の続き。 ドイチュ-ジョサのブラックボックス ジョサのアルゴリズムとは、ブラックボックスが蓄えているビット列が均一か等分かどちらなのかを判定するアルゴリズムである。よって、このアルゴリズムが有効であるのは、ブラックボックスが蓄えているビッ…

量子力学と量子コンピューターについての学習メモ #1

量子力学、量子コンピュータについての個人的な学習メモ。学習を促すものでも入門記事でもなくあくまで個人的な学習過程でのメモである事に注意。 量子コンピュータ―超並列計算のからくり (ブルーバックス)作者: 竹内繁樹出版社/メーカー: 講談社発売日: 200…

scala 始めました

scala警察が怖いという話題で少し盛り上がっていたので、始めてみた。sbtとscalaはbrewから導入した。sbt consoleを使ってbuild.sbtの内容を読み込み、チマチマplay groundを遊ぶ。build.sbtにはscalaのバージョンと、-deprecation,-feature,-unchecked,-Xli…

k-meansクラスタリングで遊ぶ

k-meansがディスられていたので、取り敢えずどんなもんかと実装した。 exp: #include<srook/k_means/k_means.hpp> int main() { srook::k_mns::k_means km("data",3); // km.set_initial_point(Point{2.0,90.0},Point{5.0,50.0}); // initial centerの独自設定も勿論可能 km.clustering(</srook/k_means/k_means.hpp>…

Default constructor improperly invoked in C++1z mode in GCC 7.1.0

C++

※5/16追記 私の推測では、C++14とC++17間で、[expr.type.conv]の文面に差異がある*1という事実の基の意見でしたが、[expr.type.conv]に該当しない場合でも発生する事を確認したため、議論がややこしくならないよう、内容を全て取り下げ、タイトルを変更しま…

テンプレートパラメータにautoを使える喜びを噛み締めて遊ぶ

C++

次期C++標準C++17では、テンプレートパラメータにautoキーワードを用いる事ができる。この機能により、型に縛られる事なく定数、リテラルをコンパイル時に扱う事ができるので、Variadic templatesで遊ぶのが好きな人からすると中々良い機能なのではないだろ…

TMP によるコンパイル時ハフマンエンコーダー(Compile time huffman encoder)

何となく書いて見た。テンプレートメタプログラミングによって、コンパイル時にハフマンツリーを構築し各記号を符号化して生成する。 以下のサンプルコードで標準出力以外は全てコンパイル時に行われる。 exp: #include<srook/mpl/cxx17/huffman_coding/huffman_encode.hpp> #include<iostream> #include<boost/type_index.hpp> template<class T> inline v</class></boost/type_index.hpp></iostream></srook/mpl/cxx17/huffman_coding/huffman_encode.hpp>…

数式をRecursive Descent Parsing

数式(四則演算記号 +, -, *, /、括弧、数値のみから成る式)の解析が知人間で少し話題になってたので自分もrustで書いてみる。数式をBNFで表現してからコードに落とし込んだ結果、以下のようになった。面倒なので、unwrap_orをチェックしていない。 fn num(ex…

カラー画像の原理からJPEGの圧縮原理までの学習メモ

なんとなくJPEGにおける基本的な概念の理解を固めようと思ったので、その学習メモ。尚、具体的な計算式の意味や証明には取組んでいない。 用語と定義 成分の集合を画素という。画素の集合がデジタル画像となる。 デジタル画像は小さな点の集合から成っている…

Effective tuple algorithm

C++

下書きに眠っていたので投稿。タプル生成に関するアレコレを書いた。主に個人的にBoost.fusionで納得のいかないものを実装。 分割 たまにやりたい時がある。一々記述するよりは書いてしまった方が良いだろう。 exp: #include<tuple> #include<srook/tuple/algorithm/split.hpp> #include<srook/algorithm/for_each.hpp> #include<iostream> int</iostream></srook/algorithm/for_each.hpp></srook/tuple/algorithm/split.hpp></tuple>…

ランダムアクセス可能な全ての範囲を無駄なくベクトル演算する

C++

※ 2018/3/11 ライブラリ整理より当機能は削除した。 一々コンテナ毎にExpression templateを記述するのはバカバカしいので、書いてしまった。 ご覧の通り、Expression templateによって式構造を保存して遅延実行を行うため、範囲の無駄な一時オブジェクトは…

python de 同一メゾッド名の型チェック付き呼び分け

バイト中、以下のようなコードを見つけた。 def something1(x,y): print 'something1' def something2(x,y): print 'something2' def something3(x,y,z): print 'something3' def invoke(*args): argc=len(args) exp_message='not match function' if argc==…

index_sequence algorithm

C++

variadic templateへの操作は以前書いたが、index_sequenceも同じように扱えるので書いた。現段階では以下に記載されているアルゴリズムらが実装済みである。 以下のようにテストしてある。

コンパイル時のシーケンス生成は時が経って簡単になった

C++

偶然見つけた以下のエントリ。 cpplover.blogspot.jp saito.hatenablog.jp 2010年...あれから時は経ち、いとも簡単にコンパイル時のシーケンス生成は簡単になった。 #include<srook/mpl/constant_sequence/equ_sequence.hpp> #include<srook/mpl/constant_sequence/algorithm/transfer_array.hpp> #include<iostream> for(auto&& value:srook::constant_sequence::transfer_array…</iostream></srook/mpl/constant_sequence/algorithm/transfer_array.hpp></srook/mpl/constant_sequence/equ_sequence.hpp>

Siriから自宅サーバー監視カメラ(motion)をオンオフするまで

今回もお家ハックネタ。ラズパイとかでも同じ事ができると思う。 motionについては過去のエントリを参照してほしい。 さて、取り敢えずまずはphpからmotionを起動したり殺したりしなければならない。そのためにはroot権限が必要になる。これには、apacheから…

Line Notify APIで遊ぶ

仕事関連の作業や自作ライブラリ開発等の合間に、息抜きとして何かお家ハック的な別の事で遊びたかったのだが、少し良い遊び道具が見つかったので一つ。 Line NotifyというLine社提供のapiがある。これが何なのかについては、公式ページに詳しくあるので参照…

Tuple-based for loops

C++

あまり体調が良くないのだが、適度に頭を使わなくても書けるネタを見つけたのでアップロード。P0589R0にインスパイアされて、そういえば書いておくと楽だろうなと今頃思ったので自分でも書いた。tupleの展開には、いつも再起したりindex_sequence使ったりapp…

Srook range adaptor and Srook range pipe algorithm

C++

※ 2018/3/11 ライブラリ整理より当エントリ内で紹介されている一部機能は削除した。 Srook Range AdaptorとSrook Range Pipe AlgorithmはSTLアルゴリズムとその他諸々の機能をイテレータアダプタによる効率的なアクセスと、パイプライン記法をサポートさせた…

Samba + DAAPとnetdataの導入

何度かサーバーを弄っているエントリーをアップロードしてきたが、自宅には外付けの3TBHDDに動画や音楽などのメディアファイルを全て詰め込んでおり、それを今まではメイン機のデスクトップに接続して使ってきた。しかし、どうせならサーバーに接続してそこ…

パイプラインset_segregate

C++

※ 2018/3/11 ライブラリ整理より当機能は削除した。 set_segregateをパイプライン記法で。まあラップしただけ。 以下のように使う。 std::vector<int> left = boost::irange(0,9) | srook::adaptors::copied, right = boost::irange(7,19) | srook::adaptors::cop</int>…