本読み@図書館(2016年4月21日)

概要

図書館で色々本を読んできたのでメモ

キーワードで学ぶ最新情報トピックス 2016 (情報トピックス シリーズ)

情報関連のキーワードについて解説。よく使われているアプリやサービスの他IPアドレスやDB等の技術的なトピックスについての解説が載っているので結構勉強になる。
大学1年生や社会人1年生に是非読んでもらいたい一冊。値段も結構安いのでお買い得。

キーワードで学ぶ最新情報トピックス 2016 (情報トピックス シリーズ)

マンガでわかる! 音楽理論

楽器も弾けないし楽譜も読めないが、前から興味はあったので読んでみた。
倍音についての説明の他、メジャーやマイナー等についての理論的な説明がされていた。
ゼミ漫画ばりの展開であるが、楽譜が読めない私でもわかった気になれたので結構いいのでは。

マンガでわかる! 音楽理論

やさしいIT講座―6時間でわかるPCの基本 (I・O BOOKS)

微妙だった。文字のサイズが急に変わったりして非常に見づらい。
重要語句が太字&下線になっていてやっぱり見づらい。
内容としては6時間でわかると銘を打っているので平易にわかりやすく書かれてはいるが、書きっぷりや全体の構成が性に合わなかった。
これを読むぐらいならば一番上で紹介した「最新情報トピックス」を読んだ方がいいと思う。

やさしいIT講座―6時間でわかるPCの基本 (I・O BOOKS)

〔重点〕これからのUIの教科書 ~ユーザーインターフェース設計入門

プログラマ目線での、UI設計方法や注意するべきことについて書かれている。(デザイナ目線での魅力的なコンテンツやデザインの話では無いことに注意)
値の入力方法の強制や入力値のチェック、エラーメッセージとして出すべき内容などの話や、入力デバイスで注意する点について書かれており、プログラミングをする側としては非常に勉強になる内容であった。
但し、著者がデザイナーではない事もあり、サンプルの見た目がショボいのが気になった。
余談であるが、以前働いていた会社では、社内アプリのデザインを全て社長がやっていたが、この本で挙げられていたUIデザインに向かない人の特徴と完全一致したので笑った。因みに下記の様な特徴が挙げられていた。

  1. 自分の常識を相手に押し付ける人

  2. 利用者の立場に立てない人

  3. 最低限の基礎ができていない人

〔重点〕これからのUIの教科書 ~ユーザーインターフェース設計入門

まんがでわかる 論語―――失敗するから、成長できる。

新書で紹介されていたので読んでみた。子曰くで始まるおなじみの論語についての本である。
7章ぐらいで構成されており、1章ごとに漫画と漫画内で出てきた文句についての解説が載っている。
漫画の内容は音楽部をテーマにしており、展開も結構面白かった。
表紙の真ん中の上にいるキャラが白黒だと髪の毛が白っぽいので、バンブーブレードの紀梨乃にしか見えなかった。

まんがでわかる 論語―――失敗するから、成長できる。 (Business Comic Series)

ビジネスルールを可視化する 要件定義の図解術

要件定義時のサンプルのビジネスルールと、それに対応するUML図の書き方が載っている。
一回は読んでおくと、このような表現方法もあるんだなぁと為にはなる。
実際に仕事で使う事を想定すると、会社によって要求仕様書の書き方があると思うので、この本の内容をそのまま利用するのは難しいのではないかと思う。
尚、ページの構成的にスカスカな箇所が多い上、ページ数も少ない。その割には値段がお高いので、中古で安かったら買っても良いかなぁぐらいの内容かと。

ビジネスルールを可視化する 要件定義の図解術

本読み@図書館

概要

図書館で色々本を読んできたのでメモ

暗号技術入門 第三版 秘密の国のアリス

結城浩大先生の暗号の入門書。
非常に丁寧に書いてあったのでかなり勉強になった。
本格的に暗号の勉強をする前に概要として、この本で勉強すると良いと思う。
ネットワークスペシャリストの試験にも結構役に立つ気がする。

暗号技術入門 第3版 秘密の国のアリス

20代から知っておきたいお金のルール

お金の使い方や貯め方、給料明細の見方、貯蓄、ローン、保険等について広く浅く解説している。
全体を通してマンガを挟んで解説しているのでイメージがしやすかった。
読んでおいて損は無いと思う。

20代から知っておきたいお金のルール

10才からはじめるプログラミング図鑑: たのしくまなぶスクラッチ&Python超入門

