2012年3月25日日曜日

Mac, Geektool, Multi Ascii Graph

前回のエントリーで,Geektoolでアスキーグラフを使って無理矢理グラフを描く話をした.今日はその発展型の話.これは,以前のエントリー,Geektoolでtopとawkを使ったCPU,メモリ使用率表示スクリプトとも関係する.今日のスクリプトはこちら.そして,うまいこと設置できれば,こんな感じになる↓
これは,cpulog.shとmemlog.shでそれぞれCPUとメモリ使用率のログを出力し,それぞれのグラフを重ねて配置,その上にpsで各使用率上位5位のリストを表示しているという3層構造になっている.
ログ出力(1秒更新)
sh /PATH/cpuinfo.sh
sh /PATH/memlog.sh
グラフ(2秒更新)
php /PATH/graph.php /tmp/cpu.log nocolor
php /PATH/graph.php /tmp/mem.log
リスト(1秒更新)
ps -c -U hogehoge -o command,%cpu -r |head -n 6

ps -c -U hogehoge -o command,%mem,rss -m |head -n 6
赤文字の所は例のごとく各々の環境に合わせる.面倒くさいので,今日はスクリプトの解説をしない.適宜,該当するスクリプトを読んでほしい.そんなに難しい構造にはなっていない.

以前のエントリーでは,topを叩いてメモリ使用量を取得していた.それでもいいんだけど,桁が丸められているので,ちょっと扱いにくい.そこで今回のスクリプト(memlog.sh)では,vm_statコマンドでメモリの値を取得してやるように変更した.もっとも,vm_statは仮想メモリの値を取得するコマンドなので,物理メモリの値を示しているわけではない点には留意が必要である.それと,せっかくだから色もつけてみる.

#Macはメモリ管理がよくわからん.vm_statのfree値が極端に少ない.すこしググってみたところ,こんな記事を見つけた.どうも,いわゆるfree値に該当するのはPages freeとPages speculativeの合計値らしい.これ以上調べたり,考えるのも面倒なので,とりあえずそういうことにする.

ログファイルにはfree(free+speculative), inactive, active, wiredの使用率(百分率)を出力する.母数となる合計値の算出方法が正しいかどうかわからないが,とりあえずそれっぽく見えるので,そのままにしている.

グラフの仕様を変更した.出力されたログファイルのカラム(スペース区切り)毎に色の異なる折れ線グラフを描くようにした.カラムの最大数はとりあえず8つまで対応する.色の順番は,graph.phpの$color配列変数のキーを好きな順番にすればいい.コマンド実行時に第2引数としてnocolorをつけると,色指定なしのグラフが出力される.フォントの設定などは前回のエントリーを参考にしてほしい. 



2012年3月21日水曜日

Mac, Geektool, CPU Usage, Ascii Graph

今日はGeektoolでCPU使用率を「無理やり」グラフ表現する話.
Geektoolはグラフの表示ができない.CPU使用率をグラフ表現しようとした場合,一般的には2つの方法が考えられる.
1.Geektoolでの表示はあきらめて,ほかのユーティリティを使う.例えばXRGとか.
2.ほかのユーティリティで画像を保存して,Geektoolのimageで表示する.
  1については,ググればいくらでも出てくるので,面白くない.ということで,なんとかGeektoolで表示できないものかと考えた.2については,gnuplotというグラフ描画ユーティリティを使った方法を試した.ただし,この方法については,gnuplotのインストールとコマンドの習得,画像作成時のCPUとHDDへの負荷が若干気になるところだ.とはいえ,面白い結果が得られた(とりあえずうまいこと動いた)ので,後日改めて書き残そうと思う.
今日は,この1,2以外の方法を模索した結果を書く.つまり,
3.テキストでグラフを描く
である.いつものように,ここここにスクリプトを置いておく.基本的には,シェルスクリプトと,私の一番得意な言語PHPでできている.
無茶しやがって・・・というAAが飛んできそうだが,gnuplotよりは平易な設定でできると思う.CPU負荷はどうなのかわからない.それと,2の方法よりも画像を出力しない分,HDDへの書き込みは少ないが,この方法でもHDDへの書き込みが頻繁(geektoolで指定した秒数毎)に発生する.これは,その秒毎にCPU使用率をファイルへ保存するためだ.
もっとも,この点は,CPU使用率のログファイルの書き込み先をRAM Diskに移したtmpフォルダなどに指定してやれば,ほぼクリアだろう.各人の環境によるということだ.


