やんちょふのブログ

ご連絡はTwitterアカウント@syoyuu616にて受け付けております

iPad+Apple Pencil 使用感メモ その1

iPadを購入した件

iPadを購入しました!2日程使用したので今のところの使用感を書いてみます。

購入したのは次の3つです

iPad(第6世代) 32GB Wifi モデル ・スマートカバー ・Apple Pencil

iPadでもApple Pencilが対応しているので今回購入するに至りました。

モデルについて

 WifiモデルにするかWifi Cellularモデルにするか悩みました。 格安SIMを買うのかポケットWifiを契約するのかで、そこまで価格が 変わらないなと思い、必要になったらポケットWifiサービスをどこかで 契約しようと考え、お安いWifiモデルにしました。

ApplePencil と iPad で書いてみた感想

 さて、書き味についてですが、フィルム等つけていないデフォルトの状態ですが 若干の遅延を感じなくはありませんが、書くうえでほとんど影響ない程度です。

入れたアプリについて

 書き味についてすごく短くまとめましたが、実際の使用感に影響を与える割合としては アプリの比重が大きいように感じます。今のところ次の2つを併用してます

・NoteShelf 2 ・GoodNote4

 どちらもノートを作成、書くという順序は変わりませんが細々とした部分に違いを感じます

NoteShelf 2

Noteshelf 2

Noteshelf 2

  • Fluid Touch Pte. Ltd.
  • 仕事効率化
  • ¥1,200

 大学の講義のノートを取ったり、本の内容をまとめる作業はこのアプリを使っています。 アプリを開いた時の画面は次のようになっています。

f:id:yanchof:20180517224010j:plain

 ノートのカバーデザインは自由に選べます。右上のプラスマークから新規ノートの作成や ドキュメントのインポートができます。

f:id:yanchof:20180517224806p:plain

 ノートの画面ですが画像のようになっており、ペンの種類の切り替えも少ない動作でできるので不便さはあまり感じません。罫線付きのテンプレートも用意されていて、講義の時は罫線付き、メモ用途では白地というように使い分けています。また、右上の項目をタッチすると、複数ページのプレビューを出すことができ、目当てのページをすぐに出すことができます。

 また、図形の描画ができるのですが、図形モードをオンにした状態で雑に円を描くと綺麗な円に直してくれたり、適当に線を引くと直線に直してくれたりと、作図が楽になり、紙に定規とペンで書く場合よりも快適です。

 個人的な難点としては、書籍のPDFをインポートしたときにノートの表紙を書籍の表紙にしてほしいくらいです。(方法があるかもしれませんが、少なくともインポートした時点では表紙はアプリ側で用意されました)

 細かいカスタマイズなしにパッと表紙をそろえてほしいというのがユーザとしてアプリに望むことなので、難点としてあげました。しかし、紙のノートの代用としては十分な機能を備えていると思います。ルーズリーフバインダーを2つ、講義用に持ち歩いていましたが、iPad一つでまかなえるため、移動もとても楽です。

GoodNotes 4

GoodNotes 4

GoodNotes 4

  • Time Base Technology Limited
  • 仕事効率化
  • ¥960

先ほど挙げたPDFのインポート周りのことがあり、別のアプリも試してみようと思って入れました。

f:id:yanchof:20180517232213j:plain

(一部黒塗りですが)アプリを開いた画面です。カテゴリの設定が行えます。この機能についてはまだ使っていないので後日また書こうと思います。

NoteShelfとの違いですが、ちょうど黒塗りになっていて見えませんが、書籍のPDFをインポートすると、ちゃんと書籍の表紙が反映されます。なにも設定をいじらずとも期待した通りの動作を提供してくれるというのが、アプリのユーザとしてのスタンスですのでとても嬉しいポイントです。

GoodNotesの難点としては、ペンの切り替えがNoteShelfに比べて不自由かなというところです。NoteShelfと同様に、ペン・マーカー・消しゴムが用意されていますが、ペンの種類の変更にかかる操作数がちょっとだけ多かったりすることが使っていると気になります。

まとめ

 アプリの難点を挙げましたが、本当に些細な違いしかありません。しかし、ペンで書くという慣れた操作をデジタルに移行すると、思った通りの動作に求める即時性のハードルがどうしても高くなってしまいます。

 とは言っても、今のところ紙のノートの代用として十分なパフォーマンスだと思うので、またしばらく使ってみた感想を書こうと思います。

