ソフトウェアに関する技術書(英語)を日本語で読む方法を考える

ソフトウェアの技術書を探すと、わりと新しい技術についての書籍は【英語版】しか出版されていない場合もある。日本語訳の書籍はすぐには出版されないものだ。紙の書籍じゃなくて電子書籍(英語版PDFファイル)の方は、現時点では公開されていて無料でダウンロードできるものもけっこう多い。
※(注)将来的には無料でなくなる可能性もある。

電子書籍を無料でダウンロードできたとしても、英語をスラスラと読めないもので。英文解釈に時間をかけたくないけど、英語の技術書をざっと読んでみたいものだな。翻訳する方法はいろいろある。

(方法1)
Google翻訳を使用する(適量の英文を翻訳する)。
→技術書の文章の量が多くなればなるほど、翻訳にかける時間・操作も多くなる。

(方法2)
Google翻訳(ドキュメント翻訳)を使用する。
※ドキュメント翻訳:PDFなどのファイル翻訳を行える。
→ファイルサイズ制限は、1 MB が上限(らしい)。技術書は1MBを超えてしまうファイルも多い。
サイズ上限を超えると以下のエラーが起きるようだ。

(方法3)
PDFファイルを分割してGoogle翻訳(ドキュメント翻訳)を使用する。
→自身の端末にPDFファイルを編集するソフトがインストールされていない場合もある。

他にもたくさん方法はあると思うけど。それじゃあ、PDFファイルに記載されている英語の文章を全て「htmlファイル」に出力して『Google Chrome』で日本語に自動翻訳して読んでしまおう!ということで、PDFファイルの文章を全てhtmlファイルに出力する .NETC#)アプリケーションを作ってみた。

基本的にはハードルを低くしておくものだ。一般的にハードルの高い英語の技術書を恐れることは無い。電子書籍、万歳!。無料のPDFファイルの技術書(英語)を探す道をそのまま進めばいい。

以下はイメージ。
.NETアプリよりもGoogle Chrome推している感じになってしまったが、どんまい。
f:id:masawan-guitar:20170506223855p:plain

(例)日本語に翻訳してみた書籍『Elasticsearch: The Definitive Guide (英語)』
  (PDFファイルサイズ約6 MB、全709ページ)

出力されたhtmlファイル。たっぷり出力。
ひとまずは、PDFの1ページにつきhtmlファイル1つで(実験)。

Internet Explorerにて確認。英語が表示されている。

Internet Explorerの画面

次に、Google Chromeにて確認。日本語への自動翻訳はGoogle Chromeにお任せで。ページをまたいでいる文章のところは明らかに上手くいっていなかったけど、雰囲気で読める日本語。でも、出力処理に改善の余地はある。日本語に翻訳された文章を読んでみると、こんなこといっちゃアレだけど、流し読みして問題ない箇所もけっこう多いものだよね。

PC版(Windows版) Google Chromeの画面

追記 2017/5/15
PC版(Windows版)のGoogle Chromeでは
上の画像のとおり、日本語訳が繰り返し複数表示されてしまう現象が発生していた。
iPad版のGoogle Chromeでは、そのような現象は無く、正常に翻訳されている。
個人的にはたいして問題視するようなことではないのですが。
一応は、PC版Chromeの翻訳機能が改善されるのを待つ。

iPadGoogle Chromeの画面

Ruby on Rails デバッグ環境を探す

Ruby on Rails
奇跡的に夜中2:30まで勉強する。明日、遅刻しないように。

以下、Ruby on Railsに限った話なのかもしれないですが。オープンソースプログラミング言語を扱う際、開発環境構築は大事ですよね。プログラム言語を学ぶとか、フレームワークを学ぶとか目的はあるにしても、最初に行う開発環境構築のハードルがちょっと高い気はしていて。親切な手順が売られていない。だからといって私が親切に手順を書くというわけでもない。Eclipse使えばいいじゃんっていう人も居るでしょうし、そんなの余裕っていう人も居るんでしょうけど。Eclipseって妙に設定が多くて、なんかやりにくいんですよ。個人的に。

オープンソースの言語を効率よく使用するために有償の統合開発環境へ投資してくれる現場であれば、別に心配ないんですが。RubyMineはよさげ。

