GoogleCL(Googleコマンドライン)のインストールと少々
ご存知の方も多いと思いますが以前Googleからこんな朗報が.
米Googleは6月18日(現地時間)、コマンドラインからGoogleのサービスを操作するためのツール「GoogleCL」をリリースしたと発表した。Google Codeのプロジェクトページからダウンロードできる。Linux、Windows、Macに対応し、利用するにはPythonとGoogle Data APIs Python Client Libraryのインストールが必要。
Google、コマンドラインツール「GoogleCL」を公開 - ITmedia エンタープライズ
エンジニアにはたまらんツールですね.
ほんとうに便利なGoogleコマンドライントリック5選! : ライフハッカー[日本版]という良記事があがっていたので触発されて使ってみました.
環境
バージョンの確認は以下のコマンド
$ python --version Python 2.6.5
なければ入れてください.Ubuntuの場合はapt-getでinstallできます。
$ sudo apt-get install python
インストール
- 必要なファイルをgooglecl - Command line tools for the Google Data APIs - Google Project Hostingとgdata-python-client - Google Data APIs Python Client Library - Google Project Hostingからダウンロードする(ここではtar.gzを利用)
- ダウンロードしたファイルを展開,インストール
# ファイルの展開 $ tar zxvf gdata-2.0.10.tar.gz $ tar zxvf googlecl-0.9.7.tar.gz # 展開したフォルダに移動してインストール(Gdata) $ cd gdata-2.0.10/ $ sudo python setup.py install # GoogleCLも同様にしてインストール $ cd ../googlecl-0.9.7/ $ sudo python setup.py install
インストールが終われば全部消しちゃってOKです(googleclはsudo付けないと消えません).
$ sudo rm -rf gdata-2.0.10.tar.gz googlecl-0.9.7.tar.gz gdata-2.0.10/ googlecl-0.9.7/
非常に簡単ですね.
使ってみる
ここではドキュメント(Docs)とカレンダー(Calendar)を使ってみます.
- Googleドキュメント
# testという名前のドキュメントをvimエディタで編集する $ google docs edit --title "test" --editor vim
なお,初回起動時にはユーザ名を聞かれます.
Please specify user: # 入力するとブラウザ上でGoogleアカウントが立ち上がるので[アクセスを許可]をクリックして承認
これでエディタが立ち上がり,ドキュメントの編集が可能.サービスごとに承認してやる必要がありそうです.
その他のコマンド
# ファイル名を指定してdelete $ google docs delete --title "test" # ファイル名を指定してダウンロード(便利!) $ google docs get --title "Homework [0-9]*" $ google docs list title,url-direct --delimiter ": " # list docs $ google docs upload the_bobs.csv ~/work/docs_to_share/*
- Googleカレンダー
# 6時から7時までに"Dinner party with George today at"が追加される(うまく動いてない..) $ google calendar add "Dinner party with George today at 6pm" # 今日のスケジュールを確認(なぜか時間の表示はない) $ google calendar today Dinner party with George today at,http://www.google.com/calendar/event?eid=OHFibWU3NzNmcnJjMGg0ZGJvcHQya3ZxaDQga3lvaGVpLmhhbWFkYUBt # タイトルを指定してイベントを削除(のはずなんだけど何度やってもできなかったです..) $ google calendar delete --title "Dinner party with George" $ google calendar list --date 2010-06-01,2010-06-30 # List events.
ちなみに日本語でもいけます
$ google calendar add "午後7時から9時まで美容院" $ google calendar today Dinner party with George today at,http://www.google.com/calendar/event?eid=OHFibWU3NzNmcnJjMGg0ZGJvcHQya3ZxaDQga3lvaGVpLmhhbWFkYUBt 美容院,http://www.google.com/calendar/event?eid=YWIwcGs1NmhuNWVnam91ZzQ1aWFrc2tta28ga3lvaGVpLmhhbWFkYUBt
うーん,これはすごい.しかし相変わらず削除ができない.できた人いたら教えてください.
ふだん
感想
- Googleドキュメントは使いやすい上に便利で何かと応用が利きそうと感じましたが,カレンダーに関しては狙いどおりに動かず今一歩でした(日本語で時刻を指定できるのはすごかったが).
- Googleドキュメントを自分の好きなエディタでいじれるのは結構うれしいし,"google docs get"を用いてファイルをダウンロードをすることができるので,wget コマンドを使ってダウンロードできないGoogleドキュメント上のファイルをとってくるのに使えるなぁと思いました.普段からGmailの添付ファイルをGUIでダウンロードするのが煩わしく感じているので,添付ファイルをGoogleドキュメントに全部流してくれたらさらに使い勝手が向上するなぁとも思いました.もしくはGmailもGoogleCLに対応してもらうとか...今後のupdateに期待したいところです.
以上.
CLでのサービス起動時などにUbuntuがserviceコマンドを推奨してきた
環境
- Ubuntu10.04
以前は
mysql, cron などのサービスの起動,停止,再起動,状態確認をするために以下を用いていた(例としてmysql)
$ sudo /etc/init.d/mysql start $ sudo /etc/init.d/mysql stop $ sudo /etc/init.d/mysql restart $ sudo /etc/init.d/mysql status
今日,同じコマンドを打ち込むと以下のメッセージが表示された
Rather than invoking init scripts through /etc/init.d, use the service(8) utility, e.g. service mysql start Since the script you are attempting to invoke has been converted to an Upstart job, you may also use the start(8) utility, e.g. start mysql mysql start/running, process 7336
/etc/init.d を使うよりも service(8) utility を使った方がスマートなんじゃない?とのこと(前半のみ).初めは"e.g."以下がコマンド例を挙げていることに気付かずにググることに.参考ページはなくしちゃいましたが理解できました.また,ただのメッセージなので動作自体は正常に動いているようですが(最後の行からして),とっても気持ち悪い.
ということで
今後は
$ sudo service mysql start mysql start/running, process 7144
このようなコマンドを使います.なーんだ.あまり変わらないですね.
ちなみに
apache2 については従来の
$ sudo /etc/init.d/apache2 start
を使用してもメッセージを出さなかったです(なぜか).もちろん
$ sudo service apache2 start
は使えるので今後はこれを使うことにします.
ゴミ箱をコマンドラインから扱う
環境
- Ubuntu10.04
- bash
trash-cli のインストール
Ubuntuではパッケージ化されているので以下のコマンドのみでOK*1.
$ sudo apt-get install trash-cli
消費された容量は143kBでした.
また,trash-cli - Command line interface to the freedesktop.org trashcan. - Google Project Hostingからファイルを落としてきてインストールすることもできます.
コマンド
# 対象のファイル/フォルダをゴミ箱へ送る $ trash ファイル名/フォルダ名 # 中身の確認 $ list-trash # 空にする $ empty-trash # ファイルを元に戻す $ restore-trash
おまけ
~/.bashrc に以下のaliasを記述しておけばrmしてうっかりファイルを削除してしまうことを防げるでしょう.
$ vim ~/.bashrc
aliasの記述
alias rm='trash'
反映させる
$ source ~/.bashrc
これで,間違えて
$ sudo rm -rf /
とかしても大丈夫なはずですw多分
PHPではてなブックマークエントリー取得情報APIを使う
参考
はてなブックマークエントリー情報取得APIとは - はてなキーワード
PHP: インストール手順 - Manual
PHP: cURL 関数 - Manual
getHatenar.php
<?php /* はてなブックマークエントリー情報取得APIを用いてブックマーク情報を取得する * "http://www.hatena.ne.jp/"の情報を取得するサンプル */ // curlを利用するためには以下のコマンドでインストールが必要 // $ sudo apt-get install php5-curl // とりあえず関連エントリーは使わないので,より高速なレスポンスの /entry/jsonlite/ を利用 $c = curl_init("http://b.hatena.ne.jp/entry/jsonlite/http://www.hatena.ne.jp/"); // curl_exec()の返り値を文字列で返すためのパラメータ curl_setopt($c, CURLOPT_RETURNTRANSFER, true); $json = curl_exec($c); curl_close($c); $jsonObj = json_decode($json); // 表示 var_dump($jsonObj); // 各要素には以下の様に参照する /* echo 'title:' . $jsonObj->title . "\n"; echo 'count:' . $jsonObj->count . "\n"; echo 'url:' . $jsonObj->url . "\n"; echo 'entry_url:' . $jsonObj->entry_url . "\n"; echo 'screenshot:' . $jsonObj->screenshot . "\n"; echo 'eid:' . $jsonObj->eid . "\n"; foreach($jsonObj->bookmarks as $k => $bv){ echo $k . "\n"; echo 'timestamp:' . $bv->timestamp . "\n" ; echo 'comment:' . $bv->comment . "\n"; echo 'user:' . $bv->user . "\n"; echo 'tags:'; foreach($bv->tags as $tv){ echo $tv . ' '; } echo "\n"; } */ ?>
実行
$ php getHatenar.php object(stdClass)#1 (7) { ["count"]=> string(4) "3935" ["bookmarks"]=> array(2696) { [0]=> object(stdClass)#2 (4) { ["timestamp"]=> string(19) "2010/06/04 18:44:07" ["comment"]=> string(0) "" ["user"]=> string(10) "shuuheihei" ["tags"]=> array(0) { } } [1]=> object(stdClass)#3 (4) { ["timestamp"]=> string(19) "2010/06/03 23:58:24" ["comment"]=> string(0) "" ["user"]=> string(8) "kinneko2" ["tags"]=> array(1) { [0]=> string(15) "webサービス" } ・ ・ ・ [2695]=> object(stdClass)#2697 (4) { ["timestamp"]=> string(19) "2004/12/22 01:52:20" ["comment"]=> string(0) "" ["user"]=> string(10) "kalamucho1" ["tags"]=> array(2) { [0]=> string(2) "PC" [1]=> string(11) "PC DIY Info" } } } ["url"]=> string(24) "http://www.hatena.ne.jp/" ["eid"]=> string(3) "370" ["title"]=> string(9) "はてな" ["screenshot"]=> string(95) "http://screenshot.hatena.ne.jp/images/200x150/c/2/6/b/d/f015f87fcf44a513f4744d853fe22504bc3.jpg" ["entry_url"]=> string(45) "http://b.hatena.ne.jp/entry/www.hatena.ne.jp/" }
こんな感じ
変なところあったら指摘お願いしますー
コマンドラインでPHP
微妙なバグ(?)があったのでメモ.
OSはUbuntu10.04,'apt-get install' で 'php5, php-cli' を入れています.
参考サイト
手順
$ php -v PHP 5.3.2-1ubuntu4.2 with Suhosin-Patch (cli) (built: May 13 2010 20:01:00) Copyright (c) 1997-2009 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
hoge.php
<?php echo"hoge"; ?>
実行
$ php hoge.php PHP Deprecated: Comments starting with '#' are deprecated in /etc/php5/cli/conf.d/mcrypt.ini on line 1 in Unknown on line 0
コメントが'#'で始まっているとおこられる
/etc/php5/cli/conf.d/mcrypt.ini の編集
# configuration for php MCrypt module extension=mcrypt.so
↓ 変更
; configuration for php MCrypt module extension=mcrypt.so
もう一度php
$ php hoge.php hoge
おしまい
プロセスの話
psコマンドで動作中のプロセスを確認する(一部)(ubuntu10.04)
$ ps x
PID TTY STAT TIME COMMAND 1461 ? S 0:05 update-notifier 1463 ? S 0:00 /usr/lib/indicator-messages/indicator-messages-service 1465 ? S 0:00 /usr/lib/indicator-application/indicator-application-service 1467 ? S 0:00 /usr/lib/indicator-sound/indicator-sound-service 2065 ? S 0:00 /bin/sh /usr/lib/firefox-3.6.3/firefox 2070 ? S 0:00 /bin/sh /usr/lib/firefox-3.6.3/run-mozilla.sh /usr/lib/firefox-3.6.3/firefox-bin 2074 ? Sl 124:01 /usr/lib/firefox-3.6.3/firefox-bin 2076 ? Sl 0:40 gnome-terminal 2080 ? S 0:00 gnome-pty-helper 2081 pts/0 Ss 0:01 bash 3308 pts/0 R+ 0:00 ps x
「STAT」のところが「S」になっているものが待ちの状態のプロセスで,「R」になっているものが実行可能な状態.見て分かるとおり,psコマンドを実行している間はpsコマンドのみが実行されています.こうしてプロセスが次々と切り替わっていくわけか.
今現在,56個のプロセスが動いていることが確認できました.へぇー結構たくさんのプロセスが動いているんですねー
それだけ
プロセス、リンク、task_struct構造体より抜粋
CSV形式のファイルをDBに突っ込む
データベースの生成
create database LDclip;
テーブルの生成
create table clips ( user_id int not null, url varchar(255) not null, timestamp timestamp not null default CURRENT_TIMESTAMP, tags text, );
CSVファイルの読み込み
セキュリティ上の理由から、サーバに存在するテキストファイルを読み取るときには、そのファイルがデータベースディレクトリに存在するか、または全ユーザがそのファイルを読み取り可能でなければなりません。
MySQL :: MySQL 4.1 リファレンスマニュアル :: 6.4.8 LOAD DATA INFILE 構文より引用
ということなので,CSVファイルをデータベースディレクトリに移動
$ sudo mv CSVファイル名 /var/lib/mysql/LDclip/
読み込み
load data infile 'CSVファイル名' ignore into table clips character set utf8 fields terminated by ',' enclosed by '"' (user_id, url, @var1, tags) set timestamp = str_to_date(@var1, "%Y-%m-%d %T")
というわけで
自力でCSVをパースしようと試みたり,OpenCSVライブラリの存在を知って使ってみたり,250万レコードのブックマークデータをファイルから読み込んで使おうとしてメモリが足らなくなったりしたわけだが,DBを使えばいーじゃんってことになったわけです.