satymale’s diary

日々の忘備録

生活不活発病のセミナーに行ってきた

妻の付き添いで大川弥生Drの生活不活発病のセミナーに行ってきました。

妻は先生の書籍を読んでいたそうですが私は完全に興味がなく、付き添いで参加するだけの予定で、事前の予習もせずノートも持って行きませんでした。 セミナーを聞いている中でノートを持って来なかった事を後悔しましたが、そういう素人に向けてのセミナーという事で生活不活発病とはどういうものなのかという事を知識として知っておくだけでも、このセミナーに来て頂いた意味があるとのことで、忘れないうちにメモを残そうと思います。

将来、両親の介護など考える必要があるので、知っておいて損はない知識だと思います。

生活不活発病とは

様々な要因によって、社会参加が疎遠になり、それによって日常的な活動が減り、その結果身体的な機能に支障をきたしてしまう事を生活不活発病と呼んでいるそうです。

作られた寝たきり

実際の家庭でありがちな生活不活発病が、作られた寝たきりです。

子供と同居したことにより、

  • 参加:今まで住み慣れていた土地から移ることによってコミュニティから遠ざかる。
  • 活動:コミュニティから遠ざかった事によって知り合いや友達が居らず、家からあまりでなくなる。
  • 身体機能:徐々に歩けなくなっていく。

また、家の中でも家事等を子供夫婦が行うことにより、

  • 参加:家庭内の役割分担から離れる。
  • 活動:家事をする必要がなくなったので、座ったり横になってばかり。
  • 身体機能:体が硬くなっていく。

と、段々と身体機能が低下していってしまいます。

生活不活発病というものがあるということを知らないために、この身体機能の低下の原因を歳を取ったからと勘違いして、改善する機会を失ってしまうという事が多いそうです。

補完的な介護より、良くする介護

上記のように何かを行う時に、代わりにやって負担を軽くする介護では、身体機能の低下を招くので、より良く行えるやり方を教えて極力自分で行えるようにするという新しい介護のレベルに入ってきているそうです。

最後に

1時間30分という短い時間の中でのセミナーということで、詳しいことは書籍を参照してくださいという形でした。 幸いにも妻が書籍を持っているので借りて読んでみようと思います。

行の編集後の値を取得するにはonCompleteにて

w2uiで行の編集を行われた事を検知するイベントは以下のように記述する。

$('#grid').w2grid({
    name : 'grid',
    columns: [                
        { field: 'recid', caption: 'ID', size: '50px' },
        { field: 'lname', caption: 'Last Name', size: '30%' },
        { field: 'fname', caption: 'First Name', size: '30%' }
    ],
    onChange: function (event) {
        // 変更があった時に呼ばれる。
    }
});

ただし、onChangeは変更がキャンセル出来るように変更が完了する前に呼び出されるためrow.changesには変更した箇所が設定されていない。

onChange: function (event) {
    // 変更があった行をrecidから取得
    var row = w2ui['grid'].get(event.recid);
    // 変更箇所を行にマージ(したいが期待した結果にはならない)
    var chgRow = $.extend(row, row.changes);
}

変更が行われた場合に、変更箇所を取得するにはonCompleteに処理を記載する必要がある。 これで変更が完了した際に呼ばれるので、row.changesには変更箇所のプロパティと値が格納される。

onChange: function (event) {
    event.onComplete = function () {
        var row = w2ui[id].get(event.recid);
        // 変更箇所を変更前の行にマージ
        var chgRow = $.extend(row, row.changes);

        // 変更後の行を使ってごにょごにょ
    };
}

Transbook T90Chiは意味もなくワクワクしてしまうサイズ

仕事で忙しくてあまり時間が取れないので、電車に乗っている時間を活用したらいいんじゃないかなと思って、約3万円という値段もあってTransbook T90Chi 3775をヨドバシカメラで買っちゃいました。 1週間程使ってみて、予想通りの使い方が出来て満足しています。

