ぷろみん

プログラミング的な内容を扱ってます

C++でvcpkg利用する時の土台を書いた

何度も書いているのでいい加減面倒になり作成しました。 次回からはここからクローンしてこようと思います。 GitHub - rurudo/vcpkg_boilerplate 後ついでに一緒に調べることの多いvimrcのクリップボード設定もメモ # %HOME%/_vsvimrc set clipboard=unnamed

最近OpenGLを触っていたので、オススメの勉強法

C++

検索 検索ワード + wikiで検索すると情報の精度が格段に上がる。 これはOpenGL規格を策定しているkhronosが運営しているwikiに素晴らしい情報が集約しているから。 https://www.khronos.org/opengl/wiki この機能は非推奨だよとか、この機能の代わりにこの機…

C++でslice windows

C++

Ranges library (C++20) - cppreference.com が楽しそうなので遊んでみます。 filter / mapに対応してくれるのはありがたいです。 range/v3がイテレータライブラリのようで slidingやzip等の欲しい機能はそろってそうに見えました。 しかし、記事内のpositio…

何かを深く学ぶには参考書やカンファレンスよりもブログの方が良い

私の友人がセキュリティスペシャリストに一発合格していたので、どうやって学習したか聞いてびっくりしたことがあった。 友人は「セキュリティに詳しい人のブログを頻繁に読んでいた」と答えたのだ。 参考書でも過去問でもなくブログが一番自身の助けになっ…

コードを綺麗に書くとはスコープを最小にすること

コードを綺麗に書こうという話は聞けどもそれが何を意味するのかは分からないものだ。 人によって言っていることが違ったりもする。 汚いコードの特徴はいくらでも挙げることができるが綺麗なコードの特徴は分かりにくい。 私はスコープ、生存期間を最小にす…

ソースコードのコメントよりも作業ログの方がコスパが良い

個人的にはソースコードのコメントに残すに堪えない情報こそが大事だったりすると思うので、ソースコードのコメントよりはissue等の別ドキュメントに作業ログを残すことが大事なように思われる。 例えばAしてもダメでBしても駄目だったからCしたらコード汚く…

シェーダ

developer.nvidia.com ここの最初に出てくる図がVetex ShaderとPixel Shader以外のShaderが必要になった理由が一目で分かって好き

rust-trace-event-profilerでtokio::runtime

最近のRustではThread制御までライブラリに任せられるようなので、その機能を使って前回作ったTrace Eventを作るやつで挙動を可視化してみました。 let mut rt = tokio::runtime::Builder::new() .core_threads(6) .threaded_scheduler() .build() .unwrap()…

Rustでプロファイリングの可視化

github.com Rustのプロファイラを書きました。 正直Rustの知識が浅いのでまともなプロファイラが書けるとは思っていないのでプロファイラ部分はおまけでTrace Event Formatへのシリアライズ定義が本体かなと思っています。 タイムスタンプにオフセットかけた…

VS2019のCMakeインストールパス

export PATH="$PATH:/c/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/bin"

喜びは映像にしないと半分も伝わらない

2015年のジャーナルですが面白かったので紹介します。 音声に含まれる感情の認識(pdf) 日常的な事柄を例に使っており非常に読みやすいので、直接読む方が良いかもしれません。 特に興味深かった箇所を引用します。 「悲 しみ」の よ うに 音声 だ け で あっ…

MSVCでも頑張ってC++20で導入されるspanを使う

C++

wandboxではspanを利用できるので動作確認だけならそちらが簡単です。 何故人はstringを使わないのか stringは内部バッファに文字列を蓄えるので例えば std::vector<std::string> Split(const std::string& text); みたいな関数があった時に入力のテキストと出力の分割文</std::string>…

Texture Atlasの生成

Texture Atlas 1回のレンダリングで利用できるテクスチャの枚数は限られているので、複数のテクスチャを1枚のテクスチャにまとめることは非常に重要です。 この色々なテクスチャをまとめたテクスチャをTexture Atlasと呼びます。 今回はこれの作り方をいくつ…

英語の専門用語

概要 いざ学問としての英語を勉強しようとしても、日本語だと受験勉強や資格、PV目当てのブログみたいなのばかり出てきて効率が悪いです。 そこで、学問としての英語で使われている専門用語が出発地点とならないかなと列挙してみました。 Mood 日本語では法…

文字がレンダリングされるまで

概要 utf8が普及した昨今でも文字のレンダリングは全然簡単になりません。 その理由を日本語のレンダリングを通して学びましょう。 今回は文字列自体の複雑さにはあまり触れません。 サロゲートペアとかで検索すれば良い解説記事を見つけることができるかと…

C++でgRPC for Windows

C++

必要な前提知識 gRPC Protoファイルとそのコンパイル ライブラリのビルド gRPCはビルドパスが複雑な上、公式のWindows対応が少し弱いため試すだけで一苦労になりがちです。 単にやってみたいだけなら安定して色々できるGoを使うことをお勧めします。Windows…

