TLS1.2 サーバ

ちょっと TLS1.2 での通信を確かめることになって、たしかに TLS1.2 でしゃべってる HTPPSサーバが欲しかった。

ruby -r webrick/https -e 'WEBrick::HTTPServer.new(:Port=>3001,:DocumentRoot=>"./",:SSLEnable=>true,:SSLCertName=>[["CN", "foobar"]]).tap{|s|s.ssl_context.ssl_version=:TLSv1_2}.start'

取敢えず簡便なものが欲しいのでワンライナーで。

Port 指定注意、無しだと 80番を取りに行って駄目ならエラーになる、駄目じゃないときはそれはそれで危ないときなので注意。大体ドキュメントルートとして実行場所のローカルファイルさらしてる訳で、ローカルだけで見るようにしましょう。

SSL/TLS 用なので webrick/https library webrick/https (Ruby 2.5.0) をリクワイアする、これで webrick 自体もリクワイアされる。/https なしでも SSLEnable 指定は通るが別に SSL/TLS にはならない、設定値のハッシュにそのキーが追加されるだけということだろう。

webrick/httpsクワイアして :SSLEnable=>true にすると最低限 :SSLCertName も指定しないとエラーになる、これは
class OpenSSL::X509::Name (Ruby 2.5.0) の指定になるので、配列の配列が必要、最低限の指定ならまあ ”CN” にしときましょう。

そしてプロトコルを TLS1.2 に限りたいので
class OpenSSL::SSL::SSLContext (Ruby 2.5.0) #ssl_version= で指定する、選択肢は
constant OpenSSL::SSL::SSLContext::METHODS (Ruby 2.5.0) にある。このリストに :TLSv1_2 がない環境だとちょっと悲しい。ここで
instance method Object#tap (Ruby 2.5.0) を使ってる、HTTPServer.new の引数でなんとかならないかと思ったけど難しい、ここではハッシュ引数にしてるが、
constant WEBrick::Config::HTTP (Ruby 2.5.0) を渡してもいい、そのときは WEBrick::HTTPServer.new(WEBrick::Config::HTTP.tap{|c|c[:Port],c[:SSLEnable],c[:SSLCertName]=3001,true,\[\["CN","foobar"\]\]}) とでもするのだろうか、それで #ssl_context(OpenSSL::SSL::SSLContext) に触れないか。

最初のワンライナーに戻る。これを実行して適宜ブラウザからアクセスすると確かに TLS1.2 をしゃべってる、ほかのプロトコルではしゃべらない。ブラウザ表示ページのプロパティや、ブラウザの設定で使うプロトコルを調整したりで確かめた、 ssl_version=:TLSv1_2 のところも :TLSv1_1 やさらに下位にしてみたり。

あと、この辺のスクリプトはそこそこ古い Ruby でも動く、なのでハッシュ引数は古い記法で書いてる、まあそんな環境ではプロトコルの選択肢に :TLSv1_2 が出てこない訳だ。

ぶろぐ移行続き、というかこちらの編集画面をひらくまでのあいだ。はてなブログの管理画面つづき

 

「インポート設定」画面


インポート設定 画面
Rubyとか Illustratorとか SFとか折紙とか  hs9587’s diary ? 
投稿数 370
コメント数 85

3ステップでかんたんインポート

STEP1 記事のインポート
「確認画面へ進む」釦押下、

このはてなダイアリーをインポートします。よろしいですか?
「インポートする」釦押下

インポートしています... 画面

プログレスバーの進行は結構ゆっくり、みてるあいだはすすまない、20分くらいしてみたら終ってた


STEP2 はてなブックマークの移行
はてなブックマークを移行する」釦押下
「… 本当によろしいいですか?」ダイアローグ「OK」
 これはわりと一瞬、まあブックマーク殆どないしね


STEP3 記事のリダイレクト
「リダイレクト設定する」釦押下
「… よろしいいですか?」ダイアローグ「OK」

「おめでとうございます! インポートが完了しました!」