やっぱり8.9インチぐらいの大きさであれば、仕事の鞄に入れて持って行けるというのが一番大きいです。 キーボードを取り外した時のタブレットはもう壊れて使っていないNexus7を思い出します。 若干縦が長いようなタブレットの形状がNexus7に似てるなと感じます。

気軽にいつでもどこでも持ち出せるこのサイズで、Visual Studioが動くというのは本当に嬉しいです。 意味もなくワクワクしてしまいます。

電子ノート、XPS13との比較

f:id:satymale:20160124231028j:plain

XPS13もずいぶん薄くてコンパクトなノートPCですが、仕事鞄に入れたり電車で作業をするにはちょっと存在感がありすぎてしまいます。8.9インチだとあまり仕事してる雰囲気でなくて良いです。

f:id:satymale:20160124232652j:plain

キーボード込みの16.5mmで鞄に入れる分には問題ないですが、欲を言えば2in1でなくていいので、クラムシェル型でもっと薄くしてくれたら嬉しかったです。

T90Chiの側面

f:id:satymale:20160124231407j:plain

このラインがあると質感良く感じます。 他は少しチープな印象を受けますが、気軽に鞄にいれて持ち出すので傷がつくのが躊躇われるぐらいの質感になると、それはそれで神経使って困るのでこれくらいでいいかなと思います。

速度比較

Visual Studio Community 2015を起動すると、T90Chiは約8秒ぐらいで起動します。 Core i5のXPS13では約2秒ぐらいで起動します。 SourceTreeではT90Chiは約9秒、XPS13は約4秒ぐらいなので、アイコンをタップした後は焦って再タップせずにちょっと待つことが必要です。

イシューログ

タップしづらい

キーボードにトラックパッドがついていないので、画面を直接タップして選択するしかないのですが、表示によっては細かくてタップがしづらい時があるので、タッチパネルでマウス操作が行えるToushMousePointerというソフトを入れています。

TouchMousePointer タッチパネルをタッチパッド化

【2016.03.05 追記】また極力キーボードだけで完結できるように、SendToフォルダに エディタ等のショートカットを入れておくことで、batファイルの編集など右クリックキーから簡単に行えるようにしています。

画面が真っ黒で反応がない

たまに電源ボタンを押してもバックライトだけついて画面が真っ黒になる時があります。 何をするとそうなるのかまだ因果関係はわかりませんが、この事象に遭遇したら電源ボタンをかなり長く押して強制的に再起動を行うと治ります。

【2016.03.03 追記】上記の事象が発生した時、Ctl+Alt+Delを押すとログイン画面が表示されました。

タスクバーがタップしづらい

キーボードとタブレットの接続部分付近は指先が細い人は良いのですが、タスクバーにピン止めしているアプリケーションを起動しにくいです。

タスクバーのアプリケーションを選択できるショートカット[Winキー + T]を覚えておく便利です。

プレリリースソフトウェアのライセンスが切れていますと出る場合

Visual Studio Community 2015をインストールしたら、「プレリリースソフトウェアのライセンスが切れています」と出て開けない事象に遭遇しました。 その時は、Visual Studio Community 2015を修復でインストールすると良くなりました。

ASP.NET4.6+W2UIでデータを保存する

サーバー側で変更分が分からない問題

W2UIで入力されたデータを保存すると、変更があった差分のみがサーバーに渡されます。 例えば次のようなGridのlnameとsdateを編集して保存すると

$('#grid').w2grid({
    name : 'grid',
    url  : {
        get    : 'server/side/path/to/records',
        remove : 'server/side/path/to/remove',
        save   : 'server/side/path/to/save'
    },
    columns: [                
        { field: 'recid', caption: 'ID', size: '50px' },
        { field: 'lname', caption: 'Last Name', size: '30%' },
        { field: 'fname', caption: 'First Name', size: '30%' },
        { field: 'email', caption: 'Email', size: '40%' },
        { field: 'sdate', caption: 'Start Date', size: '120px' },
        { field: 'edate', caption: 'End Date', size: '120px' }
    ]
});

