[Windows] Macと同じようなカーソル移動ができるように設定:CapsLock (F13) + a/e/b/k...など

普段は Mac を使っている人が、なんらかの制約 (例えば職場の支給PCなど) によって Windows を利用する時に困ってしまうことがいくつかある。そのうちの一つが「カーソル移動」だろう。例えば Mac では、文字を「control + a/e」で行頭/行末にカーソルを移動させたり、「control + b/f」で一文字分カーソルを前後に移動させたりすることができる (他にも、「control + あるキー」で一行上/下、一文字消す、行末まで消す、エンターキー代わる、などなど)。Mac の日本語配列キーボードだと、controlキーは a の左側にある。小指を少し動かして control を押しながら 普通の (?) 文字を押せばカーソルを動かせるし、文字を消したりできる。つまり、わざわざ手をホームポジションから移動させることなくカーソル移動だったり文字の削除だったりができるのだ。たくさん文字を打つような場面では重宝する。

Windows でも同じようなことができないかなぁ、と思いインターネットで調べていたら、見事な解決策を考えられている方が多数。導入してみたところ、「Windows を使う負担感」が激減したので、備忘も兼ねてシェア。なお、Windows 10 を利用。

Step1: ChangeKey で「Caps Lock」を「F13」にする。

Change Key を利用するのが簡単みたい。インストール後、Caps Lock の scan code を 「0x0064」とする。
これは、Caps Lock を F13 という、実際には存在していないキーとして利用できるようにする操作のよう。つまり、Caps Lock を押すと、F13 が押されていることになる。(あと、今回の記事の内容とは関係ないけれども、追加で、Ctrl左 と Alt左 を入れ替えている。Mac の command キーの場所に、Windows の Ctrl を置くようにすると、ストレスが減る)
参考: ChangeKeyを使用してWindowsキーをF13キーに変更する方法 | 情報科学屋さんを目指す人のメモ(FC2ブログ版)。

Step2: AutoHotKey で 「CapsLock (=F13) + 〜」に、別のキーを割り当てていく。

AutoHotKey を利用すると、特定の入力を別の入力と置き換えることができる。例えば、「F13キーを押しながらaを押したら、Homeボタンが押されたことにする」ということが可能になる。2021年2月現在のスクリプト:

;Emacs風。なお、CapsLockをF13に割り振っている(AutoHotKeyを利用している。ScanCode --> 0x0064)
F13 & a::send,{Blind}{Home}
F13 & e::send,{Blind}{End}
F13 & p::send,{Blind}{Up}
F13 & b::send,{Blind}{Left}
F13 & n::send,{Blind}{Down}
F13 & f::send,{Blind}{Right}
F13 & d::Delete
F13 & h::Backspace
F13 & m::Send {Blind}{Enter}
F13 & k::send {Shift}+{End}{Delete}

;Ctrl + q で閉じる
^q::send, !{F4}

;F13 (Capslock) を押しながら ↑で音量Up、↓でDown
F13 & Up::
Send,{Volume_Up 1}
SoundPlay, x64
Return

F13 & Down::
Send,{Volume_Down 1}
SoundPlay, x64
Return
「Emacs風」のカタマリがキー操作関係。セミコロンはコメントアウト。
基本的には「::send,」の左側の入力をすると、右側の入力がされたことになる、というイメージ。{Blind}というのを挟むと、Shiftを押しながらの操作も可能になるらしい。 (Ctrl+q で Alt+F4, F13と上/下でボリュームUP/Down もついでに。)
あとは、当該のファイルを右クリックで run すれば完了。
また、shell:startup に当該ファイルを置いておくと、Windowsを起動した際に自動的にスクリプトが実行されるので便利。
参考:WindowsでもmacOSのようなキー操作を実現する | 学ぶ、考える、書き出す。

AutoHotKey を使うと、どのようなソフト・アプリでもキーバイドが有効になってくれるのが嬉しい。というのは、以前、Mac版のOfficeを使っているときは、VBAのIDEでは control + a などのキーバインドが効かなくてとても辛かった。今回の AutoHotKey のやり方だと、Windowsにも関わらず VBA でもなんでも上記のキーバインドが使えるようになる。VBA の IDE を使わなければならない時の負担感がずいぶん軽減される。

[HTML] highlight.js でソースコードをハイライトする

highlight.js を使って、ソースコードをハイライトできるようにしてみた。

準備として、次のコードをhead内にコピペ。

<link rel="stylesheet"
      href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.15.6/styles/default.min.css">
<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.15.6/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>
準備完了。

後は、ハイライトしたいコードを、"pre" と "code" で囲むだけ。

print("hello world")

