シェルスクリプトマガジン

test

Vol.48

投稿日:2017.05.24 | カテゴリー: バックナンバー

金沢大学・大野先生が、シェルスクリプトを活用した電子工作を伝授する「電子工作塾」。
今回は「回路を設計するより前に」、世界の電気街として名を轟かせる深センにマイ基盤を発注してしまいます。

すずきひろのぶ氏による人気連載「スズラボ通信」では、IFTTTを利用して「ボタンを押せばLINEにメッセージが届くIoTなアレ」をつくる方法を紹介します。

その他にも、業界を代表するスターエンジニア、伊藤直也さんと柄沢聡太郎さんが「エンジニアの生存戦略」を熱く語ったトークライブイベント「TechLION vol.29」の再録記事や、
UMLによる設計記述と導入として、ロバストネス分析とシーケンス図の利用法を紹介した「オレとRubyプログラミング」など、

強くしなやかなITエンジニアを今月も全力で応援するシェルスクリプトマガジン vol.48。
お見逃しなく! !

漢のUNIX ライブラリをつくってみよう! #その5(vol.48掲載)

投稿日:2017.05.23 | カテゴリー: 記事

著者:後藤大地
前回は静的ライブラリを作る方法を取り上げた。.cのファイルを.oのファイルへコンパイルし、それらをまとめて静的ライブラリとする。静的ライブラリはいわば部品の集まりで、コンパイル時にこの静的ライブラリから必要な部品を持ってきて利用することになる。コンパイルごとに静的ライブラリから部品がコピーされ、生成されるバイナリファイルへ含まれることになる。

ライブラリにはもうひとつ「共有ライブラリ」というものがある。動的ライブラリと呼ばれることもある。共有ライブラリの方はバイナリファイル生成時に指定はするものの、ここから部品をコピーしてバイナリに組み込むといったことはしない。生成したバイナリを実行するときにリアルタイムに共有ライブラリを見に行って、そのときに使われる。

記事本文掲載のシェルスクリプトマガジンvol.48は以下リンク先でご購入できます。

 

40歳から始める、オレとRubyプログラミング(vol.48掲載)

投稿日:2017.05.23 | カテゴリー: 未分類,記事

著者:しょっさん

 前回、ページ数が増えたことに増長して、ソースコードをたくさん載せたはいいのですが、それを説明する余白がありませんでした。今回は、前回掲載したソースコードについて、新しく使いはじめた部分を中心に説明します。
 その前に、連載を通じて少しずつではありますが、プログラムが拡張してきましたので、プログラム全体がどのような構成になっているかを、一度立ち返って見直してみます。ある程度の開発規模になってくると、設計図なく開発をすることは困難になってきます。今後のさらなる拡張と改良もふまえて、設計図を作って開発を進めていきます。

記事本文掲載のシェルスクリプトマガジンvol.48は以下リンク先でご購入できます。

UNIXネイティブの電子工作塾 vol.48掲載

投稿日:2017.05.23 | カテゴリー: 記事

著者:金沢大学 教授 大野浩之

さて、UNIXネイティブの電子工作塾 e-Badge編第2回ですが、少しだけ回り道をすることにました。今回は e-Badge(電子名札) のためのプリント基板(PCB)作りに着手する予定でしたが、その前にお話しておくべきことがありました。まず、PCB設計に用いるソフトウェア “Fritzing” の特徴をお伝えしたいと思います。それから、Fritzing で作成したPCBデータがどのようなもので、 これをどこにどうやって発注するのか、といったノウハウもお伝えしたいと思います。
そこで今回は、e-Badge の製作をはじめる前に、よりシンプルで汎用的な基板を作ることにしました。

本記事掲載のシェルスクリプトマガジンvol.48は以下リンク先でご購入できます。

ユニケージ開発手法 コードレビュー vol.37(本誌vol.48掲載)

投稿日:2017.05.23 | カテゴリー: 記事

著者:USP研究所技術研究員 新美勇一

今回は、業務システムの処理に見立てた簡単な例題で2つ実装例を挙げ、レビューを行いたいと思います。

本記事掲載のシェルスクリプトマガジンvol.48は以下リンク先でご購入できます。
USP研究所 通販サイトでは、個人用uspTukubaiのご購入も可能です。

バーティカルバーの極意 第二回 (vol.48掲載)

投稿日:2017.05.23 | カテゴリー: 記事

著者:中央大学 教授 飯尾淳

 バーティカルバーの極意、連載2回めの今回は、対象とするバーティカルバーとして「棒グラフ」を取り上げます。より正確にいえば、棒グラフのなかでも、ヒストグラムとよばれる種類の棒グラフです。ヒストグラムを柱状グラフと呼ぶこともあります。一般的に、柱はまっすぐ垂直に立てられるものです。この名称ひとつとっても、ヒストグラムをバーティカルバーの一族と考えてかまわないでしょう。

記事本文掲載のシェルスクリプトマガジンvol.48は以下リンク先でご購入できます。

/'”${LF}”‘/g’ | \ > grep ‘^20[01][0-9]年’ | grep UTC | \ > grep ‘日 [234]:’ | less

逆に、Tukubaiコマンドをシェルスクリプトで実装してみる 後編 (vol.48掲載)

投稿日:2017.05.23 | カテゴリー: 記事

著者:今泉光之 (Twitter: @bsdhack)

Open usp Tukubai は Python により実装されているので Python が動作する環境であればインストール可能です。
公式の配布サイトからソースを取得して展開し make install するだけで Open usp Tukubai は利用可能となります。
ここでは Open usp Tukubai のコマンドを解説します。
ただし以下のように Open usp Tukubai だけでも 55 コマンドも提供されており、その全てを解説するのは無理なので、
特に有用で興味深いコマンドを厳選して紹介します。

前回紹介したcalclock、comma、getlast、ketaに続き、今回はmojihame、self、sm2の3つのコマンドを紹介し、シェルスクリプトでの再現を試みます。
但し今回は紙面と時間の都合で一部の機能やオプションなど実装できていない部分も多いです。
また、動作の把握とメイン処理の実装のみに絞ったので、エラー処理などはまったく実施していません。
そのために実際の業務などには殆ど利用できない実験的なスクリプトとなっています。

mojihame

mojihameとは

テンプレート中に埋め込まれたキーワードをデータに置換して出力します。
キーワードは %数字 の形式で指定し、データ中に出現した順番にテンプレート中の %1、%2 …と置換されます。
データ中の @ はヌル文字として扱われ空文字列に置換されますが -d オプションで @ を別の文字に変更できます。
データ中の _ はスペースに変換して出力されます。_ を出力したい場合は \_ の様に指定します。

-l オプションは行単位での置換処理が実施されます。
入力データは行単位に読み込まれ、入力データの次の行が読み込まれるとテンプレートは先頭から再利用されます。

-l オプションではラベルを指定することができます。
ラベルが指定された場合、テンプレート中でラベルの間に書かれたキーワードのみが置換の対象となります。なおラベルはテンプレート中で2回 (開始と終了) しか書くことができません。
(-h による階層構造に関しては説明が複雑なのでここでは省略します)

mojihameを作ってみよう

基本的な機能は全て awk(1) の組み込み関数で実装しました。
通常モードでは、 awk(1) の BEGIN 処理でデータを全て読み込み配列 data に格納した後で _ の置換処理を行っています。
メイン処理ではテンプレートファイルを読み込み、 match 関数を利用して %数字 のラベルを探して gsub 関数で置換しています。

行モードでは、 BEGIN 処理でテンプレートを全て読み込みハッシュ template に格納しています。
メイン処理では、データを読み込み index 関数を利用して %数字 のラベルが存在する間テンプレートを置換します。
テンプレートに数字のラベルが見付からない場合は、テンプレートの次の行をハッシュ template から取得して処理を続けます。

今回紹介した Tukubai コマンドの中では、これが一番多機能なコマンドでした。非常に複雑で多機能なので、通常モードと行モードの基本的なテンプレート置換機能しか実装しておらず、-l オプションのラベル指定、-h オプションによる階層構造テンプレートなどは実装していません。

self

selfとは

入力データ(ファイルや標準出力)の指定されたフィールドのみを出力します。

フィールドの指定時のオプションで、開始文字と文字列長が指定できます。
例えば 4.3 とした場合は第 4 フィールドの 3 文字目から出力され、5.5.4 とした場合は第 5 フィールドの 5 文字目から 2 文字が出力されます。
マルチバイトの文字の場合、開始文字と文字列長はそれぞれ 1 文字を 2 として計算する必要があり、
マルチバイト文字を文字の中間で分割する様な指定された場合はエラーとなります。

フィールド指定の 0 は全フィールドを表します。
フィールド指定で n/m (n と m はそれぞれ整数) とすることで n 番目から m 番目のフィールドを出力できます。
フィールド指定の NF は現在行のフィールド数に置き換えられ NF-3 (最後から3番目のフィールド) や 2/NF などの利用が可能です。

-d オプションは引数で指定した文字列を区切ることができます。

selfを作ってみよう

self コマンド自体が awk(1) と似ているので、多少冗長になってしまいましたが awk(1) の機能だけで殆ど実装できました。フィールド指定、NF による相対的なフィールド指定、NF からの相対位置による指定、n/m 指定などが動作しています。
ただし OS X 標準の awk(1) はマルチバイト文字には対応していないのでマルチバイト文字を扱うことができません。
Linux で標準的に利用されている GNU awk の場合はマルチバイト文字に対応していますので、今回作成した self コマンドも正しく動作しています。

(次ページに続く)

もしインターネットの1秒が1年だったら 第1回(vol.47掲載)

投稿日:2017.05.16 | カテゴリー: 記事

written by hakatashi・Mine02C4

編注:本記事は「SunPro 2016 技術書典」で発表された記事に説明・イラストを追加し、シェルマガvol.47に掲載したものです。
以下リンク先で、オリジナル版の全文が公開されています。
https://sunpro.io/techbookfest/

インターネットが日本中のあらゆる人間に行き渡るようになってから、すでに10年単位の時間が経過しています。今日においてインターネットを支えるネットワーク技術が重要であることは言うまでもありませんが、実際にネットワークでどのタイミングで何が起こり、どれくらいの時間が費やされるのかということを身を持って体感している人は、たとえネットワークに精通している人でも少ないのではないでしょうか? この記事では、1 秒というわずかな時間を1年にまで拡大し、ネットワーク上で何が起こっているかを人間スケールでざっくりと解説していきます。

はじめに

こんにちは。先号まで石川啄木を蘇らせようとしていた博多市(@hakatashi) です。今回から、2016年の技術書典にSunProとして発表した「インターネットの1秒がもし1年だったら」というだいぶ抽象的で怪しい記事を、シェルスクリプトマガジン向けに再構成してお届けします。
インターネットというのは光の速さを身をもって感じることができるメディアです。先日、Hiraku Nakanoさんの「composerの遅さをまじめに考える」というスライド*1を拝見したのですが、そこではPHPのパッケージマネージャーであるcomposerが遅い原因として、「光の速さが遅すぎる」という理由が挙げられていました。
ユニークな考え方ですが言われてればたしかに道理で、日本からアメリカのサーバーまでハンドシェイクで何度も往復していると、確かに光といえど100ミリ秒単位で時間を浪費しています。
サーバーが近ければ通信は早いというのは誰もが知っていることですが、光の速度のせいだと言われるとなにやら圧倒されるものがあります。
この記事では、そんなネットワークの微視的な時間スケールについて徹底的に解剖します。一回の通信を解析し、それぞれ時系列順に細かく分解し、それぞれの操作でどれくらいの時間が費やされ、どんなイベントがいつ発生するのかを逐一追っていきたいと思います。
とはいえ、ネットワーク通信における時間経過はミリ秒単位で数えられます。今回は、そんな微細な時間の移り変わりをなるべくわかりやすくするため、通信上の1秒という時間を1年にまで引き伸ばし、約3000万倍の時間スケールでネットワークのイベントを追跡してみます。

*1 http://www.slideshare.net/hinakano/composer-phpstudy

共著者について

本記事の筆頭筆者はhakatashiですが、今回の記事を書くにあたり、同じSunProメンバーでありネットワークスペシャリスト取得者のMine02C4*2から、企画段階からの多大な協力と大幅な加筆を得ることができました。
ネットワーク知識不足のhakatashiにパケット解析を指南し、本記事では特にTLS 関連の項目の執筆、および全体のレビューを担当しています。共著者として名を連ねていますが、彼の協力なしでは本記事は恐ろしくクオリティの低いものになったであろうことは疑いようがなく、その貢献度に関しては計り知れません。どうぞお見知り置きください。

*2 HP: http://mine02c4.nagoya/, Twitter: @mine_studio

シチュエーション

今回解剖する対象の通信として、HTTPSによる通信をメインに解析しました。ふだん我々がブラウザから毎日使っているプロトコルなのは言うまでもなく、SSL/TLSの処理を挟むので、それなりに面白い結果になるのではないでしょうか。
また、HTTPS通信を行う際に必要となるARPやDNS通信についても述べていきます。さらに、通信を行うサーバーとクライアントの場所ですが、今回は、技術書典の会場でもある東京のインターネット環境から、さくらインターネットが誇る、北海道の石狩データセンターまでの通信を行います。
Googleマップによると、東京から、石狩データセンターがある石狩市新港中央までは1177.3km。光ファイバーに用いられる石英ガラスの屈折率は1.50程度*3なので、光は約20万km/sでこの距離を移動します。つまり、東京から石狩までの物理的な片道時間は約5.9ミリ秒となります。瞬く間もないほどの時間ですが、時間スケールを1年に引き伸ばすと2日と3時間半もかかります。往復で4日と7時間。石狩までぶらり旅といった感じですね。

*3 光学ガラス材料- シグマ光機株式会社

1秒 → 1年

1秒が1年になった世界の様子をもう少し見てみましょう。
真空中の光は時速34kmで移動します。先ほど出てきた光ファイバー中の光速は時速23km程度になるので、自転車か、休憩しながらのドライブ旅程度の速さになります。ちなみに男子マラソンの世界記録は時速20.6kmです。*4*5
3GHzのCPUは、こんな世界でも1秒間に95回という高橋名人の6倍のクロックを刻みます。PC3-12800のメモリーの転送速度は、もはやダイアルアップ接続よりも遥かにナローバンドですが、最大で1秒間に3200ビットの情報を読み出すことができます。

*4 2014年ベルリンマラソンのデニス・キメット選手の記録、2時間2分57秒より。
*5 ただし、この速度で走行するとこの世界では体重が26% 増えるのでオススメしない。

制約など

今回パケットを解析する上で、話を簡便化するためにいくつかの制約を加えています。
● DNSのシステムを明確に示すため、ローカルホストにDNSサーバーを置き、そこからリクエストのたびにルートDNSサーバーからアドレスを引いています。
● 複雑かつ時間がかかりすぎるため、ネームサーバーでのDNSSECの検証処理は無効化しています。
● SSL/TLSの証明書検証処理は無効化しています。

測定環境

測定には、ラップトップマシン上のUbuntuの仮想環境を使用しました。一回の測定ごとにDNSキャッシュとARPキャッシュをクリアし、なるべくクリーンな状態で測定を行いました。
また、先程も述べたとおりDNSサーバーはローカルホストに設置し、そこから外部に向けてアドレスを引くようにしました。
サーバーは先ほど述べたさくらの石狩データセンターへのアクセスを確実に測定するため、今回の記事のためにさくらVPSの石狩リージョンのサーバーを調達しました。OSはさくらVPSの初期OSであるCentOS 6.8で、デフォルトのApache 2.2.15をほとんどそのまま使用しました。SSL は自己署名証明書で通信し、証明書の検証は無効化してあります。
クライアントは、Windows上の仮想マシンのUbuntu 14.04.4を用いました。クライアントアプリケーションはcURLを用いています。ネームサーバーはローカルホストにBIND 9.9.5を立て、キャッシュを無効化した上でルートサーバーからアドレスを引くよう設定してあります。
通信内容は、100KB(102400 バイト)のバイナリファイルをGETリクエストで取得するもので、HTTPパラメータはほぼcURLのデフォルトを使用しています。
パケットキャプチャはクライアント側とサーバー側で同時に行い、tcpdumpで同じ通信を2度キャプチャして解析しています。時刻に関しては毎度NTPで時刻補正しましたが精度が得られなかったのでサーバー側とクライアント側の測定値を見て適当に補正を行いました。
今回記事中で使用した数字は、以上の条件のもとに行った10回の測定結果の平均値をもとにしています。

サーバーちゃんとクライアントちゃん

サーバーちゃん   クライアントちゃん

今回、せっかく時間軸を人間スケールで語るので、通信処理の登場人物も人間という体で解説していきます。
この話の主人公は「クライアントちゃん」と「サーバーちゃん」です。クライアントちゃんは東京で悠々とした生活を送っている普通の女の子であり、趣味は暗号と文通です。一方サーバーちゃんは石狩のデータセンターで、ひしめき合うたくさんのサーバーとともに、Webサーバーとして多忙な毎日を送っています。
こんな対称的な2人が、今回は年明けと同時に通信を開始します。さらに、通信は手紙のやり取り、IPアドレスは住所、ルーターは郵便ポスト……というように、適宜シチュエーションに合わせた読み替えを行っていきます。あくまで例えですので、あまり正確ではないかもしれませんが、今回の目的はあくまで通信処理の全貌をふわっと理解することなので、あまり厳密に考えず、空っぽの頭で読んでください。
また、今回解説する通信処理の概略を、簡単なシーケンスダイアグラムで示します。通信処理の主役は情報をやり取りするサーバーちゃんとクライアントちゃんなのですが、第1回は2人の通信が開始するまでの準備作業が主となり、サーバーちゃんはまだ登場しません。インターネット通信において目的のサーバーのアドレスを見つけるためにどのような処理が行われているのかを一段階ずつ検証していきます。


それでは、クライアントちゃんとサーバーちゃんの通信の始まりです。

 

ルーターのアドレス解決

1月1日 午前0時0分 ARPリクエスト送信

