技術文書を書く参考になれば・・・

そろそろ Juno を更新したいけど、いろいろいじっていたら収集がつかなくなりかけてきてる。HttpProxy とかまた実装しなおしたし。。。というわけで普通っぽい記事をちょっと書いてみる。

仕事柄、プログラムの仕様書とか手順書とかを書くわけだけど、やっぱり人によって言葉使いが違う。「クリックする」を無理やり「押下する」とか書いてるけど、実際にクリック イベントが発生するのはボタンを離した時なんだよなぁ、、、とか思いながらレビューしてる。こんなモヤモヤはできれば解消したいので、自分が普段参考にしてる資料を共有できたらなぁと。


言わずと知れた Microsoft は、実は自社製品のドキュメントを書く際の方針を公開している。自分がドキュメントを書くときは、このサイトからダウンロードできるスタイル ガイドをベースに、細かい訳語を随時調べながらやってる。このガイド、昔は日本語の HTML ヘルプ ファイルだったのに、今は英語の PDF になってるんだよなぁ。ちなみに会社のファイル サーバーには昔のバージョンが置いてある。

Wikipedia:表記ガイド - Wikipedia

ついこの前見つけたんだけど、Wikipedia のマニュアルも結構細かくまとまってる。環境に合うものを選んで採用するのもいいかも。

全角英数について

これも個人的には大きな問題だと思ってる。下の例を見れば一目瞭然だと思うけど、全角英数を使ってしまうとワード ラップが効かず、単語の途中で折り返されてしまって死ぬほど読みにくい。

  • 全角英数

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

  • 半角英数

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

全角英数イクナイ!!

フォント

フォントもちゃんと選ぶべきだと思う。たとえば MS UI Gothic なんかは、その名が示す通り UI 向けのフォントだから文章には向かないと思ってる。ひらがなの形がなんかチャラくて好きじゃないし。あと、文脈によって変えるべき。コードやコマンドを書くなら等幅フォントのほうが絶対に読みやすい。Word を使うときは、そのためのスタイルを作って使うようにしてる。普段使っているフォントはこんな感じ。

文脈 和文 英文
普通の文 MS Pゴシック Calibri
コード MS ゴシック Consolas または Courier New

タスク スケジューラの API でタスクの設定を変更する

Windows Vista で導入されたタスク スケジューラ 2.0 の API を使うと、スクリプトなどからタスクを作成して細かい制御をすることができる。

Task Scheduler (Windows)

この API を使って既存のタスクの設定を変更しようとした時ちょっとハマったので、メモとして残しておく。

最初にやったのは、単純に既存のタスクを取得してそのプロパティを変更し保存するというもの。ただ、このやり方だといくらプロパティを変更してもそれが反映されない。

で、どうするかというと、新しくタスクを作って古いタスクの設定をコピーすればいい。それで新しいタスクを上書きモードで登録すると、タスク設定が更新される。

サンプルコードはこんな感じ。ここでは PowerShell を使ったけど、COM な API なので対応していればどんな言語でもいい。

New-Variable TASK_UPDATE 4 -Option Constant
New-Variable TASK_LOGON_INTERACTIVE_TOKEN 3 -Option Constant

$Service = New-Object -ComObject Schedule.Service
$Service.Connect()

$Folder = $Service.GetFolder("\")

$OldTask = $Folder.GetTask("Test")

# 新しいタスクの作成
$NewDefinition = $Service.NewTask(0)
# 古い設定のコピー
$NewDefinition.XmlText = $OldTask.Definition.XmlText

# $NewDefinition をいじくる

[void] $Folder.RegisterTaskDefinition(
    $OldTask.Name, $NewDefinition, $TASK_UPDATE,
    $Null, $Null, $TASK_LOGON_INTERACTIVE_TOKEN, $Null)

API の使い方はリファレンスを読んでもらうとして、ここでのキモは、プロパティを 1 つ 1 つコピーするのではなく、XML による定義をコピーするだけでいいこと。あたかもこのために用意されたかのようなプロパティがあるのがなんか・・・

ちなみに、ログオンしているユーザーとは違うユーザーで実行されるタスクや、ログオンしているかどうかにかかわらず実行されるタスクの場合には、RegisterTaskDefinition メソッドの引数で、実行するユーザーのパスワードを指定する必要がある。

Juno Proxy Server 0.7.1

Juno Proxy Server のバージョン 0.7.1 をリリースしました。

今回は、Scissors が名前解決に失敗した時に発生するメモリリークの修正だけです。

ダウンロードはこちらから

Java 8 で Fizz Buzz

Java 8 でいろいろな機能が追加されたので、ちょいちょい遊んでたんだけど、試しに Fizz Buzz を書いてみたら、思いのほかシンプルに書けたので晒してみる。

public class FizzBuzz {
  public static void main(String[] args) {
    java.util.stream.IntStream
        .range(1, 100)
        .mapToObj(
            n -> n % 15 == 0 ? "FizzBuzz"
                : n % 5 == 0 ? "Buzz"
                : n % 3 == 0 ? "Fizz"
                : n)
        .forEach(System.out::println);
  }
}

main メソッドの中身がワンライナー、というかワン ステートメントで書けるようになったのがちょっと感動。
「これほんとに Java か?」って感じ。

実際のところ、ラムダ式のパフォーマンスってどのくらいなんだろう・・・

Juno Proxy Server 0.7

Juno Proxy Server のバージョン 0.7 をリリースしました。

変更点は以下のとおりです。

  • HTTP プロキシを再実装し、同じホストへのリクエストが連続した場合には接続し直さないように変更しました。
  • ICU を独自にコンパイルし、Visual C++ 2010 再頒布可能パッケージが不要になりました。

ダウンロードはこちらから

ところで、RFC 2616 が obsolete になったのですね。時間を見つけて読んでみよう・・・

Juno Proxy Server 0.6

Juno Proxy Server 0.6 を公開しました。

今回の変更点は以下のとおりです。

ダウンロードはこちらから

Sublime Text を使用してログ ファイルを作成する方法

どのくらいの人が知っていて、さらにどのくらいの人が使っているか分からないけど、メモ帳を使用してログ ファイルを作成する方法 というのがある。
これを Sublime Text でやるプラグインを作った。

import sublime, sublime_plugin
import datetime

class NotepadJournal(sublime_plugin.EventListener):
  def on_load(self, view):
    if self.extract_name(view.settings().get('syntax')).lower() != "plain text":
      return

    if view.substr(view.line(0)).upper() == ".LOG":
      view.run_command("notepad_add_journal")

  def extract_name(self, syntax):
    begin = syntax.rfind("/") + 1
    end = syntax.rfind(".")
    return syntax[begin:end]

class NotepadAddJournalCommand(sublime_plugin.TextCommand):
  def run(self, edit):
    self.view.run_command("move_to", {"to": "eof"})
    point = self.view.sel()[0].begin()

    header = datetime.datetime.now().strftime("\n%H:%M %Y/%m/%d\n")
    self.view.insert(edit, point, header)

ファイルを開いた時に、そのファイルの末尾のところまでスクロールされちゃうけど、それくらいならガマンする。