bar_1

contents_map

2018年12月21日金曜日

Thor はじめに Getting Started

始めるにあたり, thorについて知らなければならない2,3のことがある. 例えば, タスクをロードするためのファイル命名規則や, 通常はコマンドラインで thor コマンドによってあなたのスクリプトを呼び出すことである (これは他にも方法がある)
There are a few things that you need to know about thor to get started. For example, it uses a file name convention to load tasks, and you typically call your scripts via the thor command line, though this is not the only option.

ファイル名 File Names

thorタスクをひとつ作るには, 最初に, 拡張子 .thor をもつファイル (Thorfile というファイルでもよい) がひとつ必要となる. このファイルには, thorが提供する機能を含んだ任意の標準のRubyコードを, 入れることができる. thor コマンドライン・ツールが実行されると, もろもろの .thor ファイルを探し, ロードして, あなたが作成したタスク群が使用できるようになる.
To create a thor task, the first thing you need is a file ending with the .thor extension (a file named Thorfile works as well). This file can contain any standard ruby code, including the functionality provided by thor. When the thor command line tool is run, it will look for .thor files and load them up, making your tasks available.

シンプルな例 A Simple Example

test.thor というファイルを作って, 以下のコードを書く:
Create a file named test.thor and place the following code in it
class Test < Thor
  desc "example", "an example task"
  def example
    puts "I'm a thor task!"
  end
end
あなたは一旦これを作りさえすれば, コマンドラインから thor list を実行することで, 以下のような出力が得られる:
Once you have this created, you can run thor list from the command line and you should see the following output:
test
----
thor test:example  # an example task
さあ, コマンドラインから thor test:example を実行しよう. I'm a thor task! という出力が得られるはずだ.
Now run thor test:example from the command line. You should see I'm a thor task! output to the command line.

サンプルを深く理解する Breaking Down The Sample

このタスクには, 何が起きているかを理解するために試せる, 5,6個のパーツがある.
There are several parts of this task that can be examined to understand what is happening.
最初に, クラス名はタスクの名前空間として使われる. Thorは クラス名を名前空間に変えるために, もろもろのRuby標準命名規則を使う. 例えば, あなたがクラス名を FooBar に変えた場合, タスクはこのとき foo_bar:example としてリストされる.
First, the class name is used as the namespace for the task. Thor uses some standard ruby conventions to turn the class name into a namespace. If you change the class name to FooBar, for example, your task would now be listed as foo_bar:example.
次に, desc メソッドが使われているが, これはわれわれが作成しようとしているタスクを記述するのためのものだ. descメソッドには ふたつのパラメータ が ある. 第1のパラメータは 定義するタスク(メソッド)の名称を明示するためのもので, 任意のパラメータ群をそのメソッドに与えられる. 第2のパラメータは プレーンテキストで, このタスクが何をするものなのか説明するためのものだ.
Next, the desc method call is used to describe the task that we are creating. There are two parameters to the desc method. The first parameter should state the name of the task (the method) and any parameters that are provided to the method. The second option should be a plain text description of what this task does.
最後は, example メソッドそのものだ. Thorはこのメソッド名を実際のタスク名として使用する. それゆえ, exampleメソッドを widget にリネームした場合, タスクは test:widget としてリストされることになる.
Last, the example method itself. Thor uses this method name as the actual task name. Therefore, when you rename the example method to widget, you end up with a task listing of test:widget.

タスクのパラメータ Task Parameters

以下のthorタスクは, パラメータをひとつメソッドに加えることによって, タスクにパラメータをひとつ定義する:
The following thor task defines one parameter on the task by adding a parameter to the method:
class Test < Thor
  desc "example FILE", "an example task that does something with a file"
  def example(file)
    puts "You supplied the file: #{file}"
  end
end
descの第1パラメータを’FILE’という語を含むものにアップデートしたことに, 注意してほしい. 前述のように, タスクの記述にはタスク・パラメータを任意に含めてよい. これはエンドユーザが使いやすいようにヘルプ・テキストを提供するものだ.
Note that the description has been updated to include the word ‘FILE’ in the first parameter. As stated previously, you should include the name of any required task parameters in the task description. This is used to produce help text that is useful to the end user.
thor help test:example を実行してtest:exampleタスクのヘルプテキストを見てみると, 以下のような出力を見れるだろう:
Run thor help test:example to see the help text for the test:example task and you will see the following output:
Usage:
  thor test:example FILE