前半でグラフィカルにプログラミングができるScratchでプログラミングの基礎を勉強する。後半ではScratchの文法と対比をしながらPythonの導入を行っている。
Pythonではタートルを用いて図の描画を行っている。個人的には小学生の頃のクラブ活動でパソコンをやっていた頃にタートルで遊んでいたのですごく懐かしい感じがした。
全ページカラーで、挿絵が全てドット絵調で描かれている。タイトル通り10才向けにわかりやすく丁寧に解説されている。本当にプログラミングを初めて行う人に対しては結構な良書なのではなかろうか。

10才からはじめるプログラミング図鑑: たのしくまなぶスクラッチ&Python超入門

統計で勝つ麻雀 (近代麻雀戦術シリーズ)

暗号の本が重かったので休憩がてらに読んでみた。牌譜の統計からこの場合はこうするべきみたいな話が延々とされている。
書きっぷりは口語に近いので読みやすかった。あくまで個人的な感想であるが、こういう場合にこう打つべき根拠がパーセンテージで出ているが、全体的に胡散臭かった。麻雀は一応打てる程度の能力しかないので、このような感想になっているが、詳しい人が見たら為になるのであろうか?
尚、表紙にアニメ調の女の子が描かれているが中身には一切登場しない。(釣りなのか?)

統計で勝つ麻雀 (近代麻雀戦術シリーズ)

以上

本供養(PostgreSQL オフィシャルマニュアル)

はじめに

積ん読本消化第2弾。
今回は何で買ったかよくわからない「PostgreSQL オフィシャルマニュアル」
前回紹介した「PostgreSQL 徹底入門 第3版」と一緒に4〜5年前に購入したもの。

改訂新版 PostgreSQL オフィシャルマニュアル

概要

  • PostgreSQL 8.0のマニュアル
  • 2016年3月現在、PostgreSQLの最新バージョンは9.5.1なのでかなり古い
  • メジャーバージョンが変わってしまっているので、読むなら最新のものを読むべき
  • PostgreSQLのマニュアル(日本語版)はオンラインで読めるので、買う必要は無いと思う

  • Volumeは結構ちっちゃい文字で1000ページある

内容

  • 全部で60章ある
  • 35章ぐらいまでが読んでおくべき内容
    • 但し27章〜30章はC言語の話なので、C言語を利用しない人は読み飛ばし推奨
  • 36章からはAPIやそのI/Fについての話になるので、必要に応じて読む感じがいいと思う

為になった話

  • 配列型の定義が可能
  • 各データ型に対する専用の演算子
    • 幾何データとか結構種類がある
  • コンストラクタ
  • 配列コンストラクタ
  • 埋め込みSQL
    • 移植性とか考えると、今となっては絶対やらない方がいい機能な気はするね
  • APIの欄には関数がPostgreSQL独自拡張かどうかが書かれている
    • 移植の可能性がある場合は、なるべく独自拡張の利用は避けたい

疑問点

  • 本に対してというかSQL全般に対してだが、ストアドプロシージャが活躍するシーンが思いつかない
    • 経験上RDBをフルに使うようなアプリ開発したことないからね仕方がないね
    • 使われるのは統計データの解析が頻繁に走る場合とかね?

まとめ&所感

  • まずオンラインで読めるので、この本を買う必要は無い
  • 内容が古い(1つ前のメジャーバージョン)
  • 500〜1000円ぐらいだったら暇つぶしにはいいかもね、若しくは睡眠導入用に
  • 言語からの利用については基本的にC言語で書かれている。他の言語についても書いてはあるがページ数が少ない。
  • この本に書いてある内容を十全に理解して実践できるとPostgreSQLマスターとなるんだろうが、ちっちゃいアプリばっかり書いてると移植性が気になるので、PostgreSQL独自の機能とかあんまり使いたくないんだよね…

本供養(PostgreSQL 徹底入門 第3版)

はじめに

積ん読本が溜まってきたので消化します。
今回消化する本は「PostgreSQL 徹底入門 第3版」
4〜5年前ぐらいに購入して部屋のディスプレイになっていたもの。2011年の本なのでちょっと内容が古い。

PostgreSQL徹底入門 第3版

内容

  1. PostgreSQLインストール

    • WindowsLinuxへのインストール方法が書いてある
  2. pgAdmin

    • PostgreSQLを操作するためのGUI
    • Windowsでの使い方説明
      Linuxでも操作方法はそんなに変わらなかった筈
  3. 基本的なSQL文説明

  4. PHPで操作するサンプル作成

  5. 他言語によるサンプル

  6. 起動とか設定ファイルの変更とか
  7. セキュリティ関連設定
  8. 運用上の注意
  9. 高信頼化
  10. レプリケーション
  11. その他