for i in range(0,10):
    print(i)

参考

[Python] Python + TreeTagger で英語の文に品詞アノテーションをする

前回の記事では、入力された英文を Python + TreeTagger で処理して、原形の情報を得ました。その過程で、入力された単語(そのままの形)と品詞の情報も得られますので、今回はそれらを使って、品詞アノテーションをします。

イメージとしては:

入力:"He has lots of books."
      ↓↓↓
出力:He_PP has_VHZ lots_NNS of_IN books_NNS ._SENT

それぞれの単語の後ろに、アンダーバー(_)と、品詞情報(PP, VHZなど)がくっついています。このように品詞情報を付与してコーパスを作成すると、より高度な検索などがしやすくなるようです。

line に入っている文が処理されますので、ダブルクオーテーションマークの中の文を分析したい文に変えてください。また、input() やコマンドライン引数を使うことで、より簡単に扱うこともできそうです。

なお、POS (品詞) がそれぞれどういう意味であるかは、TreeTaggerのページにある "tagset documentation" をクリックすることで確認することができます。

関連

[Python] Python + TreeTagger で英語の文の原形を得る

TreeTagger を Python で動かして、原形を得ます。

下のコードでは、例として "He has lots of books, and I have as many books." という文を処理しています。アウトプットとして、['he', 'have', 'lot', 'of', 'book', ',', 'and', 'I', 'have', 'as', 'many', 'book', '.'] と返ってきます。

なお、10行目の "line" に処理をする文を格納していますが、input()を使ったり、コマンドライン引数を使ったりすると、使い勝手も向上しそうです。

関連

[Mac][Excel] 数式を値に、値を数式に変換する (イコールを取ったり、つけたりする) マクロ Excel for Mac

USBにあるエクセルファイルのデータを参照して、PCにあるエクセルファイルで作業する機会があった。というのは、USBのエクセルファイルには、自分のPCに置いておきたくないような情報が入っていたので、そのファイルをPCに移してしまうことはせずに、PCのエクセルファイルからデータを読み出し、そのPC上のエクセルファイルで作業を進めたのだ。

イメージとしてはこのような感じ:

エクセルファイル2 をPCにコピーしたくなかったので、エクセルファイル1 で参照して作業

もうすこし具体的には、エクセルファイル1 (PC上のファイル) で

='/Volumes/USB名/.../[エクセルファイル2.xlsx]シート名'セル番地
という数式を入力して、PC上でUSB内のエクセルデータの値を参照していた。

想定としては、USBを抜いてしまえば、PCのファイルからは参照されたデータが見えなくなってしまうと思っていたのだが、そうでもなさそう。エクセルファイル1 を開いた際に、リンクを更新しなければ、エクセルファイル2 のデータが見えてしまう (ようだ)。

"更新しない" をクリックすると、USBのデータが見えてしまう (みたい)

USBのデータがPCから見えてしまうのを避けたい。ということで、解決策として、上記の数式を値にしてしまうマクロ、つまりイコールを取ってしまうマクロを書いてみた。イコールを取られた値に対して実行すると、またイコールが付与された数式になります。次のようなイメージ:

='/Volumes/USB名/.../[エクセルファイル2.xlsx]シート名'セル番地
↓↑
'/Volumes/USB名/.../[エクセルファイル2.xlsx]シート名'セル番地

*変換したい範囲を選択してから実行します。

[Mac][Excel] Excel for Mac 2016 でマクロを使って、ショートカットキーのユーザー設定の代用にする

諸事情あり Excel for Mac 2016 を使っているが、どうやら、2011版と違い、ショートカットキーのユーザー設定ができない (ようだ)。困った。

ただ、いろいろなボタンを押してもがいていると、マクロにはショートカットキーを当てられるとわかったので、これで代用している。ということで、しばしば使う命令をマクロで書いてみた。下の方にスクリプトを載せておきましたので、もしも役に立つ方がいらっしゃったら、ぜひご利用ください。


  • *なお、スクリプトは、「個人用マクロブック」に保存します。そうすると、どのファイルにおいても、上記のコマンドを利用することができます。個人用マクロブックの作成方法などについては All About のこちらの記事 が分かりやすいです。

  • *スクリプトを書いたら、[ツール/マクロ.../オプション...] をクリックします。そうすると、ショートカットキーを設定できます。

  • MyHeight・・・行の高さを変更
  • MyMerge・・・セルの結合/結合を解除
  • MyPrintAreaSetUp・・・選択された部分を印刷範囲として設定
  • MyCenter・・・選択範囲で文字列を中央ぞろえ




[R] R の hist() でのヒストグラムに、各階級の度数を書き入れる #2

