やる気を引き出す動機付けテクニック3選+激励アウトソーシング

フィードバックする

  1. ポジティブフィードバック
  2. ネガティブフィードバック 

頑張って成果を上げている人には「いいね!」とポジティブフィードバックを、成果が出ていない人にはダメ出しのネガティブフィードバックをしがちだが、逆。

  • やる気のない人にこそ、ポジティブフィードバック(頑張っているね、など)
  • 頑張っている人にこそ、ネガティブフィードバック(ここは改善した方が良いなど)

目標設定する

3段階回の目標設定を使い分ける。

パフォーマンスを向上させるには、目標の設定期間をどのように設定するかが非常に重要。目標までの期限を短く設定することが効果的。

1.序盤

成し遂げた成果に着目する

2.中盤

ダレやすいので、エクストリームスモールゴールを設定し、こなしていく

3.終盤

デッドライン(残っている量や締め切り)に着目する 

 

報酬を与える

即時的報酬

秒で与えられるフィードバック。仕事をしてその場で1万円もらえるのと、1か月後に1万貰えるのと、随分と違うはず。ダイエットがうまくいかないのは、食事制限や筋トレをしても成果が得られるのは3か月後・半年後であるのに対して、甘いものを食べて得られる報酬はすぐに「美味しい!」となるから、挫折しやすい。

確定的報酬

人は確実にもらえる報酬を好む。例えば「購入者全員に○○が付いてくる」のようなもの。

外発的報酬

外発的報酬を増やすことは、内発的報酬のメリットを損なう危険性が大きいと言われている。使い分けが大事。仕事の着手前は外発的報酬に目を向ける。着手後・開始後は内発的報酬に目を向ける。

 

アダムグラントの激励アウトソーシング

社員のやる気は、次の3つのステップメカニズムで上がっていく。

1.影響

以下に他人の役に立っているかを自分の目で確認する

2.感謝

エンドユーザから評価されていることを実感する

3.共感

顧客のニーズや問題点をより深く理解することができるようになる

激励アウトソーシングの6つの方法

自分や社員のモチベーションを効率よく上げる6つの方法として、激励アウトソーシングというテクニック

1.過去、現在、未来の視点からエンドユーザを特定する

組織の様々な人たちから話を聞いて、過去、現在、未来にわたって、自分たちの仕事によってどんな恩恵を受けけているのか、幸せにしているのか、を考える。
2.新たなストーリーを探し出す

エンドユーザが特定できない場合、現場に足を運んで誰かの人生に影響を与えているのだというストーリーを探し出す。
3.エンドユーザ体験ができるイベントを行う

エンドユーザと顔を合わせる事が一番メリットが大きい。
4.顧客の写真を見せる

笑顔の写真よりも、満たされていない表情の顧客の写真を見せると共感感情が高まり、助けたいという気持ちになる。
5.社員同士の顧客ストーリーを共有する

自分のエンドユーザストーリーを互いに紹介し、共有する。他人に与えた影響ノートを書く、など。
6.外部ストーリーを共有する

業務上自分の与えた影響がわかりにくい場合、過去に自分と同じ仕事をした人の英雄譚や普通の人の英雄譚を共有する。リーダーの成功ストーリーは効果がない。上司の場合自分の失敗談は良い。

Visual Studio 2015 ”日本語” の環境に KB3165756 を適用するとテ

以下の情報は、2016/08/02付で修正版が出ました!
早めの対応が行われてよかった!
Bugs that are fixed in version 14.0.25425.01, released on 08/02/2016
Issue 9
Authored the resource DLL. Now customers can load the TestExplorer Window with localized strings.
でも9番目なんだ。。。

テストエクスプローラが動かん!

なんですか?このメッセージは。

パーツ "Microsoft.VisualStudio.TestWindow.UI.TestWindowToolWindowControl" の初期化中に例外がスローされました。

            • テストの探索が開始されました ------

========== テストの探索が完了しました: 17 が見つかりました (0:00:01.7260987) ==========

            • テストの実行が開始されました ------

========== テストの実行が完了しました: 17 が実行されました (0:00:03.5642039) ==========

エラーメッセージでググってみると同じような人がいました。

Visual Studio 2015 "日本語" の環境に最新の更新 (KB3165756) を適用するとテストエクスプローラーが機能しなくなります

VisualStudio Community 2015 Update 3 適用でテストウィンドウに例外発生 ⇒ 言語設定を英語にすれば治りますけど・・・

