作成した時刻を取得して、圧縮したファイルのフォルダ名にするBashコード
#!/bin/bash format="%Y_%m_%d_%H_%M" cmd=`date +${format}` eval echo ${cmd} tar -zcvf file_${cmd}.tar.gz TARGET_DIRECTORY/
実行した時の時刻を yyyy/mm/dd/hh/mm で取得して、その結果を元に対象の圧縮ファイルを生成する。
Twitterの生年月日いじったらロックされた。ツライ(涙)
Bashで実数で計算する時のメモ(awkを使う)
某Qiitaで記事がない
自分も、Qiita時々参考にしたりしますよ。記事によっては、とても参考になるから。 でも、結構多くの記事がまったく参考にならない数行で終わるポエムとか多々あるんですよ。ここのブログの内容で人のこと言えるのか怪しいけど。 今回の内容がそんな例。今日は、某Qiitaの記事を真似て超短く記事を書くのがテーマ。
やりたい事
整数と実数を格納した変数を2つ用意して、結果を新たな変数に格納する。(シェルスクリプトで)
某Qii(ry では bc
を使った方法が転がってるんで、そっちに興味がある方は勝手に参考にしてもらって、コッチでは、 awk
にパイプラインで繋げて、結果を 変数 に格納する方法を取ります。(bc
コマンド は桁数設定してやらないといけないから面倒い)
例のコードでは、 半径 x = 5 、 π = 3.14 として計算するヤツ。
#/bin/bash x=5 readonly pi=3.14 ans=`echo ${x} ${pi} | awk '{print $1 ^ 2 * $2}'` echo ${ans}
Qiitaってアレ、いくら記事が💩でも、SEOに強いから検索結果の上位に来られるからホント困る。(別にQiitaを嫌ってるわけではないんです。すっごい参考になる記事はある。ただ、それに対してホント💩なページが多すぎるのが問題なだけ。)
Unixの考え方なSwiftプログラムを書いてみる。の巻
中の人、すぐ影響を受ける
最近、「ゼロから作るDeep Learning」とか、「実践 Deep Learning」とか、「Python機械学習プログラミング」とか機械学習関係の本に手を出しすぎてる感があったので、一歩引いて、「少しは設計思想的な分野を齧ってみよう!」と思い、Unixの設計思想を学ぼうと「 UNIXという考え方―その設計思想と哲学」を読んだわけですわ。
その中の「Small is beautiful.」と「全てのプログラムはフィルターとして振る舞うように作れ。」 に特に感化され...といった感じで書いたプログラムのお話。
どんなものを作るか問題
今回は、実験 & ノウハウの獲得が目的なので、以下のような簡単なもの。
- MacのFontBookで有名な宮沢賢治の「ポラーノの広場」の一節を標準出力で返すプログラム。(returnStringと呼ぶ事にする)
- 標準入力で受け取った文字列の文字数をカウントするプログラム。(countと呼ぶ事にする)
(特定の文字列を出すプログラムはまだしも、文字数カウントなんてwc
コマンドじゃないかとか、車輪の再発明はUnix哲学に反するぞ!とかは禁句)
上の2つのプログラムをパイプでつないで、最終的にテキストファイルに結果を書き出すまでが今回の実験。
イメージ的にはこんな感じ↓
さっそく、コードを書く
二つのコードはそれぞれこんな感じ。特徴としては、print()
やreadLine()
ではなく、FileHandle.StandardInput
とFileHandle.StandardOutput
を使っている点。
returnString.swift
// returnString import Foundation func returnString() -> String { let SquarePolano : String = """ あのイーハトーヴォの すきとおった風、 夏でも底に冷たさをもつ青いそら、 うつくしい森で飾られたモーリオ市、 郊外のぎらぎらひかる草の波。 """ return SquarePolano } let result = returnString() + "\n" FileHandle.standardOutput.write(result.data(using: String.Encoding.utf8)!)
count.swift
// count import Foundation func count() -> Int { let standardInput = FileHandle.standardInput.availableData var dataString = String(data: standardInput, encoding: .utf8) dataString = dataString?.replacingOccurrences(of: "\n", with: "") dataString = dataString?.replacingOccurrences(of: " ", with: "") dataString = dataString?.replacingOccurrences(of: ".", with: "") dataString = dataString?.replacingOccurrences(of: ",", with: "") return (dataString?.count)! } let result = count() let standardOutput = FileHandle.standardOutput let dataout = "\(result)\n".data(using: .utf8) standardOutput.write(dataout!)
「文字コードがASCIIじゃなくてUTF-8じゃないか!教義に則ってないじゃなか!」とかって怒られそうだけど、UTF-8の方が世界の共通言語だし、移植性の面からみてもUTF-8の方がいいだろJKって事でコッチを採用(笑)
で、あとはコンパイルして、シェルスクリプト書いて実行すればOK
当然のことですが、生成される実行ファイルはそれぞれ同じディレクリにある前提です。もちろん、シェルスクリプトも。
cmd.sh
#!/bin/bash cmd="./returnString | ./count > foo.txt" eval ${cmd}
あとは、同じディレクトリ上に生成された foo.txt の中身を確認してあげる。65
が書き込まれているはず。
終わりに
今回の目的はSwift4の標準入出力を使ってパイプラインが可能なコマンドラインツールを作るのが目的だったので、なんとか完成。 Swift 3以前のNSFileHandleの記事は、いくつかあったもののSwift4は全く見つからなかったので、色々大変だった。
みんな、iOSばっか書きすぎてパイプラインなんて興味ないのかね(笑)
- 作者: Mike Gancarz,芳尾桂
- 出版社/メーカー: オーム社
- 発売日: 2001/02/01
- メディア: 単行本
- 購入: 40人 クリック: 498回
- この商品を含むブログ (145件) を見る
実践 Deep Learning ―PythonとTensorFlowで学ぶ次世代の機械学習アルゴリズム (オライリー・ジャパン)
- 作者: Nikhil Buduma,太田満久,藤原秀平,牧野聡
- 出版社/メーカー: オライリージャパン
- 発売日: 2018/04/26
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (2件) を見る
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
- 作者: 斎藤康毅
- 出版社/メーカー: オライリージャパン
- 発売日: 2016/09/24
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (18件) を見る
[第2版]Python 機械学習プログラミング 達人データサイエンティストによる理論と実践 (impress top gear)
- 作者: Sebastian Raschka,Vahid Mirjalili,福島真太朗,株式会社クイープ
- 出版社/メーカー: インプレス
- 発売日: 2018/03/16
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
Swift For TensofFlow!
いや〜、TensorFlow Swift いよいよ公開されましたね。TensorFlow Dev Summit で発表される前から、ずっとSwiftはポストPythonになるに違いないって勝手に思ってたわけですが(ry
てな訳で、今回は前回前々回と打って変わって真面目に技術系の話をチョチョっと書いておきます。
後日、TensorFlowの勉強をしながらコード書くけど、今日はHello, Worldがわりにテンソル同士の足し算を↓
import TensorFlow func test() { let a: Tensor<Float> = [[1,2], [3,4]] let b: Tensor<Float> = [[5,6],[7,8]] let sum = a + b print("Sum: \(sum)") } test() // Sum: [[6.0, 8.0], [10.0, 12.0]]
あと、Swift、NumPy みたいなPythonのライブラリをそのままSwiftのコードに埋め込むことが出来るようになってるみたいなので、これは本格的にSwiftがPythonを駆逐して深層学習用の主要言語になって来るんじゃないか??Python → 研究用, Swift → 製品開発用 みたいな感じ?
github.com
Appleさん、Turi Create公開したけど、Googleにまたやられちゃったね...
でも、Swift for TensorFlow、macOS上のみって縛りがある代わりに、Metal2 APIを使えばAMDや噂のApple製GPUを使ったディープラーニングの高速化が出来るんじゃない?素人考えだけど…
また後日、ちゃんとしたポエムを書く予定。(未定)