2018/10/14

Windows環境でもEmacs

Emacsが好きなんだ!!

筆者はEmacsが好きです。

目下Windows環境しか使っていなのですが、とにかく開発ではIDEを使いながら結局はEmacsでゴシゴシ書くこと多いです。

ということで、今回色々学習したことを記載してみます。

SSH経由でファイルが触りたい

EmacsにはTrampなる、ssh経由でローカルファイルと同じくファイル編集ができる機構があります。

某NTTコミュニケーションズのwebサーバは未だftpなので、Emacsからftpを使うことは多いのですが、さすがに時代遅れですよね。

時代に取り残されないため、努力努力。

[Emacs] リモートサーバで開発するときの Emacs 設定まとめにssh接続方法が以下のように書いてあるのですが、実際にやってみるとEmacsがフリーズしていしまいます。

C-x C-f /ssh:user@hostname:path/to/file
悲しいかな止まってしまったEmacs
Opening connection for xxx@xxXX using ssh...\

sshの環境不備が考えられたので、M-x sshでssh接続をしてみたところ、以下のエラーになりあえなく撃沈

Pseudo-terminal will not be allocated because stdin is not a terminal.
CreateProcessW failed error:2
ssh_askpass: posix_spawn: No such file or directory
Permission denied, please try again.
CreateProcessW failed error:2
ssh_askpass: posix_spawn: No such file or directory
Permission denied, please try again.
CreateProcessW failed error:2
ssh_askpass: posix_spawn: No such file or directory

これについてはパスワード機構に関するものとわかったので、ssh-keygenにより公開鍵方式に変更してみましたが状況変わらず。!!

  • Windows10(64bit)側でssh-keygen
  • cmdよりssh-keygenを実行、その後全てデフォでEnterキーを入力

    ssh-keygen
    Generating public/private rsa key pair.
    Enter file in which to save the key (C:\Users\XXXX/.ssh/id_rsa):
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in C:\Users\ys62.YSKAD/.ssh/id_rsa.
    Your public key has been saved in C:\Users\ys62.YSKAD/.ssh/id_rsa.pub.
    The key fingerprint is:
    SHA256:fS6+Lz7Jyo446IqTURWapesq+OktkeljG39CRBAngxc ys62@yskad@PC1801DELD
    The key's randomart image is:
    +---[RSA 2048]----+
    | .E++.           |
    |. .Oo            |
    | .+o             |
    |  ...    .       |
    | ..+    S . .    |
    |..+ .      o     |
    |.+o+     ....    |
    |*.*=o..o .=.     |
    |=B*+++..+o+=.    |
    +----[SHA256]-----+
    
  • 公開キーをサーバ側に追加
  • 先の操作で、「C:\Users\XXXX\.ssh\id_rsa.pub」として公開キーができているので、こちらをサーバ側に追加します。

    サーバ側のユーザフォルダに.ssh/authorized_keys ファイルとして保存します。すでにファイルがある場合は、最終行に追加してください。

    サーバ側の.ssh は chmod にて 700 パーミッションに、 authorized_keys は chmod にて 600にしておく必要があります。

  • windowsより公開鍵方式で接続テスト
  • ここまでの設定が正常に行っていれば、Windowsからssh ユーザ名@サーバ名 でパスワードなしで接続できます。

    接続できなかったら、エラーメッセージなどで環境を再チェックしてください。

  • いよいよ、Trampでsshファイル接続を!!
  • ssh公開鍵方式で接続できてしまえば、なにかが変わる。

    可能性を信じていたのですが、残念ながら、Emacsがフリーズします。

    悲しいかな止まってしまったEmacs
    Opening connection for xxx@xxXX using ssh...\

やっぱりWindows環境でのEmacsには乗り越えなきゃならんものが有るようです。

やはりWindows環境でのEmacsには対応していなかった

もっと早く見つければよかったのですが、Emacs Tramp でリモート上のファイルを直接編集する方法|Windowsにも対応に制限事項と対処が書かれていました。

直接sshは使えないので、plinkを使用しての接続となるとのこと。

書かれている通り、次のようにすれば、全く問題なく動作します。

C-x C-f /plink:user@hostname:path/to/file

うーん。Windows上で、Emacsは苦労させれますが、この快適さはやめられません。

これからも頑張っていきましょう!!

2018/09/24

OSC広島で見つけたすごいもの

はじめに

久々にオープンソースカンファレンスに参加しました。広島です。

東京にいた頃はよく参加していたのですが、地方でもやっているなんて知りませんでした。今回は出展者側のスタッフで参加したので、ちょっと面白さも異なりました。

やっぱり見に行くだけより参加したほうが断然面白いですね。


すごいものってなに?

いや色々すごいもの多くて少々消化不良の状態なのですが、スタッフの方2名が身につけられていたLEDの小型電光掲示板が良かった。

思わずどこで手に入れたのか聞いてみたところ、秋葉原のLEDピカリ館とのこと。

近日中の首都圏訪問はないので、残念に思っていたのですが、普通に密林にありました。

リンク貼っておきますので、よろしかったらどうぞ。

届いたので使用感を投稿

届いたので、使用感を投稿してみます。設定は、付属の専用ソフトで簡単に設定できます。かなりの初心者でも

開封状態

開封状態です。LEDネームプレート本体と専用ソフトCD、USBケーブル、微妙な日本語のマニュアルが付属しています。

専用ソフト

専用ソフトCDはInstall.exeを実行し、Easy programをクリックすれば簡単にインストールできます。

少々気になったのですが、専用ソフトは実行する際に管理者権限を要求しているようで、Windowsの権限警告がでます。

まあ気にせず「はい」をクリックすれば使えます。