はてなブログ

はてなブログ へ移行しようか、はてなダイアリーからのインポート(ブログの移行) - はてなブログ ヘルプ

ええと、まず  ブログを作成 - はてなブログ で移行先 hs9587’s diary を作成、すべての人に公開 でいいや。「まだ記事がありません」と。

はてなブログ画面右上の「hs9587’s diary」リンクから「設定」で管理画面、左辺メニューの「インポート」を選ぶ、インポートもとのタブで「一般のブログ」「はてなダイアリー 」とあるの「はてなダイアリー 」を選ぶ、所要の「Rubyとか Illustratorとか SFとか折紙とか」が(だけ)でてくるので「インポート設定」釦、「インポート設定」画面になる、この辺でこの記事は保存してそっちの画面での操作を続ける

S3 で JavaScript の s3.copyObject() のパラメータ

AWS の Lambda の Node.js の JavaScript で S3 のオブジェクトをコピーする copyObject() メソッドのパラメータ指定でちょっとはまった。
S3においてあるファイル(オブジェクト)を S3内で(自分のアカウントの許す中で)コピーするのに、JavaScriptで、下記とでもするのだけど

s3.copyObject(params, (err, data) => {
  if (err) {       // an error occurred
    console.log(err, err.stack);
    callback(err);
  } else {         // successful response
    console.log(data);
    callback(null, data.ETag);           
  };
});

この params の指定、要するに下記、

var params = {
  CopySource: "<コピー元バケット名>/<コピー元のバケットの続きのキー名>(バケット名先頭に「/」はいらない一方キー名と繋げる「/」は忘れずに)",
  Bucket: "<コピー先バケット名>(前後に「/」はいらない)",
  Key: "<コピー先のバケットの続きのキー名>(先頭に「/」はいらない)"
};

CopySource はコピー元をバケット名から、Bucket はコピー先バケット名、Key はコピー先のその続きの記述、コピー元とコピー先で設定の対称が崩れてるの注意。

勿論他にもいろいろ指定できる、Class: AWS.S3 — AWS SDK for JavaScript

はまったのは、このマニュアルにもあるが、まず必須項目が Bucket, CopySource, Key と並んでて、はじめ Bucket はコピー元のバケットかと誤解してしまった。多分必須項目をアルファベット順に並べてるだけなんだと思う。まあ、S3 のはなしをずっとしてると、Bucket と Key でそのとき注目するファイル(オブジェクト)を指定するのは確かにそうなんだけど、ここではそれがコピー先のことのみとは、コピー元のバケットとか関係ないとは、はじめ思い及ばなかった。

で、CopySource がちゃんとしてないと(バケットのあたりがないとか)、「[AllAccessDisabled: All access to this object has been disabled]」とかいわれて、アクセス権限の指定とか確かめに行ってしまい、ちょっと(少し、もっと)回り道した。

それから、 copyObject() は個々のファイル(オブジェクト)のコピーで、フォルダまとめてのコピーは出来ないみたい、そんなメソッドもなさそうで、そういうときは苦労します。

mysqlコマンド

ちょっと MySQL に触るようになってきたのでメモ。

取敢えずDBサーバに接続する

mysql -u <ユーザ> -h <ホスト> -p<パスワード> --ssl

データベース名を続けるとカレントデータベースを指定することも出来る。でもデータベース指定の意味は PostgreSQL とはちょっと違うようだ。指定しててもなくても、そのサーバにあるデータベースはみんな見に行ける、ポストグレスでいう schema 見たいな感じ。だからデータベースをまたがってジョインできたりもするみたい。
あと、まあ --ssl オプションはつけといた方がいいよね。

サーバに接続したらステータスとコマンドの一覧

status
help

データベース等の一覧には

SHOW DATABASES;
SHOW TABLES FROM <データベース名>
SHOW COLUMNS FROM <テーブル名>

カレントデータベースの指定があれば、<データベース名>の指定は省略していいかも。

あと、接続文字コード

EUC-JP指定なら