MSさん、早いとこ、お願いしますよ〜
StandardCollector.Service.exe でメモリリークが発生していて、下のように書いてあったから、このパッチあてたのに。
Update for Microsoft Visual Studio 2015 Update 3 (KB3165756)

Bugs that are fixed in version 14.0.25422.01, released on 07/12/2016
Issue 6
This fix addresses a memory leak in the StandardCollector.Service.exe process. You commonly encounter this leak when you debug managed code on Windows 7 that has Visual Studio 2015 Update 3 installed.

Visual Studioのコード分析機能を利用してコードの品質を上げてみよ

コード分析

まずはプロジェクトの設定を行います。プロジェクトのプロパティページの「コード分析」タブで、「ルールセット」を既定の"Microsoft マネージ推奨規則"から"Microsoft のすべての規則"に変更します。

ちなみに組み込み済みのルールの詳細はこちら

「分析」メニューから「ソリューションでコード分析を実行」を選びます。

コード分析が終わると、「エラー一覧」ウィンドウに警告事項が並びます。154、多!

「コード」列に現れる"CA1062"とかをクリックすると、MSDNの該当ページが開くのでこれを参考にコードを修正していきましょう。これはがんばってみるしかないか。

全部が全部対処しなきゃいけないかって言うと、そうでないものもあると思います。そういう場合は「抑制」することで出ないようにすることが出来ます。
やり方は2種類あります(ソース内 or 抑制ファイル)が、今回は抑制ファイルで指定します。

「エラー一覧」で該当の警告を右クリックして「メッセージの非表示」⇒「抑制ファイル内」をクリックします。するとプロジェクト直下に「GlobalSuppressions.cs」が作られここに記述されます。中身は以下のようになっています。

[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "SEQ", Scope = "member", Target = "SkillDB.Models.資格取得.#SEQ")]
// このファイルは、このプロジェクトに適用される SuppressMessage 
//属性を保持するために、コード分析によって使用されます。
// プロジェクト レベルの抑制には、ターゲットがないものと、特定のターゲット
//が指定され、名前空間、型、メンバーなどをスコープとするものがあります。
//
// このファイルに抑制を追加するには、[コード分析] の結果でメッセージを 
// 右クリックし、[メッセージの非表示] をポイントして、
// [抑制ファイル内] をクリックします。
// このファイルに手動で抑制を追加する必要はありません。

いちいちやるのも面倒だと思うので、ビルド時に実行するように設定しましょうかね。
プロジェクトのプロパティページの「コード分析」タブで、「ビルドに対するコード分析の有効化」にチェックを入れて保存!

コードメトリクスの計算

コードの保守容易性を測定するための機能があります。その名も「コードメトリクスの計算」。
MSによれば、下記のような機能だそうで。

この機能ではコードを静的に分析し、 メソッド(あるいはクラスや名前空間)ごとに、コードの行数や、クラスの結合度、継承の深さといった数値を計測します。また、サイクロマティック複雑度の計測を行い、それらの数値を勘案しながら、「保守容易性インデックス」という数値を計算します。
「保守容易性インデックス」は最大値が 100 となる指標であり、メソッドあたりのコードが長すぎたり、サイクロマティック複雑度が大きい(分岐が多い)コードに対しては、保守容易性の観点でペナルティ(マイナス値)を付けて計算する数値となります。

「分析」メニューの「ソリューションのコードメトリクスを計算」です。

保守容易性インデックスの値が低くて、サイクロマティック複雑度が高い場合、メソッドのコード行数が長かったり、if 文による分岐が多かったりするケースが見受けられるようです。
そのような場合は、VSのリファクタリング機能を利用して、ある程度意味のあるまとまりで別のメソッドとしてロジックを切り出して改善しましょう。
と言いながらVSのリファクタリング機能使ったことないんですけど。「編集」メニュー⇒リファクター⇒メソッドの抽出、かな?

コードクローン分析(コード複製分析)

プロジェクトにおいて点在している「似た」コードを素早く特定します。これにより、リファクタリング対象となるコードを効率的に見つけることが可能です。

「分析」メニューの「ソリューションのコードクローン分析」です。

ここで見つかったモノに対して、問題がないか確認しながら、リファクタして(メソッドとして抽出して)共通化していきましょう。

また、コードの一部を選択して、右クリックして、「ソリューション内で一致する複製を検索」することも出来るので、それもリファクタ対象ですね。がんばりましょう!

