グレインの備忘録

プログラミング関係とかをつらつらと。

構造体のDictionaryでは直接値を変更できない

C#

コンテナの返値が値型か参照型かに気をつけましょうねという話。 シチュエーション 例えば、以下のようなコードを書いてみたとする。 public class Program { struct MyStruct { public int val1; public int val2; } public static void Main() { var dic =…

コンテナのイテレータを保持するのは避けよう

STLとかのコンテナが吐き出すイテレータをポインタ代わりに持っとくのはやめましょうねというお話。 コンテナへの非const操作はイテレータを破壊する(可能性がある) 「可能性がある」だから余計厄介だったりする。 テストケースではうまく動いても実環境では…

スクメロが起動しなくなった話

スクールガールストライカーズ・トゥインクルメロディーズ、通称「スクメロ」と呼ばれるゲームがある。 9月頭のメンテ直後に、全く起動することができなくなってしまった。 具体的には、タイトル画面でスタートするとデータダウンロードが入り、直後に落ちて…

neosnippetに自分のスニペットを追加する

Vim

前回の記事ではneosnippetを導入したが、自作のスニペットを使いたくなったので方法をメモ。 neosnippetの設定 まずは、スニペットファイルの保存先を指定する。 プラグイン起動時の設定に一行追加する。 let g:neosnippet#snippets_directory = ~/.vim/dein…

OOP初心者がブロック崩しを作ってみる その2

※この記事は「OOP初心者がブロック崩しを作ってみる その1」の続きです 衝突判定を考える さて、衝突判定のやり方を考えよう。 衝突はボールとReflectorの間で起こる。とりあえず以下のようにクラス分けしてみる。 ReflectorCollectionにReflectorを全て格納…

バッファの内容を変数に読み込む方法

Vim

日本語で調べても一切情報が出てこなかったので焦った。 方法 :%y [レジスタ名] :let content = @[レジスタ名] 一旦レジスタにヤンクしてから、その内容を変数に入れる。 @[レジスタ名]でレジスタの内容を参照できるようだ。

UMLをテキストで書ける「PlantUML」を試す

UML図を書くフリーのツールにはいろいろあるが、テキストコマンドで書けるものの一つに「PlantUML」がある。 テキストベースで書けると何がいいかというと、 保存・編集・移動・再利用が容易である Gitなどのバージョン管理システムとの親和性 などの点が挙…

OOP初心者がブロック崩しを作ってみる その1

オブジェクト指向の設計やコーディングについて自分なりに情報を集め始めてからかなり経って、自分なりに手法というものがある程度見えてきた。 ということで、それの実践としてひとつ簡単なゲームを制作してみたいと思う。 概要 今回作るのはよくある美少女…

括弧の自動補完にlexima.vimを使う

Vim

以前の設定ではキーマップを駆使した汚い括弧補完を使っていた。 探してみると、もっと良さげなプラグインがあったのでそれに置き換えてみる。 導入 dein_lazy.tomlに追加。 [[plugins]] # lexima repo = 'cohama/lexima.vim' on_i = 1 後はインストールすれ…

deoplete環境でneosnippetを使えるようにする

neosnippetはスニペットを挿入できるプラグインだが、機能的にdeopleteと干渉する部分があるので少し工夫をする必要がある。 メモ程度に設定方法を残しておく。 参考:neovim で deoplete + neosnippet の連携をする 導入 dein.tomlとdein_lazy.tomlに以下の…

deinを真面目に設定してみる(TOML)

Vim

deinはvimrcに設定を書くだけでも使える。 しかし、一般的にはTOMLと呼ばれる外部ファイルに書くらしい。 TOMLファイルを利用する とりあえずTOMLを使う準備をしよう。 init.vimに以下の記述を追加する。 set runtimepath+=~/.vim/dein/repos/github.com/Sho…

Doxygenを導入してみる

Doxygenはソースに埋め込んだコメントを元にドキュメントを作成するツール。 メモ程度に導入方法をまとめておく。 導入 sudo apt -y install doxygen doxygen-gui graphviz あとは、 doxywizard を実行すればGUIが出てくるので、ウィザード通りにすすめる。 …

補助ライブラリでサクッとOpenGL(GLFW,GLEW)

OpenGLはプラットフォーム独立のライブラリだが、ウィンドウ管理などの面倒は見てくれない。 また、シェーダーを使うのには拡張機能を有効化する必要がある。 ウィンドウ管理や拡張機能の取得はプラットフォームごとに違うので、生のGLを扱うとそれなりに労…

タブ独立のファイルツリーで快適コーディング

Vim

やはり、ファイルツリーをVim内で開いておけると何かと便利だ。 ファイルツリーといえばNERDTreeが有名だが、それのタブ独立版があるそうなので試してみた。 vim-nerdtree-tabsのインストール まずはプラグイン導入から。 vimrcに追加 call dein#add('scrool…

C++補完用にdeoplete-clangを導入する

コードを書くにはやっぱり補完がないと辛い。 C++をNeoVimで書くならdeoplete-clangがベストチョイスのようだ。 導入 deopleteはNeoVimのRemotePlugin機能を使うのでpython-clientを入れておく必要がある。 以下のコマンドでインストールできる。 sudo apt -…

基本的なGitコマンドチートシート

初期設定など ユーザー設定(氏名とメアド) git config --global user.name "Grain" git config --global user.email grain@exout.net –globalによって設定が永続化する。 リポジトリ作成 対象フォルダにて git init コミット関連 ファイルのステージ git add <file></file>…

C++用のMakefileを半自動で書く

Makefileはうまく書けばコンパイルが自動化できて楽だが、ソースの登録が面倒くさい。 そこで、シェルスクリプトなどを活用して自動でMakefileを書いてみる。 (autoconfとかを使ってもいいのだけど、小規模なプログラムでいちいちconfigureするのも面倒だし…

lightline対応のカラースキーム "tender" を試す

Vim

以前lightlineを使ってステータスラインを格好良くしたが、このlightlineに対応した良さげなカラースキームがあったので試してみた。 tenderの導入 いつもどおりサクッと。 call dein#add('jacoborus/tender.vim') をvimrcに追加して :call dein#install() …

lightlineを使ってステータスバーを格好良くする

Vim

lightlineとは lightlineはVim用プラグインで、ステータスバーを格好良くできる。 変更前 変更後 また、この手のプラグインの中では取り回しのしやすい方らしい。lightline.vim作りました - プラグインの直交性について 導入 とりあえずpluginを入れる。 vim…

Ubuntu 16.04のapt updateでappstreamcliがクラッシュする

Ubuntu 16.04をインストールした直後に sudo apt -y update とするとなぜかAbortする。 どうやらappstreamcliがクラッシュしているらしい。 一旦appstreamcliを無効にする 調べたらドンピシャの記事があった。 ubuntu-16-04のapt-updateでappstreamcliが固ま…

VMWareでの激重を解消

Windows上でLinuxを使うならやはり仮想化が一番。 しかし、VMWare上でUbuntuを走らせるとどうにも動作がもっさりしている。 いったい何が原因なのか。 vmemへの書き込みをやめさせる 色々調べてみると、vmemにスワップとしてデータを書き込んでいるのが悪い…

Vim(NeoVim)でクリップボードを使う

Vim

vimはデフォルトでクリップボードとデータをやり取りできない。 xclipを導入することで使えるようになる。 sudo apt -y install xclip これで使えるようになった。

Vim(NeoVim)を導入したらとりあえずしとく設定

Vim

インデント関連 set autoindent "自動インデント set tabstop=4 "タブ幅 set shiftwidth=4 "自動インデント幅 set noexpandtab "タブをスペースに展開しない set softtabstop=0 "タブ幅(入力時) その他表示関連 set number "行番号表示 syntax on "シンタッ…

Visual StudioのNDK開発でデバッグ時に「ステップできません。このメッセージは間違っているか、転送中に壊れました。」と出る

AndroidNDKのデバッグでステップできない VisualStudioのNDK開発でデバッグ時にステップ実行をしていると 「ステップできません。このメッセージは間違っているか、転送中に壊れました。」 と出ることがある。一旦こうなると困ったもので、ステップもできな…

Android NDKでboost::filesystemが使えない

前回(Android NDK r11cでboost 1.61.0をビルド - グレインの備忘録)の続き。 リンクエラーになる boost::filesystemを使ったアプリをコンパイルするとリンカエラーが出てしまう。 libs/filesystem/src/path.cpp:function (anonymous namespace)::path_locale…

Android NDK r11cでboost 1.61.0をビルド

NDKでboost使おうと思ったら結構大変だったのでメモ。 まずビルドのやり方を調べてみて、良さげだったのがこのページ。 c++ - How to compile Boost 1.61 for Android NDK 11 - Stack Overflow ここの2番目のポストのやり方でほぼ完全にうまくいった。 一応…

バイナリモードのfseekとfwriteの挙動

バイナリファイルで一旦fwriteした後に前方へfseekして、もう一回fwriteすると上書きされるのか挿入されるのかたまに忘れるのでメモっとく。 結論から言うとfseekしてからfwriteすると元のデータは上書きされる。(まあ当たり前か) 例えば、新規ファイルにつ…