an example task that does something with a file
これはそのタスクにFILEパラメータが必要であることを示す.
This indicated the requirement of a FILE parameter for the task.
thor test:example my_file.rb でタスク自体を実行した場合, You supplied the file: my_file.rb と目にするはずだ.
Now when you run the task itself, with thor test:example my_file.rb you should see You supplied the file: my_file.rb.
もしファイル名を与えずにスクリプトを実行すれば, ひとつ与える必要があるという "example" was called incorrectly. Call as "thor test:example FILE". のメッセージを目にするだろう.
If you run the script without a file supplied, you’ll see a message saying you need to supply one: "example" was called incorrectly. Call as "thor test:example FILE".

タスクのオプション Options For A Task

Thorはまた, ひとつのタスクに対して, もろもろの名前付けしたオプションを与えることもできる. いくつかのメソッドがこれを行っており, より詳細については [[method options]] のWikiページを参照してほしい.
Thor also lets you provide named options for a task. There are several methods of doing this, and more detail can be found on the [[method options]] wiki page.
あなたのtest.thorファイルに以下を書いてみよ:
Put the following into your test.thor file:
class Test < Thor
  desc "example FILE", "an example task"
  method_option :delete, :aliases => "-d", :desc => "Delete the file after parsing it"
  def example(file)
    puts "You supplied the file: #{file}"
    delete_file = options[:delete]
    if delete_file
      puts "You specified that you would like to delete #{file}"
    else
      puts "You do not want to delete #{file}"
    end
  end
end
この例では, 5,6個のパラメータとともに method_option がひとつ指定されている. 第1のパラメータはオプションのフルネームだ. これはコマンドライン上で —オプションひとつに変換される. このケースでは --delete だ. :aliases オプションは, このオプションのために, ひとつかそれ以上の省略形のエイリアス群を提供する. このケースでは -d が省略形として提供される. 最後に :desc でこのオプションの説明を与えた.
In this example, a method_option has been supplied with several parameters. The first parameter is the full name of the option. this is translated into a — option on the command line. In this case, --delete. The :aliases option allows you to provide one or more short-hand aliases for the option. In this case, -d has been provided as a short-hand alias. And last, a description of the option has been provided.
thor help test:example を実行すると, 以下の出力がみれる:
Run thor help test:example and you will see the following output:
Usage:
  thor test:example FILE

Options:
  -d, [--delete=DELETE]  # Delete the file after parsing it

an example task
今, このタスクを —delete オプション有りでも無しでも実行できる.
Now you can run the task with or without the delete option.
thor test:example my_file.rb を実行すると, 以下のようになる:
Run thor test:example my_file.rb, you will see this output:
You supplied the file: my_file.rb
You do not want to delete my_file.rb
thor test:example my_file.rb --delete もしくは thor test:example my_file.rb -d で実行してみると:
Run thor test:example my_file.rb --delete or thor test:example my_file.rb -d and you will see:
You supplied the file: my_file.rb
You specified that you would like to delete my_file.rb
作成したタスク・メソッドひとつにつき, 多くのメソッド・オプションを必要なだけ指定できる. これらをメソッド名に対して積み上げていくだけで, タスク内に現れるだろう.
You can specify as many method options as you need, for a given task method. Just keep piling them on to the method name and they will show up in the task.

ハサミを持って突っ走る Running With Scissors

ここでの諸例は単純で不自然だったが, 今はなにかしら, 実際のthorタスクの機能を使ってみることができるだろう. thorのさまざまなオプションや能力のドキュメントについては, 他のwikiページ (訳注: githubにあるThorのWikiのこと. この訳文群のこと) もチェックしてみること.
Though the examples here are simple and contrived, you should be able to get started with some real functionality for your thor tasks, now. Be sure to check the other wiki pages for documentation on the various options and capabilities of thor.

コマンドラインオプションの実装に使えるライブラリThor Wiki 日本語訳