C++20時代のポリモーフィズム

概要 ポリモーフィズム良いですよね。 でも、継承嫌ですよね。 MixInみたいな綺麗な継承が使える場面も現実的なサービスを考えると難しい。 そこで簡単に追加、削除ができ可読性も悪くないstd::variantとconceptを使ったC++20時代のポリモーフィズムを紹介し…

vcpkgでinstallするとCould not locate a complete toolsetとか言われる。

概要 Warning: The following VS instances are excluded because the English language pack is unavailable. C:\Program Files (x86)\Microsoft Visual Studio\2017\Community Please install the English language pack. Could not locate a complete too…

C++17から導入される範囲 for ループの制限緩和で何が変わるか

C++

概要 C++17で範囲forループのbeginとendで違う型を指定できるようになりました。 範囲 for ループの制限緩和 - cpprefjp C++日本語リファレンス これによって何が変わるのでしょうか。 イテレータの思想の違い STLのイテレータはメモリはコンテナが持ってイ…

Visual Studio2017にVsVimをインストールすると上スクロールがバグる

概要 新しい環境にVisual Studio2017とVsVimをインストールすると上スクロールの際に期待しない動きをすることがある(2/3回) バグの再現させ方 文字の折り返しが起こっているスクロールできるファイルでGHと移動すると私の環境では画面一番上の行にカレント…

C++17からはwstring_convertが非推奨となるので環境毎のコードが推奨される

概要 推奨されるマルチバイト文字変換。 非推奨 C++17からスタンダードライブラリのものは非推奨になる cpprefjp.github.io Visual Studioで下記のようなコードをC++17を有効にした状態で書くと #include <codecvt> #include <locale> int main() { std::wstring_convert<std::codecvt_utf8<wchar_t>, wch</std::codecvt_utf8<wchar_t></locale></codecvt>…

C++の難しめな用語集

C++

概要 先日、言いたい用語がすぐに出てこなかったので備忘録を作った。私が学習するのが遅かったり難しかったものを集めた。 その特性から多くは語らないのでググって。 Return Value Optimization (RVO) Named Return Value Optimization(NRVO) データ指向設…

VisualStudio2017はC++17に対応しているがデフォルトでは無効になっている

C++17を有効にする プロジェクト > プロパティ > 構成プロパティ > C/C++ > 言語 > C++言語標準 から設定できます。 せっかくMSが標準まで追いついてくれたのに有効にしないともったいないです。 おまけ 上記を言いたかっただけなんですが、あまりに短かった…

Chromeとかで使われているグラフィクスライブラリSkiaのWindowsビルド

手順 git clone https://github.com/google/skia masterブランチだとWindowsに優しいものが入っていないのでtagを使います。 git checkout -b dev refs/tags/chrome/m39_2138 上記タグのコミットだとリポジトリルートにmake.batが存在するので、こちらをVisu…

std::vectorのようなコピーコストの高いクラスに参照を使ってはいけないシチュエーション

C++

概要 RVO(Return Value Optimization)の話です。特別に触れませんがNRVO(Named RVO)も最適化されるものとして話を進めています。 昔の効率の良いコード void Initialize(std::vector<int>& buffer) { // bufferに色々な計算結果を詰める buffer.emplace_back(5); </int>…

3Dプログラマのための数学

概要 画像付きで詳細に解説しようとしたらモチベーションが足らなかったので下書きをブログで。 Qiitaとかだと数学記号使えるので恰好良く書ける反面書くの面倒。 内積 3Dプログラミングで一番出てくるやつ。 何故大人気かというと三角関数の中で一番高速で…

C++コーディングガイドライン哲学1

C++

概要 https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md の「P: Philosophy」の感想や補足です。 アイディアを直接コードで表現する 例としてStrong typeやfor文の代わりにアルゴリズムを使うことを提案しています。 また、con…

好きなC++ランキング

C++

好きなだけで使えるとは言っていない所がポイントです。 コンパイラだけでなく、周辺環境も含めて考慮しているのでC++としています。 1位 wandbox + clang/gcc 個人的に新機能を試す時が一番幸福度が高いのでこの組み合わせが好きです。 環境構築が必要なし…

自分で作ったクラスをrange based forに対応させよう

C++

Range based forは素敵 for(auto value: vector){ } 良いですね、スマートです。 しかし、これstd::vector等のスタンダードライブラリに入っているクラスしか使えないと思ってはいないでしょうか? 私が体験した職場で自身のクラスをrange based forに対応さ…

綺麗にコードを書く技術

概要 難しい処理をこなす処理を簡単に描けるプログラマではそのコードは汚いものです。 思うに綺麗にコードを書くことは技術のレベルとは関係ないので執着されないのでしょう。 しかし、私は綺麗にコードを書くことは無駄には思えません。 技術が技術と呼ば…