Staging環境にデプロイしてみる

デプロイするために、Windows Server 側で設定しておくこと

Web配置ツールが必要らしいのでインストールします。ダウンロードからですが。

セットアップの種類は念のため、「完全」でやりました。

IISで、他にも設定変更しないといけなかった。

.NET Framework バージョンの変更
v2.0.50727 ⇒ v4.0.30319

受診規則を設定しないと繋がらないので、こんな風にしました。
使用:ワイルドカード
パターン:SkillDB/*
大文字小文字:区別しない
アクションの種類:なし
後続の処理停止:Yes

ビルド、デプロイの手順

まずはプロジェクトを右クリックして「公開...」を選びます。
初回は(「カスタム」で)プロファイルを作ります。

サイト名の部分は、既存のWebサイトの名前/アプリ名にしたかったのでこうしました。

構成は、事前に作っておいたものから選択しました。

そして発行ボタンを押すだけです。

そうすると、このようにフォルダに色々作成されます。

これをサーバーにコピーして、デプロイすることになります。

サーバー側ではどこでもいいのでコピーします。
私は、TEMPの下にコピーしました。

後はコマンドプロンプトで行います。
SkillDB.deploy-readme.txtをちゃんと読んで欲しいのですが、まずは、テスト実行です。

SkillDB.deploy.cmd "-skip:objectName=filePath,absolutePath=.images" /T


ちなみに "-skip:objectName=filePath,absolutePath=.images" は、アプリの中のimages(フォルダ)は除外してね。っていうおまじないです。通常imagesフォルダの中に入れておくような画像全部は開発環境では保持しませんからね。

上手く行くことを確認してから、本チャンです。

SkillDB.deploy.cmd "-skip:objectName=filePath,absolutePath=.images" /Y

この通り、展開されてデプロイされています。

念のためIIS再起動

iisreset /restart

じゃあログインしてみましょう。ちゃんとログイン画面が出ました。

今日はここまで。

ASP.NET MVC の Entity Framework で Oracle 既存DB 使いたい

ASP.NET MVC の Entity Framework で Oracle 既存DB 使いたい

って一度書きましたけど、自分としてもう少し良いやり方を見つけたのでそれをメモ。

Modelsで右クリックして、新しい項目を追加します。

ADO.NET Entity Data Modelを選択して、名前を適当に付けます。

で、ここがポイント!「データベースからCode First」を選びます。

で、必要なテーブルやビューを選択します。

すると、Modelsの下にこんな感じで、DBContextクラスや、テーブル(やビュー)に1対1で紐付いたモデルクラスが出来上がります。

ここからがCode Firstチックです。既存DBの情報を自動で読み取りはするも、十分ではないので自分でアノテーション付けていきます。
(ビューなんかはまるでダメですし)
例えば、PKには[Key]を付けます。複合PKの場合は、一つ目の列には[Key][Column(Order = 0)]、二つ目の列には[Key][Column(Order = 1)]、とします。
また、入力チェックしたければ、[Required(ErrorMessage = "{0}は必須です")]とか[StringLength(20, ErrorMessage ="{0} は {1} 文字以内で入力して下さい。")]とかします。
DBの列名とモデルのプロパティ名は、自動読み取りだと同じになりますが、一致していなくても大丈夫です。[Column("DBの列名")]をつければ良いです。テーブル名もですよ。
一例を示しますが、このようにすれば、既存DB読み取って作ったモデルだけど、色々できそうですよね。

[Key]
[Column("社員番号", Order = 0)]
[DisplayName("社員番号")]
[StringLength(8)]
[Required]
public string 社員番号 { get; set; }

[Column("P_NO")]
[DisplayName("プロジェクトコード")]
[Required(ErrorMessage = "{0}は必須です。")]
[StringLength(20, ErrorMessage ="{0} は {1} 文字以内で入力して下さい。")]
[RegularExpression("[a-zA-Z0-9-]+", ErrorMessage = "{0} は半角英数字(ハイフン含む)で入力して下さい。")]
public string P_NO { get; set; }

一旦今日はここまで。

IIS Express 10 (Visual Studio 2015) でリモート(localhost以外、他のホスト)からアクセスしたい

applicationhost.config の修正

IIS Expressの設定ファイル"applicationhost.config"を変更します。
google先生に尋ねると、 C:\Users\ユーザ名\Documents\IISExpress\config\applicationhost.config だと言うんだけど、中身を見ると違う。ローカルを調べまくってみると、下記にあることが分かった。

C:\Users\ユーザ名\Source\Repos\SkillDB\.vs\config\applicationhost.config


念のため、対象プロジェクトかどうかを physicalPath で検索して確認。
siteセクション内のさらにbindingsセクションの中にbindingタグを追加します。
修正前

<site name="(プロジェクト名)" id="2">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="(プロジェクトファイルのあるパス)" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:3189:localhost" />
    </bindings>
</site>

修正後

<site name="(プロジェクト名)" id="2">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="(プロジェクトファイルのあるパス)" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:3189:localhost" />
        <binding protocol="http" bindingInformation="*:3189:(このホスト/マシンのIPアドレス)" />
    </bindings>
</site>

ACL(Access Control List)の設定

管理者権限でコマンドプロンプトを開き、下記のコマンドを実行して下さい。

netsh http add urlacl url=http://IPアドレスorホスト名:ポート番号/ user=everyone

デバッグとか終わって削除する場合は、下記のコマンドを実行して下さい。

netsh http delete urlacl url=http://IPアドレスorホスト名:ポート番号/

Windows ファイアウォール でポートに穴を空ける

空けます。

これで繋がりますよ。

ASP.NET MVC の Entity Framework で Oracle 既存DB 使いたい

まずは準備

ツール -> NuGet パッケージマネージャー -> パッケージマネージャーコンソール
で、ODACをインストールしておく。

PM> Install-Package Oracle.ManagedDataAccess

あとついでに
ツール -> NuGet パッケージマネージャー -> パッケージマネージャー設定 -> パッケージソース
で、以下を追加しておく。

名前 NuGet
ソース https://api.nuget.org/v3/index.json

ここまで終わったら、
ツール -> NuGet パッケージマネージャー -> ソリューションのNuGetパッケージの管理
で、「oracle」で検索して、いかがインスト済みか確認までしておく。

名前 作成者
Oracle.ManagedDataAccess Oracle
Oracle.ManagedDataAccess.EntityFramework Oracle

web.configで接続先の設定、書いておく。

  <oracle.manageddataaccess.client>
    <version number="*">
      <dataSources>
        <dataSource alias="ORCL" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL))) " />
      </dataSources>
    </version>
  </oracle.manageddataaccess.client>
  <connectionStrings>
    <add name="OracleDbContext" providerName="Oracle.ManagedDataAccess.Client" connectionString="User Id=scott;Password=tiger;Data Source=ORCL" />
  </connectionStrings>

そして一応、ソリューションをビルドして、VS再起動しておく。

こんな記事もあるけど、やっぱりOracle Developer Tools for VS2015のインスト、いりそう。
http://stknohg.hatenablog.jp/entry/2014/11/02/173039
結果>
ODT for VS2015 インストしていないとOracleDBに繋がらないみたい。

モデル > 追加 > 新しい項目 で、「ADO.NET Entity Data Model」を選択する。

データベースからEF Designerを選択する。

ん?エラー?とりあえず「新しい接続」ボタンを押す。

データソースとかダメなので、現在使用中のtnsnames.oraをどうこうしてやる。

既存のやつからコピーする。



エラーが出るので、ディレクトリに対して権限を与える。

データソースとかも大丈夫なので、これでテスト接続

成功!

これで進める。

DB内のテーブルとかビューとか見れた!

一旦ここまで。

ASP.NET MVC 、既存DB、開発したい。

スキャフォールディング機能を使ってアプリ開発

CRUD対象となるデータモデルは前回、既存DBから作ったので、準備OKという事で。
コントローラを作るところから始める。
ソリューションエクスプローラーからControllersで右クリックして、追加⇒コントローラー。

Entity Framework を使用した、ビューがある MVC 5 コントローラー を追加ボタン押下して、色々入力する。

モデルクラスには、CRUD対象となるモデルを指定する。
データコンテキストクラスには、対応するコンテキストを指定する。

スキャフォールディングで、勝手にコントローラー内のメソッドに対応したビュースクリプトがView/コントローラー名/配下に作成される。
Index.cshtmlを開いてみると、ここまでビュースクリプトが自動作成されている。

ここで、実行できるかどうかを確認してみる。(Ctrl+Shift+w)


ちゃんと表示された。Visual Studioすげー。
今回はここまで。(これをベースに手を加えていく)