より良いエンジニアを目指して

1日1つ。良くなる!上手くなる!

Visual Studio 2019 + Windows + OpenGL

以前にMac + CLion + OpenGLは試しましたが、Windows側、つまりVisual Studio 2019 + Windows + OpenGLも試すことにしました。

以下記事を参考にしました。

qiita.com

以下のコードを試す。

programmer.help

#include <gl/glew.h>
#include <glut.h>
#include <GLFW/glfw3.h>
#include <glm/glm.hpp>

ヘッダーに上記のように追加指定が必要ですが、これでも同じようにできました。

f:id:rimever:20210211080952p:plain

この記事も参考になりました。

  1. C++ コンソールアプリを作成
  2. NuGetでnupengl.coreとglmをインストール
  3. プロジェクト-プロパティ-リンカーより、opengl32.libを追加
  4. x86のまま起動

codelabo.com

しかし、NuGetでOpenGLのライブラリがダウンロードできるんだ、便利だなーと思っていたのですが、nupengl.coreは非推奨ライブラリになっており、リポジトリアーカイブとなっています。

github.com

ヘッダーの指定を少し変える必要があります。

#include <gl/glew.h>
#include <GLFW/glfw3.h>

とはいえ、私は

毎回設定するのは面倒なので、私は、一度作ったプロジェクトの設定をコピペしてやってます。

f:id:rimever:20210214203255p:plain

GameProgrammingCpp/Chapter6.vcxproj at main · rimever/GameProgrammingCpp · GitHub

GameProgrammingCpp/packages.config at main · rimever/GameProgrammingCpp · GitHub

C#の大量のdllの差分をチェック

仕事で本番環境とソースの差分を調査したいということで作業をしていました。

一つのソリューションで全てのプロジェクトを管理しているわけでもないので、まず全てをビルドするバッチの作成に取り掛かりました。

循環参照も含まれるため、バッチを何周もしなければならないという。

差分を調査するdllをソースから生成したものの、dllの数はなんと400近く。

それでも

同僚A「それでも少ないほうだ」

同僚B「xxの商材は、1600」

というギョエーなことが

差分を調査する上で私が取った方法が

  1. WinMergeを使ってdllの差分があるもの以外は削除
  2. 差分があるものに対しては、それぞれのdllをdotPeekを使ってExport Assembly to Project
  3. Exportされて生成されたソースをWinMergeで比較

という方法。

他にも手段は検討してました。

  • JustAssembly -> フォルダごとアセンブリの差分を比較するツール。うってつけのツールでしたが、ソースの細かい違いがあると差分とみなされる。
  • dnSpy -> 一致するソースでもコメント部分や細かい部分で差分が多い。

dotPeekでデコンパイルした場合、ヘッダ部分に元dllのパスが埋め込まれる程度で、それ以外ではでコンパイル結果が一致しやすく、差分が少なくて調査しやすかったです。

Export Assembly to Projectはdll一つ一つに実行しないとなりませんし、ショートカットキーも使えません。なのでdllが300があったら300回同じ操作をしないとなりません。

f:id:rimever:20210210204818p:plain

それでも頑張れば午前中で作業は終わりました。

で、結果なのですが、差分を調査してくれと言われて覚悟はしていたものの、本番環境とdllの差分はありましたとさ、トホホ。

ソース管理は大事ですね。

Visual Studio 2019でコンパイルエラーではないのに赤い波線が表示される -> .suo削除で解決

Visual Studio 2019にしたら、コンパイルエラーでもないのに赤い波線が表示されませんか

職場の仲間に質問されたんですが、自分はそんなことはないですよーって答えてました。

しかし、別のソリューションを開いた時に同じ現象に遭遇しました。

どうやらこの手の現象はVisual Studio 2019に限った話ではなさそうですね。

.suoを削除したところ解決しました。

ある本で紹介してましたが、すおーの呪いってやつですかね。

職場の仲間は、プロジェクトの参照を削除して、追加し直したら解決したそうでした。

substでパス読み替え

仕事をしていて、Windowsにこんなコマンドあったんだというのがsubstです。

docs.microsoft.com

このコマンドはあるフォルダパスを別のドライブ扱いにすることができます。

subst T: C:\Tools

例えば、上記のようなコマンドを実行します

f:id:rimever:20210209213128p:plain
C:¥ToolsフォルダとT:ドライブが一緒!

職場のC#プロジェクトは、参照先をRドライブのdllとしています。

通りで、存在しないRドライブを参照しているわけだ、と。

前職ではQドライブはCDドライブのパスとするというローカルルールがありましたが、その手のローカルルールなのでしょう。

勝手に憶測すると、外注に依頼する際に、全てのソースコードを渡さずに済ませたいためなのでしょう。

  1. 必要なプロジェクトと、そのプロジェクトが参照しているdllを渡す
  2. 受け取った側は、そのdllをフォルダにまとめておき、substコマンドでRドライブ扱いにする

