emacs 初期設定(パッケージとプロクシ)

他の方のWeb記事にもいろいろとお世話になっているemacsの初期設定、私のところの設定内容なども載せておこうと。まずはパッケージアーカイブサイトの設定と、環境変数 HTTP_PROXY / HTTPS_PROXY を参照して認証プロクシを通すための仕掛けなど。 続きを読む emacs 初期設定(パッケージとプロクシ)

std::shared_ptr の基本動作

初期化、スコープによる解放、明示的解放の確認。

#include <memory>
#include <iostream>

class ToBeShared {
 public:
    ToBeShared() { std::cout << "ToBeShared Constructed. this="
                    << std::hex << this << std::endl; }
    ~ToBeShared() {std::cout << "ToBeShared Destructed. this="
                    << std::hex << this << std::endl; }
 };

int main() {
    auto printone = [](const std::string& name,
                       const std::shared_ptr<ToBeShared>& sp) {
        std::cout << name << "(" << std::hex << sp.get()
        << std::dec << ").use_count()= " << sp.use_count()
        << std::endl;
    };

    std::cout << "Creation" << std::endl;
    auto sp1 = std::make_shared<ToBeShared>();
    printone("sp1[make_shared]", sp1);
    auto sp2 = sp1;
    printone("sp2[copied sp1]", sp2);
    {   std::shared_ptr<ToBeShared> sp3;
        printone("sp3[defined]", sp3);
        sp3 = sp2;
        printone("sp3[copied sp2]", sp3);
    }  // = implicit delete
    std::cout << "sp3 out of scope." << std::endl;

    printone("sp2[before reset]", sp2);
    sp2.reset();  // = explicit delete

    printone("sp1[before reset]", sp1);
    sp1.reset();  // = explicit delete

    return 0;
}

実行結果。

Creation
ToBeShared Constructed. this=0x294f1eb03a0
sp1[make_shared](0x294f1eb03a0).use_count()= 1
sp2[copied sp1](0x294f1eb03a0).use_count()= 2
sp3[defined](0).use_count()= 0
sp3[copied sp2](0x294f1eb03a0).use_count()= 3
sp3 out of scope.
sp2[before reset](0x294f1eb03a0).use_count()= 2
sp1[before reset](0x294f1eb03a0).use_count()= 1
ToBeShared Destructed. this=0x294f1eb03a0

std::function の使い方

備忘録を兼ねて、こんな風に使うんだよというサンプルなど。
クラスのメンバ関数の場合(func1,func2)、
素の関数の場合(func3,func4)、
ラムダ関数を使う場合(func5,func6)。
それぞれ引数なし、ありの時の書き方。

#include <functional>
#include <iostream>

class class1 {
 public:
    void func1() { std::cout << "class1::func1()" << std::endl; }
    void func2(int i1, int i2) { std::cout << "class1::func2(" << i1 << "," << i2 << ")" << std::endl;  }
};

class class2 {
 public:
    std::function<void()> function1;
    std::function<void(int,int)> function2;

    std::function<void()> function3;
    std::function<void(int,int)> function4;

    std::function<void()> function5;
    std::function<void(int,int)> function6;
};

void func3() {
    std::cout << "func3()" << std::endl;
}

void func4(int i1, int i2) { std::cout << "func4(" << i1 << "," << i2 << ")" << std::endl; }

int main() {
    class1 c1;
    class2 c2;

    c2.function1 = std::bind(&class1::func1, &c1);
    c2.function2 = std::bind(&class1::func2, &c1, std::placeholders::_1, std::placeholders::_2);

    c2.function3 = std::function<void()>(func3);
    c2.function4 = std::bind(func4,std::placeholders::_1, std::placeholders::_2);

    c2.function5 = [&]() { std::cout << "lambda func5()" << std::endl; };
    c2.function6 = [&](int i1, int i2) { std::cout << "lambda func6(" << i1 << "," << i2 << ")" << std::endl; };

    c2.function1();
    c2.function2(3, 4);

    c2.function3();
    c2.function4(5, 6);

    c2.function5();
    c2.function6(7, 8);

    return 0;
}

実行結果。

class1::func1()
class1::func2(3,4)
func3()
func4(5,6)
lambda func5()
lambda func6(7,8)