SET NAMES 'ujis';

あるいは「--default-character-set 」オプション

Rails勉強会@東京 第92回

久しぶりのRails勉強会@東京 第92回 - Rails勉強会@東京 | Doorkeeperです
Rails勉強会@東京公開グループ | Facebook
下記 twitter より、そして追記。(この項翌22日に書いてます)

2月21日
@hs9587
志村@hs9587
#railstokyo Rails勉強会@東京 第92回
posted at 13:11:23
2月21日
@hs9587
志村@hs9587
#railstokyo 13:55-30分 はじめてのRails 苦労話とかも、14:45-60分 Changelog、管理画面のベストプラクティス、16:00-60分 Railsアンチパターン、Rails4 アップデート、rack-attack
posted at 13:40:10

メニュー。いくつかに分かれたり分かれなかったりして 3時限。

はじめてのRails

2月21日
@hs9587
志村@hs9587
#railstokyo はじめてのRails
posted at 13:56:09
2月21日
@hs9587
志村@hs9587
#railstokyo はじめてのRails、初めの方、どちらかというと発注側の方がいらして、全然分からないので少しはわかるようになりたいという。いろいろ話をする
posted at 14:10:19

Railsから始めるので良い、それで気になったら Ruby の勉強をする。
プログラミング始まるならまず C からとか、そんなことは無い。まず Rails Ruby から始めるのでいい。

Changelog

2月21日
@hs9587
志村@hs9587
#railstokyo Changelog
posted at 14:45:36
2月21日
@hs9587
志村@hs9587
#railstokyo Changelog Rails5 のうりって何だっけ、あんまり特徴ないような
posted at 14:58:49

ActiveRecord の or()メソッドの追加は印象に残った。後で聞いたら使い方結構難しいらしい。

Rails4アップデート

2月21日
@hs9587
志村@hs9587
#railstokyo Rails4アップデート
posted at 15:56:00

粛々として 2の最後にあげ、頑張って 3.0 にしたら一気に 4.2 にいってもいいのではないかとか。3系と4系の間に凄い大きな違いはない。3.1で入った Sprockets はそれなりの相違なんだが、JavaScript も Stylesheet 既に普通に動いてる事になるんで、アセットパイプライン封印しちゃえば関係ないし。

一方、公式の見解としてはひとつひとつ上げてくようにと。APIとか一気に解消することはないので、ログを見ながら先々消えるよという警告に手当てしてけば。

文字列をバイトサイズで切り詰めるのって

Rubyで文字列をバイトサイズで切り詰めるのってどうするんだっけ。
或いは byte単位で切り出すとか、取り出すとか。

志村 on Twitter: "Rubyで文字列をバイトサイズで切り詰めるのってどうするんだっけ"
‏@hs9587
Rubyで文字列をバイトサイズで切り詰めるのってどうするんだっけ

( Φ _⊞) on Twitter: "@hs9587 byteslice"
‏@n0kada
@hs9587 byteslice

志村 on Twitter: "@n0kada それではマルチバイト文字のかけらが"
‏@hs9587
@n0kada それではマルチバイト文字のかけらが

( Φ _⊞) on Twitter: "@hs9587 scrub"
‏@n0kada
@hs9587 scrub

志村 on Twitter: "@n0kada byteslice(0,n).scrub('') でなんとかなりそう、ありがとうございます"
‏@hs9587
@n0kada byteslice(0,n).scrub('') でなんとかなりそう、ありがとうございます

1.8以前では一度 slice でサイズで切って、もう一度 slice で正規表現で文字だけ取り出す (http://weboo-returns.com/blog/substring-from-multibyte-string-in-ruby/ ほか)とかあったけど、最近の Rubyではそのマルチバイト文字のかけらのところでエラーになってしまう。
というあたり、ご教示あったように Ruby 2.1. では String#scrub class String (Ruby 2.1.0) でかけらをケアすれば良さそう。

<文字列>.byteslice(0, <バイト数>).scrub('')