こんなテキストがあります。
aaaaaaaaaaa bbbbbbbbb ccccc dddddddd eeeeeeee fffff gggggg
「空行は削りたいけど、区切りなので消すわけにもいかない」 そんなときの話です。
普通に cat すると次のようになります。
$ cat test.txt
aaaaaaaaaaa
bbbbbbbbb
ccccc
dddddddd
eeeeeeee
fffff
gggggg
・・・当然ですね。
cat のオプション "-s" を指定します。
$ cat -s test.txt aaaaaaaaaaa bbbbbbbbb ccccc dddddddd eeeeeeee fffff gggggg
これで、連続した空行が 1 行になりました。
土曜日に兵庫県の浜坂港まで カニを食べにいったのですが 京都から 往復 8 時間くらいバスに乗りました。
移動時間が大好きなので アレコレ楽しむことはできるのですが 今回は iPad を活用してみました。
こんな感じ。
椅子の背に iPad を固定しています。
この状態で
動画を再生したり
ワンセグチューナで TV を見たり。
iPad を外すとこんな感じ。
白いのが三脚です。
(この三脚はそのうち紹介します)
隙間はタオルで詰めています。 バスは結構揺れましたが 安定して良い感じでした。 こんな専用器具を出してくれないですかね。
ついでに旅行の思い出。
トンネルを抜けると霧の中。
霧を抜けると良い天気になりました。
カニ、before after 。
いつも 冬と春にカニを食べにいきます。
但馬牛のコロッケ&メンチカツ。
温泉卵を作りました。
卵を買って (3 つで 150 円)、空いてる場所に吊るします。
たまご好きには、たまりません。
日本海。
日帰りですが良い旅でした。
11/25 の金曜日、大阪で開催された 「Appcelerator Titanium Mobile 紹介セミナー」に行ってきました。
[参考]
Appcelerator Titanium Mobile 紹介セミナー | グローバル ナレッジ ネットワーク
Titanium Mobile は iOS と Android の両方のネイティブアプリを JavaScript で作成できるフレームワークです。
特徴を簡単に紹介します。
拡張機能が書けるので もし標準の機能だけで仕様を満たせないときに 「なんとかする」ことができます。
Kitchen Sink というデモアプリケーションが用意されていて 使える機能を詰め込んであるので それで動作確認ができるそうです。
Titanium Mobile は高速な処理が苦手で ゲームとかには向かないらしいのですが そういうときは、他のフレームワークを選ぶか ObjC や Java で拡張モジュールを作成します。
あと iOS と Android で動かすためには 他にも Web アプリにしてしまう方法もありますが その場合、次のような問題があります。
Web アプリの場合 iOS でも Android でもないデザインになってしまいますが Titanium Mobile の場合、「タブを作る」という処理を発行すると それぞれの OS が処理をしてくれるので 適したデザインになります。
とは言え調整は必要で iOS と Android 用に ユーティリティ系であれば 1 割くらい 凝ったインターフェイスだと 3 割くらいは ソースに差分が必要とのことでした。
Amazon のロゴが入った「Amazonオリジナル マグカップ 黒」を買って しばらく使ったので紹介します。
当然というか、ロゴ以外は普通のマグカップです。
どんな特殊機能も付いてません。
名刺とサイズ比較。(左後ろの白いのが名刺)
会社利用しているのですが 350ml は入るので お代わりのために何度も立つ必要がありません。 また、取っ手の輪も大きいので、太い指でも 3 本入ります。
ただ、陶器で結構大きい分、当然のことながら少し重いです。
このマグカップは、Amazon が好きで
(右手で持ったとき)
カップの内側にあるロゴにニヤリとできる人におススメします。
飲むたびに
ホッとひと息入れられることでしょう。
そうじゃない人は もっと軽いモノのほうが良いかと・・・。
[参考]
Amazonオリジナル マグカップ 黒 - amazon
「ウィンドウズでこうやるやつどうやるの?」というやつです。
準備。
$ touch aaa.txt $ touch bbb.sh $ touch ccc.log $ touch ddd.txt $ touch eee.cgi $ ls -l -rw-r--r-- 1 ubuntu ubuntu 0 2011-11-18 21:10 aaa.txt -rw-r--r-- 1 ubuntu ubuntu 0 2011-11-18 21:10 bbb.sh -rw-r--r-- 1 ubuntu ubuntu 0 2011-11-18 21:11 ccc.log -rw-r--r-- 1 ubuntu ubuntu 0 2011-11-18 21:11 ddd.txt -rw-r--r-- 1 ubuntu ubuntu 0 2011-11-18 21:14 eee.cgi
ls で拡張子で並べるには "-X" オプションを使います。
$ ls -lX -rw-r--r-- 1 ubuntu ubuntu 0 2011-11-18 21:14 eee.cgi -rw-r--r-- 1 ubuntu ubuntu 0 2011-11-18 21:11 ccc.log -rw-r--r-- 1 ubuntu ubuntu 0 2011-11-18 21:10 bbb.sh -rw-r--r-- 1 ubuntu ubuntu 0 2011-11-18 21:10 aaa.txt -rw-r--r-- 1 ubuntu ubuntu 0 2011-11-18 21:11 ddd.txt
拡張子で並びました。
ディレクトリが混ざっている場合は注意が必要です。
$ mkdir eee.d $ mkdir ggg $ ls -l -rw-r--r-- 1 ubuntu ubuntu 0 2011-11-18 21:10 aaa.txt -rw-r--r-- 1 ubuntu ubuntu 0 2011-11-18 21:10 bbb.sh -rw-r--r-- 1 ubuntu ubuntu 0 2011-11-18 21:11 ccc.log -rw-r--r-- 1 ubuntu ubuntu 0 2011-11-18 21:11 ddd.txt -rw-r--r-- 1 ubuntu ubuntu 0 2011-11-18 21:14 eee.cgi drwxr-xr-x 2 ubuntu ubuntu 4096 2011-11-18 21:15 fff.d drwxr-xr-x 2 ubuntu ubuntu 4096 2011-11-18 21:15 ggg
"-X" オプションの無い ls ではディレクトリも名前順に並びます。
"-X" オプションを付けます。
$ ls -lX drwxr-xr-x 2 ubuntu ubuntu 4096 2011-11-18 21:15 ggg -rw-r--r-- 1 ubuntu ubuntu 0 2011-11-18 21:14 eee.cgi drwxr-xr-x 2 ubuntu ubuntu 4096 2011-11-18 21:15 fff.d -rw-r--r-- 1 ubuntu ubuntu 0 2011-11-18 21:11 ccc.log -rw-r--r-- 1 ubuntu ubuntu 0 2011-11-18 21:10 bbb.sh -rw-r--r-- 1 ubuntu ubuntu 0 2011-11-18 21:10 aaa.txt -rw-r--r-- 1 ubuntu ubuntu 0 2011-11-18 21:11 ddd.txt
ディレクトリ名に "." が含まれている場合、ファイルと同じように "." より後ろを拡張子として並べてしまいます。
11/19 の土曜日に大阪府交野市で開催された「第 1 回 関西 LibreOffice 勉強会」に 行ってきました。
[参考]
第1回関西LibreOffice勉強会 - KansaiOOo
先週、関西オープンソース 2011 に行ったときに この勉強会の話を聞いて LibreOffice になって 1 回目の勉強会ということもあって 参加してみました。
交野市といえば、2010 年に市役所内の標準オフィスソフトとしてOpenOffice.orgを採用したところです。
[参考]
大阪府交野市がOpenOffice.orgとODF採用、中古PCのLinuxによる再生も - ニュース:ITpro
今回の会場があったのは交野市世代間交流センターで 京阪だと河内森駅から歩いて 5,6 分です。
JR の線路沿いにデカい建物が建ってます。
中はこんな感じ。
広々してます。休日のためかそういうフロアなのか人がいません。
会場の雰囲気。
参加者は 25 人くらいでした。
会場が世代間交流センターの「お年寄り健康教室」ということで 一般的な話になるのかなと 少し思っていましたが、 OpenOffice の話、 現在の開発の体制や パリでの LibreOffce Conference の話など “中の” 面白い話も聞くことができました。
簡単にトピックを紹介します。
(私の理解が追いついていないところは微妙かも)
他にも OpenOffice と違う機能や LibreOffice で Excel VBA のマクロを動かすとか色々あったのですが 紹介しきれないので機会があったらネタにしたいと思います。
時間が押してしまって 最後のテーマ「担当者に聞く! Linuxデスクトップ移行全告白」が 駆け足になってしまったのが残念でした。
以前「コピーや移動するときに同名のファイルを退避する」というネタを書きましたが cp コマンドや mv コマンドには、他にも便利な機能(同じことを他の方法でやろうとすると少し手間がかかる)があります。
オプション "-u" です。
このオプションは、コピーや移動するファイルのタイムスタンプが上書きするファイルよりも新しい場合のみ、処理を実行します。
準備。
$ ls -l -rw-r--r-- 1 ubuntu ubuntu 2 11/16 23:40 test1.cgi -rw-r--r-- 1 ubuntu ubuntu 4 11/16 23:42 test2.cgi ←新しい
オプション "-u" を付けてコピーします。
$ cp -u test1.cgi test2.cgi $ ls -l -rw-r--r-- 1 ubuntu ubuntu 2 11/16 23:40 test1.cgi -rw-r--r-- 1 ubuntu ubuntu 4 11/16 23:42 test2.cgi ←上書きされない
コピー先の test2.cgi の方が新しいので上書きされません。
移動してみます。
$ mv -u test1.cgi test2.cgi $ ls -l -rw-r--r-- 1 ubuntu ubuntu 2 11/16 23:40 test1.cgi ←消えない -rw-r--r-- 1 ubuntu ubuntu 4 11/16 23:42 test2.cgi ←上書きされない
上書きされないだけでなく、元ファイル test1.cgi も残ります。
これを以前のファイル退避のオプション "-b" と合わせると 『タイムスタンプが新しい場合のみ、コピー(移動)して、さらに退避ファイルを作成する』という動きになります。
これだけでも面白いですが これをバッチ処理に組み込むと、 タイムスタンプという別軸のフラグで 上書きする/しないを制御できるようになります。
locate コマンドは、コマンドの実行時にファイルを検索するのではなく 事前に作成したデータベースを使って検索するので、find コマンドよりも高速で検索することができます。
$ locate cgi (省略) /usr/share/doc/popularity-contest/examples/popcon-submit.cgi /usr/share/doc/python-pexpect/examples/cgishell.cgi.gz /var/lib/nginx/fastcgi /var/lib/nginx/scgi
パターンマッチングも色々できます。
$ locate "*.cgi" /usr/lib/w3m/cgi-bin/dirlist.cgi /usr/lib/w3m/cgi-bin/multipart.cgi /usr/lib/w3m/cgi-bin/w3mhelp.cgi /usr/lib/w3m/cgi-bin/w3mmail.cgi /usr/lib/w3m/cgi-bin/w3mman2html.cgi /usr/share/doc/popularity-contest/examples/popcon-submit.cgi
検索にデータベースを使うので、作ったばかりのファイルを検索することはできません。
$ touch /var/www/test.cgi $ locate test.cgi
データベースを更新するには updatedb コマンドを使います。
$ sudo updatedb
これで出てきます。
$ locate test.cgi
/var/www/test.cgi
データベースの更新は だいたい cron で毎日動くようになっています。 Ubuntu の場合は /etc/cron.daily にあります。
$ ls -l /etc/cron.daily/mlocate
-rwxr-xr-x 1 root root 606 2010-03-24 19:16 /etc/cron.daily/mlocate
注意しなくてはいけないのは /tmp や /var/spool などは除外の設定がされてたりして 検索しても出てこない場合があります。
Ubuntu の場合 /etc/updatedb.conf に設定されています。
$ cat /etc/updatedb.conf
PRUNE_BIND_MOUNTS="yes"
# PRUNENAMES=".git .bzr .hg .svn"
PRUNEPATHS="/tmp /var/spool /media"
PRUNEFS="NFS nfs nfs4 rpc_pipefs afs binfmt_misc proc smbfs autofs iso9660 ncpfs coda devpts ftpfs devfs mfs shfs sysfs cifs lustre_lite tmpfs usbfs udf fuse.glusterfs fuse.sshfs ecryptfs fusesmb devtmpfs"
シンボリックリンクに chown を オプションなしで実行すると リンク先の所有者が変わってしまいます。
まず準備します。
$ mkdir directory $ ln -s directory link $ ls -l 合計 4 drwxr-xr-x 2 ubuntu ubuntu 4096 directory lrwxrwxrwx 1 ubuntu ubuntu 9 link -> directory
こんな感じ。
オプションなしで シンボリックリンクに chown します。
$ sudo chown root link $ ls -l 合計 4 drwxr-xr-x 2 root ubuntu 4096 directory lrwxrwxrwx 1 ubuntu ubuntu 9 link -> directory
リンク先 (directory) の所有者が変わりました。
"-h" オプションを付けます。
$ sudo chown -h root link $ ls -l 合計 4 drwxr-xr-x 2 ubuntu ubuntu 4096 directory lrwxrwxrwx 1 root ubuntu 9 link -> directory
これでシンボリックリンクの所有者が変わりました。
昨日に続いて、関西オープンソース 2011 に行ってきました。
まずは写真の紹介から。
昨日よりも少しだけ人がいました。
受付をウロウロしてたペンギン。
去年の資料にもいたので、レギュラーみたいです。
ステージ。
ここでは 15 分くらいのセッションをやってました。
進行との掛け合いが面白かったです。
ジュンク堂の出張販売。
せっかくなので来た記念に 「パーフェクトJavaScript」を 購入しました。 ノベルティとしてオライリーのバッチを貰いました。
展示会場。
広いので多くのブースが出てました。
下は 4 つくらいのブースが扇状になってる展示会場。
とにかく広いので、こんな会場が 4 つくらいありました。
セミナーの部屋です。
結構盛況でした。
ちなみに今日は次のセミナを聴きました。
今回初めて聴いて面白かったのは、 「 INTER-Mediator 」という Web アプリケーションフレームワークです。
[参考]
INTER-Mediator
上のサイトを見てもらった方がわかりやすのですが このフレームワークは、ビューの部分を HTML で記述します。 本当に生の HTML です。
その HTML の中で、値を設定する場所は class で定義して <script> タグから PHP を呼び出してサーバ側と連携します。 値をセットしたり表の繰り返しはブラウザ側で行うわけです。
これだとかなりのレベルでビューが切り分けられますし、 値の保存もボタンを押すのではなく、値を変更したときに Ajax で 動的に保存させたりと、とても面白いフレームワークだと思いました。
11/11 (金) に大阪南港 ATC で開催された「関西オープンソース 2011」(1 日目)に行ってきました。
大阪南港 ATC は、とにかく人口密度の低いところです。
不思議なオブジェがあります。
ITM 館の 2F のメインフロアー。
広々としてます。
エレベータからの見下ろし。
広々としてます。
セミナの会場があるエリア。
なんかもう人がいません。
開始が金曜日の 13 時からということもあり 最初はものすごく閑散としていて 大丈夫かな?という印象でしたが 徐々に人数が増えてきました。 (それでも会場は広々としていましたが)
次のセミナを聴きました。
興味をひかれたネタについては 明日のまとめに書きます。
あと、オープンソースカンファレンスと比べると 来てる人が“若い”気がしました。 そのせいなのか、 セミナも、発表者と受講者のやりとりが少なく 盛り上がりが欠けてる感じでした。
平日のせい、というのもあるかもしれないので 明日の土曜日に期待したいと思います。
iPad2 用のキーボード「LOGICOOL キーボードケース For iPad TK700」を買いました。 しばらく使ってみたのですが、やっぱり良いので紹介してみます。
元々これを見て iPad2 の購入も決めました。 後で写真が出てきますが、iPad の蓋(カバー)にもなるキーボードです。
まず立ち姿。
黒い iPad だとキーボードの黒とマッチしています。
iPad を立てることもできます。
背面に支えは無く、キーボードの溝に挟んで立てている状態です。
蓋として使うため、キーボードの四隅は出っ張っています。 キーを打つときに手を宙に浮かせているので気にならないのですが 置いて打つ人は気になるかもしれません。 そこは要注意です。
キーボードの上部には iPad を操作するキーが付いています。
上の図の黄色い枠の部分ですが、左側にホームキーが付いていて、右側にロックキーがあります。 その他にも検索や音量など、iPad に特化したキーボードならではのファンクションキーです。
特にロックを、iPad を触らずに操作できるのはありがいです。 この蓋キーボードは、バッテリーがそんなに長く持たない(らしい)ので 打たないときは、結構こまめに電源を消しています。
上の図の青い枠のところに電源のスイッチがあるので 「ロック」→「電源OFF」が簡単にできます。 電源を入れる時も「電源ON」ですぐに認識するので、その流れで「ロック」を解除します。
ケースに iPad をしまうと下のようになります。
本体と一体感のある質感がたまりません。
個体差はあるのかもしれませんが、はめるのにかなりコツが要ります。 上部を先に入れて、滑らせるように下部をはめます。 はめるときに「カクッ」となるくらい感触があります(クッションが付いているので本体がこすれたりはしませんが)。 外すときも結構力が要りますが、その分、持ち上げても勝手に外れたりはしません。
キーボードのキーや凸の部分が、iPad の画面にこすれたりしたら嫌だな、と思っていたのですが 蓋(キーボード)の方に付いている四隅のクッションのおかげで、ちゃんと隙間ができています。
裏がえします。
裏面はこんな感じです。 真中にリンゴのマークがありますが、製品には付いていません。 何の柄もないのですが、Amazon のレビューに iPad に付いてきたシールを貼ると良いと 書いてあったので貼ってみました。
ちょっとした外出は「スマートカバー」、もしかして何か打つかな、というときは 「蓋キーボード」で使い分けています。 iPad を基本ビューアとして使っているので、実は出番はそれほど多くないのですが キーボード自体がカバーになるので邪魔にもならず、いざというときは役に立つ優れモノです。
[参考]
LOGICOOL キーボードケース For iPad TK700 - amazon
Linux で cp コマンドでコピーをしたり mv コマンドで移動するときに、 コピー先や移動先に同名のファイルがあると 通常は上書きしてしまいます。
この 2 つのコマンドには 同名のファイルがあったときに そのファイルを退避させるオプションがあります。
次のように a/ と b/ のどちらにも c.txt があるとします。
$ ls a/ c.txt $ ls b/ c.txt
通常の cp コマンドだと上書きするだけです。
$ cp a/c.txt b/ $ ls b/ c.txt ←上書きされたファイル
-b オプションを付けます。
$ cp -b a/c.txt b/ $ ls b/ c.txt c.txt~
このように c.txt~ ができます。
ちょっとわかりにくいですが c.txt が上書きされたファイルで
元々あった c.txt が c.txt~ になっています。
ちなみに Linux では ファイル名の最後に ~ が付いている場合 退避したファイルや一時ファイルである場合が多いです。
保存されるのは 1 世代だけなので もう一度コピーをすると 今の c.txt が c.txt~ になります。
バッチ処理なんかで 1 世代だけ残しておけば良いときなど 他の方法でやるよりもずっと手軽です。
先週、前から受けようと思ってた LPIC Level3 Specialty 304 を受けてきました。
ギリギリでしたが、いつものように簡単な受験体験記を書きました。
bash の組み込みコマンドの一覧を表示するには 組み込みコマンドの help を使います。
$ help GNU bash, version 4.1.5(1)-release (i486-pc-linux-gnu) These shell commands are defined internally. Type `help' to see this list. Type `help name' to find out more about the function `name'. Use `info bash' to find out more about the shell in general. Use `man -k' or `info' to find out more about commands not in this list. A star (*) next to a name means that the command is disabled. job_spec [&] history [-c] [-d offset] [n] or hist> (( expression )) if COMMANDS; then COMMANDS; [ elif C> . filename [arguments] jobs [-lnprs] [jobspec ...] or jobs > : kill [-s sigspec | -n signum | -sigs> [ arg... ] let arg [arg ...] [[ expression ]] local [option] name[=value] ...
組み込みコマンドの詳細を見るには help の後にコマンドを続けて書きます。
$ help bg bg: bg [job_spec ...] Move jobs to the background. Place the jobs identified by each JOB_SPEC in the background, as if they had been started with `&'. If JOB_SPEC is not present, the shell's notion of the current job is used. Exit Status: Returns success unless job control is not enabled or an error occurs.
tcsh や csh の組み込みコマンドの一覧を表示するには builtins コマンドを使います。
> builtins : @ alias alloc bg bindkey break breaksw builtins case cd chdir complete continue default dirs echo echotc else end endif endsw eval exec exit fg filetest foreach
ファイルを探すときに便利なコマンド find には 所有者を指定して探すオプションがあります。
$ find . -user root
これで所有者が root になっているファイルを探すことができます。
グループを指定することもできます。
$ find . -group adm
ユーザとグループを両方指定することもできます。
$ find . -user root -group adm
ユーザを削除するときに そのユーザのファイルが残っていないか 探すときに便利です。
wget でダウンロードしているときに 途中で止まることがあります。
$ wget http://example.com/images/cdrom.iso
--2011-11-01 22:38:49-- http://example.com/images/cdrom.iso
Connecting to 192.168.3.1:3128... connected.
Proxy request sent, awaiting response... 200 OK
Length: 717225984 (684M) [application/octet-stream]
Saving to: `cdrom.iso'
99% [========================================> ] 714,444,862 --.-K/s eta 2s
そんなときは -c オプションを付けて実行します。
$ wget -c http://example.com/images/cdrom.iso --2011-11-01 22:49:16-- http://example.com/images/cdrom.iso Connecting to 192.168.3.1:3128... connected. Proxy request sent, awaiting response... 206 Partial Content Length: 717225984 (684M), 2781122 (2.7M) remaining [application/octet-stream] Saving to: `cdrom.iso' 100%[+++++++++++++++++++++++++++++++++++++++>] 717,225,984 1.00M/s in 2.6s 2011-11-01 22:49:18 (1.00 MB/s) - `cdrom.iso' saved [717225984/717225984]
これで前の続きからダウンロードすることができます。