Pebble Coding

ソフトウェアエンジニアによるIT技術、数学の備忘録

swift5.7(Xcode14)で気になる機能

SE-0345 if let shorthand for shadowing an existing optional variable swift-evolution/proposals/0345-if-let-shorthand.md at main · apple/swift-evolution · GitHub 同じ変数名でunwrapする際に簡略化して書けるようになりました。 これ助かる。 Xcod…

std::filesystemの便利さ

std::filesystem::pathは便利である。 文字コード変換機能が内蔵されており,macOS,windowsどちらも意図どおり動作する。 以下検証コードと実行結果である。 std::filesystem::path path1 = "あ"; const unsigned char* a = (const unsigned char*)path1.stri…

swift5.9(Xcode15)で気になる機能

Swift.org - Swift 5.9 Released SE-0366: consume operator to end the lifetime of a variable binding. C++の std::move と同じものが導入されました。 swift-evolution/proposals/0366-move-function.md at main · apple/swift-evolution · GitHub SE-03…

githubに登録した公開鍵がどれか確認する方法

githubに登録したSSHの公開鍵はアカウントの設定のところに情報がリストされますが、 作成時に使ったメールアドレスと SHA256:D60Uldj(以下略) 追加日時などしか表示されません。 一方自分が持つ公開鍵にはSHA256:のような情報はありません。 メールアドレス…

std::string_viewはstd::stringに比べてどのくらい速いのか

C++

std::string_viewは文字列の所有権を保持しません。 所有権を保持しない文字列であればcharポインタを使った方が効率はいいです。 std::string_viewには文字列比較機能などがありますが所有権を持たせたくなった時に、 std::stringに変更した時の修正量が少…

Xcode C++パフォーマンスチューニング

C++

Xcode - Instruments の TimeProfierでボトルネックとなる箇所を特定し改善する。 なるべくヒープアロケーションをしない。 なるべくデータのコピーをしない。 vDSP利用を検討する。 100以上の要素数でリニアサーチを使っている箇所があればバイナリサーチに…

vDSPのフーリエ変換がどのくらい速いのか検証してみた

#include <Accelerate/Accelerate.h> static void dft_manual() { const auto N = 64; const auto xr = std::make_unique<float[]>(N); const auto xi = std::make_unique<float[]>(N); const auto yr = std::make_unique<float[]>(N); const auto yi = std::make_unique<float[]>(N); auto x_re = xr.get(); auto x_im = x…</float[]></float[]></float[]></float[]></accelerate/accelerate.h>

vDSPの内積計算がどのくらい速いのか検証してみた

vDSPの内積計算がどのくらい速いのか検証してみました。 #ifdef __APPLE__ #include <Accelerate/Accelerate.h> #endif int main(int argc, const char * argv[]) { float* a = new float[4096]; float* b = new float[4096]; float* c = new float; for (int i = 0; i < 4096; ++i) {</accelerate/accelerate.h>…

std::partition_point

C++11 で導入されたstd::partition_pointはラムダ式を渡すときに lower_bound,upper_boundに比べて引数が一つ少なくて済むというメリットがある。 const std::vector<int> v = { -50, -20, -10, -7, -1, -2, 21, 22, 26, 27 }; const int val1 = 21; // lower_bou</int>…

256bit(32バイト)にアラインされたメモリを取得する(C++17)

C++17以上ではnewでアラインされたメモリを簡単に取得できるようになりました。 for (int i = 0; i < 10000; ++i) { float* a = new (std::align_val_t{32}) float; auto val = reinterpret_cast<size_t>(a); if ((val % 32) != 0) { assert(false); } } 余談ですが6</size_t>…

C++20で気になる機能

2 つの値の中点を計算する関数が追加された。 浮動小数点型のatomic操作関数が追加された。 円周率の定義が使えるようになった。 コンテナにcontains()関数が追加。 2 の累乗数に関する関数が追加された。 std::make_shared()に配列サポートが追加された。 …

C++17のstd::optional

C++17のstd::optionalはよいので積極的に使っていきましょう。 std::optional swiftのoptionalと同じようなことができるようになりました。 #include <string> #include <optional> struct Data { int x; int y; Data(int x, int y) : x(x) , y(y) { } }; std::optional<Data> makeDa</data></optional></string>…

C++ 無名ラムダ式の即時実行

C++

