2016年11月28日月曜日

Android 4.1 (Jelly Bean) 以降でも、logcat表示アプリを使えるようにする。(「android.permission.READ_LOGS」権限の有効化)

まとめ

Android 4.1 (Jelly Bean) 以降で logcat表示アプリ を機能させるためには、adb shell (pm) を使って、「android.permission.READ_LOGS」権限を有効化する必要あり。(root化は不要)

  • adb shell pm grant <PACKAGE> android.permission.READ_LOGS

たとえば、aLogcat を Jelly Bean 以降でも機能させたい場合には、adb shell で下記のコマンドを実行する。

  • adb shell pm grant org.jtb.alogcat android.permission.READ_LOGS

背景

android.permission.READ_LOGS」権限の protectionLevel が、Jelly Bean から変更になった。

Android 4.0.3 (Ice Cream Sandwich MR1) 以前の READ_LOGS
android:protectionLevel="dangerous"
Android 4.1 (Jelly Bean) 以降の READ_LOGS
android:protectionLevel="signature|system|development"

その結果、通常のアプリでは、AndroidManifest.xml で「android.permission.READ_LOGS」権限を要求するだけでは、権限が有効にならなくなった。
AndroidManifest.xml での権限要求に加えて、パッケージマネージャ (pm) での権限有効化 (grant) が必要となった。

つまり、「android.permission.READ_LOGS」権限を有効化されていないアプリは、Android 4.1 (Jelly Bean) 以降では、他アプリの出力したログを取得 (表示) できない。(できなくなった)


参考

2016年11月20日日曜日

GanttProject をより使いやすく (隠し機能: マウス操作のカスタマイズ)

GanttProject のマウス操作は、カスタマイズできる。


カスタマイズ方法

GanttProject-2.8\plugins\net.sourceforge.ganttproject\data\resources 配下の「mouse.properties」を 直接編集することで、特定の機能に割り当てられたマウス操作 (下記) を変更できる。

割り当て変更可能なマウス操作
コンテキストメニュの表示 デフォルト: 右クリック
依存関係 (先行タスク) の設定デフォルト: タスクを左ドラッグ
ガントチャートのスクロール デフォルト: チャートの背景部分を、左ドラッグ
タスクの移動 (左右) デフォルト: タスクをCtrl+左ドラッグ
マウスでの単一選択 デフォルト: 左クリック
マウスでの複数選択 デフォルト: Ctrl+左クリック

カスタマイズ例

「依存関係の設定」(左ボタンドラッグ) と、「タスクの移動」(Ctrl + 左ボタンドラッグ) のマウス操作を入れ替える場合の例:

変更「前」の mouse.properties
mouse.contextMenu=Button3
mouse.dependency=Button1
mouse.drag.chart=Button1
mouse.drag.task=Ctrl+Button1
mouse.select.single=Button1
mouse.select.multiple=Ctrl+Button1
変更「後」の mouse.properties
mouse.contextMenu=Button3
mouse.dependency=Ctrl+Button1
mouse.drag.chart=Button1
mouse.drag.task=Button1
mouse.select.single=
mouse.select.multiple=Ctrl+Button1

上記のように変更することで、タスクの移動 (ドラッグ) 時に Ctrlキー を押さなくてもよくなる。その代り、依存関係 (先行タスク) を設定するときには Ctrlキー を押す必要あり。

※このカスタマイズをする場合、上記の例のように「mouse.select.single」のボタン割り当ても変更 (解除) しておいた方がよい。さもなくば、複数タスクをまとめてのドラッグ移動ができなくなる。

2016年11月13日日曜日

SourceTree (for Windows) を、ユーザ登録なしで (Atlassianアカウントを作成せずに) 使用したい。

結論

過去バージョンを使用する。

開発元(Atlassian)のサーバから、Atlassianアカウントの作成が不要な最終版 (バージョン 1.7.0.32509) をダウンロードして使用する。

※2016/11/23 追記※

この記事の方法では、解決できない。

一定期間だけ試用できるようにはなるが、最終的には Atlassianアカウントの登録 が必要となる。

※以降の内容は投稿時のままであり、修正していない。(参考までに残しておく)


背景

Source Tree (for Windows) は、バージョン 1.8.0.36401 から ユーザ登録 (Atlassianアカウントの作成) が必須になっている。

図1. Atlassianアカウントの作成 (またはログイン) を促す画面

そこで、バージョン 1.8.0.36401 のひとつ前のバージョンである、バージョン 1.7.0.32509 を使用する。

開発元の Atlassian は、SourceTree の過去バージョンもダウンロードサーバに置いてくれているため、過去バージョンの入手は容易。

参考情報

おまけ (Mac OS X 版について)

SourceTree の Mac OS X 版については、環境を持っていないため 裏取りをしていないが、どうやら バージョン 2.2 から Atlassianアカウントの作成が必要になる模様。(根拠: SourceTree Release Notes (for Mac OS X))

その前のバージョンとなると、バージョン 2.1 もしくは バージョン 2.0.5.8 あたりが利用可能かもしれない。