Rubyに限った話ではないけども, コマンドラインから実行するスクリプトを書く際, コマンドラインオプションのパース部分をもっときれいに書けないか, わたしはいつも悩む.
これまで, べた書きをしてみたり, GNU由来のgetopt, getopt_long, 標準で用意されているOptionParserといったライブラリを使ってみたりした. またいろいろなOSSのオプション解析ルーチンを探っては読んでみたりもした. 今まで書いたり読んだりした中で自分が比較的しっくりきたのはOptionParserだけれども, 処理のスタイルはコードによって皆バラバラで, どうも「コレ」と言ったものが見当たらない…….
さて, 書いているソフトがある程度複雑になり仕様も大きくなってくると, オプション指定の形式として, gitのようなサブコマンドを受け付ける方式を導入したくなってくる. なぜなら, 仕様を整理したり実際にソフトを使用したりする際に, 機能的なまとまりがはっきりしてわかりやすいからだ.
そこで今回わたしは, サブコマンド形式を受け付けるようなオプション解析ライブラリがないか, Web上にあるコマンドライン・オプションのパーサに関する記事やRubyGems(とりあえずはRubyで入り用なので)を調査してみた. 候補は多数あったが, 現時点では以下の2つがわたしには魅力的に映った:
  • thor (トール, またはソー. 語源は北欧神話の戦神, 雷神, 農耕神からだろう) - これはRubyGemsの説明によればCommand-line User Interface(CUI)のためのツールキットである. githubにあるソースの履歴を見てみると, もともとはrakeやsakeの代替えを意識していたようだ. またコードジェネレーターのニュアンスが強い. ThorのHPによれば, Bundler, Vagrant, Railsで使われているとのことだ (githubでコード検索したところRails 5でも使われていた)
  • gli (Git-Like Interface Command Line Parser) - これはコマンドライン・オプションの処理を重きをおいているようだ. ヘルプの半自動作成の他, Bashの補完のための機能まであるらしい.
見たところgliも魅力的に思える. が, 今回はthorを試してみようと思う. 著名なライブラリでも使われているからだ. そこでまずThorのWikiを日本語訳してみたのがこの記事だ. 対象は以下の通り:
  • thor version 0.19.4
  • Copyright (c) 2008 Yehuda Katz, José Valim, et al.
  • ライセンス - MIT LICENSE

ツアー・ガイド Guided Tour

このページで, Thorを始めるにあたって基本的な説明については見つけられるだろう (訳注: とりあえず試してみたい方は, 列挙の下にある「基本的な使い方」とThor HP を読むのが手っ取り早いと思います). より詳しい情報は以下のサブページで読める.
On this page, you will find basic instructions on how to get started. Further information is available in the following subpages.
  • はじめに Getting Started -
    Thorの基本のイントロダクション. タスク, パラメータ, オプションの説明とともに簡単な例がある.
    Introduction to Thor conventions. Includes a simple example with explanations of tasks, parameters, and options.
  • メソッドオプション Method Options -
    Thorタスクにオプションを定義するときのやり方について説明する.
    Explains what you can do when defining options for Thor tasks.
  • 実行 Invocations -
    Thorの実行依存性の機能を使って, 誤って同じタスクが何度も実行されないよう, どうやってThorのタスク同士を組み合わせて使うかについて示す.
    Shows how you can have Thor tasks depend on other Thor tasks without accidentally invoking the same task more than once using Thor’s invocation-dependency features.
  • グループ Groups -
    Thor::Group は, 複数のタスクを順番に実行するのに便利だ.
    Thor::Group is an easy way to run multiple tasks as a sequence.
  • アクション Actions -
    Thor::Actions は, ファイルシステムとのインタラクションや, コマンドラインでの対話的機能といった, 典型的なアクションをするThorタスクを, 簡単にするために役立つ.
    Thor::Actions are helpers for your Thor tasks that make typical actions, like file system interaction or command line user dialogue, easier.
  • 名前空間 Namespaces -
    独自のThorクラスを定義することもできる.
    You can define your Thor classes under Namespaces
  • 実行ファイルを作る Making An Executable -
    thor コマンドなしに, Thorのタスクを直接実行する.
    Run your Thor task directly, without the thor command.
  • ジェネレータ Generators -
    カスタムのジェネレータを定義するのにThorを使った一例 (Rails 3 のジェネレータとして知られる)
    An example using Thor to define custom generators (aka Rails 3 generators).