読書感想「宇宙兄弟とFFS理論が教えてくれる あなたの知らないあなたの強み」

宇宙兄弟とFFS理論が教えてくれる あなたの知らないあなたの強み【自己診断ID付き】

「凝縮性」「受容性」「弁別性」「拡散性」「保全性」5つの因子で自己診断するFFS理論で、宇宙兄弟のキャラクターで言うと、と言う本です。

この手の自己診断は9つの性格やストレングスファインダーも経験していて、それと比べると、本の内容が物足りない印象でした。

簡易診断したところ、拡散性と保全性が同じくらいでした。

肝心なのが、宇宙兄弟のキャラクターで言うとの部分。この診断のいいところは宇宙兄弟のキャラクターで喩えるとという親しみやすい点。

結果、紫三世という、子供の頃、ガチャポンやカードダスで微妙なキャラを引いたのと同じ気分になりました。

とはいえ、メインのムッタやヒビトとは違うだろというのはわかりきってました。

考えてみると、次に近いのはせりかさんだったので、まあいいでしょう。

「拡散性」と「保全性」が第一因子と第二因子であり、その数値が同数か拮抗している人は、「今はアクセルだ(もしくはブレーキだ)」というように、どちらかに決めるのがいいでしょう。

らしいです。

新年明けていつもと違う手で歯磨きを始めてみた

2021年が始まって、今までと違うことをやろうと思って、歯磨きを違う手で行うことにしました。

私は、本来左利きですが、矯正されているため、左利きなのはお箸ぐらいで、ボールを投げるのも鉛筆を持つのも右手です。

お箸は、矯正する前に持ってしまったから左手だと母親に教えられたのですが、他にも左手で持つのがありました。

それが歯磨きと髭剃りです。

調べてみると

右利きの人は左側を磨くよりも右側を磨くのが難しいと感じたことはありませんか?

左利きの人は逆に左側を磨くのが難しいと感じていると思います。

利き手側の歯が結構磨きにくいのです。

歯磨きの仕方の豆知識 歯科ブログ 東村山市の歯科・歯医者はかわせ歯科より

私の場合、左の奥歯が歯の構造上磨きづらいと歯医者に何度も指摘されているため、左利きで磨いていると良くないなあと。

いざやってみると、ほとんどは右でやっているのに、なかなか慣れないですね。

もう1ヶ月も右で歯磨きをやっているですが、慣れません。合わせて髭剃りも右でやってます。

右で磨いていると本当に右の奥歯が磨きづらい、手がつってしまいそうになります。

同じ人間が違う手でこうなると、同じ人間なんだから才能は同じのはずなので、慣れってのは、練習ってのは大事だなあと思いますね。

Mac + CLion + OpenGL

OpenGL自体はデフォルトでMacに入っていますので、OpenGL自体をインストールすることは不要ですが、他に設定が必要です。

基本的に以下の記事を参考にすればOKです。

OpenGL environment configuration under Mac CLion

つまづいたがcmakeのファイル以下はOpenGLTestというプロジェクト名の場合のCMakeLists.txtです。

cmake_minimum_required(VERSION 3.12)
project(OpenGLTest)

set(CMAKE_CXX_STANDARD 14)

# TODO:格納されているバージョンに合わせてパスを修正する
set(GLEW_H /usr/local/Cellar/glew/2.2.0_1/include/GL)
set(GLFW_H /usr/local/Cellar/glfw/3.3.2/include/GLFW)

set(GLAD_H /usr/local/include/glad)
set(KH_H /usr/local/include/KHR)
include_directories(${GLEW_H} ${GLFW_H} ${GLAD_H} ${KH_H})

# Add target link
# TODO:格納されているバージョンに合わせてパスを修正する
set(GLEW_LINK /usr/local/Cellar/glew/2.2.0_1/lib/libGLEW.2.2.dylib)
set(GLFW_LINK /usr/local/Cellar/glfw/3.3.2/lib/libglfw.3.3.dylib)
link_libraries(${OPENGL} ${GLEW_LINK} ${GLFW_LINK})

# Execute compile command
# This glad.c said in step 2 that it should be pulled into the project. Pay attention to the path
set(SOURCE_FILES "src/glad.c" "main.cpp")
add_executable(OpenGLTest ${SOURCE_FILES})

# mac, it's important to take this step
if (APPLE)
    target_link_libraries(OpenGLTest "-framework OpenGL")
    target_link_libraries(OpenGLTest "-framework GLUT")
endif()

考えてみれば当たり前ですが、glewとglfwをインストールしたバージョンに揃える必要があります。

ちなみに、GLFWは、OpenGLで使用するための軽量ユーティリティライブラリ。

GLEWはOpenGL拡張をロードしてくれるライブラリです。

f:id:rimever:20210208211533p:plain