2016年11月12日土曜日

ポモドーロテクニック 覚書

ポモドーロテクニックとは

()


ポモドーロテクニックに必要なツール

  • ペン または 鉛筆
  • キッチンタイマー
  • 3枚の紙
    1. アクティビティ在庫シート (Activity Inventory)
    2. 今日のTODOシート (ToDo Today)
    3. レコーディングシート

アクティビティ在庫シート (Activity Inventory)

  • やらなくてはいけない「アクティビティ」(= タスク) を書きだす。
  • 重要なことも そうでないことも、すべて書き出す。
  • 順番や優先順位のことは考えなくてよい。
  • 作業内容ではなく、作業が完了したらどのような状態になるかを書く。
  • 略語や長い説明は使わず、重要な単語だけを書く。
  • たとえば1か月後に自分で読み返したときに、内容理解できるように書く。
  • 1行に1項目ずつ、箇条書きにする。
  • アクティビティの完了期限が分かっているならば、期限も一緒に書いてよい。

アクティビティ在庫シート上での見積もり

  • 「アクティビティ在庫シート」上に各項目について、どれだけ時間がかかるかを見積もる。
  • 見積もりの単位は、「ポモドーロ」である。(1ポモドーロは、通常25分間)
    見積もりの結果は、「そのアクティビティを完了させるために必要なポモドーロの個数」である。
  • ポモドーロは分割できないので、見積もりの結果は必ず整数となる。(分数や小数は許されない)
  • 7ポモドーロ以上必要なアクティビティは、大きすぎる。アクティビティを分解すること。
    分解後の各サブアクティビティは、それぞれ独立したアクティビティとして「アクティビティ在庫シート」に記入し、別々に見積もりを行う。
  • 「アクティビティ在庫シート」上に各項目の右端等に、見積もりの結果 (必要なポモドーロの個数) を書く。
    見積もり結果は後から訂正することがあるため、できれば鉛筆等の消せる筆記具で記入するとよい。
  • 見積もり結果が1ポモドーロ以下のアクティビティについては、例外的に アクティビティの右端等に「0」と記入する。これは「0ポモドーロで完了できる」という意味ではなく、「1ポモドーロより小さい」という意味である。

今日のTODOシート (ToDo Today)

「今日のTODOシート」には、「今日完了できる」と自分に約束できるアクティビティだけを書く。

  • 「アクティビティ在庫シート」を見て、今日完了させるべきアクティビティを「今日のTODOシート」に転記する。
    ※ここでは、優先順位を加味して選ぶ。(優先順位が高いアクティビティを優先して選ぶ)
  • 「アクティビティ在庫シート」に書かれていないアクティビティで、今日完了させるべきアクティビティが他にないかを考える。
    もし思いつくならば、そのアクティビティも「今日のTODOシート」に書く。
  • 「今日のTODOシート」は、当日期限のコミットメントである。
    (その日に完了できる見込みがない項目は、書くべきではない)
  • 「アクティビティ在庫シート」上で「0ポモドーロ」のアクティビティは、2~3個を集めて1つの組にする。「今日のTODOシート」に書く際には、1つの組であることが分かるよう1行にまとめて書く。

ポモドーロの実施

  1. 「今日のTODOシート」上の各行に対し、「そのアクティビティに必要だと見積もったポモドーロと同じ個数」の小さな四角形(□)をそれぞれ書いておく。
    たとえば、ポモドーロが3つ必要なアクティビティに対しては、そのアクティビティの行に小さな四角形を3つ書いておく。(□□□)
  2. これから作業を実施すべきアクティビティを決める。
    それは、「今日のTODOシート」に書かれた未完了のアクティビティの内で、最も優先順位が高いアクティビティである。
  3. タイマーを25分後に鳴るよう設定して、上で決めた「ただ一つのアクティビティ」に専念する。
  4. ポモドーロの最中に、アクティビティを取り替えてはならない。また、ポモドーロの途中で休憩を取ってはならない。
  5. 1ポモドーロ分の作業時間が経過してタイマーが鳴ったら、作業を実施したアクティビティの行に書いておいた小さな四角形(□)に、1ポモドーロの終了を意味するチェックマークを記入する。
  6. また、今回のポモドーロで 対象アクティビティ自体を無事完了できたら、「今日のTODOシート」上のそのアクティビティの行に、取り消し線を引く。
  7. タイマーが鳴り、チェックマークを記入したら、直ちに休憩時間を取る。3分~5分程度の休憩を取り、休憩時間中は脳を休めること。(5分間浅い仮眠をとることが理想)
    気分転換のための休憩ではなく、脳を休めるための休憩であるため、メール、電話、SNS、インターネット等も避ける。休憩時間前に行ったポモドーロや、次に行うポモドーロのことも考えてはならない。
    (メールや電話は、ほかの作業と同様に、アクティビティとして取り組むべき)
  8. セットブレイク: 複数のポモドーロ(例: ポモドーロ4回分)を1セットとし、1セットの終了時には 通常よりも長い15分~30分程度の休憩を取る。
    このセットブレイクでは、インターネット等の気分転換を実施しても問題ない。しかし、やはり重要なメール等はセットブレイク中も避けるべきで、それらはアクティビティとして取組むべきである。
  9. 休憩が終わったら、引き続き同じアクティビティに取り組むのか、それとも 別のアクティビティに切り替えるのかを決める。
    通常、ここでアクティビティの切り替えが発生するのは、直前まで実施していたアクティビティが完了したか、アクティビティの優先順位が変換した場合である。
    次に取り組むアクティビティが決まったら、上記の「2.」に戻る。