C++学習記録 スレッド 編1

大学に入学しました。やんちょふです。

しばらくPythonで数値処理ばかりしており、C++の勉強をさぼっていましたので、学習を開始しました。学習メモを不定期で更新したいと思います。

今回はスレッドです。C++11から追加された、マルチスレッドを扱うライブラリの使い方を試してみました。以下コードです。

#include <iostream>
#include <future>
#include <thread>

void Wait(int c) {
  std::this_thread::sleep_for(std::chrono::seconds(c));
}

int main() {
  std::vector<std::thread> threads;
  std::chrono::system_clock::time_point start, end;

  //multi thread
  start = std::chrono::system_clock::now();
  for (int i = 0; i < 3; i++) {
    threads.push_back(std::thread([] { Wait(3); }));
  }
  for (auto &th : threads) {
    th.join();
  }
  end = std::chrono::system_clock::now();
  double elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();
  std::cout << "multi: " << elapsed << std::endl;

  //single thread
  start = std::chrono::system_clock::now();
  for (int i = 0; i < 3; i++) {
    Wait(3);
  }
  end = std::chrono::system_clock::now();
  elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();
  std::cout << "single: " << elapsed << std::endl;

  return 0;
}

3つのスレッドでそれぞれ3秒待たせた場合と、一つのスレッドで3秒を3回分待たせるプログラムです。これを実行すると結果は次のように出力されました。

multi: 3003
single: 9040

並列に処理が行われていることが確認できました。

以上のようにしてマルチスレッドを書くことができましたが、ソースコードの説明をざっくりとします。

まず次のコードです。

std::this_thread::sleep_for(std::chrono::seconds(c));

関数名そのままですが、指定した秒数待機させるコードです。chronoは時間に関するヘッダです。上記のソースコードでは単位として秒を指定しており、またmain関数内ではミリ秒を指定しています。このほかにマイクロ秒(microseconds)、分(minutes)、時間(hours)が指定できます。

this_thread名前空間は現在のスレッドに関する情報にアクセスするグループとなっています。今回使用したsleep_for関数以外にsleep_until関数などがあります。

main関数内では処理開始前と開始後とで以下のコードを記述しています。

 start = std::chrono::system_clock::now();
//何らかの処理
 end = std::chrono::system_clock::now();
double elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();

duration_cast関数は入力した値を、指定した時間単位に変換します。もとの値よりも分解能が小さい単位にしか変換できない点が注意です。(Wait関数ではミリ秒単位にすればよかったと思いましたが動きがわかったのでこれで良しとします)

今回は以上です。

実行環境
OS : Windows10
コンパイラ : mingw gcc 7.3.0

【Python3】モンティホール問題

ふとモンティホール問題について気になったので、スクリプトを書いて実験してみました。

#coding: utf-8
import random

def set_door():
    rand_num = random.randint(0, 2)
    if rand_num == 0:
        door = (1, 0, 0)
    elif rand_num == 1:
        door = (0, 1, 0)
    else:
        door = (0, 0, 1)
    return door

def pre_open_door(door, selected):
    for i in range(0, 3):
        if i != selected and door[i] == 0:
            return i

def re_select_door(door, opened, selected):
    for i in range(0, 3):
        if i != selected and i != opened:
            return i

if __name__ == "__main__":
    count = 0
    select_right_count = 0
    reselect_right_count = 0

    for i in range(1000000):
        door = set_door()
        select = random.randint(0, 2)
        opened = pre_open_door(door, select)
        re_select = re_select_door(door, opened, select)
        if door[re_select] == 1:
            reselect_right_count += 1
        if door[select] == 1:
            select_right_count += 1
        count += 1

    print("reselect:", reselect_right_count/count)
    print("non reselect:", select_right_count/count)

実験結果

  • 1回目
    reselect: 0.666524
    non reselect: 0.333476

  • 2回目
    reselect: 0.666154
    non reselect: 0.333846

  • 3回目
    reselect: 0.665123
    non reselect: 0.334877

再選択する場合の確率は0.6666...で再選択しない場合の確率は0.3333...なので 実験結果から正しい確率(に近い値)が得られています。

プログラミング初心者なのであまりきれいなコードではありませんが、とりあえず モンティホール問題の正解確率が出せたので今回はこれで良しとします。すっきりした。

続きを読む