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 <テーブル名>
カレントデータベースの指定があれば、<データベース名>の指定は省略していいかも。
あと、接続文字コード
- MySQL :: MySQL 5.6 リファレンスマニュアル :: 10.1.4 接続文字セットおよび照合順序
- MySQL :: MySQL 5.6 リファレンスマニュアル :: 10.1.14.7 アジアの文字セット
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('')