あけましておめでとうございます。NHKの「ゆく年くる年」を見ながらインターネットの年が明けます。
この瞬間、東京でまったりと紅白歌合戦を見ていたクライアントちゃんは、石狩にいるサーバーちゃんに聞きたいことがあるのを思い出しました。長い長い通信の始まりです。
さっそくクライアントちゃんはサーバーちゃんに手紙を書くことにしました。
クライアントちゃんは何もわかりません。郵便ポスト(ルーター) の場所も、サーバーちゃんの住所(IPアドレス) も、いつも使っていた住所録(DNSサーバー) の場所も覚えていません。
キャッシュを削除したクライアントちゃんは記憶を失ってしまったのです。
覚えているのは、ただ石狩にいるはずのサーバーちゃんのことだけ……。
困ったクライアントちゃんは、まずは郵便ポスト(ルーター) を探すことにしました。家の中や向こう三軒両隣のことならともかく、遠く石狩に住むサーバーちゃんに手紙を届けるには、何よりポストがなければ話が始まりません。
クライアントちゃんはもうネットワークに接続しているので、ルーターのIPアドレスはすでに分かっています。しかし実際にルーターと通信するには、ルーターのMACアドレスが必要です。これを引くために、ARP(Address Resolution Protocol)と呼ばれるプロトコルを用います。
ARPリクエストはIPアドレスに対応するMACアドレスを検索するリクエストです。MACアドレスのプロードキャストアドレス(FF:FF:FF:FF:FF:FF) に向けて発信することで、同一ネットワーク内のすべての機器にこのリクエストを送信することができます。クライアントちゃんは街中に響く声でポストの場所を尋ねました。

「郵便ポストはどこですかぁぁぁぁ??!!」

1月1日 午前3時26分 ARPレスポンス受信

いったい今何時だと思っているんでしょうか。クライアントちゃんの声は街中に響き渡り、近隣住民からたいへん大目玉を食らいましたが、努力の甲斐あって、3時間半後に親切な人がポストの場所を教えてくれました。
ARPは、ブロードキャストでネットワーク全体に配信されたイーサネットフレームに対して、尋ねられているIPアドレスが自分のものであればMACアドレスを応答するというシンプルな仕組みで動作します。
今回は事前にARPキャッシュを削除してから通信を行ったので、通信前に必ずARPの問い合わせが走るようにして計測したのですが、そもそもARPは頻繁にキャッシュを消去します。*6クライアントちゃんはとても忘れっぽいのです。

*6 Ubuntu の場合、キャッシュの有効時間は15 分程度。

DNS解決

1月1日 午前5時7分 DNSクエリ送信 1回目

親切なおじさんのおかげで、クライアントちゃんは郵便ポストの場所を知ることができました。
またすぐ忘れてしまうのですが、この世界では約900年後のことなので、特に気にすることはありません。
となると次にクライアントちゃんが知るべきはサーバーちゃんの住所(=IPアドレス) です。郵便ポストを見つけても相手の住所がわからないと手紙は送れません。サーバーちゃんの住所を知るために、クライアントちゃんはルートサーバーに住所を問い合わせることにしました。
電話番号に電話番号問い合わせサービスがあるように、ネットワークの世界にも、ドメイン名から相手のアドレスを問い合わせるためのDNS(Domain Name Service)があります。
電話番号の場合は104番という番号を知っていれば他の番号を問い合わせることができます。
インターネットにおける“104”は、世界に13個存在するルートサーバーのアドレスです。今回は、13個の中で唯一日本の団体が管理している、Mルートサーバーに問い合わせるようにルートサーバーの設定を変更しています。*7
サーバーちゃんの住所を一秒でも早く正確に知りたいクライアントちゃんは、世界中に数あるDNSサーバーの中でも最も権威あるルートサーバーに一筆したためることにしました。あらゆるキャッシュを削除したクライアントちゃんも、一番大事なルートサーバーの住所は覚えています。
あれこれ悩んで手紙を書き、ようやく完成したのはそれから1時間半後のことでした。早朝の冷たい冬風が骨身に染みます。クライアントちゃんはコートを厚めに羽織ってポストに手紙を投函しに行きました。
一刻も早く返事が帰ってくることを願って……。

「うぅっ、さぶっ。早くお返事来るといいなぁ」

*7 もっとも、ルートサーバーはクラスタ構成になっており国単位で分散しているため、必ずしも問い合わせたマシンが日本に存在するかどうかは保証されないのですが…。

1月14日 午前3時57分 DNSレスポンス受信 1回目

最初に手紙を送ってから2週間が経過しました。冬休みも終わって正月気分もようやく抜けてくる頃です。もうこの時点で直接会いに行ったほうが手っ取り早いんじゃないかという気がしますが、石狩は遠いのです。そんな気軽に会いに行けないのです。たぶん。

ともあれ、ルートサーバーからようやく返事が帰ってきました。郵便局が怠慢なのかルートサーバーがお役所仕事をしてるのか知りませんが、とにかくこれでサーバーちゃんの住所を知ることができた……というわけではありません。
ルートサーバーは世界中のすべてのマシンのIPアドレスを記録しているわけではありません。
ドメイン名を問い合わせられたDNSサーバーは、自らが委任するDNSゾーンのネームサーバーの情報を返します。今回問い合わせたドメイン名はさくらのVPSサーバーにデフォルトで割り当てられたドメイン*8なので、ルートサーバーはjpサブドメイン*9のネームサーバー*10を返してきました。つまりjpドメインのことはjpドメインの担当者に聞けということです。

「えー……」

*8 .vs.sakura.ne.jp で終わるドメイン名
*9 .jp はTLD(Top Level Domain) なのでサブドメインと呼んでいいか微妙ですが……
*10 a.dns.jp, b.dns.jp, c.dns.jp, d.dns.jp, e.dns.jp, f.dns.jp, g.dns.jp の7 つ

1月14日 午前9時52分 DNSクエリ送信 2回目

jp ドメインの担当者というのは要はJPRS(日本レジストリサービス)のことです。サーバーちゃんの住所を聞き出す手がかりを得たクライアントちゃんは、夜が明けるのを待ってから今度はJPRSのDNSサーバーに対して手紙を書きました。
実を言うと、jpドメインのネームサーバーを管理しているのはJPRSその人ですが、実際の運用は、JPRSを含めた5つの独立した組織によって行われています。これはルートサーバーが世界に13個あるのと同じく、ネームサーバーがダウンした際のリスクを可能な限り最小限に抑えるためです。
2 回目のDNSレイヤーの内容は、トランザクションIDを除いて前回ルートサーバーに対して送ったのと全く同じ内容です。DNSはなるべく高速に動作するように簡明に設計されているため、このようにパケットの内容を容易に再利用できるようになっています。決してクライアントちゃんがサボっているわけではありません。

1月27日 午後2時30分 DNSレスポンス受信 2回目

ふたたび待つこと2週間。すでに1月が終わりに近づいてきました。
クライアントちゃんの元にJPRSからの返信が届きました。サーバーちゃんの住所はまだわかりません。今度はsakura.ne.jpの権威サーバーである、さくらインターネットのネームサーバー*11の情報が返ってきました。

「……またかよ」

ここに来てようやくさくらインターネットの影に辿り着きました。サーバーちゃんの住所ゲットまであと一息です。

*11  ns1.dns.ne.jp, ns2.dns.ne.jp

1月27日 午後6時56分 DNSクエリ送信3回目

同じやり取りも3回繰り返すと飽きてしまいますね。けれどクライアントちゃんはサーバーちゃんに手紙を届けるために、めげずにDNSのパケットを送り続けます。今度は先ほど入手したさくらインターネットのネームサーバーの住所に対して、みたびサーバーちゃんの住所を尋ねる手紙を出します。
ところで、先ほどからクライアントちゃんは気軽にあちこちにDNSパケットを送ったり受け取ったりしていますが、これはDNSがUDPプロトコルの上で動作しているからです*12。UDPは、後ほど解説するTCPと異なり、相手のマシンとの接続を確立する必要がないため、気軽に任意のアドレスにいきなりデータを送りつけることができます。
逆に言うと、TCPのような再送要求やエラー訂正などの機能を持たないため、伝送経路のどこかでパケットが損失した場合、クライアントちゃんは返事を待ちぼうけということになってしまいます。
もっとも、それもタイムアウトするまでですが。

*12 DNS自体はTCP上でも動作することが義務付けられています。

2月10日 午前9時35分 DNSレスポンス受信 3回目

2月に突入しました。幸い3度目のクエリも待って待って待ちぼうけという事にはならず、ポストに投函してから2週間経って再び返事が帰ってきました。そこには待ち望んでいたサーバーちゃんの住所がくっきりと書かれています。
これにて名前解決完了。ようやくサーバーちゃんに対してパケットを送りつけることができるようになります。もうあちこちのネームサーバーとパケットをやりとりする必要はありません。年が明けてから41日間、実時間にして110ミリ秒が経過しました。この調子で年内にサーバーちゃんとの通信を終えることができるのでしょうか。クライアントちゃんの通信はまだまだこれからです。

「この続きはシェルマガvol.48、またはオリジナル版掲載サイトを見てねっ!」

本記事掲載のシェルスクリプトマガジンvol.47は以下リンク先でご購入できます。

漢のUNIX ライブラリをつくってみよう! #その3(vol.46掲載)

投稿日:2017.05.9 | カテゴリー: 記事

著者:後藤大地

今回は分割したファイルが実際にどのように処理され、最終的にバイナリ形式の実装ファイルに変換されるのかといった過程を、もうちょっと詳しく紹介していこうと思う。実際にどのように処理が進むのか知ることで、コーディング中の頭の中にどのように処理されるのか地図が浮かんでくるようになり、より効率が良く見通しの良いソースコードを記述できるようになる。その内側を調べていこう。

 

記事本文掲載のシェルスクリプトマガジンvol.46は以下リンク先でご購入できます。

 

 

ユニケージ開発手法 コードレビュー vol.35(vol.46掲載)

投稿日:2017.05.9 | カテゴリー: 記事

著者:USP研究所技術研究員 青木剛理

今回は、無意識にシェルを書くと計算誤りが発生しやすい、ゼロとヌルの違いについて説明します。

本記事掲載のシェルスクリプトマガジンvol.46は以下リンク先でご購入できます。
USP研究所 通販サイトでは、個人用uspTukubaiのご購入も可能です。

 

機械学習で石川啄木を蘇らせる 最終回(vol.46掲載)

投稿日:2017.04.25 | カテゴリー: 記事

written by 高橋光輝

様々なアルゴリズム・機械学習をスマートに組み合わせて未完の短歌の補完を目指した人気連載「機械学習で石川啄木を蘇らせる」。シェルマガでは同人誌から手法を発展させ、新たに記事を書き起こしてもらいました。

連載全体を俯瞰するまとめ回となった最終回を公開します。ぜひお楽しみください!

本連載のもとになった同人誌の内容は、以下のURLから閲覧が可能です。(編集部)
https://sunpro.io/c89/pub/hakatashi/introduction

遂に、機械学習で石川啄木が帰り来れり

こんにちは。高橋光輝(HN:博多市)です。今回は連載「機械学習で石川啄木を蘇らせる」の最終回として、今までに生成した、「啄木の短歌」と「ダミーの短歌」の素性ベクトルをもとに、「啄木らしさ」を学習します。その後前々回作成した「最後の一首」候補の短歌を分類器にかけ、最も「啄木らしさ」の高い一首を、復元された「最後の一首」とします。
さて、前回までの作業で「啄木の短歌」と「ダミーの短歌」の素性ベクトルを抽出し、それぞれの短歌が持つ特徴を100次元のベクトルデータに変換することができました。このように入力データを正規化し形式を揃えることによって、機械学習にとって扱いやすいデータになります。今回は「啄木の短歌」と「ダミーの短歌」を正確に分類できる分類器を作成することによって、擬似的に「啄木らしさ」の学習を行っていきます。
以前お話したとおり、分類問題は機械学習の最も基本的なタスクです。機械学習の草創期から現在に至るまで非常に多くのモデルが提唱されてきました。この連載のもととなった記事では多項ナイーブベイズ分類器を用いて分類を行いましたが、今回の連載では線形サポートベクトルマシンを用いた分類器を使用することにしました。一般に機械学習においてどのようなタスクにどのような手法が向いているのかというのを理論的に示すのは難しく、パラメーターの調整次第でいくらでも性能が変化しうるというのが機械学習の難しい部分です。今回の場合も理論的にどうこうというよりは試行錯誤を重ねたうえでの選択となっていますので、このあたりの説明の足りない点はどうかご容赦ください。

SVMをこのごろ気になる

さて、サポートベクトルマシン、略してSVMというのは少しでも機械学習を齧ったことがある方なら一度は聞いたことのある名前でしょうが、あらためて軽く解説を行いたいと思います。
SVMはおそらく、数ある機械学習のモデルの中でも特に直感的に理解しやすいモデルです。図1のように、ベクトル空間上に分類したい2種類のデータが点在する状況を考えます。これらのデータを元に未知のデータに対して分類を行うには、ベクトル空間のどの部分がどの種類のデータの領域なのかを定める境界面、つまり識別面が必要になります。

図1:SVMによる識別面の設定
SVMはこの識別面を、それぞれのクラス中で最も識別面に近いデータまでの距離、つまりマージンが最大化されるように線を引きます。この識別面の具体的な引き方を計算するには線形代数の知識が必要であるためここでは省略しますが、通常のデータでは入力されたデータからこのような識別面の解を一意に求めることができます。これが線形サポートベクトルマシンにおける「学習」です。
こんな単純なモデルで本当に「啄木らしさ」が学習できるのかと疑問に思うかもしれません。実際、線形SVMによる分類は名前の通り線形であり、非線形な処理を含まないため単体では表現力に乏しいとされています。しかし、今回分類するデータは、word2vecとsentence2vecを用いてベクトルに落とし込む段階ですでに言語の意味論的な部分をベクトル空間上に抽象化していると考えられるでしょう。word2vecによる事前学習を行ったデータがSVMやK-meansなどの比較的単純な手法でも非常に高いスコアを上げることはword2vecを提唱した論文でも示されており、これが今回のケースにも当てはまります。つまり、単語からベクトル空間へのよく学習された写像関係においては、たかだか100程度の次元で言語が持つ複雑な意味論的モデルを十分に表現できるということであり、この点からもword2vecの優秀さを伺うことができます。

SVMにさはりてみるかな

さて、話は脱線しましたが、ここからは実際にSVMを用いて「啄木の短歌」と「ダミーの短歌」を分類する分類器の学習を行いましょう。今回はscikit-learnというライブラリを使用します。scikit-learnは、機械学習の様々なモデルや、機械学習をする上で便利なツールが1つのパッケージに実装したライブラリであり、多種多様な機械学習を手軽に試せるため、機械学習の定番的なライブラリとなっています。一方、速度などの点では他のライブラリにやや劣っていますが、今回は学習するデータ数が比較的少ないため問題にはならないでしょう。
scikit-learnをインストールするために、次のコマンドを打ち込んでください。

 

では、コードを書いていきます。いつも通り、Makefileの最初にリスト1のような行を加えてください。

そして、predict_takuboku_tanka.pyというファイルを作成し、次のように記述します。

ここで、分割交差検定と呼ばれる方法を用いてSVMの精度を測定しています。分類器の精度とはすなわち分類の正確さであり、既知のデータに対してどれだけ正確に分類を行えるかを計測することによって測定できますが、このとき学習に用いたデータを測定に使用しないよう注意が必要です。学習に用いたデータは学習機にとっても既知のデータであり、正確に分類を行えるのはある意味当然であるので、精度測定が不正確になるおそれがあります。そのため、通常はデータセットを学習用のデータとテスト用のデータに分割して使用するのですが、このときの分割の仕方によって精度測定に影響が出る可能性があるため、学習用のデータとテスト用のデータを互いに入れ替えながら何度も測定を行うことがあります。これが分割交差検定です。


図2:5分割交差検定の例

今回の測定では5分割の交差検定を行っています。つまり、入力データの5分の1をテストデータに使用する測定を5回行っているということです。この測定結果は環境や乱数によって多少変動するでしょうが、おおむね97~98%程度の数値が出ると思われます。これはこの連載の元となった記事での93.3%という精度と比較しても非常に高いスコアであり、「啄木の短歌」と「ダミーデータ」との違いがよく学習ができていることが期待されます。
プログラムではその後、あらためてすべての入力データを用いてSVMの学習を行い、本命の「最後の一首」の候補を分類するための分類器を学習します。そして、それが終わったら実際にこれまでの連載で作成してきた「最後の一首」候補の短歌のベクトルデータを分類器に入力し、「啄木の短歌らしさ」の数値を推定します。これによって最もスコアが高かったものが、復元された「啄木の最後の一首」ということになります。

大跨に椽側を歩けば……

長い道のりでしたが、ようやく復元結果の発表です。それではもったいぶらずに発表しましょう。機械学習の力を借りて現代に蘇った石川啄木の最後の一首、その内容はこちらに決定しました。

大跨に椽側を歩けば、
うしなひしをさなき心
寄する日ながし。

……いかがでしょうか? 実のところ生成時に関係するさまざまな環境や乱数によって生成される短歌が異なる可能性があるので、これが唯一の解答というわけではありません。読者の皆さんが試した結果はこれとは異なる可能性があります。それぞれにそれぞれの復元結果があるということです。
「啄木らしさ」が高いと判定された短歌がどのようなものか確認するために、スコアの高かった上位30件を順に見てみましょう。

 

全体としての印象は、「かなしき」「うしなひし」「むなしき」「痛く」「冷たし」といった陰的な形容が目立ちます。この点は非常に興味深いです。以前紹介した復元結果「大跨に椽側を歩けば、板軋む。/かへりけるかな――/道広くなりき。」では「椽側を歩く」という表現から「板軋む」「道広く」といった意味的な共起表現を拾っており、この点で以前の結果は優れていましたが、一方で詩的表現の手段としての言語をあまりにも字句的に捉えすぎているという指摘も受けました。今回の結果は前回よく見られたような「板」や「道」のような前半と関連する表現は見受けられませんが、代わりにこのような精神的な表現の傾向が陽に現れたことは、ある種前回の壁を乗り越えられたといえるのではないでしょうか。
また、「眼閉ぢ眼をとづ」や「軽くかろく眺むる」といった同じ単語の繰り返しのパターンが現れているのも興味深いです。三十一文字の中で同じ表現や単語を繰り返すのは特に前期啄木に見られる技法であり、「なみだなみだ/不思議なるかな/それをもて洗へば心戯けたくなれり」「はたらけど/はたらけど猶わが生活楽にならざり/ぢっと手を見る」といった歌にみることができます。この結果に出てきている用例はかなり露骨でありあまり高く評価はできませんが、もしかしたらこのような表現パターンを入力データから学習しているのかもしれません。
というわけで、今回の復元結果はこのようになりましたが、この結果は学習のパラメータや手法次第で大きく変わる可能性があります。読者の皆さんはぜひ、各種パラメーターを変更して、より望ましい結果が得られるように調整してみてください。たとえば、