見積もり誤差のトレース

  • もし、あるアクティビティが完了する前に、そのアクティビティの行の四角形すべてにチェックマークが記入された場合(= 見積もりしたポモドーロを使い切ってしまった場合)、見積もりしたポモドーロが足りなかったことになる。(見積もり過小)
    その場合は再度見積もりをする。「あといくつのポモドーロがあれば対象アクティビティを完了できるか」を推測し、追加で必要となるポモドーロと同じ個数の小さな丸(○)を、小さな四角形(□)の隣に書き加える。
    さらにもし、小さな丸(○)も使い切った場合には、3回目(かつ、最後)の見積もりをし、丸(○)の隣に三角形(△)を書き加える。万が一それでもアクティビティが完了しないならば、そのアクティビティは失敗である。4回目の見積もりは行わない。失敗の原因を分析し、そのアクティビティを小さな部分に分解する必要がある。

2016年11月4日金曜日

エクスプローラーの検索結果から作成したショートカットを、普通のショートカットに戻したい。

初めに結論

目的を達成するために、WSH(VBScript)でスクリプトを書いた。

  • ReCreateShortcuts.zip (2 KB)
    検索結果から作成したショートカットを、普通のショートカットに変換するスクリプト。
    • ここでいう「ショートカット」とは、拡張子が「.lnk」のファイル。
      拡張子が「.url」等のファイルは、対象外(というか、意味をなさない)。
  • 動作確認環境: Windows 7 Professional (Service Pack 1) 64ビット
  • 誰かの役に立つかもしれないので、MITライセンス の下で公開。
  • 上記のzipファイルには「ReCreateShortcuts.vbs」というファイルが入っており、これがスクリプト本体。

スクリプト(ReCreateShortcuts.vbs) の使い方

変換したいショートカットファイル(複数可)を、ReCreateShortcuts.vbs にドロップするだけ。

対象のショートカットは、削除→再作成される。
もし万が一があると困る方は、対象のショートカットファイルをバックアップしてから当スクリプトを実行すること。

筆者は 当スクリプトを「送る」(shell:sendto) に配置して運用している。


困りごとの概要

エクスプローラーで検索した結果 をコピーしてショートカットファイルは、通常のショートカットファイルとは異なり、あくまで 検索結果へのリンク となる。(ショートカット先への直接リンクにはならない)

具体的には、たとえばリンク先が
search-ms:displayname=検索場所%3A%20Program%20Files&crumb=すべてのテキスト:Microsoft&crumb=location:C%3A%5CProgram%20Files
などになり、直接リンク(「C:\Program Files\Microsoft Office」など) にはならない。

図1. エクスプローラーの検索結果 から作成したショートカットを開いた場合:
search-ms:displayname=検索場所%3A%20Program%20Files&crumb=すべてのテキスト:Microsoft&crumb=location:C%3A%5CProgram%20Files

筆者個人のニーズとしては、たとえ検索結果から作成したショートカットであろうとも、ショートカット先への直接リンクとして機能してほしい。

図2. 望む挙動: (ショートカット先への直接リンク)
C:\Program Files\Microsoft Office

上記の挙動は、もしかしたら設定レベル(レジストリか何か)で変更できるのかもしれないが、手っ取り早くスクリプトを書いて解決した。

実現方法

WSH(VBScript)で、WScript.Shellを使用して対象のショートカットファイルを再作成するだけ。再作成により、検索結果の情報が取り除かれて、いわゆる普通のショートカットに戻る。

ソースコード

※ソースファイルのエンコーディングは Shift_JIS (厳密には、コードページ932) になっている。ほかのエンコーディングに変えてしまうと、おそらく動作しない。

2016年11月3日木曜日

ローカル NTFS ボリュームは、操作を完了する必要があります。

mklink のエラーメッセージが、とても分かりにくい、という話。(Windows 7 日本語版 で確認)

(もう一歩踏み込むと、「エラーメッセージの翻訳に失敗している」)


mklink のエラーメッセージ

ローカル NTFS ボリュームは、操作を完了する必要があります。

エラーメッセージの原文

Local NTFS volumes are required to complete the operation.

日本語 直訳

操作を完了させるためには、ローカル NTFS ボリューム が必要です。

日本語 意訳 (= 顧客が本当に必要としていたもの)

ローカル NTFS ボリューム ではないため、操作を完了できません。