C++無名ラムダ式の即時実行の仕方です。 無名ラムダ式定義し、即時実行しています。 無名ラムダの場合は引数部分を定義する必要はなく、キャプチャする変数の指定だけが必要です。 const std::vector<int> list = { 1, 2, 3 }; const auto sum = [&]() { return l</int>…

C++14 共有ロック

C++

C++14 で共有ロックというものが実装された。 これは1つのリソースに対して、1つのスレッドが書き込みを行い、2つ以上のスレッドが同時に読み込みを行うケースで用いる。 2つの読み込みスレッドは一つのstd::shard_mutexに対して、lock_shared()(共有ロッ…

macOS Catalina Libraryファイルの属性をnohiddenにする

$ xattr -d com.apple.FinderInfo ~/Library/ $ chflags nohidden ~/Library/

clang-format をいい感じにvimで使う

.vimrc設定 Bundle `cjuniet/clang-format.vim' let g:clang_format_style="{BasedOnStyle: Google, IndentWidth: 4, Standard: C++11}" 以上です。依存するvimプラグインもなくいい感じです。 使い方は整形したい範囲を行選択してCTRL-Kを押すだけ。 シンプ…

C++ 例外クラス

クラスのコンストラクタで異常を上位に返したい場合、例外を用いる以外に術はない。 こんな時は、C++例外クラスをthrowするのが良い。 もちろん例外送出時にはリソースを全て開放しておこう。 C++例外クラスで使えそうなものを上げておく。 いずれも任意の文…

C++11 シングルトン

class Hoge { public: static Hoge& shared() { static Hoge instance; return instance; } private: Hoge(); } C++でシングルトンを作りたい場合は上記のようにすればよい。 C++11より前の仕様では、複数のスレッドからHoge::shared()を呼び出したときにsta…

std::thread 練習帳その1

以下のコードはコンパイルに失敗し、Attempt to use a deleted function となる。 #include <thread> void update(int& data) { data += 2; } int main(int argc, const char * argv[]) { int data = 11; std::thread t(update, data); t.join(); printf("%d\n", dat</thread>…

macOSにて同一のシンボル名のダイナミックライブラリをロードしたらどうなるか

macOSにて同一のシンボル名を持つダイナミックライブラリをロードしたらどうなるかを検証します。 前提条件として、ダイナミックライブラリはインストールパスに@rpathが指定されていることとします。 絶対パスが指定されている場合は、全く異なる動作をしま…

macOS Application バイナリが持つentitlementを知りたい

$ codesign -d --entitlements :- /Applications/Hoge.appアプリ例その1) Executable=/Applications/Hoge.app/Contents/MacOS/Hoge <plist version="1.0"> <dict> <key>com.app…</key></dict></plist>

macOS コードサインを確認するコマンド

$ codesign -dvvv libblock.dylib Executable=/Users/pebble8888/Library/Developer/Xcode/DerivedData/block-dfwlkkoafjhqccbfqxydkmopdyll/Build/Products/Debug/libblock.dylib Identifier=libblock Format=Mach-O thin (x86_64) CodeDirectory v=20500 s…

C++のシンボルテーブル

macにはnmというシンボルを見るコマンドがあります。 namespace MyNameSpace {class MyObject { public: MyObject(); };MyObject::MyObject() { printf("aa\n"); }} 上記のコードをダイナミックリンクでコンパイルしたモジュールの出力をみてみます。 $ nm a…

ABC予想と宇宙際タイヒミューラー理論

ABC予想が何かという説明はここでは省きます。 整数論の未解決の難しい問題です。 tsujimotterさんのブログなどを参考にしてください。 これを解決したと言われているのが望月新一さんで使った新たな数学の理論が宇宙際タイヒミューラー理論だそうです。 以…

美しい電子顕微鏡写真と構造図で見るウィルス図鑑101

本屋で見かけてなかなか面白そうな本だった。 ウィルスは細菌に比べても小さくて、正二十面体だったり、アポロ宇宙船のように幾何学構造だったりするのが、面白いね。 今回をきっかけにウィルス研究者が増えたりするかもね。 美しい電子顕微鏡写真と構造図で…

米国株式投資する上で参考になる本

米国株式投資をする上で人に勧めるならこれという書籍を紹介します。 億万長者をめざすバフェットの銘柄選択術 超有名人ウォーレンバフェット氏がどのように銘柄を選んでいるかが解説されています。 基本的な事柄を学べます。 バフェット氏は逆張り投資家で…

FIRE 最強の早期リタイア術を流し読みした

FIRE 最強の早期リタイア術を流し読みしてみました。FIRE 最強の早期リタイア術 最速でお金から自由になれる究極メソッド作者:クリスティー・シェン,ブライス・リャン発売日: 2020/03/19メディア: 単行本(ソフトカバー)いわゆる投資で一髪当ててリタイアし…

macOS環境にてバイナリをdisassembleする

~$ cat main.c #include <stdio.h> int main(int argc, char** argv) { int a = 2; int b = 3; int c = a + b; return 0; } ~$ cc main.c ~$ otool -tvV a.out a.out: (__TEXT,__text) section _main: 0000000100000f80 pushq %rbp 0000000100000f81 movq %rsp, %rbp </stdio.h>…

C++11 ムーブセマンティクス

C++11 のムーブセマンティクスがよく分からないので実験してみる。 class Bean { public: Bean() :color(0) ,shape(0) { std::cout << "constructor\n"; } Bean(const Bean& other) : color(other.color) , shape(other.shape) { std::cout << "Bean copy co…

macOS10.15 Catalinaでdockerでpandas環境で米国のファイナンス情報を取得する

Docker Desktop on Macをインストールする。Install Docker Desktop on Mac | Docker Documentationpython3.7が入ったDocker イメージをpullする。 $ docker pull python:3.7 起動する。 $ docker run -it --name pytest python:3.7 /bin/bash yfinanceをイ…