・形態素解析に用いる辞書データの変更
・RNNLMやマルコフ連鎖で生成する短歌の数の変更
・マルコフ連鎖で用いるn-gram辞書のnの値の変更
・RNNLMに渡す各種パラメーター
・分類器のパラメーターの変更、もしくは探索※2

などは試してみる価値があると思います。

ひよつとした事が、思ひ出の種にまたなる

さて、こうして無事石川啄木の最後の一首を復元することができたので、おさらいをする意味も込めて本連載の流れをもう一度最初から振り返ってみましょう。


第1回(編:本誌 vol.38掲載)では、イントロダクションとして、本連載の中心人物である石川啄木の紹介、そして石川啄木の未完の「最後の一首」の解説を行いました。
第2回(vol.39)では「最後の一首」復元の第一歩として、青空文庫から原本となる啄木のテキストを取得し、短歌の部分を切り出してパースする処理を行いました。
第3回(vol.40)では、第2回でパースしたデータを形態素解析にかけ、短歌がどのような語句で構成されているのかを解析しました。
第4回(vol.41)では、第3回で形態素解析したデータを元にマルコフ連鎖を行い、文章としての繋がりを重視するプローチから「最後の一首」候補を作成しました。
第5回(vol.42)は第4回と並行する形で、今度はRNNLMを用いて「最後の一首」候補を作成しました。こちらはどちらかというと文脈を重視したアプローチになります。
第6回(vol.43)では、第4回と第5回で作成した「最後の一首」候補から、短歌の形式をとっているものをフィルタリングする処理を行いました。ここで単語列を文節に分けるテクニックを解説しました。
第7回(vol.44)では、短歌形式を取っている「最後の一首」候補を、word2vecとsentence2vecを用いて素性ベクトルに変換し、機械学習で扱いやすい形に変換しました。
第8回(vol.45)では機械学習による分類を行うための前準備として、「石川啄木らしくないデータ」、つまりダミーデータを生成する処理を行いました。また実装は行いませんでしたが、類似技術であるGANについても同時に解説を行いました。
そして第9回となる今回では、第8回で生成したダミーデータと啄木の短歌を正確に分類するSVMを学習し、それを用いて第7回で生成した啄木の「最後の一首」候補の「啄木らしさ」を推定し、もっとも「啄木らしさ」の高い一首を復元された「最後の一首」としました。

こうしてみると、「石川啄木の最後の一首を復元する」という一つのタスクに対して、様々な技術が複雑に関係していることがわかります。啄木の歌集の校訂者に端を発し、形態素解析器、マルコフ連鎖、RNNLM、word2vec、SVMと、どれも偉大な先人が築き上げてきた技術の集大成です。現代に生きる我々の使命は、折りに触れてなるべく広範な知識を身に着け、こうして巨人の肩の上に立ち、その上でどれだけ新しい価値を生み出せるかということに懸かっていると思って止みません。みなさんもこの連載記事を通じて、石川啄木や自然言語処理、さらに機械学習に興味を持って頂けると幸いです。
それでは、以上で連載「機械学習で石川啄木を蘇らせる」最終回とさせていただきます。9回の長い間お付き合いくださりありがとうございました。また機会があればどこかで会いましょう。

あなたにとっての技術が、物語のよき隣人でありますように。

 

本記事は、シェルスクリプトマガジンvol.38~vol.46に掲載された連載の最終回です。それぞれの技術の詳細については、該当のバックナンバーをご参照ください。(編集部)

ITエンジニアのサボりに強い味方現る!シェルスクリプト製ライフゲーム

投稿日:2017.04.18 | カテゴリー: 記事


written by シェルスクリプトマガジン編集部

(本記事はWeb版シェルスクリプトマガジン独自記事です)

USP研究所技術研究員 ナカムラ氏謹製の、シェルスクリプト製 ライフゲーム・シミュレータをご紹介します。
インストール・設定・操作・実行のすべてがターミナル画面上で完結するので、上司の目が厳しいエンジニアの皆さまも、いかにも「仕事中です」という顔をしながら暇つぶしに勤しめます。

ライフゲームとは

ライフゲームは、1970年にJohn Horton Conwayが発明したコンピュータ・ゲームです。
マス目(セル)のオンオフを生命(例えばシャーレ上に培養される微生物)に見立て、単純な規則により時間経過による生命の繁殖を表現します。
自分の周り八方のセルの密度が適度なら次のターンに培養される、過疎もしくは過密の場合は死滅します。

ルールは簡単ですが、初期状態からは想像もつかない形へと発展していく面白さがあります。。

例:代表的なパターン「グライダー」。 4世代ごとに縦横1マスずつ移動しながら元の形に戻ります。

→ 

 

ライフゲームのルール(引用元:「ライフゲイムの宇宙 新装版」ウィリアム・パウンドストーン著 有澤誠訳、日本評論社)

Wikipedia「ライフゲーム」などもご参照ください。

 

遊び方

インストール

コードはGitHub上に公開されています。

https://github.com/kaznak/ConwayGoL.sh

ターミナル画面上で $ git clone https://github.com/kaznak/ConwayGoL.sh.git とすることでインストールできます。

ConwayGOL.sh/ のディレクトリに移動し、初期化コマンド . rc を打ち込むことで準備が整います。

 

サンプルパターンを実行してみよう

ライフゲームの面白さは、初期のセル配置パターンからは想像もつかない発展をとげることです。

ConwayGoL.sh/example-pattern/ に、特定の動きをする代表的なパターンが収録されています。

まずはそれらのサンプルパターンを実行してみましょう。

例えばさきほど紹介した「グライダー」を見たいときは、 ConwayGoL.sh/ ディレクトリで以下のコマンドを実行します。

上司に見つかりそうになったら Ctrl-C を長押しすれば終了できます。

また、一世代ごとの移り変わりを確認したいときには、conwaygolコマンドにオプションをつけます。

conwaygolの後に続くオプションのうち、

最初の「2」は初期状態から2世代後まで(計3世代)を表示することを示します。

後ろの 10 10 は、セル全体の大きさの指定を示します。

 

自分で作ったパターンを実行してみよう

サンプルパターンを動かしてみたら、いよいよ自分で初期パターンを作り、実行してみましょう。

まずはテキストエディタを使って、ConwayGoL.sh/example-pattern/ に初期状態のファイルをつくってみましょう。

オンのセルはX(半角の大文字X)で、オフのセルは半角スペースで打ち込みます。

それではこいつを実行してみます。

題して、「ライフゲームで占うシェルマガの未来」。

(GIFファイルです)

実行当初からどんどん形が崩れていきます。あははは、これは愉快だ。

途中からは、文字の区切りの痕跡すら残っていません。

(GIFでは飛び飛びですが)約300世代後、ふたつのパターンを繰り返す定常状態になりました。

シェルマガがこれからどんどん広まり、vol.300近くまで続くというお告げでしょうか。素晴らしい。

 

おわりに

というわけで、USP研究所ナカムラ氏謹製 シェルスクリプト版ライフゲームのご紹介でした。

みなさまの、仕事してるフリをしながら適度にサボる、豊かなITエンジニア・ライフのお役に立てますと幸いです。

詳しい操作の仕方については、インストール後 readme もご参照ください。

 

シェルスクリプトマガジンは、明日すぐには役立たないけれども数年後の自分の血となり肉となる、ITエンジニアの教養満載でお届けしています。

データ分析、IoT、PM、ネットワークなど、新しい勉強を始める春にぴったり!最新号vol.47はこちらから!

 

「無意味な行動をとらせる力」を使え! 環境ITベンチャー ピリカのつくりかた

投稿日:2017.04.4 | カテゴリー: 記事

本記事は、シェルスクリプトマガジンvol.47掲載「技術者哲学 ピリカのつくりかた」のダイジェスト版です。

株式会社ピリカは、『科学技術の力であらゆる環境題を克服する』と謳い、ポイ捨ての解決をビジネスにしているITベンチャーです。
実際に彼らのゴミ拾いアプリ【ピリカ】を使ってみると……

 「ゴミが落ちてるぞ!」

「拾って写メを撮って…」

「ピリカに投稿だ」

「拾ったゴミはゴミ箱へ」

(数時間後)「お、【ありがとう】がたくさんついてる。いいことした気分!またゴミが拾いたくなってきた」

 

と、一見結びつきそうにない【IT】と【環境問題】と【ビジネス】が、たしかに融合していました。

この秘密を探るべく、編集部は開発元の株式会社ピリカを訪れました。

インタビューに応えてくれたのは代表の小嶌不二夫さんとCTOの高橋直也さん。起業に至った経緯、環境問題にIT技術ができる貢献、そして今後の展望を伺ってきました。
(聞き手・まとめ シェルスクリプトマガジン編集部)

 

ピリカができるまで

―今日はよろしくお願いします。まずは、小嶌さんが「IT技術で環境問題を解決するビジネス」を始めるに至った経緯を聞かせていただけますか。

小嶌:僕が環境問題に興味を持ったのは、小2のときに読んだ、ポプラ社の「地球の環境問題」シリーズがきっかけです。図書室の隅っこにあったこのシリーズに異常にハマって、同じ本を何度も借り直した記憶があります。その頃の僕は「大きな問題を解決する」ことに魅力を感じたのでしょう。もちろん、大人になってから勉強し直すと当時とは状況が変わっているわけですが、最初のきっかけはこのシリーズでした。

 

―環境問題の解決に取り組むうえで、起業という形をとったのは何故ですか?

小嶌:大学に入った頃は研究者を希望していました。でも、学部四年で研究室に配属になったら、二週間くらいで「これ、全然面白くないな」と思ってしまい、そこで研究者の道は諦めました。割り当てられた研究が合わなかったということもありますし、「研究者として」環境問題にアプローチするのは、自分の場合はちょっと違う、とも思い始めたからです。当時の僕の視点からは、研究とは「人生を賭けてひとつのテーマをひたすら深掘りする」ものに見えたのですが、そうすると、僕が小学生の頃読んだ本の「一冊分」は解けるかもしれないけれども、「残りの分」が解けないじゃないですか。

―たしかにそうですね。

小嶌:一方で、「お金」だったら全てのことに使えますよね。ひとつの事業で得たお金を他の分野に転用していくことができますから。そこで、学部四年で「研究面白くないぞ」と感じてからは、自分で事業を立ち上げるのか、それとも仕事を学ぶためにまずは企業に就職するのか、大学院でのモラトリアムの間に自分の道を決めることにしたんです。だから、大学院に入ってからは海外で働いてみたり、色々な国を旅してみたりしました。

―なんとなく大学院に進んでモラトリアムを過ごす、という人は多いですが、小嶌さんは環境問題にどう取り組むべきか見定めるために、モラトリアムを「積極的に取りにいった」わけですね。その結果「ゴミ問題」を選んだのは何故ですか?

小嶌:ひとつはお金の問題です。環境問題の範囲はとても広いわけですが、多くの問題は解決に莫大なお金がかかりますよね。浄化フィルターひとつ開発するのにも何千万円もかかってしまう。だから「安く始められること」が絶対条件だったんです。
一方で、安く始められたとしても「汚染を除去するフィルターの、この一部分だけを作りました」で終わっては悲しいですし、全体の問題の解決には到底達しません。そこで、「将来的には大きな広がりを持っているけど、入り口は小さい」テーマとして、ゴミ問題に取り組むことにしたわけです。

―なるほど。

小嶌:世界一周旅行をしていた当時、100くらいアイデアをメモ帳に書きためたんですが、結局「これだったらいけるかもしれない」と思えたアイデアは、その中の3つくらいを組み合わせた1つだけでした。
それは「Googleマップのような地図に、色々な環境問題の情報を載せ込む」ことです。
これまでにも、様々な自治体さんや団体さんが地域の問題解決をしようと努力されていますが、その中には、「『○○川を綺麗にしよう』という活動が盛んだが、実際にはその隣の川の方が汚い」のような状況が結構ありますよね。そういう状況に対して、位置情報付きで環境問題の見える化をすることで、環境問題を解決しようとしている人の行動を最適化したり、関わる人を増やしたりできるのではないかと思ったんです。

―最初のアイデアは「環境問題のマッピング」だったんですね。スマホにピリカをインストールすると、道端でゴミを見つけたときに自ずと拾いたくなってしまうので、よく出来た仕組みだと感心しています。この効果は狙って設計したんですか?

小嶌:まさに、世界の国を旅している間にそれと同じ体験をしたんです。iPhoneを持って旅に出たんですが、スマホの位置情報をオンにして写真を撮ると、現在地がマップにピン留めされるじゃないですか。アフリカの街にいるときに、ピンがもう世界を半周していることに気がついて、「おっ、これは面白いな」と思ったんです。なにか、色々な街を征服したみたいで。そこからは無意識に、新しい街についたら意味もなく、位置情報をオンにした状態で写真を撮るようになっていきました。部屋の隅とかでもとりあえず撮るんですよ、位置情報を刺したいから。

―「ピンを刺すこと」自体が目的になってしまったんですね。

小嶌:後から振り返ってみると、「なにこの無意味な写真」って思うわけですが、これって、要はゲーム性とか面白さによって人に「無意味な行動」をとらせているってことですよね。

―たしかにそうです!

小嶌:人にこういう無価値な行動をとらせられるなら、もしかしたら情報くらい送ってくれるかもしれないし、ゴミくらい拾ってくれるかもしれない。「位置情報付きで写真を撮ること」にそういう力があるのなら、これを使って面白いことができるかもしれないと思ったんです。

 

環境問題をビジネスにする

―大学院での経験をヒントにして始まったピリカですが、株式会社ピリカが現在展開されている事業を紹介していただけますか?

小嶌:現在はスマホアプリ「ピリカ」を使ったゴミ拾い支援事業と、画像認識システム「タカノメ」を使ったポイ捨て調査事業の二本立てです。ゴミ拾い事業の収益は、様々な企業さんからの広告・協賛と、ピリカの仕組みを使ってくださる地方自治体さんからのシステム利用料です。タカノメによる調査では、案件ごとに調査面積に比例した調査費用を頂き、得られたデータを基にした研究成果に対しても研究費用を頂いています。

―どんな組織がタカノメによる調査・研究のクライアントになるのですか?

小嶌:協賛企業でもあるJTさんを例に挙げて説明しましょう。タバコのポイ捨てはJTさんにとってもデメリットですよね。ポイ捨てがあまりに酷いとクレームが来たり、場合によっては自治体に喫煙所を作らせてもらえなくなったりしますから。ですから、喫煙所をどうデザインすれば地域のポイ捨てを抑制できるのか、喫煙者・非喫煙者双方にとって暮らしやすい町や制度を作れるか、ということを研究する動機がJTさんにはあるわけです。このケースでは、自治体・JT・ピリカで協定を結び、データと費用を頂いて調査を行っています。

―タカノメによる調査費用は調査面積に比例するとのことですが、どのようにサービスの価格を決めたのですか?

高橋:タカノメに関しては、面積に原価が比例するのでそこに値段つけたということですね。

小嶌:買い手のことを考えると、自ずと売り方が決まってくるという面もあります。環境問題のビジネスとしての特殊性は、直接的なお客さんであるゴミや大気、川や海からはお金をとれないことですよね。

―そうですね。

小嶌:だからその代わりに、問題を抱えている「人の問題」として売るしかない。「ポイ捨ての問題」では売れないので、見方を変えて「地域の美化」の問題として扱って自治体の地域美化の担当者さんに買ってもらう、河川の問題として切り分けて、喫煙所の問題として切り分けて……という発想に、どうしてもなります。そこで、ときには相手に尋ねながら「買ってくれる方法」を探すわけです。例えば自治体を相手にするなら、議会を回さずに使える予算はそれぞれの市区町村によって違いますから、それらに柔軟に対応でき、なおかつ予算に合わせて調査規模を拡大できるような売り方になります。

 

環境ベンチャーのエンジニア

―現在CTOとして開発を担当されている高橋さんは、どのような経緯でピリカにエンジニアとして参加されたのですか?

小嶌:システム開発の会社に就職した大学時代の友人に「ピリカを作っていく上でどうしてもエンジニアが必要なので、周りで一番優秀な人を紹介してもらえないか」と頼んだら、その場で電話をかけて、同僚だった高橋さんを紹介してもらったんです。

―え、そんな簡単に決まったんですか?

高橋:参加といっても、最初の3年間は週に2時間くらいでした。普段の仕事とは別のことに関わっていたいという希望はその前から持っていましたし、実際にピリカに関わる2時間がいい気分転換になって、普段の仕事でも楽しくいられたんです。ピリカをやっている間にも、もう一社並行でやっていたこともあります。ピリカにフルタイムで関わるようになったのは、私も東京に出て来てからですね。

小嶌:高橋が参加した当時は二人とも関西にいましたが、それからすぐ僕は東京に出て来ました。なので、遠隔でのやりとりの期間が長かったですね。現在でも、当時の高橋のように他の仕事をしながら関わってくださる方や、北海道やアメリカなど遠隔で関わってくれる方がいまして、30名近い方の力を借りて事業を行っています。

―アイデアを出す小嶌さんと、それをシステムで実現する高橋さんは、どういう関係で仕事を進めているのでしょうか?

高橋:自分が関わる部分については、割とやりたいようにやらせてもらっています。基本的に、作りたくないものを作ったことはないはずで、「何を作るか」を決める時点で自分の意見をある程度反映させています。

小嶌:例えばタカノメは、そもそものサービスの構想自体が高橋の発案です。私が持っていたのは「ゴミの種類と数を、安く、正確に、そして様々な場所で同じ基準を適用して調査したい」という方針だけでした。それを人力でやるにはお金もかかるし、限界もある。なによりも面倒な作業ですから、やる方が幸せになれないですよね。その解決のために「スマホで写真を撮って、画像解析でゴミを見つける」というシステムの大枠を考えたのは高橋なんですよ。

 

 