前回の記事では、hist() を使って描いたヒストグラムに、各階級の度数を書き入れました。

ただ、毎回スクリプトを書いているのは面倒なので(?)、上記機能を組み入れたりして hist() を拡張した myhist() を作りました。

基本的には自分用なので、平均点を表す線を引いたりするのも入れてあります。もしもお役に立ちそうでしたらご自由にお使いください。



[R] R の hist() でのヒストグラムに、各階級の度数を書き入れる

やりたいこと:

R で hist() を使って、ヒストグラムを描き、
加えて、各階級の度数を表示する。
つまり、次のような感じ:


なお、データは Rに入っている iris を利用する。

1. やり方

irisの1列目のデータを利用する。今回は、わかりやすさのために、変数d に iris[,1] を代入しておく。つまり、変数d に分析したいデータ (ベクトル) が入っているものとする。ではズバリ、次のように書く:



2. 仕組み

変数infoの中には、次の通り、ヒストグラムを描くための情報が入っている (info で出てくる):

このうち、今回関連のある情報は:
  • $counts が度数
  • $mids が階級値 (階級の真ん中の値)
ですので、
  • x座標 = info$mids
  • y座標 = 1 (この値は任意)
の位置に info$counts を書き入れる (text()) 、ということ。

なお、y座標はお好みで。下にいくつか例をあげておく。

y=info$counts-1


y=info$counts+0.5


y=info$counts/2


  • hist() を拡張した myhist()はコチラ。


[Mac] [Excel] Excel for Mac 2011 でガントチャート #6

エクセル (Excel) で作るガントチャート、第6回目です。過去記事はこちら:

  1. [Mac] [Excel] Excel for Mac 2011 でガントチャート #1
  2. 1つのタスクの開始日から終了日までを色づけする
  3. [Mac] [Excel] Excel for Mac 2011 でガントチャート #2
  4. 複数のタスクの開始日から終了日までを色づけする
  5. [Mac] [Excel] Excel for Mac 2011 でガントチャート #3
  6. 年、月、日、曜日を表示する
  7. [Mac] [Excel] Excel for Mac 2011 でガントチャート #4
  8. 「初日 (基準となる日)」から相対的なやり方で表示する
  9. [Mac] [Excel] Excel for Mac 2011 でガントチャート #5
  10. ガントチャートの日付 (初日) を変更しやすくする」


前回はガントチャートの日付 (初日) を変更しやすくするように変更を加えました。今回は:

「タスク名称 (大・中・小) を書き入れるスペースを作る」
のを目標にします。

出来上がりは次のような感じ:


タスク名称は、大項目・中項目・小項目の3つに分けて書き入れられるようにしてみます。中・小項目がインデントされているように表示させましょう。また、コミュニケーション際の便宜のために、タスクに番号 (No.) を振れるようにしておきましょう。

まずは、列Aを選択してから右クリックし、挿入。合計4列分、挿入します。各列を適当な幅に調整します。A列は1.23cm、B・C列は0.6cm、D列は3.49cmにしてあります。
幅は任意ですが、B・Cは狭く、Dは広くしておく


B列に大項目、C列に中項目、D列に小項目を書き入れていくと、中・小項目がインデントされたように見えて、わかりやすいと思います。
(もしも文字列がずれてしまう場合は、「左揃え」にします)

最後に、「タスク名称」のタイトルをB4セルに入力します。この入力された「タスク名称」をB–Dのセルの中央に表示したいのですが、やり方は2つあり、好みの問題になります。
  1. B4–D4セルを「セル結合 (セルを結合し中央揃え)」
  2. B4–D4セルを選択し「セルの書式設定」から横位置を「選択範囲内で中央」
セルの結合は後々で諸所の作業がやりづらくなりがちですので、今回は2つ目のやり方にしておきます。


これで出来上がり。

なお、G5セルを選択して、ウィンドウ枠の固定をしておくと、枠がずれないので便利かもしれません。


[Mac] [Excel] Excel for Mac 2011 でガントチャート #5

エクセル (Excel) で作るガントチャート、第5回目です。過去記事はこちら:

  1. [Mac] [Excel] Excel for Mac 2011 でガントチャート #1
  2. 1つのタスクの開始日から終了日までを色づけする
  3. [Mac] [Excel] Excel for Mac 2011 でガントチャート #2
  4. 複数のタスクの開始日から終了日までを色づけする
  5. [Mac] [Excel] Excel for Mac 2011 でガントチャート #3
  6. 年、月、日、曜日を表示する
  7. [Mac] [Excel] Excel for Mac 2011 でガントチャート #4
  8. 「初日 (基準となる日)」から相対的なやり方で表示する