cpulog.sh
#!/usr/bin/sh

if [ "`wc -l /tmp/cpu.log | awk '{print $1}'`" -gt 300 ]; then
cat /tmp/cpu.log | tail -300 > /tmp/cpu.log.swp
mv /tmp/cpu.log.swp /tmp/cpu.log
fi

top -R -F -u -l2 | head -4 | tail -1 | sed -E -e "s/CPU usage: (.*)% user.*/\1/" >> /tmp/cpu.log

#php ascii graph
php /PATH/graph.php /tmp/cpu.log
赤字のところは,例の如く,それぞれの環境に合わせて書き換える必要がある.
このシェルスクリプトでやっていることは,呼び出されるたびにtopコマンドでcpu使用率を取得して,最新の300件を保存,その後にphpスクリプトの呼び出しである.この300を好きな数字に変更すれば,ログはいくらでも取れる.

graph.php
#!/usr/bin/php
<?php
$str = "";

function Tics($i){
    $tics=array(0,20,40,60,80,100);
    if(in_array($i,$tics)){
        $str ="-";
    }else{
        $str =" ";
    }
    return $str;
}
Ticsは,グラフのメモリを指定している.arrayが表示する目盛りになる.
if($argv[1] && @file_exists($argv[1])){
    $f = file($argv[1]);
 引数で指定したファイルを開いて,配列変数$fに格納
    for($i=100;$i>0;$i--){
        $str.=Tics($i);
        for($j=0;$j<count($f);$j++){
            if($f[$j]>$i){
                $str.="#";
            }else{
                $str.=" ";
            }
        }
        $str.=Tics($i);
        $str.="\n";
    }
}else{
    $str ="target was not found\n";
}

echo $str;
?>
これで,グラフが描ける.
続いて,Geektoolの設定だが,shellのコマンドで,
sh /PATH/cpulog.sh
を指定する.PATHは例の如く,環境に従うべし.refreshを適当な秒数に設定するのを忘れないように.ちなみに,私の環境では1秒になっている.
それから,フォント指定をする.もちろん,フォント種は等幅フォントであればなんでもかまわない.重要なのはフォントサイズだ.Geektoolでは,最小9までしかフォントサイズリストに表示されないが,それよりも小さいサイズも指定できる.直接数字を入力すればいい.2以上がよろしいのではないかと.
こうして,できたのが,↓

いうまでもないが,利用する際は自己責任で.

2012年3月19日月曜日

Mac, Geektool, Weather Forecast, PHP, Google Unofficial API, Japanese

今日もGeektoolのこと.天気予報を日本語で表示しようという話.
↓こんな感じになる.
Gmailガジェットが見切れているのは気にしてはいけない.
Macを少し触って,素晴らしいなと思ったのは,PerlもawkもPHPもインストール済みだということ.コマンドラインでガリガリいじれるってのは楽だ.
さて,今日の肝はPHPでXMLをいじるということ.非常に簡単にXMLをオブジェクト化できる.ただし,文字コードがちゃんとしれいればだけれども.これで2日ハマった.とりあえず,非公式のAPIとはいえ,xmlのヘッダーにcharsetを指定しないでSJISのXMLを返してくるgoogle様はどうかしているとしか思えない.


とりあえず,ここにスクリプトを置いておく.これ以外に用意するものは,天気アイコン.適当なものを見つけてきて,phpスクリプトを参考にして,ファイル名などを設定する.

設置方法は,Geektoolのshellでコマンド部分に
 php PATH/gw.php 【取得したい都市】
としてやると,テキスト部分が表示される.PATHはgw.phpを設置したところ.【取得したい都市】には,都市名をアルファベットで入れてやる.例えば仙台市だったら,sendai,miyagiとなる.多分,sendaiだけでも取得できる.この引数を指定しなければ,東京都の天気(代表地点がどこかは知らない)が表示される.以下,phpスクリプトの解説など.

 #!/usr/bin/php