とにかく、開発環境構築の手順でつまずいて、英語のエラーメッセージが表示されて動かなーい→あきらめる、学ぶのを辞めるという状況が世の中には多い気がしていて。なので、その開発環境構築をクリアしてしまえば、ひとまずはOK!っていう感じはしてる。1番最初にやることって「デバッグのためにステップ実行できる環境」を整えることだと思うんですよね。デバッグ環境があれば、プログラムは書きやすいはずで。で、せっかくOSSなので、お金をかけたくない。Aptana Studio、Eclipse もあるんだけど、以下の2つに絞った。環境構築の手順は、いつかまとめるとして。

Visual Studio Code
 ⇒なんだかんだいって、マイクロソフトの製品は、他より使いやすい。
  さすがは、グローバルぼったくり超一流企業なだけに、無償で提供されている製品も使いやすい。
  シンプルだね。

・pry-byebug
 ⇒これさえあれば大丈夫って感じだった。

【1】Visual Studio Code

Rubyのプログラムをデバッグ

Rails アプリケーションのデバッグHello World!、こんにちは!世界!ということで。

【2】pry-byebug

Rubyのプログラムをデバッグ

Rails アプリケーションのデバッグHello World!、こんにちは!世界!ということで。

投資家、起業家、企業経営者の話

■IVSウィンターワークショップ2013 Session 5
テーマ: 「人生は挑戦だ!」
(スピーカー)
株式会社ディー・エヌ・エー 顧問 川田尚吾 氏
株式会社gumi 代表取締役社長 國光宏尚 氏
KLab株式会社 代表取締役社長 真田哲弥 氏
ヤフー株式会社 執行役員 小澤隆生 氏
(モデレーター)
インフィニティ・ベンチャーズLLP 共同代表パートナー 小野裕史 
vimeo.com

■べンチャー・キャピタル進化論~経営者と投資家の付き合い方
川田尚吾氏
松山太河氏
赤浦徹氏
渡辺洋行氏
G1ベンチャー2015
www.youtube.com

プロフェッショナル 仕事の流儀
ベンチャー企業経営者 南場智子の仕事 仕事でこそ、人は育つ」
www.youtube.com

SQL Server 2016 データ暗号化

SQL Server 2016 の新機能「Always Encrypted」。
Always Encrypted (データベース エンジン) | Microsoft Docs

以下サイトで、どんなものか確認してみる。
SQL Server 2016 CTP 2.0 の Always Encrypted を使ってみる at SE の雑記

ということらしい。「Always Encrypted」の動作については、また後ほど確認してみるとして。

今のところは、いろいろと検討した結果、管理者側の機能としては、
顧客の「システム担当」が、対称キー作成時のパスワードを
ユーザー情報の登録/更新/参照の際(対称キーOpenの際)に入力した時に、
 ・ユーザー情報を暗号化して登録(更新)できる
 ・ユーザー情報を復号化して参照できる
といった動作にしていくことを予定。
なので「Always Encrypted」を使用しない方法でやってみる。

【1】対称キーの作成(アルゴリズムは AES_256 を指定)
CREATE SYMMETRIC KEY Beck_Sym_Key
WITH ALGORITHM = AES_256
ENCRYPTION BY PASSWORD = '[SymKeyPassword]'
go

f:id:masawan-guitar:20161011003133p:plain

【2】登録時の操作(暗号化)

(例)MST_USERテーブル(CREATE文)

暗号化する項目は[varbinary](max)型。