次のように変更分のみサーバーに送信されます。

cmd:save-records
selected[]:1
limit:100
offset:0
changes[0][recid]:1
changes[0][lname]:hoge
changes[0][sdate]:2016/01/23

サーバー側のコントローラーでは次のように、パラメータの型に動的にマッピングされるため変更されたプロパティにしか値が設定されません。

public class GridSaveParameter<T> {
    public string Cmd { get; set; }
    public int[] Selected { get; set; }
    public int Limit { get; set; }
    public int Offset { get; set; }
    public List<T> Changes { get; set; }
}

public class Hoge {
    public string Recid { get; set; }
    public string Lname { get; set; }
    public string Fmame { get; set; }
    public string Email { get; set; }
    public DateTime Sdate { get; set; }
    public DateTime Edate { get; set; }
}

public ActionResult Save(GridSaveParameter<Hoge> param) {
    // 保存処理
}

そうなると、保存する際に値なしに変更されたのか、変更されていないのかを判断することが出来なくなります。

すべての値を送る

上記のように、変更分のみをサーバー側に送信すると、値を空にした場合が判断できなくなるため、 クライアント側で、変更があった行のすべての値をサーバー側に送るように少し手を加えます。 urlの指定からsaveを消して、保存ボタン押下時のイベントで自前で値をサーバー側に送信します。

$('#grid').w2grid({
    name : 'grid',
    url  : {
        get    : 'server/side/path/to/records',
        remove : 'server/side/path/to/remove',
    },
    columns: [                
        { field: 'recid', caption: 'ID', size: '50px' },
        { field: 'lname', caption: 'Last Name', size: '30%' },
        { field: 'fname', caption: 'First Name', size: '30%' },
        { field: 'email', caption: 'Email', size: '40%' },
        { field: 'sdate', caption: 'Start Date', size: '120px' },
        { field: 'sdate', caption: 'End Date', size: '120px' }
    ],
    onSubmit: function (event) {
        // 2016.08.07 追記
        // url.saveを消すことで、保存した際に、サーバからのstatusがerrorか否かに関わらず
        // 編集箇所がクリアされる分岐に入ります。
        // そのため、既定の保存処理を中断しておきます。
        event.isCancelled = true;

        var chgRows = w2ui['grid'].getChanges();
        
        // 変更があった行の変更前のすべての値を持った行に変更された値を上書き
        var rows = $.map(chgRows, function (n, i) {
            return $.extend(w2ui['grid'].get(n.recid), n);
        });
        
        w2ui['grid'].request('save-records', { changes: rows }, 'server/side/path/to/save');
    }
});

上記のようにすると値が空の場合は素直に空になって送信されるので、サーバー側では特に考慮することなく保存すれば良くなります。

電子ノートは仕事で使えるのか

紙ノートの不満点

私は仕事でキャンパスノートを愛用しています。

学生の頃からノートは使っていたけど、シャープペンシルを使うと手が汚れるし、ボールペンを使えば間違った時に消せないという不満点があって、そんなに積極的にノートを使う方ではなかったのですが、擦ると熱で消せるフリクションボールペンが登場して以来、ノートは頭の整理やメモ等になくてはならないものになってきました。

ただノートを積極的に使うようになってまた別の問題が生まれるようになってしまいました。 A4ノートを20日で使い切ってしまい、外出先でノートにメモしてた内容を見ようとしたら1つ前のノートに書いていて「しまった!」というような事が起きるのです。 フリクションボールペンも4色タイプを使っているのですが、すぐインクがなくなってしまいます。 そのため、それぞれの色を2袋(6本)は常に常備しておき、筆箱には1本ずつ入れてインク切れに備えなくてはなりません。

スケジュールは手帳が便利