シェルスクリプトマガジンvol.47に掲載の本記事ロング・バージョンでは、科学技術・ITが環境問題にできる貢献について小嶌さんが考える「ピリカの基にある哲学」を、よりつっこんで伺っています。

 

 

ユニケージ開発手法 コードレビュー vol.36(本誌vol.47掲載)

投稿日:2017.03.31 | カテゴリー: 記事

著者:USP研究所技術研究員 岡田健

 今回は、シェルスクリプトのデバッグを行いたい時、処理の途中or一部だけに限定して実行出来る uspTukubai のコマンド「run」を紹介します。

本記事掲載のシェルスクリプトマガジンvol.47は以下リンク先でご購入できます。
USP研究所 通販サイトでは、個人用uspTukubaiのご購入も可能です。

 

香川大学SLPからお届け!(vol.47掲載)

投稿日:2017.03.28 | カテゴリー: 記事

著者:石井怜央(香川大学SLP)

 前回は、OSC広島の前日に行われた学生LT大会の様子を紹介し、その中で僕が発表した、サークルで開発を行ったメール管理システムについて触れました。
 今回はその開発で使用した、Sinatraやmail gemについて紹介し、それらを組み合わせて簡単なWebアプリケーションを作成したいと思います。

記事本文掲載のシェルスクリプトマガジンvol.47は以下リンク先でご購入できます。

40歳から始める、オレとRubyプログラミング(vol.47掲載)

投稿日:2017.03.24 | カテゴリー: 記事

著者:しょっさん

 最近、自宅で二酸化炭素濃度をはかるようになりました。 予想していた以上に、家の中の空気が汚染されていることがわかって、衝撃を受けています。部屋が暖かいから眠くなるんだなー…なんて考えていましたが、暖かいんじゃなくて二酸化濃度が高いからという可能性が高いです。
 二酸化炭素濃度を下げるには、換気をすることが基本ですが、この濃度を下げてからというもの、家での活動がとてもスムーズになり眠くなることが減りました。
 なんでこんなことしてるのかって? もちろん、クリアーな頭の状態でプログラミングするため。さぁ今月も頑張っていきましょう!

記事本文掲載のシェルスクリプトマガジンvol.47は以下リンク先でご購入できます。

リスト6-a、6-bは本来ひとつのコードですが、本Webサイトの文法に抵触するため分割して掲載します。

バーティカルバーの極意 第一回 (vol.47掲載)

投稿日:2017.03.24 | カテゴリー: 記事

著者:中央大学 教授 飯尾淳

 この連載では、バーティカルバー、あるいは、縦棒で表される記号(|)や縦棒そのものを中心として、話題を展開しようと試みます。毎回、どんなバーティカルバーが現れるか、楽しみにしていてください。…といいつつ、第1回めの今回は、皆さんおなじみ、Unixにおけるパイプ(|)を扱います。ベタでどうもすみません。

記事本文掲載のシェルスクリプトマガジンvol.47は以下リンク先でご購入できます。

無料無線公衆LANスポットのCSVファイル URL
http://www.data.go.jp/data/dataset/mlit_20160325_0037

逆に、Tukubaiコマンドをシェルスクリプトで実装してみる 前編 (vol.47掲載)

投稿日:2017.03.24 | カテゴリー: 記事

著者:今泉光之 (Twitter: @bsdhack)

 

1 usp Tukubai とは?

usp Tukubai は ユニバーサル・シェル・プログラミング研究所が開発・提供している一連のコマンド群で、商用製品として様々な分野の数多くのプロダクトとして利用されているソフトウェア製品です。
usp Tukubai はコマンド群として提供されており、通常の UNIX コマンドの様に複数のコマンドを繋ぎ合わせて使うことでシステムを構築することができます。
usp Tukubai で提供されるコマンドを使いこなすと、端末だけで集計処理ができたり、ファイルだけでDBを組んだり、ウェブシステムを組んだりと、シェルあるいはシェルスクリプトでできることが飛躍的に増えます。
特に製品版として開発されている usp Tukubaiはソースコードのレベルからチューニングされているので、非常に高速に動作するので大規模なエンタープライズシステムでの使用にも十分に対応できる性能となっています。

2  ユニケージ開発手法とは?

ユニケージ開発手法はユニバーサル・シェル・プログラミング研究所によって開発された、短期間低コストで企業システムを構築するための開発手法です。
小さなコマンドを組み合わせて問題を解決することを目的とした開発手法やコマンドに関する研究開発に取り組んでいるユニバーサル・シェル・プログラミング研究所が、そうした研究開発の成果をまとめた開発手法がユニケージ開発手法です。
本稿で扱う usp Tukubai はユニケージ開発手法を実践するための手段として開発されたコマンド群です。
ユニケージ開発手法に基づいて usp Tukubai コマンドを利用することで、数十行のプログラムでアプリケーションを記述できたり、データベースを使わずにテキストファイルのみでデータ処理が可能となります。実際にユニケージ開発手法に基づくシステム開発は小売業を中心に基幹業務システム、情報分析システム、データバッチ処理、高速検索システム、勘定系システムなど様々な分野で活用されていて、特にシステムの内製化を進める企業において採用されています。

3 Personal Tukubai とは

usp Tukubaiを試用目的で利用できるようにしたバージョンで、商用利用はできません。
Windows、Linux、OS Xでそれぞれ動作するので usp Tukubai による業務システムの開発を実際に体験できます。
期間限定のライセンスで、ダウンロードした月から 6ヶ月後の月末まで使用可能となっているので、十分に usp Tukubai の機能を調べることができると思います。

4 Open usp Tukubai とは

usp Tukubai コマンドのうち、利用頻度の高いコマンドを厳選して Python により実装しなおし、MIT ライセンスの下でオープンソースソフトウェアとして提供されているのが Open usp Tukubaiです。
製品版の usp Tukubai と比較すると一部実装されていないコマンドがあったり、性能にある程度の差は出てしまいますが、それでも usp Tukubai の便利な機能を知るためには十分に有用だと思います。
本稿では、Open usp Tukubai についての解説となります。

Tukubai 各コマンドの機能の紹介と簡単な解説

1 Open usp Tukubai のインストール方法

Open usp Tukubai は Python により実装されているので Python が動作する環境であればインストール可能です。
公式の配布サイトからソースを取得して展開し make install するだけで Open usp Tukubai は利用可能となります。
OS X 11.6 (OS X El Capitan) では以下のコマンドでインストールできます。
$ curl ‘https://uec.usp-lab.com/TUKUBAI/DOWNLOAD/open-usp-tukubai-2014061402.tar.bz2’ -o open-usp-tukubai-2014061402.tar.bz2 $ tar zf open-usp-tukubai-2014061402.tar.bz2 $ cd open-usp-tukubai-2014061402 $ sudo make install

2 Open usp Tukubai コマンドの解説

ここでは Open usp Tukubai のコマンドを解説します。
ただし以下のように Open usp Tukubai だけでも 55 コマンドも提供されており、その全てを解説するのは無理なので、
特に有用で興味深いコマンドを厳選して紹介します。

また、シェルスクリプトマガジンに掲載の記事なので、シェルスクリプトで Open usp Tukubai コマンドを実装してみたいと思います。今回は、calclock、comma、getlast、ketaの4つのコマンドを紹介し、シェルスクリプトでの再現を試みます。
但し今回は紙面と時間の都合で一部の機能やオプションなど実装できていない部分も多いです。
また、動作の把握とメイン処理の実装のみに絞ったので、エラー処理などはまったく実施していません。
そのために実際の業務などには殆ど利用できない実験的なスクリプトとなっています。

calclock

1 calclock とは

オンラインコマンドマニュアルはこちら

入力データ(ファイルや標準入力)の指定されたフィールドのデータを Epoch *1からの秒数に変換してフィールドの隣に出力します。
ファイル名に – が指定された場合は一般的な UNIX の流儀にのっとり標準入力を入力として利用します。
入力データは年月日(yyyymmdd形式)、時間(HHMMSS形式)、年月日時間(yyyymmddHHMMSS)を自動で検出します。
例えば以下の様なフォーマットのシステムへの接続ログから接続時間を取得する処理などを簡単に作ることができます。

*1 Epoch とは UNIX で一般的に利用されている時刻表現で、協定世界時(UTC)での1970年1月1日午前0時0分0秒の時刻からの形式的な経過秒数です。

calclock 唯一のオプションは -r で、これを指定すると入力データは Epoch からの秒数として解釈され出力は年月日時間(yyyymmddHHMMSS)となります。

2 calclockを作ってみよう

シェル組み込みのコマンドと date(1) を駆使して、何とか似た機能は実現できました。
引数で指定されたフィールドを変数 fields に格納しておき、read(1) で入力した行データ毎に fields に格納されたフィールドから date(1) で秒数を取得し、取得できた秒を変数 v数字 (数字はフィールド番号) に格納しています。指定された全フィールドの処理が終わると、入力データと取得した秒数を出力します。入力データの指定されたフィールド形式などのチェックしていないので、入力データに不正な値があると正しく動作しません。また、今回は -r オプションに関して実装しておらず、入力データも標準入力のみとなっています。

comma

1 comma とは

オンラインコマンドマニュアルはこちら

入力データ(ファイルや標準入力)の指定されたフィールドのデータを「カンマ区切り」にします。帳票データなどの最終的な出力に適用すると、金額などの可読性が向上します。
指定したフィールドに数字以外のデータが入力された場合はエラーとなります。

+hオプションはヘッダ行をスキップするための指定で、指定された行(デフォルトは1行)をヘッダ行としてスキップします。

d オプションは引数で指定した文字列をカンマ区切りにします。

-4 オプションは 4 桁区切りにします。

2 commaを作ってみよう

メインのロジックは awk(1) を利用することで何とか実装できました。
awk(1) の substr 関数を利用して文字列の後ろから指定された桁数で文字列を切り出し、切り出した文字列の先頭に , を付けることでカンマ区切りを実現しています。
今回は -d オプションに関して実装しておらず、入力データも標準入力のみとなっています。また Open usp Tukubai の comma では桁区切りするフィールドのデータをチェックしていて、データが数字以外の場合はエラーメッセージを出力していますが、こちらのスクリプトではその様なエラー処理をしていません。
ちなみに 3 桁区切りだけでよければ printf(1) の %’ を利用することでも殆どの場合実現可能ですが、printf(1) の %’ は現時点では非標準なので全ての環境で利用できる保証はなく、また、区切りを 4桁にする機能は対応していないので、独自に実装する必要があります。

getlast

1  getlastとは

オンラインコマンドマニュアルはこちら

入力データ(ファイルや標準出力)の指定されたフィールドの値が最後に出現した行を出力します。

同一のフィールドを指定することで単一のキーフィールドの指定も可能です。
以下の例だと第1フィールドの値のみで抽出しています。

+ng オプションは同じ値を持つ最後の行以外を出力します。

2 getlastを作ってみよう

メインのロジックは awk(1) のハッシュ (連想配列) を利用することで実装しました。
指定されたフィールドの値をそのまま連結してハッシュのキーとして利用することで、最新の行内容がハッシュに格納されます。
awk(1) の仕様としてハッシュの順番はランダムになりますので、
順番を維持するためにハッシュに格納する行データに行番号を付与して、出力したデータを sort(1) を利用して行番号でソートして正しい順番に並べ替えた後で、cut(1) で追加した行番号を削除して出力しています。
メインのロジックは awk(1) の機能をそのまま利用することで実現できたので、今回実装したコマンドの中では一番短く単純なスクリプトになっています。
+ng オプションは実装していません。

keta

1 keta とは

オンラインコマンドマニュアルはこちら

入力データ(ファイルや標準出力)の指定されたフィールドの桁数を揃えて、右詰で出力します。
表示するための最大幅は自動で計算されます。

— オプションは左詰で出力されます。

フィールド毎に出力する桁数を数字で指定することができ、指定する数字に – を付けることで左詰を指定することもできます。
出力する桁数は半角文字の表示幅を 1 としているので全角文字の場合は 1 文字を 2 とする必要があります。

2  ketaを作ってみよう

基本的な機能は全て awk(1) の組み込み関数で実装しました。
入力データは行番号とフィールド番号をキーとしたハッシュ dataに格納し、同時にフィールドの文字列長の最大値を別のハッシュ max に格納しています。
出力は、 awk(1) に組み込みの printf の %*s 指示子を利用することで出力幅を指定しています。

マルチバイトの文字列には対応していないので、入力データにマルチバイト文字があると正しく出力できません。
非英語圏でマルチバイト文字が正しく扱えないことは致命的ですので、業務には利用できません。

UTF-8 では、マルチバイト文字は多くの場合 3 バイトかそれ以上のバイト数を必要としていますが、OS X 標準の awk(1) の lengthコマンドは文字列のバイト数を取得しますので、例えば length(“あ”) は 3 となります。
Linux で標準的に利用されている GNU awk の場合はマルチバイト文字に対応していますので、マルチバイト文字を含む文字列の長さは正しい文字数を取得することができ、length(“あ”) は 1 となります。
しかしマルチバイト文字は 2 バイト相当の表示幅となりますので、どちらの場合でもマルチバイト文字を含む文字列の長さと表示幅は合致しません。
そのためにマルチバイト文字を含む文字列を表示する幅を正しく制御するのは非常に困難となります。

-v オプションは実装していません。

5/25発売のシェルマガvol.48では、さらなるTukubaiコマンドに挑みます
Web版シェルマガにも公開しますので、どうぞお楽しみに!

本記事掲載のシェルスクリプトマガジンvol.47は以下リンク先でご購入できます。
USP研究所 通販サイトでは、個人用uspTukubaiのご購入も可能です。

漢のUNIX 静的ライブラリをつくってみよう (vol.47掲載)

投稿日:2017.03.24 | カテゴリー: 記事

著者:後藤大地

 前回の記事では、実装を複数の.c ファイルに分けて作成し、それらをコンパイルして.o ファイルに変更し、その.o ファイルを組み合わせてバイナリファイルを生成することを説明した。
 .o ファイルはバイナリファイルのパーツのようになっており、これらを組み上げることで実装に動作するバイナリファイルを作ることができる。

記事本文掲載のシェルスクリプトマガジンvol.47は以下リンク先でご購入できます。

Vol.47

投稿日:2017.03.24 | カテゴリー: バックナンバー

●UNIXコマンド~シェルスクリプトを「データ処理ツール」として使うためのイロハを学べる、新連載「バーティカルバーの極意」
 普段は文系の大学生にデータ処理を教えている中央大学・飯尾先生が、データ処理の理論から実習まで、余すところなく伝授します。

●通信の仕組みをざっくり理解できる新連載、「もし、インターネットの1秒が1年だったら」。
 引き伸ばされた時間軸の上で、擬人化されたクライアントとサーバーによるインターネットの通信を小説仕立てでお届けします。
 
●久しぶりの連載再開となる「スズラボ通信」と「UNIXネイティブの電子工作塾」。
 「スズラボ」ではIFTTTを利用したIoTを、「電子工作塾」ではシェルスクリプトを使った基盤づくりからの電光掲示板製作をとりあげます。

●街のポイ捨てゴミを拾いたい何十万人もの人々をサポートしてきた、ゴミ拾いSNSアプリ「ピリカ」。
 今回の「技術者哲学」では、アプリ開発まで物語や、裏にある哲学、そして環境問題をビジネスにする企業のあり方について、株式会社ピリカにお話を伺ってきました。

Vol.46

投稿日:2017.01.30 | カテゴリー: バックナンバー

●シェルスクリプトマガジンは次号から、Webと紙のハイブリッド・メディアへとリニューアルします!リニューアル直前企画では、人気の高かった記事を通じてこれまでのシェルマガの足跡を振り返ります。

●さくらインターネットやDMM.makeなどを立ち上げてきた小笠原治さん、HTML5 Experts.jp編集長の白石俊平さん、コワーキングスペース茅場町Co-Edoオーナーの田中弘治さんをゲストにお迎えした”TechLION vol.28″。2017年そしてその先に来るIT/ネットの未来を熱く語ったトークイベントの模様を、ダイジェストでお届けします。

●機械学習を使って、「一握の砂」に収録された”未完の短歌”「大跨に椽側を歩けば」の補完を目指した連載「機械学習で石川啄木を蘇らせる」もいよいよ最終回!”啄木らしさ分類器”によって、遂に石川啄木が蘇ります。

Vol.45

投稿日:2016.12.27 | カテゴリー: バックナンバー

2016年8月のWindows 10 Anniversary Updateで、ついにWindowsでもbashが動くようになりました。
嬉しいニュースだった一方で、これまでのMicrosoftのイメージからすると驚きだったことも事実。
というわけで、IT界の巨人Microsoftの変化について、MSの「それプロ」もといIT Professionalのエバンジェリスト、山本美穂さんと一緒に考えてみませんか?
新連載の初回となる今回は、話題のWindows Subsystem for Linuxに実装された技術を、これまでのWindowsとUNIX系システムの関係の歴史を交えて解説します。
「Bash on Windowsを使ってみた」を超えて、実装された技術の「そもそもの話」を知りたい硬派な読者さんに、愛をこめて贈ります!
 
その他にも、ITエンジニアは顧客に「どんな喜びを与えるべきか」、それを考えるためのストラテジーを紹介する「マーケティング入門」や、
一見誰でも出来そうな「一時ファイルの生成」を、本質から捉え直す「POSIX原理主義」シーズン1最終回などなど
強く、しなやかなITエンジニアを今月も全力で応援するシェルスクリプトマガジン vol.45。

Vol.44

投稿日:2016.11.29 | カテゴリー: バックナンバー

データ分析の分野で、いま最もアツいツール・Python。
特集記事では、プログラミング言語としてだけでなく、MathematicaやMatlabのような科学技術計算ツールとしてPythonを利用する方法や便利なライブラリについて、東京農工大学の石井先生がご紹介します!

名前はよく聞くし、理念も理想的……なのだけれども、いざ実践するにはハードルが高いアジャイルソフトウェア開発。
新連載「アジャイル開発 Let’ Practice!」では、個々のプラクティスを紐解き、開発に成功するチームのあり方に実践的な視点から切り込んでいきます。
連載初回は、日本にアジャイルが普及しない、そもそもの理由を分析します。