所感

プログラムからのアクセス方法に関しては、全体的に古いので、この本を過信しないほうが良いだろう。その他PostgreSQLの基本的な事や設定方法に関しては、今でも使えるので読んでおいて損は無い。
プログラムに関して、Linuxで実行したり、Windowsで実行したり説明の軸がブレているのはいただけない。読者の窓口を広くしたかったのだろうが、広くし過ぎて説明内容が浅くなってしまっている。

個人的に疑問な点なのだが、PHPは初心者にとってわかりやすいのだろうか?昔プログラムのプの字ぐらいしか知らない頃にApacheの導入に失敗してPHPの勉強が全く進まなかった事があるのでいい印象がないのよね。文法自体は難しく無いがサーバの導入が難しいのではないかと思う。

最後にこの本の評価であるが、初心者でもPostgreSQLが導入できる様にソフトウェアのインストールから丁寧書いているのはいいと思う(Versionが古いので全面的に信頼は出来ないが)。また、Postgresの基本的な内容について広く浅く書いてあるので全体を把握するのにはよいのでは無いだろうか。だが、プログラムは色々な言語について書いてあるがはっきり言って紙面のムダでしか無い。各言語の導入に関しては誰かの個人ブログでも読んだほうがマシだと思う。2016年の今だったら中古で1000円ぐらいだったら買ってもいいかなぐらいの内容ですね。

LispでWebやりてぇ

LispでWeb

ClojureScriptという選択

LispでWebがやりたいと思った際に、選択肢で候補に上がるのが下記の2つ

  • ClojureScript
  • Wisp

しかし、Wispの更新が止まっており(2015/12/13現在)、npmによるインストールが出来ない状態になっています。よってClojureScript一択になるかと思います

導入

さて導入ですが、結構面倒です。
基本的にここを参照してください。スケルトンもいただきましょう。

セットアップ

まずは、上記の参照先と同じ手順でプロジェクトのセットアップを行います。(詳しく書いてもいいけどコピペになるので元記事参照してね。)

プラグイン追加

ここから、ちょっと変更を加えていきます。leiningen環境でJavaScriptライブラリを操作したいので、lein-bowerを追加します。

  :plugins [[lein-cljsbuild "1.0.3"]
            [lein-bower "0.5.1"]] ; ここを追加

JavaScriptのライブラリを追加

leiningenとbowerの連携をとってライブラリの追加を行なっています。bowerに必要なファイルを教える為に下記のプロパティを追加します。
取り敢えずここでは、jQuery, enchant.js, three.jsを指定しています。

  :bower-dependencies [[jquery "2.1.4"]
                        [enchant.js "0.8.2"]
                        [three.js "https://github.com/mrdoob/three.js.git#r73"]
                        ]

bowerの設定追加

bower側の設定を追加します。

  :bower {:directory "public/lib"    ; DLしたライブラリの出力先
          :package-file "bower.json" ; パッケージ管理ファイル(bower.jsonという値はデフォルト値と同じです)
          :config-file ".bowerrc"}   ; bowerコンフィグファイル(.bowerrcという値はデフォルト値と同じです)

ライブラリのインストール

lein-bowerで設定したライブラリ群をインストールします。

lein bower install

設定ファイルの再生成

 ここでプロジェクトの再実行をしてみるとわかりますが、エラーで落ちます。原因はbower.jsonファイルがないからです。
 よくわかりませんが、lein-bowerは内部でbower.jsonと.bowerrcを管理しているらしく、コマンド実行後に対象ファイルがあると消すようになっているみたいです。
 今回はこのファイルが消えてしまうと、gulpで実行できなくなるので再生成します。簡単に再生成出来る様になっていないので、下記のスクリプトを作成しました。pythonを知らないとよくわからないと思いますが、概要てしては下記の様になります。

  • lein bower pprintコマンドでbower.json, .bowerrcの中身が表示されるので一時的にファイルにダンプ
  • 分離して、それぞれのファイルを作成

取り敢えず、これで再実行できると思いますので実行してみてください。

#!/usr/bin/env python
# coding: utf-8

u"""
gulp watch用にlein bower pprint結果をファイルに出力する
"""

import os
import json
import subprocess

DUMMY_FILE = "__dummy_bower_json__"

BOWER_JSON = "bower.json"
BOWER_CONFIG = ".bowerrc"