加えて仕事の内容が開発からシステム構築SEに変わったため、スケジュール管理の比重が高くなってきており、手帳も持ち歩いています。 やっぱりノートに予定を書き込むよりは、カレンダーに予定を書き込む手帳の方が予定の順序関係が分かりやすくて便利です。 ただある程度ストレスなく手帳を使おうと思うとそれなりに大きい手帳が必要になってきます。 そうなるとそこそこ大きい手帳と、ノートの両方を持たなくてはならず荷物が多くなってしまいます。

電子手帳の導入

何冊ものノートを持ち運べて、インク切れを心配することなく、スケジュールの書き込みが出来るものという事で、電子ノートを購入しました。 一番私の求めるものに近そうなシャープのWG-S30を購入です。

シャープ 電子ノート ブラウン系 WG-S30-T

シャープ 電子ノート ブラウン系 WG-S30-T

電子ノートでの一番の不安はやはり書き味につきます。 電話を受けながらメモを取れるレベルの追従性がないといくら持ち運びが良くなっても使いものにはなりません。

不安を抱きつつも買った次の日に実際に職場に持っていき運用してみた所、細かい文字を書こうとするとキツイですが1cm×1cm四方ぐらいであれば問題ありませんでした。

画面が見づらい

ただ、このシャープの電子ノートは書き味よりもとにかく画面が透過型液晶ではなく反射型白黒液晶のため見づらいです。 バックライトがないので、電池持ちは30日とほとんどバッテリーを意識することなく使えるので良いですが、初代ゲームボーイみたいな感じの画面です。 天井のライトが反射すると見づらいので、反射低減の保護フィルムを一緒に用意することをお勧めします。

タッチペンも感圧式なので、iPadタッチペンというよりはNintendo DSのような書き心地で、タッチペンをあてるとペコペコしたような感触がします。 タブレットタッチペンで同じ運用は出来ると思いますが、やはりスケジュール帳とノートに特化しているため余計な機能がついていない分、書くことに集中できる点が良いです。

今の電子ノートは仕事で使える

電話を受けるときのメモも問題なし、スケジュールの記入も問題なし、ノートもA4ノートよりは狭いですがページを次々と作れるため 今のところ問題なく仕事で使えています。 また、ノートを自由に作れる上、それぞれのノートからページをコピーできるので、ノウハウ集みたいなものを簡単に作れるのがとても良いです。 紙ノートだと、同じものを作る場合は転記が必要になってしまいとても面倒です。

だいぶ便利な電子ノートですが、次に新型が出るならKindle Paper Whiteのようなe-Inkの画面ともっと書くことに特化するため、カバーを開けたらすぐ書けるようにしてくれることを希望したいです。


satymale.hatenablog.com

設定ファイルの値を取得する

設定ファイルの内容をControllerで使う方法が分からなかったので調べてみました。

config.json

{
    "Data": {
        "DefaultConnection": {
            "ConnectionString": "test"
        }
    }
}

Startup.cs

public Startup(IHostingEnvironment env, IApplicationEnvironment appEnv) {

   var builder = new ConfigurationBuilder(appEnv.ApplicationBasePath)
       .AddJsonFile("config.json")
       .AddJsonFile($"config.{env.EnvironmentName}.json", optional: true);

    builder.AddEnvironmentVariables();
    Configuration = builder.Build();
}

public IConfiguration Configuration { get; set; }

// For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services) {
    services.AddMvc();
    services.Configure<Config>(Configuration);
}

Config.cs

public class Config {
    public Data Data { get; set; }
}

Data.cs

public class Data {
    public DefaultConnection DefaultConnection { get; set; }
}

DefaultConnection.cs

public class DefaultConnection {
    public string ConnectionString { get; set; }
}

HomeController.cs

public class HomeController : Controller {

    private Config _config;

    public HomeController(IOptions<Config> config) {
        _config = config.Options;
    }
}