Fn + B : Break キー
Fn + K : ScrLK、または Scroll Lock キー
Fn + P : Pause キー
Fn + S : SysRq キー
Fn + 4 : PCスリープ
Fn + Space : キーボードのバックライトのON/OFF
Fn + End : Endキー(FnなしだとInsertになる)
ThinkPadのショートカットキー
Excelシートコピー時の「名前の定義」重複エラーをなくす方法
1.コピー元のExcelで以下のマクロを実行して、非表示となっている全ての「名前の定義」を表示させる。
Public Sub VisibleNames()
Dim name As Object
For Each name In Names
If name.Visible = False Then
name.Visible = True
End If
Next
MsgBox "完了", vbOKOnly
End Sub
2.Ctrl+F3キーを押下して「名前の定義」を表示。
3.不要な「名前の定義」を削除。
4.シートのコピーを実行。
以上
Vim標準の折り畳み機能を無効にする。
以下の設定をvimrcに追記すればOKです。
"折り畳みを無効に---------------------------------------------------------
set foldmethod=syntax
let perl_fold=1
set foldlevel=100 "Don't autofold anything
Markdown記法
Markdown記法をまとめてみました。
# 見出し1
## 見出し2
### 見出し3
見出し1
見出し2
見出し3
●テキストスタイル
・太字
normal **bold** normal
normal __bold__ normal
normal bold normal
normal bold normal
・斜字
normal *italic* normal
normal _italic_ normal
normal italic normal
normal italic normal
・取消し線
normal ~~strikethrough~~ normal
normal strikethrough normal
・太字 and 斜字
**bold *italic* bold**
bold italic bold
●インデント
> hoge
>> foo
>>> bar
hoge
foo
bar
●コード
Gitコマンド
``` git status git add git commit ```
git status
git add
git commit
●リンク
[GitHub Pages.](https://pages.github.com/)
●リスト
Disc型
* list1
+ list2
- list3
* list3-1
+ list3-1-1
- list3-2
- list1
- list2
- list3
- list3-1
- list3-1-1
- list3-2
- list3-1
Decimal型
1. list1
1. list2
1. list3
- list1
- list2
- list3
Definition型
<dl>
<dt>タイトル1</dt>
<dd>内容</dd>
<dt>タイトル2</dt>
<dd>内容</dd>
</dl>
- タイトル1
- 内容
- タイトル2
- 内容
●タスクリスト
- [x] task1
- [ ] task2
- [ ] task3
●水平線
---
***
___
●テーブル
|ヘッダ1|ヘッダ2|ヘッダ3|ヘッダ4|
|---|:---:|---:|---|
|左寄せ|中央揃え|右寄せ|改行|
|12344567890|12344567890|12344567890|foo<br/>bar|
ヘッダ1 | ヘッダ2 | ヘッダ3 | ヘッダ4 |
---|---|---|---|
左寄せ | 中央揃え | 右寄せ | 改行 |
12344567890 | 12344567890 | 12344567890 | foo bar |
VimでMarkdown編集
deinを使ってインストール
Markdown編集関連
[[plugins]]
repo = 'plasticboy/vim-markdown'
on_ft = ['markdown','mkd']
quote内のプログラムをシンタックスハイライトする
[[plugins]]
repo = 'joker1007/vim-markdown-quote-syntax'
on_ft = ['markdown','mkd']
編集中のMarkdownファイルのプレビューを作成する
[[plugins]]
repo = 'kannokanno/previm'
on_ft = ['markdown','mkd']
プレビューをブラウザで開いてくれる
[[plugins]]
repo = 'tyru/open-browser.vim'
on_ft = ['markdown','mkd']
プレビュー表示するには
:PrevimOpen`
PMBOKの要求事項収集プロセス
PMBOKの要求事項収集プロセスの技法をまとめてみた。
●要求事項収集プロセス
プロジェクト目標を達成するために、ステークホルダーのニーズを定義・文書化するプロセス。
●ヒアリング技法
●グループ発想技法
●グループ意思決定技法
●要求事項収集プロセス
プロジェクト目標を達成するために、ステークホルダーのニーズを定義・文書化するプロセス。
インプット | 技法 | アウトプット |
・プロジェクト憲章 ・ステークホルダー登録簿 |
・インタビュー ・フォーカス・グループ ・ファシリテーション型ワークショップ ・グループ発想技法 ・グループ意思決定技法 ・アンケートと調査 ・観察 ・プロトタイプ |
・要求事項文書 →WBS ・要求事項マネジメント計画書 →プロジェクトマネジメント計画書 ・要求事項トレーサビリティ・マトリックス →スコープ検証、スコープコントロール |
●ヒアリング技法
用語 | 説明 | 備考 |
インタビュー | ・ステークホルダーと直接会話して、必要な情報を見出す方法。 ・予定した質問と、話の展開に応じた質問を行い、回答を記録する。 ・公式、非公式、どちらの場合もある。 ・「一対一」の形式が多いが、質問者や回答者が複数の場合もある。 |
|
フォーカス・グループ | ・一定の条件を満たした参加者を集めて、期待や意見の聞き取り調査をすること。 ・司会役(モデレーター)が参加者同士の会話を促進させて、意見を引き出す。 |
|
ファシリテーション型ワークショップ | ・主要なステークホルダーを集めて、集中的に意見調整する ・要求事項を迅速に定義し、ステークホルダー間の際を迅速に調整する、基本的な技法。 ・適切なファシリテーションの元で、信頼構築、関係強化、コミュニケーション改善が図れる。 ・ステークホルダーの合意の可能性を高める。 ・迅速に問題が発見・解決される。 |
●グループ発想技法
用語 | 説明 | 備考 |
ブレーンストーミング | 自由で幅広い発想を得るための会議方法の一つ。 以下の4原則 ・批判厳禁(アイディアを批判してはいけない) ・自由奔放(自由で突飛なアイディアを歓迎する) ・質より量(とにかく沢山のアイディアを出す) ・結合改善(アイディアに便乗したり、アイディア同士をつなげたりする) |
|
ノミナル・グループ法 | ブレーンストーミングに投票プロセスを加え、結論を出す方法。 | |
デルファイ法 | ・質問・回答・フィードバックのプロセスを繰り返して合意形成する方法。 ・回答者は匿名とする。 ・匿名性なので、特定の人が結果に対して過度の影響を及ぼさない。 |
|
アイデア・マップ法 マインド・マップ法 |
アイデアを単一のマップにまとめて、理解の共通点や違いを明確化するための技法。 | |
親和図 | はっきとしない問題や漠然とした状況に対して、課題を整理して構造化する手法の一つ。 言葉の意味や親和性によってグルーピングして図に表すことで、問題の本質を明らかにする。 |
●グループ意思決定技法
用語 | 説明 | 備考 |
満場一致 | 全員が同意することを条件とする。 | Unanimity |
過半数の50% | 参加者の50%を超える支持によって決定する。 | Majority |
相対多数 | 過半数に達しなくても、最大票数の意見が選ばれる。 | Plurality |
独裁 | 一人の個人がグループの意思を決定する。 | Dictatorship |
Vimでマッチング操作
Vimでよく使う、マッチングコマンドです。
様々なシーンでのデータ処理に使えるので知っておくと便利です。
重複する行だけにする
:%!sort|uniq -d
※uniqコマンドを利用するには、mingwをインストールしてパスを
通しておく必要があります。
マッチする行を削除
:g/hoge/d
マッチしない行を削除
:v/hoge/d
様々なシーンでのデータ処理に使えるので知っておくと便利です。
重複する行だけにする
:%!sort|uniq -d
※uniqコマンドを利用するには、mingwをインストールしてパスを
通しておく必要があります。
マッチする行を削除
:g/hoge/d
マッチしない行を削除
:v/hoge/d
C#でGoogle Maps APIを使う(2点間の移動時間を取得)
先日の続編で2点間の移動時間を取得するメソッドを実装してみました。
ポイントは、移動モードを指定するところです。
現在、日本での利用では、driving(車), walking(徒歩)の2種類の移動時間取得のみに制限されています。
ポイントは、移動モードを指定するところです。
現在、日本での利用では、driving(車), walking(徒歩)の2種類の移動時間取得のみに制限されています。
- public class GoogleMapsApiUtil {
- public enum MovingMode : int {
- driving = 1, //車
- //transit, //電車 ←日本ではサポート外
- walking, //徒歩
- //bicycling //自転車 ←日本ではサポート外
- }
- ///
/// 2点間の車での移動時間を取得 /// - ///
- ///
- ///
- ///
- public static double GetDuration(string origin, string destination, MovingMode mode, string apiKey) {
- double ret = 0;
- WebResponse response = null;
- try {
- string url = @"https://maps.googleapis.com/maps/api/distancematrix/json?origins=" +
- origin + "&destinations=" + destination + "&mode=" + mode.ToString() + "&key=" + apiKey;
- HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
- response = request.GetResponse();
- Stream dataStream = response.GetResponseStream();
- StreamReader sReader = new StreamReader(dataStream);
- string jsonString = sReader.ReadToEnd();
- Debug.Write(jsonString);
- var jo = JObject.Parse(jsonString);
- JToken jt = jo.SelectToken("$.rows..elements..duration.value");
- ret = double.Parse(StringUtil.NullBlankToZero(jt.ToString()));
- return ret;
- } finally {
- response.Close();
- }
- }
- }
C#でGoogle Maps APIを使う(2点間の距離を取得)
Google Maps APIを使って2点間の距離を取得するメソッドを実装してみました。
例えば「origin:東京」-「destination:大阪」を指定してリクエストを投げると、以下の形式のJSONが返されるので、
JSONPathを使って、距離の部分を抜き出して戻り値にセットしています。
●例)「東京」-「大阪」間でリクエストを投げた時のJSON取得結果
- public static double GetDistance(string origin, string destination, string apiKey) {
- double ret = 0;
- WebResponse response = null;
- try {
- string url = @"https://maps.googleapis.com/maps/api/distancematrix/json?origins=" +
- origin + "&destinations=" + destination + "&key=" + apiKey;
- HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
- response = request.GetResponse();
- Stream dataStream = response.GetResponseStream();
- StreamReader sReader = new StreamReader(dataStream);
- string jsonString = sReader.ReadToEnd();
- Debug.Write(jsonString);
- var jo = JObject.Parse(jsonString);
- JToken jt = jo.SelectToken("$.rows..elements..distance.value");
- ret = double.Parse(StringUtil.NullBlankToZero(jt.ToString()));
- return ret;
- } finally {
- response.Close();
- }
- }
例えば「origin:東京」-「destination:大阪」を指定してリクエストを投げると、以下の形式のJSONが返されるので、
JSONPathを使って、距離の部分を抜き出して戻り値にセットしています。
●例)「東京」-「大阪」間でリクエストを投げた時のJSON取得結果
- {
- "destination_addresses" : [ "Osaka, Osaka Prefecture, Japan" ],
- "origin_addresses" : [ "Tokyo, Japan" ],
- "rows" : [
- {
- "elements" : [
- {
- "distance" : {
- "text" : "513 km",
- "value" : 512545
- },
- "duration" : {
- "text" : "6 hours 16 mins",
- "value" : 22563
- },
- "status" : "OK"
- }
- ]
- }
- ],
- "status" : "OK"
- }
Simple Injectorを使ってみた
手軽に利用できるDIコンテナ「Simple Injector」を使ってみました。
パッケージ開発のアドオンの受け口などで活用できそうです。
●このデモで利用するクラス一覧
クラス/インタフェース | 説明 |
---|---|
Program.cs | このクラスで以下の処理を行います。 ・コンテナ生成 ・注入オプジェクト登録 ・コンテナの登録内容の検証 ・InjectionTargetClassのメソッドを実行 |
IProxy.cs | 注入オブジェクトのインタフェースです。 |
HogeProxy.cs | 注入オブジェクトの具象クラス。 |
FooProxy.cs | 注入オブジェクトの具象クラス。 |
BarClass.cs | 注入オブジェクトの具象クラス。(IProxyは実装していない。) |
InjectionTargetClass.cs | オブジェクト注入対象のクラスです。 このクラスで注入されたオブジェクトを利用します。 コンストラクタの引数に注目してください。 コンテナに登録されたオブジェクトが渡されます。 |
●Program.cs
- using SimpleInjector;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace SimpleInjectorInConsoleApp {
- class Program {
- private static Container container;
- static void Main(string[] args) {
- container = new Container();
- //デフォルトのLifestyleを確認
- Console.WriteLine("デフォルトのLifestyle : " + container.Options.DefaultLifestyle.ToString());
- container.Register
(Lifestyle.Singleton); //登録をFooProxyに切替えると、利用側のクラスを変更せずに処理を切り替えれます。 //container.Register (Lifestyle.Singleton); //コンストラクタにRegister()していないTypeの引数を渡す方法 container.Register (() => new BarClass("bar"), Lifestyle.Singleton); container.Verify(); // Useコンテナに登録していないが、コンストラクタインジェクションを行って必要な // オブジェクトを設定してインスタンスを作成してくれる。 (auto-wiring) var a = container.GetInstance (); a.Write(); //自動でコンソールが閉じるの防ぐ Console.ReadLine(); } } }
●IProxy.cs
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace SimpleInjectorInConsoleApp {
- ///
/// インタフェース /// - public interface IProxy {
- void Write();
- }
- }
●HogeProxy.cs
- using System;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace SimpleInjectorInConsoleApp {
- ///
/// 注入クラスHoge /// - class HogeProxy : IProxy {
- public void Write() {
- Console.WriteLine("hoge");
- }
- }
- }
●FooProxy.cs
- using System;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace SimpleInjectorInConsoleApp {
- ///
/// 注入クラスFoo /// - class FooProxy : IProxy {
- public void Write() {
- Console.WriteLine("foo");
- }
- }
- }
●BarClass.cs
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace SimpleInjectorInConsoleApp {
- ///
/// 注入クラスBar /// ※ IProxyを実装していない /// - public class BarClass {
- private string val = "";
- public BarClass(string str) {
- val = str;
- }
- public void Write() {
- Console.Write(val);
- }
- }
- }
●InjectionTargetClass.cs
- using SimpleInjector;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace SimpleInjectorInConsoleApp {
- ///
/// オブジェクト注入対象クラス /// - public class InjectionTargetClass {
- private readonly IProxy _proxy;
- private readonly Container _container;
- private readonly BarClass _dummy;
- public InjectionTargetClass(IProxy proxy, Container container, BarClass dummy) {
- _proxy = proxy;
- _container = container;
- _dummy = dummy;
- }
- public void Write() {
- _proxy.Write();
- Console.WriteLine("注入コンテナのDefaultLifestyle : " +
- _container.Options.DefaultLifestyle);
- _dummy.Write();
- }
- }
- }
●実行結果
Sencha ExtJs ModernでIFRAMEを組込む
Ext.ux.IFrameは、Classic Toolkitのみで提供されています。
Modern Toolkitでは、Ext.Panelのhtmlプロパティ等にiframeタグを直接記入することにより実現できます。
以下のサンプルは、クロスドメインにならないように同じサイトの別のサンプルをIFRAMEで表示します。
デモ&ソース
Modern Toolkitでは、Ext.Panelのhtmlプロパティ等にiframeタグを直接記入することにより実現できます。
以下のサンプルは、クロスドメインにならないように同じサイトの別のサンプルをIFRAMEで表示します。
デモ&ソース
Sencha ExtJs ModernでLoadMaskを実装
LoadMaskの実装方法をメモ。
Ext.deferを使って、非同期処理完了後にmask.hide()を呼び出すのがポイント。
以下のサンプルは、「Run」ボタンタップ後、5秒間LoadMaskを表示し、後続処理を実行します。
デモ&ソース
Ext.deferを使って、非同期処理完了後にmask.hide()を呼び出すのがポイント。
以下のサンプルは、「Run」ボタンタップ後、5秒間LoadMaskを表示し、後続処理を実行します。
デモ&ソース
登録:
投稿 (Atom)
厳選 Visual Studioの便利なショートカット
エラー箇所にジャンプ 「Ctrl + Shift + F12」 ブレークポイント 設定/解除 「F9」 有効化/無効化 「Ctrl + F9」 ViEmu特有 「:ls」:バッファナンバーのリストを表示。 「:b2」:バッファ2のファイルを開く。 「:n」:次のバッファのファ...
-
以下のSampleのとおり、ReadJEnc.JP.GetEncoding()メソッドで文字コードを自動判定することができます。 実装例 public void DetectingEncodeTest() { var path = @"C:\Te...
-
最近、無償提供されたMicrosoft Teamsにプログラムからメッセージ投稿してみたいと思い、実装してみた。 システム監視、センサなどから情報投稿など、いろいろ利用できそう。 まずは、Microsoft TeamsのIncoming Webhook APIのURLを...
-
ファイルがロックされているかどうか判定 public class ExchangeUtil : PublicWebApiUtil { /// ファイルが開かれてロックされているかどうか /// true:ロックされている/false:されていない p...