def main():
    subprocess.call("lein bower pprint > {0}".format(DUMMY_FILE), shell=True)
    bower_json = None
    bower_config = None
    with open(DUMMY_FILE) as fp:
        for i, line in enumerate(fp.readlines()):
            if i == 2:
                bower_json = json.loads(line)
            elif i == 6:
                bower_config = line
    with open(BOWER_JSON, "w") as fp:
        json.dump(bower_json, fp)
    with open(BOWER_CONFIG, "w") as fp:
        fp.write(bower_config)
    if os.path.exists(DUMMY_FILE):
        os.remove(DUMMY_FILE)
    print "Done"
    pass

if __name__ == '__main__':
    main()

コンパイル対象のプロジェクトを分離

DLしたそのままの設定であると、プロジェクト毎にコンパイル環境が分離していないので、分離方法を載せておきます。

:cljsbuild {
  ;; buildsの中身をリストからDestructuring Bindに変更
  :builds {
            ;; 今までのやつ(src/mainに移動する)
            :main {:source-paths ["src/main"]                      ; ここをsrc/mainディレクトリに変更
                  :compiler {:output-to "public/main.js"
                              :optimizations :whitespace
                              :pretty-print true}}
            ;; 新規追加したやつ(src/graygameを作成してその仲にソース群を作成)
            :graygame {:source-paths ["src/graygame"]
                      :compiler {:output-to "public/graygame.js"
                                  :optimizations :whitespace
                                  :pretty-print true}}
            }
  }

分離したプロジェクトの監視&コンパイルは下記コマンドによって行う。

# mainのみ
lein cljsbuild auto main
# graygameのみ
lein cljsbuild auto graygame
# main, graygameの両方
lein cljsbuild auto

コマンドまとめ

一応まとめておく

# bowerによるJavaScriptライブラリのインストール
lein bower install
# clojurescriptファイルの監視&コンパイル
lein cljsbuild auto ターゲットのプロジェクト名
# サーバ起動
gulp watch

参考になる資料群

文法
関数等のチートシート
プラクティス

最後に

 作ったプロジェクトはpublicフォルダ以下が全てなので、コレをgulp以外のサーバ起動フレームワークで実行する事も可能なはずです。私はgulpの使い方がさっぱりわからないので、別なやつにそのうち置き換えたいと思っています。
 今回ClojureScriptを触りましたが、当初は導入(特にleiningen回り)がよくわからなかったので、触るつもりはありませんでした。というのも元々Wispを導入までやってたので、Wispをやろうと最新版をインストールしようとした所、現状出来ない状態にあることがわかりましてClojureScriptになったという感じです。
 因みにWispがnpmでインストール出来ないのは、escodegenというライブラリの依存が解決出来ないからのようです。
 WispとClojureScriptの大きな違いとしては、吐出されるJavaScriptファイルの読みやすさに尽きると思います。ClojureScriptで吐いたファイルを見てもらうとわかりますが、20k行ぐらいあります。その殆どが環境用のコードで、実際のコードは一番したの方にある数十行だったりします。また、ClojureScriptの吐いたコードは決して人間にとって見やすい様には書かれていません。その点Wispは人間が見れるコードを吐いてくれるので良かったんですけどねぇ。

TODO 要検討項目

  • gulpの使い方
  • gulp以外の奴を検討
    • nw.jsとか?

TypeScript導入

TypeScript導入

概要

最近C#でWebアプリ開発やれとか言うお達しがでた
=> MicroSoft依存なので、Visual Studioを使わざるを得ない(絶望)
=> あれ?TypeScriptってMicroSoftじゃね?
=> TypeScriptを使う以外ありえないwww

ということで、最近TypeScriptやってるので、そのオボエガキです。

インストール

@Linux

  • npmコマンドを入れる(JavaScriptモジュールの管理コマンド)
    • プロキシ等の設定は設定ファイルで行けます。=> ここ
    • 普通にapt-getとかでinstallすればいいと思いますが、コマンド名を変更する必要がある云々かんぬん... => 参考
  • npmを使ってtscを(ローカルに)インストール
    • なほ、現在のディレクトリにnode_modulesとか言うディレクトリができるので注意!
    • 自分専用のPCでない場合はローカルにしましょう!
    • グローバルはオプションとして-gをつければ良いだけ
npm install tsc
# グローバルの場合は下記の様な感じ
# npm install -g tsc
  • 実行コマンドのパスをPATHに追加
    • ローカルにインストールした場合、tscコマンドにパスが通ってないので通す。
    • node_modules直下の.binディレクトリに実行子のうなコマンドが這入っているので、そこへのパスを通す。