<?php
    define("ICON_SOURCE_PATH","/hogeoge/");
hogehogeと打ったつもりが,2つ目のhを打ち損じた.めんどうなのでそのままになっている.ここには,天気アイコンフォルダのパスを入れる.例えば/Users/hoge/Document/geektool/Weather/icons/みたいな感じ.
    define("TEMP_PATH","/tmp/");
これはいじる必要ない.天気アイコンをコピーする場所.Geektoolの画像で指定するので覚えておくこと.
//適当な天気アイコンをダウンロードして,適宜書き換えること.
    define("ICON_EXTENTION", ".png");
//この配列変数も,利用する天気アイコンに合わせて適宜書き換える.
    $icon=array(
 (略)
 );
コメントに書いてあるように,利用するアイコンに合わせて設定してやる.今回のこれが,Google APIがXMLの中で指定しているアイコン画像をダウンロードするスクリプトだったら, こんな手間はかからないのだが,如何せん,Google様のアイコンがダサい.自分で好きな画像を見つけてきた方が満足度が高いので,こんな面倒臭いことになっている.あくまで,私が満足するためにやっていることなのだ.
//引数から対象地域を設定.引数がなければ,東京の天気を表示
if($argv[1]){
$city = $argv[1];
}else{
$city ='tokyo';
}
先述の通り.
    $url = 'http://www.google.com/ig/api?weather=' . $city . '&hl=ja';
    $content = mb_convert_encoding(file_get_contents($url),'UTF-8', 'Shift-JIS');
    $xml = simplexml_load_string($content);
    $weather=$xml->weather;
このスクリプトの肝はsimplexml_load_string.simplexml_load_file関数を使おうと思ったのだが,Google様の素晴らしい仕様のお陰さまですこのやろうsuck
取り乱しました.SJISだと,エラーが出て,オブジェクト化できない.なので,対象URLの内容をfile_get_contentsで文字列としてダウンロードして,mb_convert_encodingでUTF-8に変換し,simplexml_load_stringしている.
&hl=jpの部分で,日本語で表示するように指定している.これがなければ,英語表示として取得できる.ただし,先述の$iconでキーに指定しているファイル名が違ってくる.日本語表示の場合はjp_で始まるgif画像だが,英語表示ではjp_が付かないファイル名になるのかと思いきや,全く違うファイル名になる場合がある.もし英語表示で使う場合は,調整が必要となる.もっとも,英語表示でいいんだったら,わざわざこんな面倒くさいスクリプトを使わず,yahoo.comの天気予報を使えばいい.Geektoolでの利用法など,少しググれば解説サイトは簡単に見つかる.
    $info = $weather->forecast_information;
    $current = $weather->current_conditions;

    copy(ICON_SOURCE_PATH . $icon[basename($current->icon->attributes(),'.gif')] . ICON_EXTENTION, TEMP_PATH . "weather_current" . ICON_EXTENTION); // 現在の天気アイコンをコピー
現在の天気を示すアイコンはweather_current.png(拡張子部分は利用する天気アイコンで変わる)となる.
    $str = str_replace('-', '/', $info->forecast_date->attributes()) . "\n";//日付を整形
    $str.= "現在: " . $current->condition->attributes() . "\n";
    $str.= "気温: " . $current->temp_c->attributes();
//このほか,現在の天気情報には湿度,華氏気温もあるが,このスクリプトでは使わない.
    for($i=0; $i<count($weather->forecast_conditions); $i++){
        $forecast=$weather->forecast_conditions[$i];
        copy(ICON_SOURCE_PATH . $icon[basename($forecast->icon->attributes(),'.gif')] . ICON_EXTENTION, TEMP_PATH . "weather_forecast" . $i . ICON_EXTENTION); // 予報の天気アイコンをコピー
今日の今後の天気アイコンはweather_forecast0.png,明日の天気アイコンはweather_forecast1.png,あさっては(略)2.png・・・となる.
//整形しやすくするために,各値を変数に代入
        $low = $forecast->low->attributes();
        $high = $forecast->high->attributes();
        $condition = $forecast->condition->attributes();
//今日の予報と明日以降の予報で処理を分ける
        if($i==0){
            $day = "";
            $str.= "(" . $low . "-" . $high . "℃)\n";
            $str.= "予報: " . $condition;
        }else{
        $str.= "\n------------------\n"; //セパレーター
            $day = $forecast->day_of_week->attributes() . "曜日";
            $str.= $day . "\n" . $condition . "\n" . $low . "-" . $high . "℃";
        }

    }
    $str.= "\n";
    echo $str;
