俺を支えた専門書 「プログラミング言語」
今までに読んだプログラミング言語に関する専門書を書いていきます。
言語
今現在で書ける言語は以下のとおりです。
C
- 作者: MMGames
- 出版社/メーカー: 秀和システム
- 発売日: 2011/06/24
- メディア: 単行本
- 購入: 3人 クリック: 600回
- この商品を含むブログ (1件) を見る
- 作者: 株式会社アンク
- 出版社/メーカー: 翔泳社
- 発売日: 2016/12/15
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
- 作者: 前橋和弥
- 出版社/メーカー: 技術評論社
- 発売日: 2001/01
- メディア: 単行本
- 購入: 22人 クリック: 147回
- この商品を含むブログ (75件) を見る
C++
- 作者: ハーバート・シルト,神林靖,トップスタジオ
- 出版社/メーカー: 翔泳社
- 発売日: 2010/10/20
- メディア: 大型本
- 購入: 8人 クリック: 14回
- この商品を含むブログ (3件) を見る
- 作者: (株)アンク
- 出版社/メーカー: 翔泳社
- 発売日: 2005/04/21
- メディア: 単行本
- 購入: 11人 クリック: 126回
- この商品を含むブログ (21件) を見る
Java
- 作者: 林晴比古
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2012/12/01
- メディア: 大型本
- クリック: 2回
- この商品を含むブログ (1件) を見る
パーフェクトJava (PERFECT SERIES) (PERFECT SERIES 2)
- 作者: アリエル・ネットワーク株式会社,井上誠一郎,永井雅人,松山智大
- 出版社/メーカー: 技術評論社
- 発売日: 2009/09/24
- メディア: 大型本
- 購入: 26人 クリック: 360回
- この商品を含むブログ (35件) を見る
HTML/CSS
- 作者: 狩野祐東
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2013/05/28
- メディア: 単行本
- この商品を含むブログ (3件) を見る
- 作者: 富士通エフ・オー・エム株式会社
- 出版社/メーカー: FOM出版
- 発売日: 2013/06/04
- メディア: 大型本
- この商品を含むブログを見る
JavaScript
改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで
- 作者: 山田祥寛
- 出版社/メーカー: 技術評論社
- 発売日: 2016/09/30
- メディア: 大型本
- この商品を含むブログを見る
パーフェクトJavaScript (PERFECT SERIES 4)
- 作者: 井上誠一郎,土江拓郎,浜辺将太
- 出版社/メーカー: 技術評論社
- 発売日: 2011/09/23
- メディア: 大型本
- 購入: 24人 クリック: 588回
- この商品を含むブログ (12件) を見る
PHP
- 作者: 山田祥寛
- 出版社/メーカー: 翔泳社
- 発売日: 2016/04/09
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
MySQL
- 作者: 西沢夢路
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2012/05/01
- メディア: 単行本
- 購入: 2人 クリック: 10回
- この商品を含むブログ (9件) を見る
Python
- 作者: 柴田淳
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2012/08/29
- メディア: 単行本
- 購入: 1人 クリック: 13回
- この商品を含むブログ (41件) を見る
パーフェクトPython (PERFECT SERIES 5)
- 作者: Pythonサポーターズ,露木誠,ルイス・イアン,石本敦夫,小田切篤,保坂翔馬,大谷弘喜
- 出版社/メーカー: 技術評論社
- 発売日: 2013/03/05
- メディア: 大型本
- 購入: 1人 クリック: 65回
- この商品を含むブログ (30件) を見る
Ruby
- 作者: 高橋征義,後藤裕蔵,まつもとゆきひろ
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2016/02/26
- メディア: 単行本
- この商品を含むブログ (1件) を見る
- 作者: Rubyサポーターズ,すがわらまさのり,寺田玄太郎,三村益隆,近藤宇智朗,橋立友宏,関口亮一
- 出版社/メーカー: 技術評論社
- 発売日: 2013/08/10
- メディア: 大型本
- この商品を含むブログ (22件) を見る
Golang
- 作者: 松木雅幸,mattn,藤原俊一郎,中島大一,牧大輔,鈴木健太,稲葉貴洋
- 出版社/メーカー: 技術評論社
- 発売日: 2016/09/09
- メディア: 大型本
- この商品を含むブログ (2件) を見る
- 作者: 飛松清,奥谷謙一
- 出版社/メーカー: リックテレコム
- 発売日: 2016/06/17
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (2件) を見る
指定した単語を含むパワポファイル出力ツールを作ったよ
作ったきっかけ
「Golang系のスライドどこいった...?」 っていうことが度々起こったため作りました。
slideshareのスライドを電車の中で読むために、いっぱいダウンロードするんですよね。 で、何日か経つと「あのときのあのスライドどこいった〜?」ってなるわけ。
作ったもの
-w word
で指定するとword
を含むパワポファイルのフルパスを表示。
$ ./pptgrep -w GOOGLE /home/k2la/test.pptx
-p startpoint
で指定するとstartpoint
内のファイルから探してくれる。
$ ./pptgrep -w APPLE -p ~ /home/k2la/test1.pptx /home/k2la/test2.pptx /home/k2la/test3.pptx
-r
をつけて再帰的に探すこともできます
$ ./pptgrep -w Docker -r -p ~/Downloads /home/k2la/Downloads/docker/test.pptx /home/k2la/Downloads/docker/test02.pptx /home/k2la/Downloads/slide0706/test.pptx
実装
パワポファイル(.pptx)
file
コマンドで調べてみると
$ file test.pptx test.pptx: Microsoft PowerPoint 2007+
こんな感じに出力されます。
で、これを unzip
コマンドで解凍してみると
$ unzip test.pptx -d test Archive: test.pptx inflating: test/[Content_Types].xml inflating: test/_rels/.rels inflating: test/ppt/slides/_rels/slide1.xml.rels inflating: test/ppt/slides/_rels/slide2.xml.rels inflating: test/ppt/slides/_rels/slide3.xml.rels inflating: test/ppt/slides/_rels/slide4.xml.rels inflating: test/ppt/_rels/presentation.xml.rels inflating: test/ppt/presentation.xml inflating: test/ppt/slides/slide4.xml inflating: test/ppt/slides/slide3.xml inflating: test/ppt/slides/slide2.xml inflating: test/ppt/slides/slide1.xml inflating: test/ppt/slideLayouts/_rels/slideLayout3.xml.rels inflating: test/ppt/slideLayouts/_rels/slideLayout6.xml.rels inflating: test/ppt/slideLayouts/_rels/slideLayout8.xml.rels inflating: test/ppt/slideLayouts/_rels/slideLayout9.xml.rels inflating: test/ppt/slideLayouts/_rels/slideLayout7.xml.rels inflating: test/ppt/slideLayouts/_rels/slideLayout4.xml.rels inflating: test/ppt/slideLayouts/_rels/slideLayout5.xml.rels inflating: test/ppt/slideLayouts/_rels/slideLayout1.xml.rels inflating: test/ppt/slideLayouts/_rels/slideLayout2.xml.rels inflating: test/ppt/slideMasters/_rels/slideMaster1.xml.rels inflating: test/ppt/slideLayouts/_rels/slideLayout10.xml.rels inflating: test/ppt/slideLayouts/slideLayout10.xml inflating: test/ppt/slideLayouts/slideLayout2.xml inflating: test/ppt/slideLayouts/slideLayout1.xml inflating: test/ppt/slideLayouts/_rels/slideLayout11.xml.rels inflating: test/ppt/slideMasters/slideMaster1.xml inflating: test/ppt/slideLayouts/slideLayout3.xml inflating: test/ppt/slideLayouts/slideLayout4.xml inflating: test/ppt/slideLayouts/slideLayout5.xml inflating: test/ppt/slideLayouts/slideLayout9.xml inflating: test/ppt/slideLayouts/slideLayout11.xml inflating: test/ppt/slideLayouts/slideLayout8.xml inflating: test/ppt/slideLayouts/slideLayout6.xml inflating: test/ppt/slideLayouts/slideLayout7.xml inflating: test/ppt/theme/theme1.xml extracting: test/ppt/media/image1.jpeg inflating: test/ppt/theme/_rels/theme1.xml.rels extracting: test/docProps/thumbnail.jpeg inflating: test/ppt/presProps.xml inflating: test/ppt/tableStyles.xml inflating: test/ppt/viewProps.xml inflating: test/docProps/app.xml inflating: test/docProps/core.xml
こんな感じに解凍されます。
スライドのタイトルや内容の文字列は
ppt/slides/slide*.xml
に含まれています。
この中を調べていくことになります。
ソースコードの一部
以下のコードは
で構成されています。
package main import ( "archive/zip" "path/filepath" "regexp" ) var slide = regexp.MustCompile(filepath.Join("ppt", "slides", "slide")) func isPpt(path string) bool { e := filepath.Ext(path) if e == ".ppt" || e == ".pptx" { return true } return false } func containWord(archive, word string) bool { reader, err := zip.OpenReader(archive) if err != nil { return false } for _, file := range reader.File { if slide.MatchString(file.Name) { fileReader, err := file.Open() if err != nil { return false } var p = make([]byte, file.FileInfo().Size()) fileReader.Read(p) defer fileReader.Close() r := regexp.MustCompile(word) if r.MatchString(string(p)) { return true } } } return false }
パワポファイルかどうかの判定は、あまりよろしくないですが拡張子で判定しています。
文字列の検索部分は、正規表現で含んでいるかどうかを見ています。