基本的な使い方 Basic Usage

オプションもろもろをひとつのクラスに対応付ける. 単純に, 適切なアノテーションを与えたクラスをひとつ作り, もろもろのオプションを, 関数とパラメータ群に自動でマップさせる.
Map options to a class. Simply create a class with the appropriate annotations
and have options automatically map to functions and parameters.
例:
class App < Thor                                                 # [1]
  package_name "App"                                             # [2]
  map "-L" => :list                                              # [3]

  desc "install APP_NAME", "install one of the available apps"   # [4]
  method_options :force => :boolean, :alias => :string           # [5]
  def install(name)
    user_alias = options[:alias]
    if options.force?
      # do something
    end
    # other code
  end

  desc "list [SEARCH]", "list all of the available apps, limited by SEARCH"
  def list(search="")
    # list everything
  end
end
Thorはこのように自動でコマンド群をマップする:
Thor automatically maps commands as such:
thor app:install myname --force
これは以下のように変換される:
That gets converted to:
App.new.install("myname")
# with {'force' => true} as options hash
  1. クラスをオプション・マッパーへと変換するため, Thorクラスから継承する.
    Inherit from Thor to turn a class into an option mapper.
  2. Thorアプリに命名をし, コンソール/デバッグ出力に認識させる.
    Allows a Thor application to be named and be recognized on console/debug output.
  3. 非正規の識別子もろもろを, 特定のメソッドに追加でマップする. この例では -L:list へと変換する指定をしている.
    Map additional non-valid identifiers to specific methods. In this case, convert -L to :list
  4. その下にメソッドの説明を直接書く. 最初のパラメータは使用方法で, 2番めのパラメータは説明だ.
    Describe the method immediately below. The first parameter is the usage information, and the second parameter is the description.
  5. 任意に追加のメソッドのオプションを与える (訳注: この例では boolean型の --force と string型の --alias という2つのオプションを, まとめて定義している. ひとつずつ定義したい場合は method_option (末尾にsなし) または option を使う).
    Provide any additional method options.

さらに理解を深めるには Further Reading

Thorにはこれら上述の例を越えた多くのスクリプト機能がある. 使用可能なオプション群についてより深く理解するには, ドキュメント仕様 を一通り読んで確認してみること.
いろいろなユーザたちがどのようにThorを使っているか見てみるには, ‘require thor’ で Githubの検索 をするか Gisthubの検索 をしてみればよい (ただし, 見つけられた コードは Thorの正式な使い方であるという保証はない).
Thor offers many scripting possibilities beyond these examples. Be sure to read
through the documentation and specs to get a better understanding of the options available.
To see how users use Thor, you can search Github or search Gisthub for ‘require thor’. The code you find is user submitted content that has no warranty of correct usage of Thor.
#

2018年9月11日火曜日

中小企業向けサイバーセキュリティ対策の極意 (無料)


東京都産業労働局が, 『中小企業向けサイバーセキュリティ対策の極意』というPDF資料を配布している. 全193ページ, 5章からなる構成で, 無料である.
ページ下部のリンクからダウンロードできる.

2018年8月29日水曜日

"SafariBookmarksSyncAgentが予期しない理由で終了しました" の修正方法

いつのタイミングか忘れてしまったが, Safari を起動するとエラーメッセージが出るようになってしまってい, ブクマ登録もできなくなってしまった. これは ~/Library/Safari/Bookmarks.plist を作り直すことで, 直すことができる.
この記事では, 当該現象と原因, 修正方法を述べる.

2018年3月19日月曜日

国内・海外の証券会社とAPI公開状況 (2013年版)

下記は2013年に調べたものなので一部情報が古いかもしれない. 「海外」としたが, 時間的な制約から, 英語圏しか調査は行っていない.

2018年3月10日土曜日

debug/enbug