CREATE TABLE [dbo].[MST_USER](
	[SystemUserID] [uniqueidentifier] NOT NULL,
	[UserID] [varbinary](max) NOT NULL,
	[LoginID] [varbinary](max) NOT NULL,
	[Password] [varbinary](max) NOT NULL,
	[LastName] [varbinary](max) NOT NULL,
	[FirstName] [varbinary](max) NOT NULL,
	[LastNameKana] [varbinary](max) NOT NULL,
	[FirstNameKana] [varbinary](max) NOT NULL,
	[MailAddress1] [varbinary](max) NOT NULL,
	[MailAddress2] [varbinary](max) NULL,
 CONSTRAINT [PK_MST_USER] PRIMARY KEY CLUSTERED 
(
	[SystemUserID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

(1)対称キーをオープンする。対称キーの GUID を Key_GUID 関数で取得して、
 EncryptByKeyでデータを暗号化して INSERT する。

OPEN SYMMETRIC KEY Beck_Sym_Key
DECRYPTION BY PASSWORD = '[SymKeyPassword]'
go

DECLARE @kGuid UNIQUEIDENTIFIER
SET @kGuid = Key_GUID('Beck_Sym_Key')

INSERT INTO MST_USER (
    [SystemUserID],
    [UserID],
    [LoginID],
    [Password],
    [LastName],
    [FirstName],
    [LastNameKana],
    [FirstNameKana],
    [MailAddress1],
    [MailAddress2]
)VALUES(
    NEWID(),
    EncryptByKey(@kGuid, "[UserID]",
    EncryptByKey(@kGuid, "[LoginID]",
    EncryptByKey(@kGuid, "[Password]",
    EncryptByKey(@kGuid, "[LastName]",
    EncryptByKey(@kGuid, "[FirstName]",
    EncryptByKey(@kGuid, "[LastNameKana]",
    EncryptByKey(@kGuid, "[FirstNameKana]",
    EncryptByKey(@kGuid, "[MailAddress1]",
    EncryptByKey(@kGuid, "[MailAddress2]" 
)

(2)対称キーの CLOSE

CLOSE SYMMETRIC KEY Beck_Sym_Key
go

(参考)SELECT文を実行するとデータが暗号化されていることを確認できる。

SELECT * FROM MST_USER

f:id:masawan-guitar:20161010214334p:plain

【3】参照時の操作(復号化)

(1)SELECT文を実行(DecryptByKey で復号化)

対称キーをOPENして、SELECT文を実行。DecryptByKeyでデータを復号化する。

OPEN SYMMETRIC KEY Beck_Sym_Key
DECRYPTION BY PASSWORD = '[SymKeyPassword]'

SELECT TOP 1000 [SystemUserID]
    ,CONVERT(varchar, DecryptByKey([UserID])) AS  [UserID]
    ,CONVERT(varchar, DecryptByKey([LoginID])) AS [LoginID]
    ,CONVERT(varchar, DecryptByKey([Password])) AS [Password]
    ,CONVERT(varchar, DecryptByKey([LastName])) AS [LastName]
    ,CONVERT(varchar, DecryptByKey([FirstName])) AS [FirstName]
    ,CONVERT(varchar, DecryptByKey([LastNameKana])) AS [LastNameKana]
    ,CONVERT(varchar, DecryptByKey([FirstNameKana])) AS [FirstNameKana]
    ,CONVERT(varchar, DecryptByKey([MailAddress1])) AS  [MailAddress1]
    ,CONVERT(varchar, DecryptByKey([MailAddress2])) AS [MailAddress2]
FROM [ProjectManagementSystem].[dbo].[MST_USER]

(2)対称キーの CLOSE

CLOSE SYMMETRIC KEY Beck_Sym_Key

(参考)SELECT文を実行して復号化されたデータを参照。
f:id:masawan-guitar:20161010213804p:plain

※対称キーをDROPする場合

DROP SYMMETRIC KEY Beck_Sym_Key
【4】ユーザ登録を行うプロシージャのサンプル
CREATE PROCEDURE [dbo].[RegistUser]
    @SymKeyPassword varchar(250),
    @UserID varchar(250),
    @LoginID varchar(250) ,
    @Password varchar(max) ,
    @LastName varchar(max) ,
    @FirstName varchar(max) ,
    @LastNameKana varchar(max) ,
    @FirstNameKana varchar(max) ,
    @MailAddress1 varchar(max),
    @MailAddress2 varchar(max)
AS
BEGIN

    DECLARE @OpenCmd nvarchar(MAX)
    SET @OpenCmd =N'OPEN SYMMETRIC KEY Beck_Sym_Key DECRYPTION BY PASSWORD = ''' + @SymKeyPassword + ''' '
    EXECUTE sp_ExecuteSql @OpenCmd

    DECLARE @kGuid UNIQUEIDENTIFIER
    SET @kGuid = Key_GUID('Beck_Sym_Key')

    INSERT INTO MST_USER (
        [SystemUserID],
        [UserID],
        [LoginID],
        [Password],
        [LastName],
        [FirstName],
        [LastNameKana],
        [FirstNameKana],
        [MailAddress1],
        [MailAddress2]
    )VALUES(
        NEWID(),
        EncryptByKey(@kGuid, @UserID),
        EncryptByKey(@kGuid, @LoginID),
        EncryptByKey(@kGuid, @Password),
        EncryptByKey(@kGuid, @LastName),
        EncryptByKey(@kGuid, @FirstName),
        EncryptByKey(@kGuid, @LastNameKana),
        EncryptByKey(@kGuid, @FirstNameKana),
        EncryptByKey(@kGuid, @MailAddress1),
        EncryptByKey(@kGuid, @MailAddress2) 
    )

    CLOSE SYMMETRIC KEY Beck_Sym_Key

END