その他にも、北の地に生きるITエンジニア達が、自分の土地での仕事そしてコミュニティにあり方を熱く語ったトークライブイベント「TechLION vol.27 みちのくのテクノロジー・エンジニアリング事情の今」の誌上レポートや、
システム管理者がまず抑えるべきネットワークの知識を、著者の失敗談を基に懇切丁寧に解説する「中小企業手作りIT化奮戦記」などなど、
強くしなやかなITエンジニアを今月も全力で応援するシェルスクリプトマガジン vol.44。
お見逃しなく!!

Vol.43

投稿日:2016.10.24 | カテゴリー: バックナンバー

Rapsberry Pi meets Shell script !
金沢大学の大野浩之先生が提唱する「ものグラミング」では、なんとラズパイまでシェルスクリプトで動かします。
シェルスクリプトがものづくりにどう貢献していくのか興味津々の編集部は、早速お話を伺ってきました。

先月号では特集「自分のシェルを造る」が反響を呼んだ連載「漢のUNIX」。
前回はFreeBSDのシェルの書き換えをしましたが、今回はそのLinux編。
「シェルそのものの構造」に親しんでいきたいエンジニア必見です。

その他にも、現在進行形でIT業界を生きる女性を中心にしたLTイベント”TechGIRL”のレポートや、
IoTがもっと身近になる未来を目指す青年社長のインタビューなど、
今月も内容盛りだくさんのシェルマガvol.43。
お見逃しなく!

Vol.42

投稿日:2016.09.26 | カテゴリー: バックナンバー

シェルの役に立つ使い方について、これまでも様々な角度から提案をしてきたシェルスクリプトマガジンですが、今回の特集ではいよいよ「シェルそのものを自分の欲しいように作り替える」方法に迫ります。
手始めに、FreeBSDのシェルを自分好みに書き換えてみましょう!
連載「円滑コミュニケーションが世界を救う!」では、チームで仕事をするときの「あるある」、自分の指示が相手には見当違いに伝わってしまうケースを防ぐための最終手段「IPO」をご紹介します。

Vol.41

投稿日:2016.08.25 | カテゴリー: バックナンバー

UNIXベースで開発されたMacとして2001年に発売されたOS X。今月号の特集では、Macに眠るUNIXを目覚めさせる第一歩として、パッケージ管理システムであるMacPortsの基本的な使い方を解説します。
そして、遂に今年、Windows10でBashが使えるようになりました!シェルスクリプトマガジンとしてはこのニュースを見逃すわけにはいきません。連載「POSIX原理主義」では、Bash on Windows上のシェルスクリプトによって拡がるWindowsの可能性について検討していきます。
ぜひお見逃しなく。

フルスクラッチから1日でCMSを作る シェルスクリプト高速開発手法入門

投稿日:2016.07.26 | カテゴリー: 推薦図書

本書ではUNIXのシェルスクリプトを用いて、Webサイトを作成して、Twitterにツイートしたりログを集計したり、WordPressからデータを抜き取ったりするなど、実用的なアプリケーションを短時間に開発する手法を解説します。
PCやOS、サーバ等の設定や、Open usp Tukubaiコマンドのインストール方法なども詳しく書かれ、非常に実践的な内容です。
※本書は、2014年7月にアスキー・メディアワークス(現KADOKAWA)より出版されたものです。

目次

第1章 はじめに

1.1 経緯と対応、起こった問題
1.2 シェルスクリプトで解決を図る
1.3 本書のねらい
1.4 対象となる読者・レベル
1.5 本書の背景・周辺
1.6 補足
1.7 本書の構成

第2章 環境の準備

2.1 構成の概要
2.2 使うマシン(環境)選びと環境の設定
2.3 通信の諸設定
2.4 ドメインの取得・ホスト名の設定
2.5 コマンドまわりの整備
2.6 補足

第3章 文章管理の仕組みを作る

3.1 データの整理の前に頭を整理する
3.2 データ構造を作る
3.3 便利コマンドを作る・使う(その1)
3.4 便利コマンドを作る・使う(その2)
3.5 補足

第4章 ウェブサイトを作る

4.1 Apacheを設定してCGIシェルスクリプトを動かす
4.2 記事の表示
4.3 ログを記録する
4.4 記事の選択機能をつける
4.5 パスを書き換える
4.6 前後の日記記事に移動できるようにする
4.7 記事の属性を埋め込む
4.8 体裁を整える
4.9 ナビゲーション機能を強化する
4.10 プレビュー機能をつける
4.11 処理時間を計測してみましょう
4.12 補足

第5章 ウェブサイトを外部とつなぐ

5.1 タイトルに記事名を入れる
5.2 RSSを作成する
5.3 ソーシャルボタン・広告を表示する
5.4 シェルスクリプトでTwitterに記事のタイトルとURLをツイート

第6章 シェル芸でログの集計

6.1 logrotateの設定
6.2 ログを眺める
6.3 日付の変換
6.4 主要な指標を端末で取得
6.5 もっと凝った出力を作る
6.6 補足

第7章 おわりに

付録A WordPress(MySQL)からデータを抜き取る

A.1 mysqlコマンドを使う
A.2 SQLではなくてシェルスクリプトでデータを整理
A.3 画像等を記事ディレクトリに放り込む
A.4 htmlファイルのリンクを修正
A.5 カテゴリを抜き出す
A.6 記事ディレクトリに時刻を入れる
A.7 アップロードと確認

プログラミング言語AWK

投稿日:2016.07.26 | カテゴリー: 推薦図書

1989年に初めての邦訳が刊行され、その後何回か絶版の憂き目にあいつつも、不死鳥のごとく蘇り、様々な出版社から復刊を果たしている「プログラミング言語AWK」。この度、awkファンの熱い声に支えられ、USP出版から3回目の復刊を果たします。
テキスト処理と演算に絶大な効果を発揮する「awk」は、開発当時の1970年代から、開発者たちによって「30年後に真価がわかるだろう」と予言されていたといいます。
本書は、テキスト処理スクリプト言語の原点「awk」開発者たちによる、多種多様な例題を収録した読み応えたっぷりの解説書です。この本でしか味わえない、原著の奥深さを味わってください。

目次

第1章 AWK入門

 1-1 手はじめに

  AWKプログラムの構造
  AWKプログラムの実行
  エラー

 1-2 単純な出力

  全部の行の印字
  特定の欄の印字
  欄の数のNF
  計算と印字
  行番号の印字
  文章の出力

 1-3 凝った出力

  欄の模様がえ
  出力の整列

 1-4 選択

  比較による選択
  計算による選択
  文の中身による選択
  パターンの組み合わせ
  データの検証
  BEGINとEND

 1-5 AWKによる計算

  数え上げ
  和と平均の計算
  文章の操作
  文字列の隣接
  最後の入力行の印字
  組み込み関数
  行数,単語数,文字数の数え上げ

 1-6 制御文

  If-Else文
  While文
  For文

 1-7 配列

 1-8 便利な「一行野郎」たち

 1-9 お次は何?

 

第2章 AWK言語

  入力ファイルcontries
  プログラムの書式

 2-1 パターン

  BEGINとEND
  パターンとしての式
  文字列照合パターン
  正規表現
  複合パターン
  範囲を示すパターン
  パターンのまとめ

 2-2 アクション

  式
  制御文
  空文
  配列

 2-3 ユーザ定義関数

 2-4 出力

  print文
  出力区切子
  printf文
  ファイルへの出力
  パイプへの出力
  ファイルとパイプの閉鎖

 2-5 入力

  入力区切子
  副行レコード
  getline関数
  コマンド行での変数への代入
  コマンド行引数

 2-6 他のプログラムとの組み合わせ

  system関数
  AWKプログラムをシェル・コマンドに

 2-7 まとめ

 

第3章 データ処理

 3-1 データ変換と導出

  コラムの和
  百分率と分位の計算
  コンマつきの数
  固定欄入力
  プログラムの相互参照検査
  書式付出力

 3-2 データの検証

  対応の取れた区切り子
  パスワード・ファイルの検査
  データ検証プログラムの生成
  どっち版のAWK?

 3-3 BUndleとunbndle

 3-4 複行レコード

  空行で区切られたレコード
  複行レコードの処理
  ヘッダとトレイラつきのレコード
  名前と値からなるデータ

 3-5 まとめ

 

第4章 レポートとデータベース

 4-1 レコードの生成

  単純なレポート
  もう少し複雑なレポート

 4-2 パッケージ化された質問とレポート

  定型書簡

 4-3 関係データベース・システム

  自然和
  relfile
  AWKもどきの問い合わせ言語q
  qからawkへの翻訳プログラムqawk

 4-4 まとめ

 

第5章 語句処理

 5-1 文章の無作為生成

  無作為選択
  決まり文句の生成
  乱れ文

 5-2 対話的文章操作

  能力テスト:算数
  能力テスト:クイズ

 5-3 文章処理

  単語の数え上げ
  文書整形
  相互参照の一貫性保持
  KWIC検索の生成
  索引の生成

 5-5 まとめ

 

第6章 小さな言語

 6-1 アセンブラとインタープリタ

 6-2 グラフ生成言語

 6-3 整列生成プログラム

 6-4 逆ポーランド電卓

 6-5 普通の電卓

 6-7 まとめ

 

第7章 アルゴリズムの実験

 7-1 整列

  挿入法
  分割法
  整列2分木法

 7-2 輪郭分析

 7-3 位相整列

  広さ優先の位相整列
  深さ優先の探索
  深さ優先の位相整列

 7-4 Make:ファイル更新プログラム

 7-5 まとめ

 

第8章 エピローグ

 8-1 言語としてのAWK

 8-2 効率

 8-3 結論

 

付録A AWKのまとめ

 

付録B 演習問題回答

伽藍とバザール

投稿日:2016.07.26 | カテゴリー: 推薦図書

Linux、オープンソース(OSS)関係者必読の書。OSSソフトウェア開発の実態と、そのコミュニティ、そしてハッカーたちの価値観を、オープンソースのエバンジェリスト、ESRことエリック・スティーブン・レイモンドが可視化する。
なぜハッカーたちは無償でソフトウェア開発に携わるのか? Linuxが成功した理由とは? OSSの所有権とは? OSSとコミュニティを理解するために避けて通ることができない一冊です。
※本書は1999年に出版されたものを、USP出版より再出版したものです。

目次

第1章 伽藍とバザール

 1 伽藍方式とバザール方式
 2 なにはともあれメールは通せ
 3 ユーザは大事な財産
 4 はやめのリリース、しょっちゅうリリース
 5 バラがバラでないのは?
 6 Popclient からFetchmail へ
 7 Fetchmail の成長
 8 続・Fetchmail の教訓
 9 バザール方式の前提条件とは
 10 フリーソフト/オープンソースの社会的な意義
 11 マネジメントとマジノ線について
 12 謝辞
 13 もっと考えたい人のための文献リスト
 14 エピローグ:Netscape もバザール方式を受け入れる
 15 原注
 

第2章 ノウアスフィアの開墾

 1 そもそもの矛盾
 2 ハッカーイデオロギーのさまざま
 3 放縦な理論と純潔な実践
 4 所有権とオープンソース
 5 ロックと土地所有権
 6 贈与経済としてのハッカー文化
 7 ハッキングのよろこび
 8 評判のさまざまな相貌
 9 所有権と評判によるインセンティブ
 10 エゴの問題
 11 謙虚さの美徳
 12 評判ゲームモデルが持つ分野全体としての意義
 13 どれほどすばらしい贈り物?
 14 ノウアスフィア的所有権となわばりの動物行動学
 15 紛争の原因
 16 プロジェクト構造と所有権
 17 紛争とその解決
 18 文化への順応過程とアカデミズムとの関連
 19 結論:慣習から慣習法へ
 20 これからの研究の課題
 21 原注、書誌
 22 謝辞
 

第3章 魔法のおなべ

 1 魔法と区別がつかない
 2 贈与するおたくたちを超えて
 3 製造業的な誤解
 4 「情報はフリーになりたがっている」というのはウソだ。
 5 逆転した共有地
 6 ソース非公開にする理由
 7 利用価値による開発費用手当
 8 販売価値の困るところ
 9 間接販売価値モデル
 10 オープンにするとき、クローズドにするとき
 11 オープンソースのビジネス生態学
 12 成功に対処する
 13 オープンR&D とパトロン制の再発明
 14 目標到達までの道のり
 15 結論:革命のあとの人生
 16 謝辞
 17 補遺:なぜドライバをクローズドにするとベンダーは損をするのか
 

第4章 エリック・S・レイモンド大いに語る

 

第5章 ノウアスフィアはぼくたちの開墾を待っている

 

第6章 訳者あとがき

覚えて便利 いますぐ使える! シェルスクリプトシンプルレシピ54

投稿日:2016.07.26 | カテゴリー: 推薦図書

シェルスクリプトを習得するにあたって、越えなければならないいくつかの壁があります。
本書は、変数、数値、文字列、ファイル操作…様々な局面において壁にぶつかったとき、それを乗り越えるための本質的な回答を54本収録したレシピ集です。
本書には、初心者を卒業し、シェルスクリプトの匠を目指す人であれば学んでおきたいノウハウが、薄い本の中にこれでもか!と詰まっています。
収録されている54のレシピを習得すれば、シェルスクリプトの世界がそれを足がかりに広がっていくことを感じられるはずです。
シェルの深みを知り、より高みを目指したいあなたにこそ、手にとっていただきたい一冊です。

目次

第1章 基本的な作業

レシピ1-1 C言語のようなforループ
レシピ1-2 C言語のようなforループ―その2―(ムダ知識編)
レシピ1-3 誤作動しない正しい文字列評価のしかた
レシピ1-4 対話的な入力受けつけ
レシピ1-5 標準エラー出力を使うプログラムの扱い
レシピ1-6 標準エラー出力を自ら使う

第2章 変数操作

レシピ2-1 変数名の記述ミスへの対策
レシピ2-2 変数を未定義化する
レシピ2-3 変数が未定義かどうか判別する
レシピ2-4 子プロセスへの変数渡し
レシピ2-5 親プロセスへの変数渡し
レシピ2-6 配列変数を使う
レシピ2-7 連想配列を使う

第3章 数値操作

レシピ3-1 Basic並の高度な計算をする
レシピ3-2 四捨五入する
レシピ3-3 乱数を得る
レシピ3-4 10進数⇔16進数および10進数⇔8進数変換
レシピ3-5 10進数⇔2進数変換
レシピ3-6 数字として扱える文字列かどうかの判定

第4章 文字列操作

レシピ4-1 文字列の長さを知る(len)
レシピ4-2 文字列の一部を抽出する(left$,mid$,right$)
レシピ4-3 大文字⇔小文字変換
レシピ4-4 ASCIIコード⇔キャラクタ変換(asc,chr$)
レシピ4-5 正規表現でマッチした文字列の取り出し
レシピ4-6 特定文字のトリミング
レシピ4-7 パス名中のファイル名・ディレクトリ名を抽出する
レシピ4-8 ランダムな文字列の作成

第5章 フィールド・ライン処理

レシピ5-1 コマンド引数を処理する
レシピ5-2 最後からn番目のフィールドを得る
レシピ5-3 特定の業を出力する
レシピ5-4 1行ごとに処理をする―その1―
レシピ5-5 1行ごとに処理をする―その2~4―
レシピ5-6 並べ替え(ソート)をする
レシピ5-7 CSV形式のデータの処理
レシピ5-8 1列ごとに処理をする

第6章 ファイル操作

レシピ6-1 詳細なファイル情報を知る
レシピ6-2 タイムスタンプを変更する
レシピ6-3 指定ディレクトリ以下のファイルの総サイズを知る
レシピ6-4 指定ディレクトリ以下の特定のファイルを操作する
レシピ6-5 安全にテンポラリファイルを作る
レシピ6-6 デッドリンク(無効なシンボリックリンク)を消す
レシピ6-7 外部ファイルのヒアドキュメント

第7章 システム情報収集

レシピ7-1 OSの種類を知る
レシピ7-2 自分のファイルパスを知る
レシピ7-3 自分のプロセスIDを知る
レシピ7-4 現在のプロセス数を知る
レシピ7-5 自ホストのIPアドレスを知る
レシピ7-6 絶対パスを知る
レシピ7-7 多重起動チェック

第8章 デバッグに役立つレシピ

レシピ8-1 実行の様子をトレースする
レシピ8-2 デバッグメッセージを分離する
レシピ8-3 パイプ(標準入出力)の中身を覗き見る
レシピ8-4 パイプ(標準入出力)をゆっくり流す

第9章 シェルスクリプトの応用例

実践ユニケージ開発手法02 シェルスクリプト学習編

投稿日:2016.07.26 | カテゴリー: 推薦図書

本書は、独特な方法でシステムを構築するユニケージ開発手法の基本を理解し、習得するための実践教材です。
対象となる読者は、基本的なUNIX/Linux の知識(端末、コマンド、ファイルの概念、パスなど)があること、 また、「ユニケージ開発手法01 コマンド学習編」の内容を理解している方です。
ここでは、「コマンド学習編」で学んだコマンドを組み合わせて、データ処理を行うシェルスクリプトの作成に必要なbashの文法や機能について学習し、ユニケージの作法にしたがってシェルスクリプトでプログラミングを行う練習も行います。

目次

第1章 はじめに

1.1 通常のプログラミングとの違い

第2章 シェルスクリプト

2.1 シェルスクリプトの書き方と役割
2.2 ちょっとしたルール

第3章 ファイル展開(ワイルドカード)

第4章 ブレース展開

第5章 リダイレクト

5.1 ファイル記述子
5.2 記号

第6章 追記・ヒアドキュメント

第7章 パイプ(パイプライン)の動作

第8章 シェル変数

8.1 定義と代入
8.2 変数の生存期間
8.3 予約シェル変数・特殊なシェル変数
8.4 配列
8.5 コマンド置換

第9章 クォートとエスケープ

第10章 終了ステータスとパイプステータス

第11章 AND演算子とOR演算子