エンバグという単語について調べていたら, ジャーゴンとしては存在する単語であることがわかった (したがって, 和製英語というわけではない). 下記のY-Combinatorの掲示板で触れられていた:
Sorry to burst your bubble, but there exists enbug.org whose about page ([http://enbug.org/AboutThisSite](http://enbug.org/AboutThisSite)) says:

    The meaning of enbug is the opposite of the word debug, namely, to add errors or defects into software or hardware. 

That page was last edited on 2007-03-04.

2018年2月19日月曜日

macOS High SierraでKarabiner-Elementsだけで親指シフト入力環境を構築する方法

!!!!あたらしい記事が ここ にあります!!!!
Fortniteが動くかとおもいEl Capitan (10.11.x) から一気にHigh Sierraにアップグレードしてみたものの, グラボがないとダメですと言われてゲームが起動できなかった.
これまで私がSierra系に更新していなかった理由は, Karabinerが動かないと聞いていたからだ. こうなったらSierra以降向けに開発されているという Karabiner-Elements (KE) で, 無理矢理NICOLA配列での親指シフト入力環境を実現する しかない……というわけで, とりあえず動くものができたので公開します.
動作確認した環境は下記:
  • OS version - macOS High Sierra (10.13.3)
  • IME - Google 日本語入力 2.20.2700.1 (基本設定: ローマ字入力)
  • Karabiner-Elements version - 11.5.0
試してないけどSierraでもイケると思う.
インプリしたのは, とりあえず NICOLA配列 (JAWP) で, 右シフトを「変換」キー, 左シフトを「無変換」キーとしています.
現状のこのNICOLA配列の実装の不具合としては:
  • けっこう前もって (よっこらしょという感じで) 親指シフトキーを押す必要がある
  • ときどきシフト状況が正確に把握されないことがある
という点が挙げられます. もっとうまい書き方があるかもしれない.

使い方

Karabiner-Elements (KE) をインストールしてから,
上記の2つのjsonファイルをダウンロードして, ディレクトリ: $HOME/.config/karabiner/assets/complex_modifications/ に格納してください.
次に, Karabiner-Elementsを起動してから Preferences... を開き, Complex Modifications タブを選択します. 下の方にある Add rule ボタンを押すと, 設定の一覧が出てきます.
この一覧の下の方に, 「無変換, 変換キーでIME Off, On」, 「親指シフト入力のためのNICOLA配列」があるので, Enableして下さい.

おおまかな仕組み

シフトごとにフラグとなる変数: Oyayubi-R, Oyayubi-L, Oyayubi-Any (右か左のどちらかが押されたとき用) を用意 (set_variable) して, 押下されたらセット, 離されたらリセットしています. この処理の記述をしているのが, muhenkan_henkan_ime.json です.
フラグの状態とIMEの状態に応じてmanipulateの処理が決まります. こちらは nicola_genenerated.json で記述しています.
ファイル名から察しがつくように, いちいちキー一つ一つの設定を書いていくのは面倒なので, 設定のためのjsonジェネレータをRubyで書いた――のだけど, こういうものがあると後から知った:

Conclusion

macOS High Serraで, Karabiner-Elementsだけで親指シフト入力を可能にした.

References

実装するにあたり, 以下のドキュメントが役に立ちました.

2017年12月10日日曜日

つぶやき日記2017-12-10

  • Mac環境のPythonパッケージであるANACONDAをインストールしたら, PATHが変わってiconvがうまく動かなくなって (conversion from CP943 unsupported) しまっていたことに気づいた. -f CP943というオプションが使えない /Users/user_name/anaconda/bin ではなく, MacOSがシステム標準で用意している/usr/bin/iconvを使用するようにした.
  • k-db.comが今年いっぱいでサービス停止とのこと.

2017年11月19日日曜日

[Ruby]モジュールに継承/派生っぽいことをさせてみる試み

組み込みライブラリもしくは既存のクラスclassやモジュールmoduleを, 特定の用途向けに一部だけ改変したいことがある. その際, できればモンキーパッチはしたくない.
このような場合, クラスならば class DerivedKlass < OriginalKlass として継承を使える. 派生クラスを作ることで, 元のクラスのコピーを作り, それを改変すればいい.
ではモジュールの場合は, どうしたらよいだろう? ここでは, Mathを取り上げて考えてみる.
最初に, include/extend/refineという既存の方法の検討をおこない問題点を明らかにする. 次に, これらの問題点を解決する Module#module_compose の導入を提案する.