サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大谷翔平
in-neuro.hatenablog.com
これは qiita.com の12/16の記事です。やばいもう16日が終わってしまう! はじめに 太古の昔、あるC++プログラマ*1がtemplateの再帰と特殊化を使ってコンパイル時に計算ができることを「発見」*2*3したその日から、C++とコンパイル時計算は分かちがたく結びついています。 言語機能を本来意図されていなかった方法で活用する曲芸的な技巧だったコンパイル時計算は、その強力さを買われコミュニティを席巻し、C++11での constexpr の導入によりある意味で公式に認められたものとなりました。 導入当初は return 文一つだけしか持てなかった constexpr 関数は、それでも三項演算子による条件分岐や再帰によってコンパイル時計算を大いに盛り上げました。 そしてC++14で条件分岐、ループ、変数の書き換えが、C++17ではラムダが、C++20では仮想関数と動的メモリ確保
コーディングスタイルのことを考えるよりコードを書いたほうがいいということはわかっているのだが、コーディングスタイルのことは結構考えてしまう。恋か? 私は割とコーディングスタイルの好みが激しいのだが、自分がなぜそのやり方を好んでいるか、あるいはあまり共感できない意見になぜ共感できないのか、ということを考えるうちに、自分がどういうふうにコードを読んでいるかということが少しずつわかってきた。 スタイルにも賛否両論が激しいものがある。例えば、カラムを縦に揃えるスタイルなんかはかなり意見が割れている。私は縦に揃えるスタイルを好んでいる。 反対派の意見としては、「diffにノイズが混ざる」「使っている言語のフォーマッタが対応していない(のでダルい)」「使っている言語自体が推奨していない(PEP8など)」あたりだろうか。最初の意見はツールの問題だ。diffには--ignore-space-changes
ここ1, 2週間費やしていた作業が完了し、めでたくtoml11のバージョン2.0.0をリリースした。 github.com このバージョンアップで、 コードが凄まじく美しくなり、 エラーメッセージが最強になり、 TOML v0.5.0 (最新) に対応した。 せっかくなのでこの記事で何をしたのか書いていこうと思う。宣伝ついでに、自分でパーサを書く人(最近はフルスクラッチ自作コンパイラが流行っているので)の一助になれば良いのだが。 TOML 0.5.0への対応 TOML v0.5.0では、それなりの数のアップデートが入った。toml11 v2.0.0ではその全てに対応している。順を追って説明していこう。 dotted keys まず、以前からネストされたテーブルの名前は.で繋げていた。 [a] n = 10 [a.b] # <- これ m = 20 # {"a" : {"n":10, "b"
slurmはオープンソースのジョブスケジューラーだ。 これは何かというと、例えば、俺は今から1000種類の条件でシミュレーションを投げるぞ! ウオオ という時に、サーバーにログインして、シェルのfor文で1000個のバッチスクリプトを登録し、そのままログアウトして家で寝ていると勝手に順次実行されていくという便利ソフトウェアだ。 普通こういうのはサーバーラックに挿す系の大型クラスターとか、複数台のデスクトップマシンをネットワークで繋いだものとかで色々大変な設定をして使うものだが、今回は全てが面倒に感じたので(あと手元にコントロールノードに使えそうないい感じのマシンがなかったので)、1台をコントロールノードかつ計算ノードとして完結させることにした。共有ストレージとか必要なくなる(自明に共有されている)ので多分色々楽。 それくらいの気持ちなので割と適当にやっていきます。OSはUbuntu 18.
今までドキュメントは適当なMarkdownで書いてそれを適当にGitBookでウェブサイトに変換していた。だがGitBookはコマンドラインツールの開発をやめてしまっている。なのでGitBook公式のホスティングサービスに移行するか、何か代替品を探さなければならない。というわけで探しているのだが……。 既存のGitBook用ファイルを使いまわしたい 何に移行するにしても少しの手直しは必要になるのである程度は我慢。 このためにAsciiDocとかLaTeXはとりあえず除外 数式が書ける これは(mathjax/katexの違いはあれど)大抵のものがクリアしている HTMLが出力できる 基本的に全てが対応している。 PDFも出力できる 全然誰も興味がないらしい……誰も対応していない……。 ヒントボックスとかが欲しい テンプレート機能があればなんとかなるが、あったほうが圧倒的に楽。 多言語対応(
実は、std::vectorはC++17から不完全型をサポートしたので、std::variantと組み合わせると以下のようなコードが書ける。 struct config_t { std::variant<bool, int, double, std::string, std::vector<config_t>> data; }; これを上手く使えばJSONなどの木構造をかなり簡単に(ポインタを陽に触らずに)扱える。std::mapが不完全型をサポートしてくれていないのがつらいが、std::vector<std::pair<std::string, config_t>>とすることで強引に回避できる。 これをしたかったらしき人の質問を見つけた。 stackoverflow.com これが通らないとのことだ。 class ScriptParameter; using ScriptParamete
飲み会の席で隣に座っていた人が、聞いてみるとゲームのデバッガーをやっているらしい。でも開発プロジェクトの一員という訳ではなくて、コードそのものは見られない立場にいるらしい。なんだそりゃ、と思ったが、そういえばテストプレイヤーの募集を見たことがある。そういうものなのかもしれない、と思ってそのまま話を続けることにした。 ところが彼はただのテストプレイヤーではなかった。彼はバイナリハッカーだったのである。というのも、彼はデバッグするに当たって、愚直に色々な状況を作って試すのではなく、自分でバイナリを解析するようになったらしいのだ。チートをするプレイヤーが出ないように、チートが可能になりそうな箇所を先んじて見つけることもあるという。 彼には酒とその場の勢いで色々なハックを教えてもらった。彼はプレイの最中にそのプロセスが使っているメモリの内容をダンプしたものと、逆アセンブラを主に使っているらしい。
このページを最初にブックマークしてみませんか?
『in-neuro.hatenablog.com』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く