# .bashrc に追記する
export $PATH:tscをインストールしたディレクトリのnode_modulesへのパス/.bin

@Windows

  • Visual Studioを入れれば入ってるはず。

    • 注意として2015/11/22現在、Visual Studio付属のtscは--watchに未対応!
      => よって自動コンパイルが出来ません。残念でした。
  • そうは言っても自動コンパイルしたい

    • ここらへんを見ると、node.js/io.js入れてからの奴ならできるよ的な事が書いてあるので、npmとかをWindowsに入れれば出来そうな気がする。
    • (追記 2015/12/13)npm経由でinstallするとWindowsでもできました。
    • ここを参考にすると良いと思います。MinGWとかが必須なので多少面倒ですね。

使い方

基本的な使い方

# 下記コマンドを叩くと、YourFile.jsができる
tsc YourFile.ts

自動コンパイル & 複数ファイルのマージ

  • --watchで対象ファイルの監視
  • --outで出力ファイル名指定
# merged.jsが出力ファイル
# First.ts, Second.tsが分割したTypeScriptファイル
tsc --out merged.js --watch First.ts Second.ts

ファイルのimport(reference)

  • (2015/12/13 追記)
  • reference宣言はTypeScriptのコンパイル時の参照に必要なだけであって、コンパイル後のJSファイルに於けるファイルの参照を強制するものではない。
    => なので、referenceしたからと言って安心しないで、HTML側で元のJSファイルをちゃんと参照する事。
  • referenceで参照するのは、TypeScriptの型定義ファイルと呼ばれるもの(拡張子.d.ts)で、TypeScriptファイル本体ではないので注意
  • 書き方は下記の様な感じ
/// <reference path="ここに型定義ファイルのパスを記述(相対パスで良い)" />
// 上記のようなコメント文をファイルの先頭に記述しておく。

型定義ファイルの作成

  • 世の中に存在する著名なJavaScriptライブラリの型定義ファイルはMicroSoft公式や有志によって公開されている
    • ここ
    • (注意)上記のページのファイル数が多すぎて、Web上だと参照できないので落としてから探すとよいかも。
  • 独自のライブラリを作った場合は、型定義を作ってくれる有志がいないので自分で作らなければなりません。
    型定義ファイルの作成はそんなに難しくないらしいのですが、非常に手間です。
    そんな時は、コレ(dtsmake)を使いましょう。
  • 使い方としては、取り敢えず下記コマンドを実行するとOKなので楽ですね
    • 但し万能ではないので、エラーが出る場合があります。その時は取り敢えず出来上がったファイルを自分で修正しましょう。
dtsmake -s JSLibFile.js
// ----------------------------------------
// 元ファイル
// ----------------------------------------
function write2Console(x) {
  console.log(x);
}
// ----------------------------------------
// 出力されるファイル
// ----------------------------------------
/**
 * 
 * @param x 
 */
declare function write2Console(x : any): void;

Frege導入

Frege導入

FregeはJVM上で動くHaskellライクな文法の言語

1. jarのDL

ここからfregeXXX.jarを落とす。
DLしたfregeXXX.jarは,どこか特定の場所に置いておく(今回は ~/my/modules/ に置いた)

2. 初期化準備

FregeのGitHubの説明を読むとbuildディレクトリとかfrege.jarへのシンボリックリンクとか必要そうなので、それらを作るシェルスクリプトを作る。

#!/bin/bash

# frege-init というファイル名にでもしておく

if [ ! -e "build" ]; then
  # javaへ変換したファイルを格納するディレクトリは"build"としておく
  mkdir "build"
fi

if [ ! -L "frege.jar" ]; then
  # (*) DLしたfregeXXX.jarは, ~/my/modules/ 直下に置いたとする
  ln -s ~/my/modules/fregeXXX.jar frege.jar
fi

3. vim拡張

vimシンタックスこれを使う
インストールにはNeoBundleを使うと楽(誰かの記事を参考にして入れるといいと思うよ)

" .vimrcに以下を追加すると
" C-t c でコンパイル
" C-t p で実行となる
nnoremap [Exec] <Nop>
nmap <C-t> [Exec]
map <silent> [Exec]c :!java -Xss1m -jar frege.jar -d build %<CR>
map <silent> [Exec]p :!java -Xss1m -cp build:frege.jar %:r<CR>

4. 実行

  • まず、frege-initを実行してディレクトリとシンボリックリンクを作る
  • ファイル名をHello.frとする(module名と合わせておくこと)
module Hello where

greeting friend = "Hello, " ++ friend ++ "!"

main args = do
    println (greeting "World")