電子ノートは仕事で使えるのか
紙ノートの不満点
私は仕事でキャンパスノートを愛用しています。
学生の頃からノートは使っていたけど、シャープペンシルを使うと手が汚れるし、ボールペンを使えば間違った時に消せないという不満点があって、そんなに積極的にノートを使う方ではなかったのですが、擦ると熱で消せるフリクションボールペンが登場して以来、ノートは頭の整理やメモ等になくてはならないものになってきました。
ただノートを積極的に使うようになってまた別の問題が生まれるようになってしまいました。 A4ノートを20日で使い切ってしまい、外出先でノートにメモしてた内容を見ようとしたら1つ前のノートに書いていて「しまった!」というような事が起きるのです。 フリクションボールペンも4色タイプを使っているのですが、すぐインクがなくなってしまいます。 そのため、それぞれの色を2袋(6本)は常に常備しておき、筆箱には1本ずつ入れてインク切れに備えなくてはなりません。
スケジュールは手帳が便利
加えて仕事の内容が開発からシステム構築SEに変わったため、スケジュール管理の比重が高くなってきており、手帳も持ち歩いています。 やっぱりノートに予定を書き込むよりは、カレンダーに予定を書き込む手帳の方が予定の順序関係が分かりやすくて便利です。 ただある程度ストレスなく手帳を使おうと思うとそれなりに大きい手帳が必要になってきます。 そうなるとそこそこ大きい手帳と、ノートの両方を持たなくてはならず荷物が多くなってしまいます。
電子手帳の導入
何冊ものノートを持ち運べて、インク切れを心配することなく、スケジュールの書き込みが出来るものという事で、電子ノートを購入しました。 一番私の求めるものに近そうなシャープのWG-S30を購入です。
- 出版社/メーカー: シャープ
- 発売日: 2015/10/16
- メディア: Personal Computers
- この商品を含むブログ (1件) を見る
電子ノートでの一番の不安はやはり書き味につきます。 電話を受けながらメモを取れるレベルの追従性がないといくら持ち運びが良くなっても使いものにはなりません。
不安を抱きつつも買った次の日に実際に職場に持っていき運用してみた所、細かい文字を書こうとするとキツイですが1cm×1cm四方ぐらいであれば問題ありませんでした。
画面が見づらい
ただ、このシャープの電子ノートは書き味よりもとにかく画面が透過型液晶ではなく反射型白黒液晶のため見づらいです。 バックライトがないので、電池持ちは30日とほとんどバッテリーを意識することなく使えるので良いですが、初代ゲームボーイみたいな感じの画面です。 天井のライトが反射すると見づらいので、反射低減の保護フィルムを一緒に用意することをお勧めします。
防気泡・防指紋!反射低減保護フィルム 『Perfect Shield 電子ノート WG-S30 』
- 出版社/メーカー: PDA工房
- メディア: エレクトロニクス
- この商品を含むブログを見る
タッチペンも感圧式なので、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; } }
ASP.NET5 + EntityFramework6でSQL Server Compact Editionを使う。
EntityFrameworkはCode FirstモードというコードからDBのテーブルを作る機能があるらしいですがまだそれは勉強していないので、先にテーブルを作ってEntityFrameworkから利用する方法を忘備録がてら残します。(2日ぐらいこれではまったので・・・)
NuGetでSQLServerCEのEntityFrameworkをインストールする
プロジェクトのリファレンスフォルダで右クリックをし、「NuGet パッケージの管理」をクリックします。 開かれたパッケージマネージャで「EntityFramework.SqlServerCompact」をインストールします。
DBを用意する
SQL ServerCEのDBであるsdfファイルを作成します。 昔はプロジェクトからファイルの追加で作れていた記憶があるのですが、ASP.NETのプロジェクトにはsdfファイルが存在しないので、SQL Serever Compact/SQLite ToolboxをVisual Studioにインストールします。
visualstudiogallery.msdn.microsoft.com
インストールが終わったら、SQL Server Compact/SQLite Toolboxからsdfファイルを作っていきます。
Data Connectionから右クリックを行い、「Add SQL Server Compact 4.0 Connection」をクリックします。
「Create」ボタンをクリックし、sdfファイル名を入力してから「OK」ボタンをクリックします。
テーブルを用意する
無事sdfファイルが作成されたら、テーブルを作っていきます。 sdfファイルにTablesがあるので、右クリックをして「Build Table」を選択します。
テーブル名や列を設定し、「Script!」ボタンをクリックします。
すると、SQLが生成されるので、「F5」ボタンか、赤枠で囲われたボタンをクリックします。
データを用意する
後でコードからテーブルの内容が取得できているか確認するために、データを用意しておきます。 テーブルで右クリックし、「Edit Top 200 Rows」をクリックします。
データを入力して「save」ボタンをクリックします。
コードを作成する
テーブルの準備ができたので、コードを作っていきます。 先ほど作成したテーブルを表すクラスを作ります。
using System.ComponentModel.DataAnnotations.Schema; [Table("Hoge")] public partial class Hoge { public int Id { get; set; } public string Col { get; set; } }
Configurationを作成する
次にConfigurationを作ります。 このConfigurationは、後で作るコンテキストに渡す接続文字列がどのDB向けなのかを表すためのクラスになります。 これがないとデフォルトでSystem.Data.SqlClientが使用されます。
詳しくは以下に記載されています。 msdn.microsoft.com
これを私は知らなかったので、SQL Server CEの接続文字列を渡しても、Initial Catalogが指定されていないといったエラーメッセージが表示され四苦八苦してました。
using System.Data.Entity; using System.Data.Entity.SqlServerCompact; public class SqlserverCeConfiguration : DbConfiguration { public SqlserverCeConfiguration() { SetProviderServices(SqlCeProviderServices.ProviderInvariantName, SqlCeProviderServices.Instance); } }
コンテキストを作ります。
using System.Data.Entity; [DbConfigurationType(typeof(SqlserverCeConfiguration))] public class HogeContext : DbContext { public HogeContext(string connectionString) : base(connectionString) { } public IDbSet<Hoge> Hoge { get; set; } }
DNX Core 5.0を対象外にする
ビルドを行うと、DNX Core 5.0でEntityFramework.SqlServerCompact関連のアセンブリがない等のエラーが出ます。
Windows以外の環境で動かす予定はないので、DNX Core 5.0をproject.jsonから削除します。
"frameworks": { "dnx451": { }, "dnxcore50": { } },
↓
"frameworks": { "dnx451": { } },
値を取得する
実際にHogeテーブルに入っている値が取得できるか試してみましょう。
public IActionResult Index() { var context = new HogeContext(@"Data Source='D:\test.sdf';"); var row = context.Hoge.FirstOrDefault(); return View(); }
無事、値が取れましたね!
Excelのシートを比較
最近Excelをよく使うようになって、シートの値の比較を効率よく出来るようになりました。
前は以下のようにIF文を使って差異を見つけていましたが
=IF(Sheet1!A1=Sheet2!A1,"○", "×")
Sheet1の条件付き書式で以下のようにやれば色も同時に付けれて一石二鳥です。
=INDIRECT("Sheet2!" & ADDRESS(ROW(), COLUMN())) <> A1
w2ui.loadにrecordsのJSONを返すURLを指定してはいけない
w2ui['グリッドのname'].load('JSONを返すURL');
上記のコードでサーバからデータを取得してグリッドに表示するが、データは以下の構造が正しい。
{ "status" : "success", "total" : 1, "records" : [{ "recid" : 1, "hoge" : "ほげ" }] }
グリッドに直接指定していたrecords部分をloadでサーバから取ってくるものだと勘違いしていたため、以下のデータを返していて何も表示されなくて悩んでいた。
[{ "recid" : 1, "hoge" : "ほげ" }]
同じように勘違いする人がやはり居るらしく、w2uiの本家サイトに同じ質問がされていて回答が載っていて私も勘違いに気づいた。
w2ui gridチートシート
Renderの種類と表示
データ | render | 結果(デフォルトen-us) | 結果(ja-jp) |
---|---|---|---|
テスト | text | テスト | テスト |
1234.5 | int | 1,235 | 1,235 |
1234.5 | float:0 | 1,235 | 1,235 |
1234.5 | float:1 | 1,234.5 | 1,234.5 |
1234.5 | float:2 | 1,234.50 | 1,234.50 |
1234.5 | number:0 | 1,235 | 1,235 |
1234.5 | number:1 | 1,234.5 | 1,234.5 |
1234.5 | number:2 | 1,234.50 | 1,234.50 |
1234.5 | money | $1,234.50 | \1,235 |
1234.5 | currency | $1,234.50 | \1,235 |
1234.5 | percent | 1,234.5% | 1,234.5% |
2000/01/01 | age | 15.7 years | 15.7 years |
2013/01/03 | date | Jan 3, 2013 | 2013年1月月03日 |
2013/01/03 | date:yyyy/mm | 2013/01 | 2013/01 |
1:52 pm | time | 13:52 | 13:52 |
13:52 | time | 13:52 | 13:52 |
13:52 | time:h12 | 1:52 pm | 1:52 pm |
13:52 | time:h24 | 13:52 | 13:52 |
1.4.3のバグ
- 6448行目のformatTimeの引数に'h24:min'となっているが'h24:mi'が正しいので注意。
- ロケールja-jpのdateは月が2つ続くので注意。
日本語表示
// 日本語のjsonファイルを適用 w2utils.locale('/lib/w2ui/locale/ja-jp.json');
セルの水平位置
{ field: 'hoge', caption: 'hoge', size: '40px', // styleで変更が出来る style: 'text-align:center' }
FMEAを調べてみた。
プログラマからSEへ仕事の内容が変わり新しく学ぶ事の中で、FMEAが分からなかったので余暇を使って調べてみました。 ブログやホームページで色んな解説を読んでみましたが様々な解釈があり、書かれている事を鵜呑みにするのは危なさそうでした。 JIS C 5750-4-3:2011(日本工業規格)にFMEAについての定義があったので、まずはこれを読んでみることにしました。
JIS C 5750-4-3:2011の定義
FMEAはFailure Mode and Effects Analysisの略で、JIS C 5750-4-3には以下の様に定義されています。
FMEAは、システムの性能(直接の組み立て品及び全体のシステム又はあるプロセスの性能)に関する潜在的故障モード並びに それらの原因及び影響を明確にすることを目的とした、システムの解析のための系統的な手順である。
また以下の用語が定義されています。
アイテム
ディペンダビリティの対象となる、部品、構成品、デバイス、装置、機能ユニット、機器、サブシステム、システムなどの総称又はいずれか。
故障
アイテムが要求機能達成能力を失うこと。
フォールト
アイテムが要求機能を達成できない状態。
この規格では、"フォールト"を歴史的な理由で"故障"という言葉に言い換える。
故障の影響
運用、機能、又はアイテムの状態による故障モードの結果。
故障モード
アイテムにおける故障の様子。
注記 JIS Z 8115のF2の定義を次に示す。
故障状態の形式による分類。例えば、断線、短絡、折損、摩耗、特性の劣化など。
故障の様子、故障の状態と微妙な言い回しの違いや、故障とフォールトの定義が分かれているのに、フォールトを故障と言い換えると されていたりで、故障が状態を表しているのか事柄を表しているのか混乱してきます。
少し整理
書いている事を図にしてみました。
だいぶマシになってきましたが、まだ意味が分からないので、ファイルにログを出力するメソッドを例に当てはめてみます。
故障モードの定義にある、故障状態の形式による分類というのがあまり意味がよくわかりませんが、wikiにある定義を読むと意味が通ります。
製品システムを構成する項目(item)の構造的な(根源的な)破壊をいう。一方、故障とは機能障害である。何もなくただ機能しないということはありえなく、その製品が機能しない原因となる不具合が必ずある。この故障(機能障害)を引き起こした不具合、これが故障モードである。
なんとなく用語の関係が見えてきたので、これをベースに残りの記述を読んでいきます。