本読み@図書館(2016年4月21日)
概要
図書館で色々本を読んできたのでメモ
キーワードで学ぶ最新情報トピックス 2016 (情報トピックス シリーズ)
情報関連のキーワードについて解説。よく使われているアプリやサービスの他IPアドレスやDB等の技術的なトピックスについての解説が載っているので結構勉強になる。
大学1年生や社会人1年生に是非読んでもらいたい一冊。値段も結構安いのでお買い得。
マンガでわかる! 音楽理論
楽器も弾けないし楽譜も読めないが、前から興味はあったので読んでみた。
倍音についての説明の他、メジャーやマイナー等についての理論的な説明がされていた。
ゼミ漫画ばりの展開であるが、楽譜が読めない私でもわかった気になれたので結構いいのでは。
やさしいIT講座―6時間でわかるPCの基本 (I・O BOOKS)
微妙だった。文字のサイズが急に変わったりして非常に見づらい。
重要語句が太字&下線になっていてやっぱり見づらい。
内容としては6時間でわかると銘を打っているので平易にわかりやすく書かれてはいるが、書きっぷりや全体の構成が性に合わなかった。
これを読むぐらいならば一番上で紹介した「最新情報トピックス」を読んだ方がいいと思う。
〔重点〕これからのUIの教科書 ~ユーザーインターフェース設計入門
プログラマ目線での、UI設計方法や注意するべきことについて書かれている。(デザイナ目線での魅力的なコンテンツやデザインの話では無いことに注意)
値の入力方法の強制や入力値のチェック、エラーメッセージとして出すべき内容などの話や、入力デバイスで注意する点について書かれており、プログラミングをする側としては非常に勉強になる内容であった。
但し、著者がデザイナーではない事もあり、サンプルの見た目がショボいのが気になった。
余談であるが、以前働いていた会社では、社内アプリのデザインを全て社長がやっていたが、この本で挙げられていたUIデザインに向かない人の特徴と完全一致したので笑った。因みに下記の様な特徴が挙げられていた。
自分の常識を相手に押し付ける人
利用者の立場に立てない人
最低限の基礎ができていない人
まんがでわかる 論語―――失敗するから、成長できる。
新書で紹介されていたので読んでみた。子曰くで始まるおなじみの論語についての本である。
7章ぐらいで構成されており、1章ごとに漫画と漫画内で出てきた文句についての解説が載っている。
漫画の内容は音楽部をテーマにしており、展開も結構面白かった。
表紙の真ん中の上にいるキャラが白黒だと髪の毛が白っぽいので、バンブーブレードの紀梨乃にしか見えなかった。
ビジネスルールを可視化する 要件定義の図解術
要件定義時のサンプルのビジネスルールと、それに対応するUML図の書き方が載っている。
一回は読んでおくと、このような表現方法もあるんだなぁと為にはなる。
実際に仕事で使う事を想定すると、会社によって要求仕様書の書き方があると思うので、この本の内容をそのまま利用するのは難しいのではないかと思う。
尚、ページの構成的にスカスカな箇所が多い上、ページ数も少ない。その割には値段がお高いので、中古で安かったら買っても良いかなぁぐらいの内容かと。
本読み@図書館
概要
図書館で色々本を読んできたのでメモ
暗号技術入門 第三版 秘密の国のアリス
結城浩大先生の暗号の入門書。
非常に丁寧に書いてあったのでかなり勉強になった。
本格的に暗号の勉強をする前に概要として、この本で勉強すると良いと思う。
ネットワークスペシャリストの試験にも結構役に立つ気がする。
20代から知っておきたいお金のルール
お金の使い方や貯め方、給料明細の見方、貯蓄、ローン、保険等について広く浅く解説している。
全体を通してマンガを挟んで解説しているのでイメージがしやすかった。
読んでおいて損は無いと思う。
10才からはじめるプログラミング図鑑: たのしくまなぶスクラッチ&Python超入門
前半でグラフィカルにプログラミングができるScratchでプログラミングの基礎を勉強する。後半ではScratchの文法と対比をしながらPythonの導入を行っている。
Pythonではタートルを用いて図の描画を行っている。個人的には小学生の頃のクラブ活動でパソコンをやっていた頃にタートルで遊んでいたのですごく懐かしい感じがした。
全ページカラーで、挿絵が全てドット絵調で描かれている。タイトル通り10才向けにわかりやすく丁寧に解説されている。本当にプログラミングを初めて行う人に対しては結構な良書なのではなかろうか。
統計で勝つ麻雀 (近代麻雀戦術シリーズ)
暗号の本が重かったので休憩がてらに読んでみた。牌譜の統計からこの場合はこうするべきみたいな話が延々とされている。
書きっぷりは口語に近いので読みやすかった。あくまで個人的な感想であるが、こういう場合にこう打つべき根拠がパーセンテージで出ているが、全体的に胡散臭かった。麻雀は一応打てる程度の能力しかないので、このような感想になっているが、詳しい人が見たら為になるのであろうか?
尚、表紙にアニメ調の女の子が描かれているが中身には一切登場しない。(釣りなのか?)
以上
本供養(PostgreSQL オフィシャルマニュアル)
はじめに
積ん読本消化第2弾。
今回は何で買ったかよくわからない「PostgreSQL オフィシャルマニュアル」
前回紹介した「PostgreSQL 徹底入門 第3版」と一緒に4〜5年前に購入したもの。
概要
- PostgreSQL 8.0のマニュアル
- 2016年3月現在、PostgreSQLの最新バージョンは9.5.1なのでかなり古い
- メジャーバージョンが変わってしまっているので、読むなら最新のものを読むべき
PostgreSQLのマニュアル(日本語版)はオンラインで読めるので、買う必要は無いと思う
Volumeは結構ちっちゃい文字で1000ページある
内容
- 全部で60章ある
- 35章ぐらいまでが読んでおくべき内容
- 36章からはAPIやそのI/Fについての話になるので、必要に応じて読む感じがいいと思う
為になった話
- 配列型の定義が可能
- 各データ型に対する専用の演算子
- 幾何データとか結構種類がある
- 行コンストラクタ
- 配列コンストラクタ
- 埋め込みSQL
- 移植性とか考えると、今となっては絶対やらない方がいい機能な気はするね
- APIの欄には関数がPostgreSQL独自拡張かどうかが書かれている
- 移植の可能性がある場合は、なるべく独自拡張の利用は避けたい
疑問点
- 本に対してというかSQL全般に対してだが、ストアドプロシージャが活躍するシーンが思いつかない
- 経験上RDBをフルに使うようなアプリ開発したことないからね仕方がないね
- 使われるのは統計データの解析が頻繁に走る場合とかね?
まとめ&所感
- まずオンラインで読めるので、この本を買う必要は無い
- 内容が古い(1つ前のメジャーバージョン)
- 500〜1000円ぐらいだったら暇つぶしにはいいかもね、若しくは睡眠導入用に
- 言語からの利用については基本的にC言語で書かれている。他の言語についても書いてはあるがページ数が少ない。
- この本に書いてある内容を十全に理解して実践できるとPostgreSQLマスターとなるんだろうが、ちっちゃいアプリばっかり書いてると移植性が気になるので、PostgreSQL独自の機能とかあんまり使いたくないんだよね…
本供養(PostgreSQL 徹底入門 第3版)
はじめに
積ん読本が溜まってきたので消化します。
今回消化する本は「PostgreSQL 徹底入門 第3版」
4〜5年前ぐらいに購入して部屋のディスプレイになっていたもの。2011年の本なのでちょっと内容が古い。
内容
PostgreSQLインストール
pgAdmin
- PostgreSQLを操作するためのGUI
- Windowsでの使い方説明
Linuxでも操作方法はそんなに変わらなかった筈
基本的なSQL文説明
PHPで操作するサンプル作成
他言語によるサンプル
- 起動とか設定ファイルの変更とか
- セキュリティ関連設定
- 運用上の注意
- 高信頼化
- レプリケーション
- その他
所感
プログラムからのアクセス方法に関しては、全体的に古いので、この本を過信しないほうが良いだろう。その他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モジュールの管理コマンド)
- 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に未対応!
=> よって自動コンパイルが出来ません。残念でした。
- 注意として2015/11/22現在、Visual Studio付属のtscは--watchに未対応!
そうは言っても自動コンパイルしたい
使い方
基本的な使い方
- 拡張子はts
# 下記コマンドを叩くと、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導入
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")
- あとはコンパイルして実行で終了