Google Driveへのバックアップ

年が明けてから、WordPressで作っている部分のバックアップをUpdraftPlusというアドインでやるようにしました。バックアップ先にはGoogle Driveを指定して、初回のバックアップは何も問題なくできたのですが、今日、二回目のバックアップをしようとしたら、エラーになってしまいました。アクセストークンがどーのとか、そんなことユーザーに言われてもどうしようもない訳の分からないエラーメッセージが出ています。アドインの作成元含めてWEB検索しても開発者向けの情報がヒットするばかり。そんな難しいことではないはずだと思いつつ。

要するにドライブにログインしようとしてはねられたということのようです。初回はちゃんと動作したのですから、一度Drive側の ツールの登録を解除して再登録、気分新たにリフレッシュしてやってみたところ、ビンゴ、うまくいきました。

前回のGoogle Driveへの接続から時間が経っていたせいか、あるいは単にブラウザを閉じるとこうなるのかは調べていませんが、バックアップに失敗したら都度ツールを再登録するようにしてしばらく使ってみます。ふう。

Windows10 PowerShell の色について

Windows10からコマンドプロンプトがcmd.exeからPowerShellになって、さて使おうとするとまず気になるのが入力行の色です。黄色なんですが、画面のプロパティで背景色を明るい灰色にしているとこれが非常に見にくい。文字色を黒にすると実行されたコマンドからの文字列やプロンプトの色は変わるんですが、肝心の入力した文字の色は変わりません。PowerShell特有のプロパティでもあるのかと思って調べてみても要領を得ないサイトばかりがヒットして時間ばかりが過ぎていきます。細かいことはどうでもいいんです。今やりたいことは、入力行を見やすくしたいだけ。

なので、入力行自体の色を変える方法は心に留めておいておいおい探すとして、とりあえず背景色を変えました。真っ黒は嫌いですが慣れている明るい灰色ではなく暗めの灰色にすることで、黄色でも見やすくなりました。文字色は白にして、こうすると入力行は黄色なのでどれが入力でどれがコマンドの出力なのかもよく分かります。怪我の功名? というやつかも。当面これでいきます。

….. と、思ったんだけど、コマンドラインの引数の色が今度は暗い灰色と被っててよく見えない。こりゃ背景は黒でないと使えないですね、当面。さっさと仕組みを調べなきゃ。ふう。

Emacs25 on Ubuntu18 on Hyper-V on Windows 10 (MEMO-4 Emacs25のインストールと環境設定)

Emacs25のインストールと環境設定

Emacsのインストール自体は簡単ですがデフォルトだと日本語環境がちょっとおかしいのと、autoinstall.elの設定がちょっと古いので、それを直す必要がありました。Versionは25.2をインストールします。

Emacs25のインストール

下記のコマンドでインストールできます。

sudo apt install emacs25

設定ファイルは基本的にはこれまで使っていたものを引っ越してくれば良いのですが、元環境がWindows版の場合はパスを直接書いているところがあればその部分は修正する必要があります。古いバージョンに合わせた設定ファイルだといろいろobsoleteなところがあるかもしれません。私の場合はauto-installの一部のリポジトリのパスが変わっていて、まずauto-install.elに手を入れる必要がありました。 続きを読む Emacs25 on Ubuntu18 on Hyper-V on Windows 10 (MEMO-4 Emacs25のインストールと環境設定)

Emacs25 on Ubuntu18 on Hyper-V on Windows 10 (MEMO-3 Ubuntu18.04LTSのインストールと環境設定)

Ubuntu18.04LTSのインストールと環境設定

インストール開始

OSをインストールするためには、今作ったばかりの仮想マシンを起動します。(ブート順で指定した通り、DVDのブートイメージが実行されます)

Hyper-Vマネージャーの画面で仮想マシンを選択状態にし、右クリックメニュー(又はメニューバーの「操作」メニュー(もしくは右側の「操作」ペイン))の「接続」を選択して仮想マシンと接続するための画面を表示し、そこに出ている「起動」ボタンをクリックします。(下記画面例は右クリックメニュー) 続きを読む Emacs25 on Ubuntu18 on Hyper-V on Windows 10 (MEMO-3 Ubuntu18.04LTSのインストールと環境設定)