第12章 テストコマンド(test, [)

12.1 テストコマンドの書式
12.2 テストコマンドの機能
12.3 PIPESTATUSとエラー処理

第13章 制御構文

13.1 if文
13.2 for文
13.3 while文
13.4 case文
13.5 パイプでつなげたwhile文、for文は要注意!

第14章 帳票出力(ITEMRANKING)

14.1 ディレクトリとデータ準備
14.2 データを見る
14.3 出力のイメージ
14.4 シェルスクリプトの記述
14.5 引数の受け入れ
14.6 項目間演算

第15章 POMPAの作成(POMPASAKUSEI)

15.1 想定するアプリケーション
15.2 データ
15.3 URIAGE_TENPO
15.4 URIAGE_HINBETU
15.5 【TRY】

第16章 時系列データの帳票(BUMONTREND)

16.1 記述
16.2 解答例

第17章 履歴マスタの扱い

17.1 販売履歴(HANBAI_RIREKI)
17.2 実装

Vol.40

投稿日:2016.07.22 | カテゴリー: バックナンバー

今月号の特集では、シェルスクリプトでログを高速処理します。ログというと、Webサーバーのアクセスログ、Syslog、イベントログなど多岐に渡りますが、データ量が膨大だと処理に時間がかかりすぎるという問題があります。それを解決したのが「Tukubai」を用いたユニケージ開発手法です。筆者の実体験をもとに、解析時間が千分の一になった全貌をご紹介します。
巻末資料(6ページ)には、「シェルスクリプトで高速処理! Personal Tukubaiでログを分析しよう! 」「漢のUNIX」「Personal Tukubaiを使ってみた」の3記事で登場した、Tukubaiコマンドの解説集を収録。
ぜひお見逃しなく。

Vol.39

投稿日:2016.06.16 | カテゴリー: バックナンバー

毎月25日発売『シェルスクリプトマガジン』は、日本で唯一のシェルスクリプト総合誌。
最新号 7月号(vol.39)の特集は、「コマンドを作りながら覚えるAWK入門」。日本GNU AWKユーザー会の斉藤氏から、AWKの練習方法を解説していただきます。UNIX系OSに搭載されているコマンド群を、AWKの「一行野郎」で実装していくことで、その習得を目指します。
新連載「Personal Tukubaiを使ってみた 前編」では、USP研究所の独自コマンド「mojihamaコマンド」を使ってお手軽メタプログラミングに挑戦。シェルスクリプトで高速処理が可能になる実例を紹介します。
また、5周年を迎えたエンジニアたちのトークライブ「TechLION vol.25」再録版を収録! IT/Web業界が幸せになるには何が必要なのか、コミュニティ運営・若手育成・キャリア・電子書籍について4人の猛者が登壇しました。残念ながら当日足を運べなかった方は、ぜひお見逃しなく!

Vol.38

投稿日:2016.06.16 | カテゴリー: バックナンバー

今月の特集は、新連載「機械学習で石川啄木を蘇らせる」。
『一握の砂』で有名な石川啄木。彼の作品には「未完の短歌」があるのをご存知でしょうか?たった31音を読み切らずに途中で筆を擱いてしまった末句の生成 に、機械学習で挑戦します。著者は東京大学の学生さんです。機械学習の手法だけでなく、本文の端々に現れる石川啄木を愛する言葉にも注目です!
他、新連載「ConoHaでIP電話を使ってみよう!」がスタート!御影けい氏が、IP電話の交換器(IP-PBX)をConoHa上の仮想サーバ (VPS)に構築し、簡単な自動応答システム(IVR)を作れるように解説。また、香川大学の学生さんが執筆する「SLPからお届け!」では、Swift でiOSゲームアプリ開発に挑戦します!

Vol.37

投稿日:2016.05.23 | カテゴリー: バックナンバー

巻頭は、「Angular2でHello world !」。
JavaScript フレームワークAngular2 を利用してモダンウェブアプリケーションを作成します。前半では開発環境を設定し、後半では「Hello World」的なとても簡単なアプリケーションを作っていきます。「シェルスクリプトマガジン」の読者にはあまり馴染みのないテーマかもしれません。
しかし、アプリケーション開発はシェルスクリプトのみで行うにはどうしても限界があります。むしろ、
違う言語とシェルスクリプトが共存する新たな事例が出るヒントになれば幸いです。
また、特集はUSP研究所より Personal Tukubai について取り上げています。弊所がシステム開発で使っている独自コマンド usp Tukubai と、同等の機能を持つ Personal Tukubai はどんなことができるのか、インターン生が企画部長にインタビュー。また、「ユニケージ開発手法コードレビュー」では、プロトタイプや POC を行う際に本番データを用意できないとき、本番と同等量のダミーデータを作成する方法について解説します。
他、人気連載「漢のUNIX」では、後藤氏がfishのプロンプトをカスタマイズする方法を紹介。

シェルプログラミング実用テクニック

投稿日:2016.04.19 | カテゴリー: 推薦図書

Linux/UNIXのコマンドは単独で使うよりも、複数のコマンドを組み合わせてこそ真価を発揮します。テキストデータの検索/置換/並べ替え、ファイルのバックアップや削除、数値や日付の計算など活用範囲は無限大。端末にコマンドを入力してすぐに実行できるのも良いところ。その場かぎりの作業にこそ、シェルプログラミングが使えると便利です。
本書のいくつもの実例を順に見ていけば、コマンドを自在に組み合わせるために必要なシェルの機能と考え方が身につきます。
※本書はSoftwareDesign誌(技術評論社刊)の連載記事「開眼シェルスクリプト」を大幅に加筆修正し、同社から発行されたものです。

目次

第1章 準備運動

1.1 UNIXとは何者なのか?

1.1.1 McIlroyによるパイプの提案
1.1.2 grep,sedの誕生
1.1.3 「ソフトウェアツール」という言葉の誕生
1.1.4 考えられた「もう1つの選択肢」
1.1.5 GancarzのUNIX哲学

1.2 OSや環境について

1.2.1 想定する利用シーン
1.2.2 Ubuntu 14.04 LTS

1.3 基本操作

1.3.1 端末とシェルを開く
1.3.2 シェルにコマンドを入力する
1.3.3 manを使う
1.3.4 ファイルやコマンドの出力を眺める
1.3.5 ディレクトリを理解する
1.3.6 ディレクトリを移動する
1.3.7 ワイルドカードで一度に複数ファイルを指定する
1.3.8 パイプでコマンドをつなぐ
1.3.9 シェルスクリプトを書いて実行する
1.3.10 ファイルを読み書きする
1.3.11 出力を捨てる
1.3.12 日本語と英語を切り替える(ロケール)
1.3.13 パーミッションを理解する
1.3.14 制御構文を使う
1.3.15 その他の文法

1.4 AWKとsed

1.4.1 AWKを使う
1.4.2 sedを使う

1.5 使用するコマンドのインストール

1.5.1 GNU Awkの確認/インストール
1.5.2 Open usp Tukubaiのインストール

1.6 本書におけるPOSIXに対する立場

第2章 不定型な文章や設定ファイルの検索と加工

2.1 テキストの検索

2.1.1 文字列を検索する
2.1.2 複数のファイルから検索する
2.1.3 調査したいファイル一覧を作ってから検索する
2.1.4 ファイル名を検索する
2.1.5 検索対象の前後の行を抽出する
2.1.6 検索語句を含むファイルのリストを作る

2.2 単語や文字の数え上げ

2.2.1 文字数を数える
2.2.2 単語や語句を数える
2.2.3 文字の出現頻度を数える
2.2.4 斉藤さんの数を数える

2.3 テキストの比較

2.3.1 2つのテキストファイルを比較する
2.3.2 ディレクトリのファイルを比較する
2.3.3 ファイルが同じだったら/違ったら××する

2.4 文章の校正

2.4.1 特定の語句を置き換える
2.4.2 複数のファイルで特定の語句を置き換える
2.4.3 表記揺れや記号の不統一をチェックする
2.4.4 スペルチェックを行う
2.4.5 変なバイナリが混入していないか調査する
2.4.6 長い行を折り返す
2.4.7 不必要なマークアップ/コメント/スペースを消す
2.4.8 マークアップ/スペースをあとから差し込む
2.4.9 特定のフォーマットにデータを流し込む

2.5 その他テキストを扱うときの小技

2.5.1 Vimでコマンドを使う
2.5.2 カタカナや数字の全角/半角を相互変換する

第3章 ファイルの取り扱いとシステムの操作

3.1 バックアップ/同期

3.1.1 ディレクトリをバックアップする
3.1.2 2つのディレクトリを同期する
3.1.3 最新ファイルを古いファイルで上書きしないように同期を行う

3.2 圧縮されたファイルの操作

3.2.1 gzip圧縮されたファイルを圧縮されたまま使う
3.2.2 アーカイブの中から特定のファイルだけを抜き出す

3.3 ファイルの整理

3.3.1 重複したファイルを消す
3.3.2 ディレクトリの古いファイルを整理する
3.3.3 複数のテキストファイルを圧縮しないで1つにまとめる

3.4 ファイルの暗号化

3.4.1 ファイルを公開鍵暗号方式で暗号化する
3.4.2 パスワード方式の暗号化を行う/破る

3.5 自動化

3.5.1 プログラムを定期的に自動実行する
3.5.2 ファイルが変更されたらアクションを起こす
3.5.3 service(1)で自作のプログラムを起動/停止する
3.5.4 OS起動時に自作のプログラムを走らせる

3.6 ログからの情報抽出と活用

3.6.1 検索する
3.6.2 日付を正規化する
3.6.3 Apacheのログ(不定長データ)をスペース区切りに整形する
3.6.4 データをキーバリュー形式に整形する

3.7 プロセスに関する注意点

3.7.1 多数のプロセスから1つのファイルにレコードを書き込む
3.7.2 制御構文が動作するプロセスについて

第4章 ファイルシステムをデータベースにする

4.1 データの置き方

4.1.1 RDBで言うところのテーブルを作る
4.1.2 テキスト以外のデータの置き方を決める
4.1.3 データに対するテストを書く

4.2 データの連結や集計

4.2.1 マスタとトランザクションを結合する
4.2.2 集計する

4.3 データの更新

4.3.1 レコードを手動/半自動で追加する
4.3.2 レコードを自動で追加する(排他処理を行う)
4.3.3 レコードを変更する

4.4 データの印刷/アウトプット

4.4.1 住所録を印刷用にフォーマットする
4.4.2 バーコード/QRコードを印刷する

4.5 補足

4.5.1 ダミーデータを作る
4.5.2 別のデータの持ち方を検討する

第5章 大きなデータを処理する

5.1 マシンスペックの調査

5.1.1 CPUの周波数や個数などを調査する
5.1.2 DRAMの量と読み書きの速度を調査する
5.1.3 HDDの容量と読み込み速度,その他の情報を調査する

5.2 マルチスレッド/マルチプロセス

5.2.1 sortを使いこなす
5.2.2 パイプで並列計算する
5.2.3 バックグラウンド処理で並列化する
5.2.4 xargsで並列化する

5.3 計算の効率化

5.3.1 GNU grepに仕事をさせる
5.3.2 ページキャッシュを有効利用する
5.3.3 並列処理時のページキャッシュの効果
5.3.4 圧縮してキャッシュにのせて処理する(場合によっては有効)
5.3.5 ファイルを分割しておく

第6章 画像,表計算ソフト,その他特殊なデータを扱う

6.1 バイナリの読み書き

6.1.1 バイナリを閲覧する
6.1.2 バイナリを編集する

6.2 画像処理

6.2.1 画像のデータ形式/サイズ/向きを変える
6.2.2 アニメーションGIFを作る
6.2.3 画像をテキストにして正規化する
6.2.4 画像の一部分を切り出す
6.2.5 ネガを作る
6.2.6 画像を合成する
6.2.7 画像の情報を調査する
6.2.8 SVG画像を作る

6.3 フォーマットの変換

6.3.1 CSVをパースして読み込む
6.3.2 CSVをパースしないで読み込む
6.3.3 固定長のデータをスペース区切り(SSV)にする
6.3.4 PDFファイルを端末で読む

6.4 オフィススイートとの連携

6.4.1 Excelファイルからデータを抽出する
6.4.2 Word,PowerPointのデータを抽出する
6.4.3 Excel,Word,PowerPointファイルの中を検索する
6.4.4 少しずつ違うWordファイルを大量生成する

第7章 CLI的インターネットとの付き合い方

7.1 Webサイトの活用

7.1.1 Web APIを使う
7.1.2 Webサイトを丸ごとダウンロードする

7.2 HTML文書の加工に特定の要素を抜き出す

7.2.2 マークアップの重複がないかを確認する
7.2.3 リンク切れを見つける

7.3 サーバをまたいだ処理

7.3.1 ポートを操作する
7.3.2 鍵認証でsshを使う
7.3.3 ログインせずにリモートのコンピュータを操作する
7.3.4 リモートの計算リソースを利用する
7.3.5 sshを使わないでデータをやりとりする

7.4 電子メールの活用

7.4.1 電子メールの原本を読む
7.4.2 ファイル名から受信処理時間を抽出する
7.4.3 添付ファイルを抽出する

7.5 IPアドレスの取り扱い

7.5.1 IPv6のIPアドレスを処理する
7.5.2 IPv4のIPアドレスをソートする

第8章 計算

8.1 基本的な計算

8.1.1 端末を電卓代わりにする
8.1.2 文章の中から数字を抽出して計算する
8.1.3 「桁落ち」「丸め誤差」を気にしながら計算する
8.1.4 n進数とm進数を変換する

8.2 日付の計算

8.2.1 各月の最終日を求める
8.2.2 2つの日付の差を計算する
8.2.3 その年の第何週かを求める
8.2.4 n営業日後の日付を求める
8.2.5 西暦/和暦を変換する

8.3 科学計算

8.3.1 一様乱数を作る
8.3.2 ガウス分布に従う乱数を作る
8.3.3 数値積分を行う
8.3.4 数列を作る

8.4 実験データの処理

8.4.1 データのばらつきを評価する
8.4.2 最小二乗法でデータに直線を当てはめる
8.4.3 相関係数を求める
8.4.4 グラフを描く

付録

A.1 Upstart
A.2 Ubuntuの設定メモ
A.2.1 日本語パッケージをインストールする
A.2.2 wkhtmltopdfをインストールする
A.3 cgroupsの設定
A.4 いたずら
A.4.1 見かけよりも大きなファイルを作る(疑似デバイスを使う)
A.4.2 他人の端末に字を送り込む(デバイスファイルを使う)
A.4.3 どうでもよいファイルをダウンロードさせる(拡張子について)
A.4.4 きわどい名前のファイルやディレクトリを作る(ミスでできたファイルの二次被害防止)
A.4.5 ハト語に変換する(シグナル処理)

すべてのUNIXで20年動くプログラムはどう書くべきか

投稿日:2016.04.19 | カテゴリー: 推薦図書

プログラミング上よくある課題を、極力POSIXの範囲で、かつUNIX哲学的アプローチで解決したシェルスクリプトを多数例示し、高い可搬性・可用性を実現しつつ実用的なプログラムを書く方法を紹介しています。

下記のような内容を満載しています。

環境に依存せず、長持ちするプログラムの書き方(環境依存を引き起こす落とし穴)
環境に依存しない正規表現の書き方
シェルスクリプトで処理を行うための、たくさんの小技(レシピ)
シェルスクリプトは意外に速くて機能も豊富という事実
プログラム制作で参考になるUNIX哲学

※本書は同人誌として発行されたものを、再編集してC&R研究所より出版されたものです。

目次

序章 POSIX原理主義:その本質と可能性、実践方法を理解する

第1章 どの環境でも使えるシェルスクリプトを書く …… 文法・変数編

1-1 環境変数などの初期化
1-2 シェル変数
1-3 スコープ
1-4 正規表現
1-5 文字クラス
1-6 乱数
1-7 ロケール
1-8 $(( 式 ))
1-9 case文/if 文
1-10 local修飾子
1-11 PIPESTATUS変数

第2章 どの環境でも使えるシェルスクリプトを書く …… 正規表現編

2-1 知っておくべきメタ文字セットは3つ
2-2 BRE(基本正規表現)メタ文字セット
2-3 ERE(拡張正規表現)メタ文字セット
2-4 AWKで使えるメタ文字セット

第3章 どの環境でも使えるシェルスクリプトを書く …… コマンド編

3-1 「[」コマンド
3-2 AWKコマンド
3-3 dateコマンド
3-4 duコマンド
3-5 echoコマンド
3-6 execコマンド
3-7 foldコマンド
3-8 grepコマンド
3-9 headコマンド
3-10 ifconfigコマンド
3-11 killコマンド
3-12 mktempコマンド
3-13 nlコマンド
3-14 printfコマンド
3-15 psコマンド
3-16 readlinkコマンド
3-17 sedコマンド
3-18 sortコマンド
3-19 tacコマンド/tailコマンド+ -rオプションによる逆順出力
3-20 test([)コマンド
3-21 trコマンド
3-22 trapコマンド
3-23 whichコマンド
3-24 xargsコマンド
3-25 zcatコマンド

第4章 Hors d’oeuvre:ちょっとうれしいレシピ

4-1 sedによる改行文字への置換を、キレイに書く
4-2 grepに対するfgrepのような素直なsed
4-3 mkfifoコマンドの活用
4-4 一時ファイルを作らずファイルを更新する
4-5 テキストデータの最後の行を消す
4-6 改行なしの終端テキストを扱う
4-7 IPアドレスを調べる(IPv6も)
4-8 YYYYMMDDhhmmssを年月日時分秒に簡単分離する
4-9 祝日を取得する
4-10 ブラックリスト入りした100件を1万件の名簿から除去する

第5章 POSIX原理主義テクニック

5-1 PIPESTATUSさようなら
5-2 Apacheのcombined形式ログを扱いやすくする
5-3 シェルスクリプトで時間計算を一人前にこなす
5-4 findコマンドで秒単位にタイムスタンプ比較する
5-5 CSVファイルを読み込む
5-6 JSONファイルを読み込む
5-7 XML、HTMLファイルを読み込む
5-8 全角・半角文字の相互変換
5-9 ひらがな・カタカナの相互変換
5-10 バイナリデータを扱う
5-11 ロック(排他・共有)とセマフォ
5-12 デバッグってどうやってるの?

第6章 POSIX原理主義テクニック …… Web編

6-1 URLデコードする
6-2 URLエンコードする
6-3 Base64エンコード・デコードする
6-4 CGI変数の取得(GETメソッド編)
6-5 CGI変数の取得(POSTメソッド編)
6-6 Webブラウザーからのファイルアップロード
6-7 Ajaxで画面更新したい
6-8 シェルスクリプトでメール送信
6-9 メールマガジンを送る
6-10 HTMLテーブルを簡単キレイに生成する
6-11 シェルスクリプトおばさんの手づくりCookie(読み取り編)
6-12 シェルスクリプトおばさんの手づくりCookie(書き込み編)
6-13 シェルスクリプトによるHTTPセッション管理

第7章 知らないとハマるさまざまな落とし穴

7-1 名前付きパイプからリダイレクトするときの落とし穴
7-2 全角文字に対する正規表現の扱い
7-3 sortコマンドの基本と応用と落とし穴
7-4 sedのNコマンドの動きが何かおかしい
7-5 標準入力以外からAWKに正しく文字列を渡す
7-6 AWKの連想配列が読み込むだけで変わる落とし穴
7-7 whlie readで文字列が正しく渡せない
7-8 あなたはいくつ問題点を見つけられるか?

付録 レシピを駆使した調理例

郵便番号から住所欄を満たすアレをシェルスクリプトで

実践ユニケージ開発手法01 コマンド学習編

投稿日:2016.04.19 | カテゴリー: 推薦図書

本書は、独特な方法でシステムを構築するユニケージ開発手法の基本を理解し、習得するための実践教材です。

対象となる読者は、基本的なUNIX/Linux の知識(端末、コマンド、ファイルの概念、パス、標準入出力、リダイレクションなど)がある方です。

ここでは、ユニケージ開発手法において使用頻度の高いコマンドの使い方、とくに、高速なテキスト検索ができるgrep コマンド、テキスト置換ができるsed コマンド、高度なテキスト処理ができるawk コマンドをはじめとした基本的なUNIX コマンド、usp Tukubai コマンド(ユニケージコマンド)について詳しく解説します。豊富な練習問題で効果的にコマンド操作を体得できます。

目次

第1章 はじめに

1.1 コマンドの機能と役割
1.2 凡例

第2章 AWK

2.1 AWKとは何か
2.2 手を動かす
2.3 フィールド・レコード/パターン・アクション
2.4 レコードの選択
2.5 文字列の出力
2.6 演算
2.7 三項演算子
2.8 変数
2.9 BEGINパターン、ENDパターン
2.10 便利な関数
2.11 AWKの制御文

第3章 sort, msort*, uniq

3.1 sort
3.2 msort
3.3 uniq

第4章 head, tail, ctail*, gyo, retu*

4.1 head・tail
4.2 ctail
4.3 gyo
4.4 retu

第5章 self*, delf*

5.1 フィールド形式とキー
5.2 selfによるフィールドの並び替え
5.3 delfによる

第6章 sm2*, sm4*, sm5*

6.1 sm2
6.2 sm4
6.3 sm5

第7章 ysum*, kasan*, ratio*

7.1 ysum
7.2 kasan
7.3 ratio

第8章 join0*, join1*, join2*, loopj*

8.1 マスタとトランザクション
8.2 join0
8.3 join1
8.4 join2
8.5 loopj

第9章 getfirst*, getlast*, up3*

9.1 getfirst, getlast
9.2 up3

第10章 tarr*, yarr*

10.1 基本的な使い方
10.2 応用

第11章 count*, juni*

11.1 count
11.2 juni

第12章 map*, tateyoko*

12.1 フィールド形式ファイルのxy展開
12.2 より複雑な展開

第13章 marume*, divsen*, comma*, keta*

13.1 marume
13.2 divsen
13.3 comma
13.4 keta

第14章 grepと正規表現

14.1 grep
14.2 正規表現

第15章 tr, sed, calsed*, fsed*

15.1 tr
15.2 sed
15.3 calsed
15.4 fsed

第16章 han*, zen*

第17章 mojihame*

第18章 keycut*

第19章 その他コマンド

19.1 mdate
19.2 dayslash
19.3 lcalc
19.4 nkf, iconv
19.5 tagシリーズ

Vol.36

投稿日:2016.04.11 | カテゴリー: バックナンバー

毎月25日発売『シェルスクリプトマガジン』は、日本で唯一のシェルスクリプト総合誌。
最新号 2016 年4月号(vol.36)の特集は、「Mac OS XでUNIXを使い倒す!」。
Mac OS はバージョン10になってDarwinというUNIXがベースになったのをご存知ですか?
Mac OS Xを使っているけど、UNIXの部分をあまり使いこなせていない、UNIX自体よく知らないでMac OS Xを使っている。そんなMacユーザーの方へ、新しい発見がありますように!
その他、熊野氏の「未来に活きる!現場で使える!データモデリング」ではイベントの流れから業務を読み解くポイントを解説!すずきひろのぶ氏の「スズラボ通信」では、クラウド体温計を使ってIoT的なものづくりをします!
どうぞ、お見逃しなく!

Vol.35

投稿日:2016.04.11 | カテゴリー: バックナンバー

毎月25日発売『シェルスクリプトマガジン』は、日本で唯一のシェルスクリプト総合誌。
最新号 2016 March(vol.35)の特集は、「シェルスクリプトでTwitterを制す!」。 Twitter上のつぶやきや位置情報などのビックデータから、情報を整理・分析して、ドラマを掘り出してみます!つぶやきからどのような人間の行動予測が読み取れるのでしょうか?昨年12月のコミケツイートから、ジブリ作品「天空の城ラピュタ」のアノつぶやきまで、シェルスクリプトで収集します!
その他、「香川大学 SLPからお届け!」ではReactを使ってネイティブアプリ開発に挑戦!しょっさんの「40歳から始める、オレとRubyプログラミング」では、開発には欠かせないオブジェクト指向をわかりやすく解説!
今月号も、お見逃しなく!

Vol.34

投稿日:2016.04.11 | カテゴリー: バックナンバー

毎月25日発売『シェルスクリプトマガジン』は、日本で唯一のシェルスクリプト総合誌。

最新号 2016 February(vol.34)の巻頭は「技術者哲学」です。はやぶさプロジェクトに携わった、UNIX大好き人間の 寺薗淳也 先生をクローズアップ!ばりばり の技術者が広報として、はやぶさプロジェクトに関わり、先進的なコンピュータ教育で有名な会津大学で、どのようなことを教えているのか。UNIXの出会いから、読者へのメッセージまで、8ページにわたって詳しくお話していただきます。

その他、人気連載、波田野さんの「IPv6新時代を体感しよう!」が最終回!共感覚ってなんだろう?いつも奥の深い「人間とコンピュータの可能性」、現場目線のアツい連載「中小企業手作りIT化奮戦記」も収録!お見逃しなく!

Vol.33

投稿日:2016.04.11 | カテゴリー: バックナンバー

『シェルスクリプトマガジン』(毎月25日発売)は日本で唯一のシェルスクリプト総合誌。
最新号 2015 January(vol.33)の巻頭特集は、「10年後の生活を支える最新IT動向」。エンジニアのトークイベントTechLIONの再録拡大版をお届けしています!IT業界の中でも、IoTのエッジに携わっている猛者4名をゲストに、「10年後実現してほしいことは?」「機械学習・AIはどこまで進むのか?」等について白熱したトークが繰り広げられました!
その他、人気連載「めざせシェル女子!」「漢のUNIX」「ユニケージ開発コードレビュー」も収録!お見逃しなく!

Vol.32

投稿日:2016.04.11 | カテゴリー: バックナンバー

『シェルスクリプトマガジン』(毎月25日発売)は日本で唯一のシェルスクリプト総合誌。
最新号 2015 December(vol.32)の巻頭特集は、「慶応義塾大学名誉教授 小檜山賢二先生に訊く、技術者哲学」。60年続けてきたのは虫を撮影すること。全てコンピュータ任せでなく、必ず人間を介在させると語る小檜山先生。その理由とは?

そして新連載は、「香川大学SLPからお届け!」と題して、香川大学SLPの学生さんたちが毎号技術的な取り組みについて紹介してくれます。今月号は「イマドキ☆サーバ監視のゆくえ」です!

その他、人気連載「スズラボ通信」「40歳から始める、オレとRubyプログラミング」「ユニケージエンジニアの作法(最終回!)」なども収録!

Vol.31

投稿日:2016.04.11 | カテゴリー: バックナンバー

最新号 2015 November(vol.31)の巻頭特集は、とがったエンジニアのイベント「TechLION再録拡大版」をお届け!
今回は、関西を舞台に活躍する4名の猛者たちが登壇。優秀なエンジニアを輩出する京大マイコンクラブの逸話から、噂の社員総出ガチインターン裏話、『まに フェス』発起人からイベント開催のコツまでお聞きします!そして、ついに始まったマイナンバー、本当に怖いのは何なのか、個人情報と絡めて伝授!エンジニ アに必要なこととは……!?ぜひお見逃しなく!!

人気連載「漢のUNIX」では、ハイスピードなls(1)コマンドをつくっちゃいます!
さあ、コマンドを極めるその先へ……

Vol.30

投稿日:2016.04.11 | カテゴリー: バックナンバー

最新号 2015 October(vol.30)の巻頭新連載は「POSIX原理主義の逆襲」!!
連載一回目は、「東京五輪まで動くプログラム、書けますか?」バージョンアップやサポート打ち切りのたびに涙をのんでいた私たち…10年、20年もの間、動き続けると期待が持てるものとは?実は書き捨てられてきたあの言語の中にあった!
他にも30回目の大台に突入した大人気連載「人間とコンピュータの可能性」。「ITエンジニアのためのマーケティング入門」、漫画「めざせシェル女子!」なども収録!

Vol.29

投稿日:2016.04.11 | カテゴリー: バックナンバー

最新号 2015 September(vol.29)の巻頭新連載は「40歳から始める、オレとRubyプログラミング」!!
連載一回目は「Infrastructure as Code」という文化の紹介、インフラ管理のコード化の利点や、今回どうしてRubyを採用したのかについての説明から、実際にRubyを使うための環境の準備までを丁寧に解説。
“時代の流れにしたがって生きるのは、将来を担うエンジニアには必要不可欠です。”
他にも大人気連載「スズラボ通信」や「ユニケージ開発手法コードレビュー」「めざせシェル女子!」なども収録!

Vol.28

投稿日:2016.04.11 | カテゴリー: バックナンバー

最新号 2015 August(vol.28)はTechLION vol.21の再録記事を拡大版で収録。テコラス株式会社の伊勢幸一さんの語る、次世代データセンターのあり方とは?そして運用エンジニアをなくしていくために設立された日本MSP協会とは?第二部、第三部ではゲームをとりまくインフラ技術について、熱いトークが繰り広げられました!
白羽さんの「縁の木、育てよう」では前回に引き続きCMSコミュニケーションズの寺田さんのお話。コミュニティ活動を中心にお話を伺いました。そんな寺田さんがPlone Anbassadorとして携わっているCMS「Plone」について、アジア初開催のイベント「Plone Symposium Tokyo 2015」で聞いてきたお話も同時掲載しています。
他にも大人気連載「めざせシェル女子!」や「人間とコンピュータの可能性」「IPv6新時代を体感しよう!」なども収録!

Vol.27

投稿日:2016.04.11 | カテゴリー: バックナンバー

最新号 2015 July(vol.27)は「セキュリティ」に注目。話題のセキュコミュ勉強会CTF for GIRLSに編集部が潜入してきました!そしてShellShockとVENOMについて、スズラボ通信好評連載中のすずきひろのぶさんが解説!大事なのは脆弱性の「名前」ではなくて「評価値」。
よしおかさんのIT散歩日記は今回海を越えてアメリカへ!サンフランシスコで行われたMicrosoft社のカンファレンス「Build 2015」のお話です。
ITエンジニアのためのマーケティング入門、今回は「マーケティングって、どうやって始めるの?」というテーマ。確かにわからないかも・・・おか爺がたのしく解説してくれます。
他にも好評連載「漢のUNIX」や「縁の木、育てよう」「姐のBENTO」「Tech数独」など見所満載です!

Vol.26

投稿日:2016.04.11 | カテゴリー: バックナンバー

最新号 2015 June(vol.26)特集は「中小企業手作りIT化奮戦記 C言語のススメ」
好評連載中の菅さんの連載、「中小企業手作りIT化奮戦記」が巻頭に登場!C言語を触ったことが無い人向けに、システム管理をする上で持っておいた方がよい知識として、C言語の概略を解説していただきます。
3月24日に開催されたTechLION vol.20 の再録記事も掲載!櫻庭祐一さん、堂前清隆さん、松本直人さんの3名をお招きして、20年のITの歴史を熱く語り合っていただきました。
友の会会長 上田さんの「Haskellでやってはいかんのか?」では前回から作成しているHaskell版mojihameコマンドを完成させます。
他にも好評連載「IPv6新時代を体感しよう!」や「ユニケージ開発手法コードレビュー」「円滑コミュニケーションが世界を救う!」など見所満載です!

Vol.25

投稿日:2016.04.11 | カテゴリー: バックナンバー

最新号 2015 May(vol.25)特集は「シェルのプロが語る、make ~電車で剛!makefileを実行してみよう!~」
2月末に行われたOSCでのセミナーの再録です!二人のシェルのプロがmakeで成せる技の魅力を語ります。
そしてEjectコマンドユーザー会のあっきぃさんの「電子工作ができなくても大丈夫!CD-ROMドライブではじめるかんたんIoT」も掲載。レッツEjectコマンド工作!カーテン開けるよ!ウィーン!
5月号には詩も掲載。谷川俊太郎さんとも競演されている、現代をロックに生きる詩人、桑原滝弥さんのご寄稿。背景の絵がステキだにゃ~。
他にも好評連載!Twitterで話題沸騰中!「めざせシェル女子!~貝殻高校、パソコン部の日常~」や「ユニケージ開発手法コードレビュー」など見所満載です!

Vol.24

投稿日:2016.04.11 | カテゴリー: バックナンバー

月刊化2年目突入!!最新号 2015 April(vol.24)巻頭はなんと漫画でスタート!「めざせシェル女子!~貝殻高校、パソコン部の日常~」楽しくかわいくプログラミングを学ぼう!
もうひとつの新連載は「ITエンジニアのためのマーケティング入門」。おか爺とタケシくんが、愉快にマーケティングの面白さについて解説してくれます。
スズラボ通信の今回のテーマはシェルスクリプトでプログラミング!「作って使う俺シェルプログラム」とは…!?
他にも好評連載「Haskellでやってはいかんのか?」や「人間とコンピュータの可能性」など見所満載です!

Vol.23

投稿日:2016.04.7 | カテゴリー: バックナンバー

最新号 2015 March(vol.23)の特集は「円滑コミュニケーションが世界を救う!中小企業診断士が解説する、超実践的な会話術!」。ビジネスで使えるコミュニケーション術を、中小企業診断士の濱口さんが楽しく解説!
そして!新連載「よしおかひろたかのIT散歩日記」がスタート!ぶらぶらとお散歩しながら、色々なことをのんびりつづっていただきます。
TechLION vol.19再録記事も収録!テーマはセキュリティ大特集!昨年は本当に色々なことがありましたね・・・。
他にも好評連載「リナ女のたしなみ」や「ユニケージ開発手法コードレビュー」など見所満載です!

Vol.22

投稿日:2016.04.7 | カテゴリー: バックナンバー

『シェルスクリプトマガジン』(毎月25日発売)は日本で唯一のシェルスクリプト総合誌。
最新号 2015 February(vol.22)の特集は「北のDC探訪記!&USP友の会出張一撃勉強会レポ」。友の会の濱田さんが、さくらインターネットの石狩データセンターを取材!札幌で開催した一撃勉強会のレポートも収録。
船橋情報ビジネス専門学校の鳥居校長先生の新連載「UNIX大好き人間はどう育つ?」がスタート!UNIXの魅力についてつづっていただきます。
スズラボ通信では、プログラミング初心者へのProcessingのススメ。プログラミングで雪の結晶を降らせてみよう!
他にも好評連載「漢のUNIX」や「ユニケージ開発手法コードレビュー」など見所満載です!

Vol.21

投稿日:2016.04.7 | カテゴリー: バックナンバー

新年最初の特集は「こんなシェルスクリプト、書いちゃダメだ。」漢のUNIXでお馴染みの後藤大地さんが、ダメシェルスクリプトを斬ります!
新連載は、クラウディアさんこと戸倉彩さんのコミケ紹介記事「戸倉彩の2.5次元の世界」。冬コミ前にコミケ知識を勉強しましょう!
「TechLION再録」では、9月に開催されたvol.18を収録。「未来のライフスタイルとテクノロジー」をテーマに熱いトークが繰り広げられました。
「GNU AWK処方箋」の第4回はなんと最終回……! 従来のAWKではできなかったGNU AWKならではの拡張機能について解説します。
他にも「IT美女図鑑」や「Haskellでやってはいかんのか?」など好評連載中です!

Vol.20

投稿日:2016.04.7 | カテゴリー: バックナンバー

最新号 2014 December(Vol.20)はクリスマス全開の表紙が目印!特集は「エンジニアになりたい!新人の為のUNIX基礎講座」。
そもそもパソコンってなんなのか?いまさら聞けない基礎知識を、USPエンジニアがわかりやすく解説。

大岩先生の「人間とコンピュータの可能性」では、エンジニアの抽象化能力に着目。
菅さんの「中小企業手作りIT化奮戦記」では仮想化環境の導入でサーバの集約に挑みます。

他にも「ユニケージ開発手法 コードレビュー」や「組織文化を変える汗と涙の物語 アジャイル改善塾」など好評連載中です!

Vol.19

投稿日:2016.04.7 | カテゴリー: バックナンバー

最新号 2014 November(Vol.19)の 巻頭特集は特別対談「熟年エンジニア2人が語る 若手エンジニアに伝えたいこと」。
エンジニアにもっと幸せになってもらいたい、それには何が必要か。過去・現在・未来の視点からこれまでとこれからのITについて語っていただきました。

平さんの「リナ女のたしなみ」では、Amazon Glacierを利用した、写真のバックアップをご紹介。
そして長谷川さんの「うにっくすなやつら」がシェルスクリプトネタでゆるふわ復活!

GNU AWK処方箋第2回はレイアウトデザインを一新。たくさんのオオウミガラスと共にGNU拡張された関数を盛りだくさんの内容でご紹介いたします。
他にも「ユニケージ開発手法 コードレビュー」や「漢のUNIX」など好評連載中です!

Vol.18

投稿日:2016.04.7 | カテゴリー: バックナンバー

最新号 2014 October(Vol.18)はロゴデザインを大幅にリニューアル!「シェルスクリプト」という言葉をより強調したインパクトのあるロゴデザインになりました。
雑誌名はこれまで通り「USP MAGAZINE」で、番号も通し番号で変更ありません。

巻頭特集は「インフラエンジニアのおしごと」。
「サーバー運用お助けTips」の濱田さんが、冒頭と連載を特別執筆。キーワードは”がんばらない運用”です。
また、6月に行われた、インフラエンジニア向けのイベント、July Tech Festaのレポート記事も収録。

AWK処方箋は10月号から「GNU AWK 処方箋」としてスタート!GNU拡張で便利になった点を解説いたします。
他にも「ユニケージ開発手法 コードレビュー」や、新デザインでお届けする「Haskellでやってはいかんのか?」など好評連載中です!

Vol.17

投稿日:2016.04.7 | カテゴリー: バックナンバー

小学生達の夏休みはもうすぐおしまい。
宿題に追われていたあの頃が懐かしいなと思いきや、
えー!今どきは宿題代行業者があるんですか……
いいなぁ、納期直前開発代行業者とかないかな。

なんて冗談はさておいても、時代が進むと共に常識を覆す新しいものが次々現れますね。
本誌も新しい知見を届けられるように、今後ますます頑張ります。

Vol.16

投稿日:2016.04.7 | カテゴリー: バックナンバー

照りつける日射し!
暑い暑いといってクーラーの効いた部屋に閉じこもりがちですが、
犬はやはり散歩が好きなようで、近所の河川敷を元気に散歩していました。

いやいや、人間だってそんなことないか。夏はイベント目白押しですからね。
今年の夏はどんな計画を立てていますか?

Vol.15

投稿日:2016.04.7 | カテゴリー: バックナンバー

雷雨になれば梅雨明け間近といいますが、
今年の雷雨は嵐に雹に手厳しいですね。

ものづくりも、だいたい完成間近に大きな試練が待ち構えてるものですよね。
それを何とか乗り越えて、大きな花火を打ち上げたいものです。
ところで今月号の表紙、右下で主役を下支えするちんじゅうちゃんがいい味出してます。

Vol.14

投稿日:2016.04.7 | カテゴリー: バックナンバー

まだ過ごしやすい日和が続いてますけど
もうすぐ、梅雨が訪れてしまうんですかねぇ。

でも、そんな時こそじっくり物事に取り組むチャンスですよ。
それぞれの道を究めるプロフェッショナルの話に耳を傾け、
そして手を動かして、プログラミングに精進しようと思います。

Vol.13

投稿日:2016.04.7 | カテゴリー: バックナンバー

新装刊2号目。
5月病になる暇もなく、体当たりで作っております。(←まだ4月ですね)
徐々にペースを掴んでこなれてきたら、もっといろいろなこと仕掛けたいです。

初めは体を慣らす期間。
でも、いよいよこれから、本番が始まる季節ですね。

Vol.12

投稿日:2016.04.7 | カテゴリー: バックナンバー

for the sophisticated shell scripters
(洗練されたシェルスクリプト愛好家達へ)

そんなコンセプトで誕生したシェルスクリプト総合誌が、おかげさまで三周年。
いやぁ、よくネタが尽きずに生き延びたと我ながら感心しておりますが、なんと
今回から月刊化してしまいました! (ホントに尽きてしまわぬよう頑張ります)

今日はそんな月刊化第一号の発売日。桜の開花より一足早く(高知を除く)、
新たなUSP MAGAZINEが今日から始まります。今後ともよろしくお願いします。

Vol.11

投稿日:2016.04.7 | カテゴリー: バックナンバー

世の中でヒットしているサービスに、共通している特徴とは何だろうか。
サービスの向こうに居る相手の想いが、手に取るように伝わる、
そんな仕掛けがあるのかもしれない。

成功しているエンジニアに共通している特徴とはなんだろうか。
人との対話、コンピューターとの意思疎通が上手なことかもしれない。

Vol.10

投稿日:2016.04.7 | カテゴリー: バックナンバー

行ったこと無い場所、会ったこと無い人、見たこと無い物。
例え知ってはいたとしても、行って、出会って、触れ合えば、
多くの場合想像を超える思いを抱くことになる。

そうやって様々、想像を超える思いを抱いた人たちの素直な体験を、
今回もまたたくさん詰め込んでお届けしたい。

Vol.09

投稿日:2016.04.7 | カテゴリー: バックナンバー

面白そうなこと、いろいろやってみたくてたまらない。
でも、最初の一歩が意外と大変。「どうやるの?わからないよ」
そんな時は一度、わかる人にとことん教えてもらいましょう。
教えたくて、仲間を増やしたくてたまらない人が、ほら!ここに……

Vol.08

投稿日:2016.04.7 | カテゴリー: バックナンバー

シェルスクリプトって何?
それは哲学を表現する一手段なのかもしれない。
ならば同じ哲学を表現しているものは皆、
どんな姿をしていても、興味が湧く。

Vol.07

投稿日:2016.04.7 | カテゴリー: バックナンバー

道具には、長きに渡り人々に愛用され続けるものがある。
優れた道具とは、どんなものであろうか。
伝統工芸品からソフトウェアまで、本号は「道具」について考える。

Vol.06

投稿日:2016.04.7 | カテゴリー: バックナンバー

実りの秋ということで、今回の裏テーマはものづくり。
日本のインターネットを作った男、世界でものづくりムーブメントを起こさんとする男に話を聞き、そして本誌は、
シェルスクリプトで、ものづくりに革命を起こさんとする。

Vol.05

投稿日:2016.04.7 | カテゴリー: バックナンバー

Open usp Tukubaiの本格的レシピを本邦初公開。
シェルスクリプトを業務アプリや数学的分野へ
どんなふうに活用してきたかが見えてくる、
今までで一番USPらしい雑誌に仕上がりました。

Vol.04

投稿日:2016.04.7 | カテゴリー: バックナンバー

「UNIX哲学の価値を今、改めて問う!」
読者へ投げかけるメッセージが随所で増幅されて
すっげー濃い雑誌に仕上がった号なのです。

Vol.03

投稿日:2016.04.7 | カテゴリー: バックナンバー

「ユニケージって何?」数多く寄せられる質問。
もしかするとこの質問に初めてまともに答える号かもしれない!
他、アカデミックな記事、ソーシャル(社会的)な記事満載の号ですよ。

Vol.02

投稿日:2016.04.7 | カテゴリー: バックナンバー

今度の十三夜は、窓から月を眺めながら
クラウド駆使してシェルスクリプトで分散処理→そして夜更かし、
とシャレこんでみませんか。

Vol.01

投稿日:2016.04.7 | カテゴリー: バックナンバー

震災から3 ヶ月が経過し、世の中は徐々に平静を取り戻そうとしています。 だけど、何かがちょっと以前とは違うと思いませんか? 明日には何が起こるのかわからない、という現実を目の当たりにして、 「生きる上で本当に大切なものは何なのか?」という疑問を 日本人全員が突きつけられたからなのではないかと思います。 それは一瞬の興味を引くような、真新しいものや斬新な物や、 飾り立てられた何かやエンタテインメントではなくて、 生活の土台である、寝るところや食べるもの、着る物、 そして家族や仲間という、必要最低限のもの。 重厚長大な構造よりも、できるだけ簡素な構造へ。 それぞれの人が、世の中のシステムを知り、 自分たちの足でたくましく歩ける世の中へ。 何かが変わる時代が来たことをそこここに感じずにはいられません。 そんなときにひょっこりこの世の中へ登場したUSP MAGAZINE。 まだまだひよっこではございますが、 技術に人生をかけたエンジニアの皆さんを、 シェルスクリプトという簡素な技術でつなぎ、 奥深い技術の世界へと誘う骨太な雑誌を目指したい!!と 心の奥から思う次第です。 どうぞ今後ともごひいきに。

Cプログラム高速化研究班

投稿日:2016.03.30 | カテゴリー: 推薦図書

プログラムの背後で、CPUはどのような働きをしているのでしょうか?本書はその原理と仕組みを簡単な実験で確かめ、コードを研ぎすます方法を紹介します。

【著者あとがきより】
高速なプログラムが求められる場面は少ないながらも厳然として存在し、いざ性能が必要になったときに対応できる技術者が非常に少なくなっているのが気がかりです。特に、業務システムなどの数値演算系以外の分野では、絶滅危惧種と言ってよいのではないでしょうか。
その原因のひとつは、高級言語と統合開発環境の普及によって、機械命令レベルのプログラム実行を意識しなくてもすむようになっていることです。どのように実行されるかを意識しないので、実行コストが高い処理が平気で使われています。もうひとつの原因は、アルゴリズムに対する理解不足です。
開発するプログラムが高度化、パターン化してきているため、アルゴリズムについて学ぶ機会がなくなっているのではないでしょうか。
本書は、プログラムを高速化する個々の方策を並べるのではなく、方策を見つけるための道筋を示すように心がけました。

目次

序章 高度に進んだ技術は魔法と見分けがつかない

1章 CPUとコンパイラについてちょびっと

1.1 高速道路と横断歩道
1.2 コンパイラは何をしているのか
 コンパイル後のアセンブリ言語プログラムを覗く
 最適化オプションを付けるとどうなるか
1.3 CPUは何をしているのか
 命令セットアーキテクチャとマイクロアーキテクチャ
 命令はどのように実行されるのか
 命令パイプライン
 キャッシュメモリ
 もっとキャッシュ
 キャッシュブロックの置換アルゴリズム
 スーパースカラ実行
[1章は重箱の隅なのか]

2章 実行コストの感覚を身につける

2.1 プログラムの実行コスト
2.2 計る・測る・謀る
 本書のアプローチ
2.3 ベンチマークテストプログラムの最適化を防ぐ
 操作の「おまとめ」を防ぐ
 初期値設定の最適化を防ぐ
 単純な繰り返し操作の最適化を防ぐ
 本書のベンチマークテストプログラム
2.4 検証――遅いのはどの操作?
2.5 基本の加算と代入
 単純な代入(レジスタ間の転送)
 単純な代入(データの競合がある場合)
 定数の代入
 変数どうしの加算
 変数に定数を加算
2.6 乗算は遅い
 変数どうしの乗算
 変数に定数を乗算
2.7 除算はとっても遅い
 変数で除算(レジスタどうしの演算)
 定数2、4で除算
 2のべき乗以外の定数で除算
 符号なし整数の場合はどうか
 2のべき乗で除算するときはシフト演算がお得
2.8 メモリへのアクセス
 小さい配列へのアクセス(狭い範囲のメモリ操作) 
 大きい配列へのアクセス(広い範囲のメモリ操作)
 デスクトップ向けCPUとの比較
2.9 コンディションで差がでる条件分岐
 else節のないif文
 else節のあるif文
2.10 32/64ビット環境で違う関数呼び出し
2.11 実験のまとめ
[愛がほしくば愛を差し出せ]

3章 遅いのはどこか

3.1 gprofを使ったプロファイリング
 gprofの使い方
3.2 何がどれだけ時間を喰っているか
 ライブラリ関数のプロファイルも取得する
 時間喰いの関数たち
 ライブラリ関数の呼び出し回数を表示させるには
3.3 何が何を呼び出しているか
3.4 プロファイリングの仕組み
3.5 そのほかのプロファイラ
[達人の技を伝える教育システム]

4章 達人の方法論

4.1 達人はどこに目をつけるか?
 ハードウェア編
 コンパイラ/ミドルウェア編
 アルゴリズム編
4.2 [ハードウェア編]配列とキャッシュメモリの活用
 行列の積を計算する
 配列操作の順番を入れ替える
 ループを展開する
 行列のタイリング
4.3 [ライブラリ編]遅い関数をめぐる紆余曲折
 なぜstrcmp関数は遅いのか
 最適化の落とし穴
4.4 [ハードウェア編]SIMDを用いた文字列比較
4.5 [ライブラリ編]入出力方法いろいろ比べ
 行データの入力方法を比べる
 出力方法はどうだろう
 パイプ入出力の特殊事情
 パイプ入出力 vs. ファイル入出力
4.6 [アルゴリズム編]バイナリサーチと平衡二分探索木
 大量データのソート
[そこまでやる? ね、ね、そこまでやるの?]

5章 コンパイラを骨までしゃぶる

5.1 レベル分けされている最適化オプション
 GCCの最適化オプション
 「最適化なし」はデバッグに役立つ
 未定義動作がないことを想定しているレベル2以上の最適化
5.2 最適化・レジスタ・外部変数
5.3 共通部分式削除を知ってプログラムすっきり
5.4 ポインタと強度低減
5.5 インライン関数でユーザー関数も展開
[他人に差をつけろ!]

6章 業務システム向けのヒント 137

6.1 ソートと文字列操作をねらえ
6.2 小数点数の計算と文字列/数値の変換
 ブロック入出力とフィールド分割
 小数部付きの数を集計する
 整数を文字列に変換する
 パフォーマンスチューニングの結果
6.3 半角文字から全角文字への変換
 文字のバイト数を判別する
 ASCII文字と半角カナ文字の判別
 ASCII文字から全角文字への変換
 半角カナから全角文字への変換
 パフォーマンスチューニングの結果
 文字のバイト数を調べる別の方法
 より道UTF-8
6.4 データの特性を利用した配列の探索
 データの特性を考慮する
 バイナリサーチとリニアサーチを組み合わせた照合
 パフォーマンスチューニングの結果
[あとがきに代えて]

ユニケージ言論

投稿日:2016.03.30 | カテゴリー: 推薦図書

アジャイルでもない、ウォーターフォールでもない…、シェルスクリプトとテキストデータ、そしてオリジナルのコマンドを組み合わせ て、従来の数十倍の開発スピードで企業の基幹システムを構築する「ユニケージ開発手法」。これまで十数年間ベールに包まれていた本開発手法を解説した初の 論文集が出版されます。
その圧倒的な柔軟性、スピード、コスト削減効果で、注目を集めている本開発手法について、考案者、ユーザ、研究者が、それぞれの立場から、技術の概略、特徴、従来の開発手法との比較を論じます。
「システムは業務にある。コンピュータは道具にすぎない」
「業務のつながりは、人のコミュニケーション」
「データは更新しない、発生データは捨てないで整理集約しておけばよい」等々、本開発手法を表現した数々の言葉は、従来型の開発に携わるエンジニアにとっても、得るものが多いはずです。

目次

序 新しい開発手法への期待 前川 徹(サイバー大学)

第1章 ユニケージとは何か 當仲 寛哲(USP研究所)

1.1 ユニケージの外見
1.2 ユニケージの世界観
1.3 ユニケージのデータ論
1.4 ユニケージによる開発・運用
1.5 ユニケージ文化:コンピューティングと心

第2章 ユニケージは道具である 山崎 裕詞(良品計画)

2.1 「情シス」という仕事
2.2 システム開発における価値の根拠
2.3 システムの内製化へ
2.4 ユニケージとの出会い
2.5 ユニケージの「ミラクル」
2.6 良品計画とユニケージの現在

第3章 ユニケージは方法論である 熊谷 章(TAO BEARS)

3.1 技術革新への途
3.2 ユニケージの分析と評価
3.3 UNIXシステムとデータベースシステムの再考

第4章 ユニケージは正解である 熊野憲辰(ゼリア新薬)

4.1 ユーザサイドから見たIT 基盤・産業論
4.2 ユーザサイドから見たシステム
4.3 ユニケージへの期待と評価

第5章 ユニケージはコミュニケーションである 木ノ下 勝郎(ライブスペックRFP研究所)

5.1 業務のつながりは人のコミュニケーション
5.2 テキスト処理だけで全部仕事ができた
5.3 データは更新しない、発生データは捨てないで整理集約しておけばよい
5.4 データの管理方式とデータ名称の付け方

Vol.00

投稿日:2016.03.28 | カテゴリー: バックナンバー

私たちエンジニアは、常に技術についての選択を迫られている存在と言えます。 1994 年、マイク・ガンカーズ(X Window System 開発チームの一員)は、 以下の9 つの至上命令に集約される「UNIX 哲学」を創出しました。

  • 1. 小さいものは美しい。
  • 2. 各プログラムが一つのことをうまくやるようにせよ。
  • 3. できる限り原型(プロトタイプ)を作れ。
  • 4. 効率よりも移植しやすさを選べ。
  • 5. 単純なテキストファイルにデータを格納せよ。
  • 6. ソフトウェアの効率をきみの優位さとして利用せよ。
  • 7. 効率と移植性を高めるためにシェルスクリプトを利用せよ。
  • 8. 束縛するインターフェースは作るな。
  • 9. 全てのプログラムはフィルタとして振る舞うようにせよ。

これらのUNIX 哲学は、複雑化した現代社会において、物事の本質を貫き、 シンプルに強く生きていくための指標として、多くの人々の支えとなっています。 シェル(shell)は、ユーザからの指示を受けて解釈し、OS の中核部分に伝達することで、 プログラムの起動や制御などを行うプログラムです。 あらゆるプログラムは、シェルからの起動が可能であり、シェルスクリプトに処理の順番を 記述することで、複数のプログラムを操ることができます。 シェルスクリプトは、平易で短く書けるためユーザとの親和性が高いのも特徴です。 様々な言語で書かれたプログラムを自由に操るシェルスクリプトの可能性は無限大といっても過言では ありません。 現代に生きる私たちが直面する多くの課題も、この強くて柔軟な「UNIX の精神」と 「シェルプログラミングの技術」によって解決できるのではないか、と私たちは考えます。 USP MAGAZINE はUNIX 精神の原点に立ち返り、 シェルプログラミングをはじめとする広範な「洗練された」技術を紹介することで、 エンジニアの皆さんに改めてテクノロジーの楽しさ、深さを伝える雑誌を目指します。

新しい記事一覧へ戻る

  • -->