専用ソフトの画面です。本文に記載してスピードとモードを選択、LEDネームプレート本体をUSBにて接続し、送信ボタンをクリックするだけで設定完了です。

あ、LEDネームプレート本体をUSB接続する場合は、LEDネームプレート側の電源スイッチをONにした状態で行ってください。そうしないと充電モードになってしまうようです。

上部にあるフロッピーアイコンをクリックしないと、専用ソフトに設定が残りません。ここ不親切ですが、クリックすれば良いことなので注意しましょう。

設定結果です。少々恥ずかしいぐらい目立ちますね。

ネームプレートよりメッセージプレートとして使ったほうが良いような気がします。

その他については順次投稿していきます。

2018/08/08

サマータイムの影響って結構深刻

サマータイムの影響って

このところ数日間サマータイムの話題が飛び交っているので、個人的に把握してみました。

Javaのランタイムなどは専門外なので、他のサイトを見てもらえるとよろしいかと。

ここではもっと一般的なものと、巷で実施されいるコードについて記載して見ます。

現代の日付(時刻)管理(前提知識)

現代の日付は以下の管理方式になっています。

  • 地域日付(時刻) → UTC変換 全世界共通時刻
  • 地域日付(時刻) ← UTC変換 全世界共通時刻

日本の場合、UTCに9時間を加算して地域日付(時刻)にしています。(JST-9)

UTC (フランス 原子測定器によるもの うるう秒とかある)≒ GMT(イギリス天文学的時刻 昔はこれ)

※重要

地域日付(時刻)は地域によっていろいろと補正しないといけないので、基礎値として管理せず、全世界共通のUTCに変換して管理する。

これにより、時間が明確に管理できるようになる。(UTCを参照するときにその地域の日付時刻に変換すれば良いから)

サマータイム

一般知識としてのサマータイムは「Qサマータイムってどういう意味なの?何か注意は必要? 」に解説がありました。

内容見ますと、開始時点では時刻が先送りし、終了時には戻されるという動きとなります。

これを前提に、少々例を考えてみます。2019/5/1 23:00から、2019/6/30 23:00まで2時間のサマータイムがあるとして例を記載してみます。

  • (1)開始の状況
  • UTC JST-9(既存) JST-9(サマータイム)
    2019/05/01 13:59:59 2019/05/01 22:59:59 2019/05/01 22:59:59
    2019/05/01 14:00:00 2019/05/01 23:00:00 2019/05/02 01:00:00(2H飛び)

    JST-9(サマータイム)では2019/05/01 23:00~ 2019/5/2 0:59 の時刻は存在しないことになります。

  • (2)終期の状況
  • UTC JST-9(既存) JST-9(サマータイム)
    2019/06/30 11:59:59 2019/06/30 20:59:59 2019/06/30 22:59:59
    2019/06/30 12:00:00 2019/06/30 21:00:00 2019/06/30 21:00:00(2H戻る)

    JST-9(サマータイム)の2019/06/30 21:00~2019/6/30 22:59:59とJST(既存)に重複時刻が出てきます。

    もっと詳細に書くと、以下のとおり。

    UTC JST-9(既存) JST-9(サマータイム)
    2019/06/30 10:00:002019/06/30 19:00:002019/06/30 21:00:00
    :::
    2019/06/30 11:59:592019/06/30 20:59:592019/06/30 22:59:59
    2019/06/30 12:00:002019/06/30 21:00:00←サマータイム終了既存時刻既存時間に戻る
    :::
    2019/06/30 13:59:592019/06/30 22:59:59

    これ大変です。!!

    • 2019/06/30 22:59:59 だけ見ただけでは、サマータイムの時刻か、既存の時刻かわからない。
    • →値不明確
    • 2019/06/30 22:59:59 サマータイムの1秒先が2019/06/30 21:00:00既存だが、単純文字列比較では、前者が後の時間に評価される。
    • →値の逆転

影響を考えてみる

日付時刻を地域時間に変換して記録しているすべてに、サマータイム終期に時刻の前後関係がずれてしまう可能性がある。

  • ログに記録している日付時刻に関係?
  • ログは重要ですが、処理の根幹にはかかわらないので、まあ努力目標としてごまかすこともできるかもしれません。

  • データキーの日付時刻
  • データを時系列管理するために、データのキーに日付時刻を付与する例がありますが、日付型ではなく、地域日付時刻の文字列に変換した値を管理している場合、サマータイムの終期に時刻戻りや重複が発生するため、時系列管理や一意性が失われしまう。

    データ管理の根幹に関わる問題に発展します。データベースの場合は日付型に型変換する必要があります。これは大変です。

和暦改正どころではない深刻な影響があること個人的にもびっくりしています。

VB6.0のFormat(Now(),"YYYY/MM/DD HH:NN")なんかも影響受けるでしょうね。

改善策

次の3点を考えました。他にもあるかもしれませんが、対処するには時間が掛かりそうですね。

  • (1)内部管理をすべてUTCにする。
  • それができれば苦労しないとの声が聞こえてきそうです。

  • (2)内部管理を既存日付時刻とする。
  • 日本と韓国は同じ9時間エリアなので、TZをKST-9で動作させればサマータイムを迂回して、維持できるとおもいます。

  • (3)黙認する。
  • 座して死を待つ状態ですね。最終手段ということで。

影響範囲を事前に進言して、予算を確保してもらうなど、業界にいる者としては、できることをしていきたいと思うところです。

こんな誰も得をしないことなんでするのかなぁと思いつつ。思いとどまってくれないかなぁ。

その後の追記

なんと、みんな大好きExcelは、そもそもタイムゾーンの概念が無いそうです。

まあ、ありそうな話ですが、同じシートを使って世界流通させることなんて考えていなかったんでしょうねぇ。