?>
こんな感じ.

2012年3月14日水曜日

Mac, Geektool, Command line calendar, Holydays of Japanese

昨日のエントリーでMacのgeektoolを使う事になって,いろいろいじっている,と書いた.
今日たまたまネットを見ていて,「ラスカマンの超きまぐれなホームページ」でLinux用の日本の祝日対応カレンダーユーティリティを見つけた.
おもむろにダウンロードし,なんとなくmakeしてみたら,そのままビルドでき,実行してみるとそこそこいい感じに表示できたので,それをgeektoolで使ってみよう,という話.
ただし,幸せになるためには,ソースのフォントカラーを指定している部分にちょっと手を加える必要がある.

以下,備忘録的メモ.
リンク先よりtar.gzで圧縮されたファイルをダウンロード,適当な場所に展開する.
フォントカラーを指定している部分は,output_calendar.cにある.
ソース(output_calendar.c)を読めばわかるが,平日を黒色(\x1b[30m)で出力するようになっている.これでは,geektool上でフォントカラーを変更しても,曜日の平日部分は黒いままになってしまう.惜しいなぁ.(そもそも,これでは黒背景のターミナルを使っている場合,文字が読めないんじゃないのかな?黒背景の時は白く表示されるの?この辺検証していないのでわからない.)
ということで,フォントカラーを黒に指定しているところを,フォントカラーリセット(\x1b[0m)に置き換えてやる.
具体的には,output_calendar.c中で\x1b[30mとなっているところを,ことごとく\x1b[0mに置き換える.
※ちなみに,\はエンではなくてバックスラッシュ(optionを押しながら\エン)です.
置き換えが済んだら,ファイルを保存して,makeする.これで曜日平日部分のフォントカラーをgeektool上から自由に設定できる.
geektool使っている人はgeekという前提で話をしているので,geekってなにそれ臭いの?とか,makeってなにそれ美味しいのなんてことは言わないように.大体臭くて不味いです.
jhcalをソースレベルでいろいろいじれば,土日祝日の色や背景色なんかももっといろいろ変更できると思うけど,現状で満足しているのでやらない.
曜日表記を日本語から英語にしたい場合は,
sed -e "2 s/日/Su/" -e "2 s/月/Mo/" …(略)
みたいにしてsedでガリガリ置き換えたらいい.2というのは2行目を意味する.1行目に月表示があるので,置き換え対象となる行を指定してやらないと,"2012年 3Mo"という素晴らしい置き換えが発生する.
これで,あとは昨日のエントリーを参考に,geektoolにコマンドを書いてあげる.
/PATH/jhcal -m | head -8
/PATH/jhcal -nm | head -8
echo "------------------------"
echo "Agenda"
echo ""
/usr/local/bin/icalBuddy -sd -nc eventsToday+10 | sed -e "s/today:/今日:/" -e "s/day after tomorrow:/明後日:/" -e "s/tomorrow:/明日:/"
PATHは例のごとく,jhcalを置いたフォルダまでのパスを記述する.
表示としては,こんな感じになる.フォントは,OSAKAのレギュラー等幅に設定てある.ターミナル上の表示と見比べて欲しい.geektool上では,head -8にしているので,"20(火)春分の日"という行が表示されない.jhcalのコマンドオプションなど詳しい説明は,jhcal -?などとして,ヘルプを参照して欲しい.

そういえば,その昔Ubuntuでconkyをいじった時に,このユーティリティを使った気がする. 素晴らしい具合に忘却の彼方だった.

2012年3月13日火曜日

Rainmeter, LuaCalendar, Holyday of Google Calendar (2)

先ほどアクセスログを見てみたら,Yahoo!知恵袋からの参照があった.参照元の記事内容を見たら,LuaCalendarの曜日表示を英語にしたいという内容だった.これは先日のエントリーについて言及したものだ. なので今日は補足というか,それに対する返信の意味を込めて書く.私はYahooID持っていないので,知恵袋に返信できません.Yahoo!も知恵袋もあんまり好きくない.
本来のLuaCalendarは,曜日表示が英語(SMTWTFS)だが,先日のエントリーのものはスクリプト本体(CScript.lua)をガツガツ改造しているため,日本語表示(日月火水木金土)になっている.これを英語表示したいということらしい.
ちなみに,祝日名を英語表示にはできません.それはGoogleのカレンダー担当に言ってください.Lua上で置き換えできないことないだろうけど,スクリプトを組まないといけないので面倒くさい.(そもそも,日本の祝日を英語で表記したカレンダーを必要とする人ってのはものすごく少ないだろう.)


表示の仕方などは,本来はCScript.luaで指定せず,外部の設定ファイルをいじってやるのがマナー的にベターなんだろうけど,そもそもこのGoogleカレンダー祝日連携版LuaCalendarは私個人が満足できればそれでいい仕様で改造している.ヒトサマにお見せするようなものではない.とはいえ,英語表示ができないわけではない.

言い訳はさておき,本題.
曜日表記を英語頭文字にするためには,LuaCalendarの設定ファイルをいじってやる.
Rainmeterのスキンファイルは,推奨設定でインストールしていれば,マイドキュメントのRainmeterの中のSkinsに入っている.このLuaCalendar(先日のエントリーからダウンロードされたのであれば,LuaCalendar_edとかになっていると思う)に入っているSettings.incをテキストエディタで開いて,
;===== Weekday Label Settings =====
;Custom text for Weekday labels. Uses the following format: Sun|Mon|Tue|Wed|Thu|Fri|Sat
W.Lbl.txt=
に移動.ここで,説明にならってW.Lbl.txtに値を設定してやる.
 ;===== Weekday Label Settings =====
;Custom text for Weekday labels. Uses the following format: Sun|Mon|Tue|Wed|Thu|Fri|Sat
W.Lbl.txt='Sun|Mon|Tue|Wed|Thu|Fri|Sat'
こんな具合.もちろん,この部分を'S|M|T|W|T|F|S'としてやれば,そのように表示される.本当ならここに'日|月|火|水|木|金|土'と入れて日本語表示にしてやるのがマナー的にベターなんだけど,上述した理由で本体スクリプトをガツガツいじってしまっているので,こんな美しくない方法で対応せざるをえない.

ちなみに, 月表記を英語にしたい場合は,
;===== Month Label Settings =====
をいじってやる.この設定について,わざわざここで書くことはしない.設定ファイル中のコメントを読めば,難なくできるはず.
その結果↓


時間を見つけて修正したいなぁと思いつつも,私はこれで満足しているからいいかーと,優先順位が常に低いので,たぶんこのまま修正しない.

Mac, Geektool, Calendar, Agenda, iCal, Gmail, CPU usage, Memory, Network

これまでずっと,公私ともにWindowsをメインで使い,Linuxでサーバを組んだり管理したりしてきた.Macなんか使う理由がなかった.ここ最近,いろいろ故あって,Macを入手したので,すこし使ってみようかな,と思った.
とはいえ,ショートカットキーも良く知らないので,ひとつひとつの操作にカーソルを大きく動かさないといけないとか,なんて腐ったUIだと思ったわけだ.その認識は今もあんまり変わっていない.
MacのUIがどんだけ腐っているか,というドザー的主張だけでご飯が3杯いけそうなので,それはとりあえずほっとくことにする.今日の本旨ではない.

先日のネタで,Windowsのデスクトップガジェットが廃止ということで,その代替ソフトを見つけてきて,いろいろいじったよ,という事を書いた.→参照
Macには,ダッシュボードという,デスクトップガジェットに似た機能がある.あるんだけど,これは常時デスクトップに表示されるわけではない.Magic Trackpadで指三本横に払うジェスチャーしてデスクトップを切りかえれば確認できるんだけど,Windowsの操作に慣れていると,ちょっと使い勝手が悪い.大日本帝国時代のように,身体をシステムに合わせればいいというのもアリではあるが,道具に振り回されるのはそれはそれで違う気がする.

話が逸れたが,Windowsで使っているようなデスクトップガジェットと同じような情報を表示してくれるソフトがMacにもないだろうかと探してみた.そしたら,geektoolというものを見つけた.結構有名なソフトらしく,今ではApp Storeにも登録されている.日本語もちゃんと扱えるようだ.

ということで,このgeektoolをインストールした. インストールの仕方や基本的なガジェットの設置方法等はわざわざ説明する必要もないので,割愛する.ネットの世界は広大なので,この程度のことはいくらでも見つけられるだろう.
ちょっと触ったところ,ああこれはLinuxのconkyみたいなもんだなと思った. コマンドの実行結果をデスクトップに表示してくれるわけだ.ただし,conkyが図形描画(グラフとか)も簡単にできる一方で,geektoolはその辺があまり得意ではないぽい.無理をすれば,1秒毎とかに画像を出力して,それを表示させるという方法もあるんだろうけど,システムやハードへの負荷を考えると,微妙なところだ.

さて,前置きが長くなったが,1日2日いじってみて↓のような配置で落ち着いた.
 アナログ時計は,SimpleFloatingClockというフリーソフトを使っている.いろいろカスタマイズできて便利なような.Lion上ではセッティングや新しい時計の作成など,一部の機能の起動がうまいことできたりできなかったりと怪しいところもあるが,時計を表示する分には問題ない.

Calendar部分はここを参考に,シェルスクリプトを書いた.Calendarの下にAgendaを表示するようにした.これは,Google Calendarと同期しているiCalの内容を表示している.iCalの内容を表示するためには,icalBuddyというユーティリティを使う. Calendar,Agendaはそれぞれ別のガジェットとして配置することもできるが,更新頻度とか,リソースとか考えて(それが果たして効果的かどうかはわからないが),1つのガジェットになっている.つまり,
これで1つ.
Commandは
sh /PATH/calendar.sh
echo "------------------------"
echo "Agenda"
echo ""
/usr/local/bin/icalBuddy -sd -nc eventsToday+10 | sed -e "s/today:/今日:/" -e "s/day after tomorrow:/明後日:/" -e "s/tomorrow:/明日:/"
こんな感じ. PATH部分はCalendarのシェルスクリプトまでのパス.例えばCalendarスクリプトを書類フォルダに作ったgeektoolフォルダの中に入れてあれば,
/Users/hoge/documents/geektool/calendar.sh
みたいな.もちろん,このシェルスクリプトには実行権限を付加(chmod +w)していある.
icalBuddyは表示が英語なので,お好みで
sed -e "s/today:/今日:/" -e "s/day after tomorrow:/明後日:/" -e "s/tomorrow:/明日:/"
とかして,日本語に置き換える.
次に,ネットワーク速度.

スクリーンショットを撮った時にたまたま通信していなかったようで,0kb/secとなっている.これもシェルスクリプトを呼び出している.ここを参考にしてほしい.

その下のCPU,RAMの表示.
これはtopコマンドをawkで一生懸命整形している.#部分が使用率によって動く.
top -R -F -u -l 2 | awk '/CPU usage|PhysMem/ && NR > 12 { if( $1 == "CPU" ){ printf "CPU ["; for( i = 0;  i < $5/2;  i++ ) { printf "#" } for ( j = 100/2-i; j >0; j--){ printf " " } print "]" $5 }else{ printf "RAM ["; for( i = 0;  i <$4/$8*50;  i++ ){ printf "#" } for ( j = 100/2-i; j >0; j-- ){ printf " " } printf "]"; printf("%3.2f", $4/$8*100); print "%"; printf "    free:" $10 " usage:" $4 "/" $8 " wired:" $2}};'
結構むりむり1行で書いている.改行すると,
top -R -F -u -l 2 |
awk '/CPU usage|PhysMem/ && NR > 12 {
  if( $1 == "CPU" ){
    printf "CPU [";
    for( i = 0;  i < $5/2;  i++ ) {
      printf "#"
    }
    for ( j = 100/2-i; j >0; j--) {
      printf " "
    }
    print "]" $5
  }else{
    printf "RAM [";
    for( i = 0;  i <$4/$8*50;  i++ ) {
      printf "#"
    } for ( j = 100/2-i; j >0; j-- ) {
      printf " "
    }
    printf "]";
    printf("%3.2f", $4/$8*100);
    print "%";
    printf "    free:" $10 " usage:" $4 "/" $8 " wired:" $2
  }
};'
こんな構造になっている.興味ある人は適宜解読してほしい.
改行したものをコピペしたところで,まともには動かないと思う.コピペするときは改行していない方をどうぞ.

CPU,RAM使用率の下にあるのが,CPU使用率,メモリ使用量のトップ5リスト.
これはそれぞれpsコマンドで簡単に書いて,ガジェットを横にならべている.
ps -c -U user -o command,%cpu -r |head -n 6

ps -c -U user -o command,%mem,rss -m |head -n 6
上がCPU,下がメモリだ.user部分は実行ユーザ名を入れる.例えばユーザ名hogeであれば,
ps -c -U hoge -o command,%cpu -r |head -n 6
となる.psのオプション -r はCPU使用率の大きい順にソート,-mはメモリ使用量の大きい順にソートを意味する.パイプ(|)の後ろは,頭から何行表示するか(headコマンド),ということ.この場合は6行.タイトル行+トップ5となっている.

最後にGmailの表示.これは,ここの,4) Check your unread Gmail from the command lineから何も考えずに持ってきた.その部分を抜粋して,適当翻訳つけてみた.

4) Check your unread Gmail from the command line(コマンドラインから未読Gmailを表示する)

curl -u username:password –silent “https://mail.google.com/mail/feed/atom” | tr -d ‘\n’ | awk -F ” ‘{for (i=2; i<=NF; i++) {print $i}}’ | sed -n “s/\(.*\)<\/title.*name>\(.*\)<\/name>.*/\2 – \1/p”

Checks the Gmail ATOM feed for your account, parses it and outputs a list of unread messages.(GmailのATOMフィードをチェックして未読メッセージをリストにするよ.)

For some reason sed gets stuck on OS X, so here’s a Perl version for the Mac:(でもOS Xだと動かないから,MacのためにPerl版も書いておくね. )

curl -u username:password --silent "https://mail.google.com/mail/feed/atom" | tr -d '\n' | awk -F '<entry>' '{for (i=2; i<=NF; i++) {print $i}}' | perl -pe 's/^<title>(.*)<\/title>.*<name>(.*)<\/name>.*$/$2 - $1/'If you want to see the name of the last person, who added a message to the conversation, change the greediness of the operators like this:(もし最終行の送信者名を表示させたかったら,以下のようにしてね.)
curl -u username:password --silent "https://mail.google.com/mail/feed/atom" | tr -d '\n' | awk -F '<entry>' '{for (i=2; i<=NF; i++) {print $i}}' | perl -pe 's/^<title>(.*)<\/title>.*?<name>(.*?)<\/name>.*$/$2 - $1/'
ということだ.なので,
echo "Gmail"
curl -u username:password --silent "https://mail.google.com/mail/feed/atom" | tr -d '\n' | awk -F '<entry>' '{for (i=2; i<=NF; i++) {print $i}}' | perl -pe 's/^<title>(.*)<\/title>.*?<name>(.*?)<\/name>.*$/$2 - $1/'
と,頭にechoしてガジェットタイトルとして"Gmail"を表示している. usernamepasswordはそれぞれgmailにログインするときに入力するusernameとpasswordを入れる.例えばユーザ名nemo(@gmail),パスワードhogehogeであれば,nemo:hogehogeとなる.

NetworkとCalendarのshell scriptを置いておく.
Network → inout.sh
Calendar → calendar.sh