前回は日付を「初日 (基準となる日)」から相対的なやり方で表示するように変更を加えました。今回は、その相対性を活用すべく:

「ガントチャートの日付 (初日) を変更しやすくする」
のを目標にします。まずは現在の状況を確認しておきましょう。現在はC4セルにだけベタ打ちされた絶対的な日付が入力されており (「2016/11/23」) それ以外のセルは、そのC4のセルの日付を利用して値が表示されています。
C4セルにのみデータのベタ打ち、それ以外はC4セルから相対的に決まる


ということですので、C4セルの値を変更すればすべての日付が自動的に変更されます。

ただ、問題があります。C4セルが2つの役割を担ってしまっています:

  1. ベタ打ちされた「年/月/日」データであり、チャートに表示される初日を決める
  2. 「年/月/日」を具体的に備えた値であるが、「曜日」として表示する
このことによって、初日がわかりづらくなったり、また、時間が経つとC4セルにベタ打ちされた日付によって他の日付も相対的に決定されるということを忘れてしまうかもしれません。是非foolproofにしたいので、1つ目の役割を他のセルに担わせます。

ということで、B2セルに「年/月/日」データをベタ打ちするようにしましょう。そして、そのベタ打ちされたデータをC4セルが参照する、という形にします。では、B2セルに日付を入力し、C4セルに「=B2」と入力します (試しにB2セルには「2016/12/1」と入力しました)

このことによってfoolproof-nessが向上します。初日を変更したい場合は今のB2セルに具体的な日付を入力します。

次はこちら --> [Mac] [Excel] Excel for Mac 2011 でガントチャート #6





[Mac] [Excel] Excel for Mac 2011 でガントチャート #4

エクセル (Excel) で作るガントチャート、第4回目です。過去記事はこちら:

  1. [Mac] [Excel] Excel for Mac 2011 でガントチャート #1
  2. [Mac] [Excel] Excel for Mac 2011 でガントチャート #2
  3. [Mac] [Excel] Excel for Mac 2011 でガントチャート #3


前回は枠組みに関して作業を進めました。1行で表示されていた日付を「年、月、日、曜日」というように4つの要素にバラしました。今回は、少しだけ作業を進めましょう。

「初日 (基準となる日)」から相対的なやり方で表示する
のを目標にします。これまでは「2016/11/23」「2016/11/24」「2016/11/25」...というように絶対的に日付を入力していきました。今回からは「2016/11/23 (初日)」を絶対的に入力したら、「2016/11/24 (初日から1日後)」「2016/11/25 (その日から1日後)」というように初日から1日ずつずらしていく、というやり方で日付を表示します。前回と見た目は変わりませんが、後々になって便利さが増します。

C4セルが初日です (2016/11/23)。その隣のセル (D4) に「=C4+1」と入力します。



そうしたら、D1からD4セルを選択し、右下を横にビーっとドラッグして必要な日数分伸ばしていけば終了です。
見た目は変わりませんが、初日から1日ずつずれた日にちということで曜日が表示されます。

なお、横にドラッグして適当な日数分の枠を作って何ら問題がありませんが、マクロを使って枠を作ることも可能です。今、仮に100日分のマスを追加したいと考えたとします (約3か月)。[ツール->マクロ->Visual Basic Editor] をクリックし、[挿入->標準モジュール] をクリックします。

[ツール->マクロ->Visual Basic Editor]↓↓↓
[挿入->標準モジュール]


ウィンドウが出てくるので、次の文字列を入力 (コピペ) します。
Sub test()
Dim yoko As Integer
yoko = 100

Range("D1:D4").Select
Selection.AutoFill Destination:=Range(Selection, Selection.Offset(0, yoko)), Type:=xlFillDefault
End Sub
それから、再生ボタン (または Fn + F5) を押すと、100日分横にビーっとドラッグしたのと同じことが起きています。
再生ボタン (Fn + F5) を押すと↓↓↓


なお、上にスクリプトの3行目「yoko = 100」の「100」を「200」にすれば200日分追加されますし、「30」にすれば30日分追加されます。作成したいガントチャートにはどれくらいの作業日程が必要かを考えて、適当な値を入力します。

最後に列の幅を調整して、出来上がりです。



次はこちら --> [Mac] [Excel] Excel for Mac 2011 でガントチャート #5



[Car] クイック板金(2回目)

車のバンパーを擦ってしまった。。。ということで、 イエローハットのクイック板金 にお願いしていました。別の店舗に持って行っての作業ということで数日かかりましたが、無事に車が帰ってきました。結果、とても綺麗に直してもらい、非常に満足しています。板金をしたと言われても、素人目にはわか...