Findコマンドのメモ

普段から常用しているコマンドなのですが、今更という感じです。

滅多に使用しないオプションを今回使用することになったので、記録しておこうかと思った次第です。
※今回、使ったのは日時オプションです

コマンドオプション 機能
-name [filename] 指定した文字でファイル、ディレクトリを検索
-user [username] 指定したユーザーが所有するファイル、ディレクトリを検索
-group [groupname] 指定したグループが所有するファイル、ディレクトリを検索
-type [type] ファイルの種類を指定して検索(b:ブロック型特殊ファイル c:キャラクタ型特殊ファイル d:ディレクトリ l:シンボリックリンク f:通常ファイル)
-atime (+/-)n 最後にアクセスしたのがn日前で検索(+をつけると~日以上、-をつけると~日以下)
-ctime (+/-)n 最後にステータスが変更されたのがn日前で検索(+をつけると~日以上、-をつけると~日以下)
-mtime (+/-)n 最後にデータが修正されたのがn日前で検索(+をつけると~日以上、-をつけると~日以下)
-mmin (+/-)n 最後にデータが修正されたのがn分前で検索(+をつけると~日以上、-をつけると~日以下)
-newer [filename] 指定したファイルよりも後に更新されているものを検索対象にする
-size n[c/k/b] nのサイズのファイルを検索(c:バイト、k:キロバイト、b:ブロック)
-ls 検索結果のファイル、ディレクトリの詳細を表示する(lsコマンドと同じ)
-print 検索結果を標準出力に出す(元々結果表示されるんで不要かも)
-fprint [filename] 検索結果をファイルに出力する(>でファイル出力できるので不要かも)
-exec [command] {}\; 検索結果を指定コマンドにの引数に設定して実行する

(例)カレントディレクトリ配下のファイルに「hogehoge」という文字が含まれているかどうか調べる

以下のコマンドで調べることができます。

1
$find . -type f -exec grep hogehoge {}\;

こちらでも同じ結果を得られます。

1
$find . -type f |xargs grep "hogehoge"

どちらでもいいと思いますが、自分はよく後者を利用しますね。

Octpressで画像ファイルを扱う

Octpressで画像を扱う場合、どうすればよかったっけな?ってなりましたのでメモしておきます。

画像の格納ディレクトリ


画像の格納場所は、

1
~source/images

に格納すればよい

imagesディレクトリの配下にも、blogというディレクトリがあるのでブログ用の画像はそちらに格納すればよいっぽい。

Octpress公式の手順


公式の手順

以下の書式に従って記載すれば、いいらしい。

1
{\% img [class names] /path/to/image [width] [height] [title text [alt text]] \%}

そのため、画像サイズを640x480で表示させたい場合、以下のように書くことができます。

1
{\% img left /images/picture.png 640 480 \%}

コード上の「\」は不要です。(何故か、エスケープが正しく動作しなかった)

markdownを使用した方法


これは、前にも書いたように以下のようにすればよいでしょう。

1
[テスト画像](/images/picture.png "title")

但し、画像サイズは指定できないという欠点があります。
画像は、加工するしかないようですね。

htmlを直接記載する方法


以下のような感じで、htmlを使用した書き方もできるようです。

1
<img src="/images/picture.png" alt="alt" title="title" width="640" height="480">

注意する点があるとすれば、必ず前後に

タグが挿入されてしまうことです。
インラインで使用することは、できないっぽいです。

まとめ


個人的な見解は以下のような感じ

  • 基本はmarkdown記法で記載
  • 画像サイズを変更したい場合、Octpressの記法に従う
  • 汎用的にしたい場合、htmlで記載する
  • ブログ記事用の画像の場合、「souce/images/blog」の下に格納する
  • ブログ記事以外の画像の場合、「source/images」の下に格納する

Rubyで画像ファイルをダウンロードする

少しばかり、やることがあったのでやってみた。
煩悩丸出しですいませんw

HTTP Responseのbodyを利用する


直感的ではないけど、素直なやりかた

  1. 書き込みモードでファイルを開く
  2. urlで接続したbodyデータをファイルに書き込む
1
2
3
4
5
6
def save_file(url)
   filename = File.basename(url)
   open(filename, "wb") do  |file|
          file.puts Net::HTTP.get_response(URI.parse(url)).body
   end
end

open-uriを使用する方法


説明しやすいのでこっちのほうがわかりやすいかもしれない。

  1. 書き込みモードでファイルを開く
  2. 書き込みモードで開いたファイルに対して、urlで接続したデータを書き込む
1
2
3
4
5
6
7
8
def save_file(url)
    filename = File.basename(url)
    open(filename, 'wb') do |file|
        open(url) do |data|
            file.write(data.read)
      end
    end
end

真面目にやるなら、レスポンスコードもチェックしたほうがいいかもしれないですね

JavaのHashmapを使ったiteratorの実装

偶に忘れるのでメモしておきます。
iterationは忘れたらダメだと思いつつも、偶にアレなんだっけ?ってなります。

1
2
3
4
5
6
Map map = new HashMap();
for (Iterator it = map.entrySet().iterator(); it.hasNext();) {
    Map.Entry entry = (Map.Entry)it.next();
    Object key = entry.getKey();
    Object value = entry.getValue();
}

Javaを書かなくなると忘れてしまいますねw

Androidのソースコード検索サービスを構築してみる

色々経緯(長いような長くないようなもの)があるわけでして、構築してみることにしました。
とりあえず、aospのmasterで構築してみます。

環境


GNU Globalのバージョンは、なるべく新しいものを入れるようにします。。。
Ubuntuのapt-getでインストールもできますが、ソースコードを解析した結果が正しくgenerateされません。
6.2.8だと正しく解析できました。(公式もdebianで配布しているパッケージは古いと記載があったので、Ubuntuも同じ感じでしょう)

事前準備


事前準備として、以下を実施します。

  • GNU Globalのインストール
  • Apache2のインストール
  • Androidのソースコードをダウンロード
GNU Globalのインストール

前述のように、UbuntuのリポジトリにあるGNU Globalは古いのでソースコードの解析が正しく行われません。
そのため、ビルドしてインストールします。

  1. ソースコードの取得(ここからダウンロード)
  2. ビルド(ここではデフォルト設定で行います)
1
2
$./configure --prefix=/usr/local/global
$make
  1. インストール
1
$sudo make install

ビルドの際に付与するオプションはご自身で設定してください。

Apache2のインストール

普通にインストールします。

1
$sudo apt-get install apache2

UbuntuっていうかDebian系使いづらいなぁ・・・。

Androidのソースコード取得

(公式)[]にしたがって実施します。
今回は「/var/aosp」のディレクトリ配下に保存することとします。

コード解析(タグ作成)の実施


以下のコマンドで実行します

1
2
$cd /var/aosp
$gtags -v

タグのHtml化


以下のコマンドで実行します。

1
2
$cd /var/aosp
$htags -afsnDvo --title Android --item-order=s --show-position --fixed-guid --auto-completion

非常に長いオプションですが、ソースコード検索フォームのhtmlが生成されます。
検索に加えて、検索フォームの上で入力補完をできるようにしていますので、CGIの実行が必要です。

Apache2の設定


以下のコマンドでブラウザから参照可能なディレクトリを作成します。

1
$mkdir -p /var/www/aosp

コンテンツの配備を実施します。
特に意図はないですが、コピーだとめんどいのでシンボリックリンクにします。

1
2
$cd /var/www/aosp
$ln -s ../aosp/HTML HTML

/etc/apache2/sites-enable/defaultsを編集します。

1
2
3
4
5
6
7
8
ScriptAlias /cgi-bin/ /var/www/aosp/HTML
<Directory "</var/www/aosp/HTML/cgi-bin">
    AllowOverride None
    Options +ExecCGI
    AddHandler cgi-script .cgi .pl
    Order allow,deny
    Allow from all
</Directory>

編集完了後、apache2を再起動します。

1
$/etc/init.d/apache2 restart

ブラウザ上でhttp://localhost/aospにアクセスして、画面が表示されることを確認します。

感想


こういうサービスが、既に世の中にある訳で・・・

自分がやる必要ってあんまりないんじゃないかなーとか。。。

Emacsでmarkdown-modeを使用する

Emacsでmarkdown-modeを使用してみます。
markdownの編集で使えるモードで結構便利なので紹介してみます。

インストール


Emacsのパッケージインストーラからインストールをします。
以下を実行します。

1
M-x package-list-packages

markdown-modeを選択してインストールを実施します。

他にmarkdownコマンドが使用できるようにする必要がありますので、合わせてインストールします。
MacOSXだとHomebrewを使用すれば一発でインストール出来ます。

1
$brew install markdown

設定


  • markdown-modeを使用できるように「.emacs.d/init.el」に以下を追加
1
(autoload 'markdown-mode "markdown-mode.el" "Major mode for editing Markdown files" t)
  • markdown-modeで使用できる拡張子を追加
1
(setq auto-mode-alist (cons '("\\.markdown" . markdown-mode) auto-mode-alist))

上の設定では、.markdownと付くファイルは、markdown-modeを使用する設定です。
他に使用したいmarkdown-modeを使用したい拡張子があれば、同じようにして追加します。(下は.txtと付くファイルをmarkdown-modeで開きます)

1
(setq auto-mode-alist (cons '("\\.txt" . markdown-mode) auto-mode-alist))

エラー対処


プレビューを実行しようとすると、以下のようなエラーが発生します。

1
/bin/bash: markdown: command not found

原因は、以下の2点が考えられます。

  1. markdownコマンドがインストールされていない
  2. Emacsが認識しているパスと環境変数のパスが異なる

1に関しては、markdownコマンドをインストールをすれば解決します。
2に関してですが、以下のようにしてEmacs側にパスを通してやれば解決できます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
(dolist (dir (list
              "/sbin"
              "/usr/sbin"
              "/bin"
              "/usr/bin"
              "/opt/local/bin"
              "/sw/bin"
              "/usr/local/bin"
              (expand-file-name "~/bin")
              (expand-file-name "~/.emacs.d/bin")
              ))
 (when (and (file-exists-p dir) (not (member dir exec-path)))
   (setenv "PATH" (concat dir ":" (getenv "PATH")))
   (setq exec-path (append (list dir) exec-path))))

プレビュー


  • markdown-outputバッファでプレビューを確認する
1
C-c C-c m
  • ブラウザでプレビューを確認する(一時ファイルを作成します)
1
C-c C-c v

公式にその他の使用方法が掲載されていますので、その他の機能はそちらを参照してください。

ブラウザでプレビューしていて、かつOctpress用の記事を編集する場合、注意してください。

そのままデプロイするとhtmlファイルまでアップロードされてしまうので、2重投稿になるので気をつけてください。

Octpress始めました

旧ブログから移行しますよっと。

正直なところ、旧ブログは記事を書くのが大変でした。
マークダウン記法が使えるブログに移行したいなーと前から思ってたので、思い切って移行することにしました。
旧ブログの記事はおいおい引っ越すことにします。

という訳で、Octpressの使い方メモを書いておきます。(主に自分用ですがw)

インストール


公式サイトを見ながら実行します。
特に難しいことはないです。
強いて挙げるとすると、rubyのバージョンを1.9.3にしておくことでしょうか。
が、それもrbenv使用していれば問題無いでしょう。

テーマの変更


これは、結構めんどかったような記憶がしています。
といってもコマンド打つだけですがw

  1. ここからテーマの選択を行います。自分は、justin-kellyを選択しました。
  2. 以下のコマンドを実行します。
1
2
3
$ git clone git@github.com:wallace/justin-kelly-theme.git .themes/justin-kelly
$ rake install['justin-kelly']
$ rake generate

あ、ちなみにテーマ変更したら何か初期化されてしまって面倒なことになった覚えがあるので気を付けましょう。

ブログの設定変更


_config.ymlで行います。
公式に設定方法が書いてありますので、問題は無いでしょう。(多分)

記事の作成


投稿用のテンプレートを作成します。
指定する文字列はURLに使われるので、英数だけで指定します。

1
rake new_post['post title']

コマンドを実行すると、以下のような感じでテンプレートができます。

  • source/_posts/yyyy-MM-dd-post-title.markdown

テンプレートができるので、好きなエディタで編集します。
おすすめのエディタは、以下のものです。

  • Mou(リアルタイムでプレビューできます)
  • Emacs+markdown-mode(コマンドを実行すればプレビューできます)

※Emacsのmarkdown-modeはそのうち記事を書くつもりです。

記事の生成


以下のコマンドを実行して、htmlファイルを生成します。

1
rake generate

記事のプレビュー

以下のコマンドを実行してlocalhost:4000にアクセスします。

1
rake preview

エディタのプレビューで書きながら確認しつつ、記事投稿前の最終確認で使用するとよいと思います。
プレビュー状態だと、投稿してないですからね。

記事を投稿


以下のコマンドを実行して投稿(デプロイ)します。

1
rake deploy

投稿の削除


削除したい「source/_posts/yyyy-MM-dd-post-title.markdown」を削除します。
削除後、記事の生成を行なってから再度deployを実施します。
これで、表示するブログからは消えます。。。
ですが、githubにdeployしているのでgithub上では残ってしまいます。
なので、完全に削除したい場合は、デプロイしたコミットログも削除しましょう。
(そこまでひどいものを書くほうが問題だと思いますが)

まとめ


意外と簡単に導入できるので、おすすめです。
マークダウン記法が使えて楽に書けるところもいいですね。(bloggerが書きにくすぎるのが問題だと思うのですけど)

Octopressのサイドバーにタグクラウドを表示する

Octpressのデフォルト設定では、タグクラウドがありません。
ですが、pluginを組み込むことで、タグクラウドを実現することができます。
無かったら困るというほどでもないけれど、あったほうが何かと便利なので自分のブログに組み込んでみます。

プラグインの組み込み


手順は以下の順序で行なっていきます。

  1. Githubからプラグインをダウンロード $git clone git://github.com/tokkonopapa/octopress-tagcloud.git
  2. ダウンロードしたファイルをpluginディレクトリと_asidesディレクトリにコピー $cp plugins/tag_cloud.rb ~/Projects/rails/fakestarbaby.github.com/plugins/tag_cloud.rb $cp source/_includes/custom/asides/* ~/Projects/rails/fakestarbaby.github.com/source/_includes/custom/asides/
  3. _config.ymlを編集 default_asides: [custom/asides/about.html, asides/recent_posts.html, custom/asides/tag_cloud.html, asides/github.html, asides/twitter.html, asides/delicious.html, asides/pinboard.html, asides/googleplus.html]

これだけ

タグクラウドを表示するHTMLファイルの変更


必要に応じて編集します。
以下のファイルに記載されているcounter:trueをcounter:falseに変更することでタグ件数を非表示にできます。
デフォルトは表示する設定になっています。(デフォルト設定のままでよいと思いますが・・・)

  • source/_includes/custom/asides/category_list.html
  • source/_includes/custom/asides/tag_cloud.html

参考サイト


作者の導入手順記事
Quiitaの記事

Octopressもいいけど、Quiitaをブログ代わりにするのもいいかも。
悩ましいなぁ。。。

Markdown記法のメモ

今までBloggerでブログを書いていました。
どうにも書きづらいところも出てきたので移行しようかどうしようか検討しています。
移行の検討材料として、以下があります。

  • コードが貼り付けやすい
  • 記事のストックができる
  • 記事が書きやすい
  • バージョン管理までとは行かなくても手元に記事を残せる(もしくは復元も容易)

今回は、移行するにあたって記法の基礎から書いてみます。

改行


改行したい文字の後ろに空文字(空白)を2つ挿入

強調


こんな感じで強調できます。

**こんな感じで書けば強調できます。**

見出し


今まで表示しているような見出しは以下のような感じで表示します。

  • # h1タグの見出し
  • #### h4タグの見出し
  • ###### h6タグの見出し

リスト


リストを表現する際の注意事項は、「リストの上下に空行をいれる」です。
上下に空行を入れない場合、リストとして認識されません。(期待している表示にならず残念な表示になります)
wikiのような感じでレベルの表現もできないことも注意すること。

順序付きのリスト

以下のような数字付きのリストを表示したい場合、「数字.」を先頭につければ表示できます。

  1. これは「1.」を先頭につけてます
  2. これは「2.」を先頭につけてます
順序なしのリスト

要点を書く際の順序なしリストを表示したい場合、「+」「*」「-」を先頭につければ表示できます。

  • これは「+」を先頭につけてます
  • これは「*」を先頭につけてます
  • これは「-」を先頭につけてます

段落


段落は、行と行の間に空行を入れれば自動的に段落が分けられる。

水平線


水平線は以下のいずれかで表示できます。
* *
*
*
*
- - -
—————————————

引用


引用は「>」をつけると、引用表示できます。
引用は以下のように組み合わせて使用することもできます。

  • 引用とリストの組み合わせて表示してます

リンク


以下の形式で表現します。

  • [リンクのテキスト](リンクのアドレス “リンクのタイトル”)
  • [リンクのテキスト](リンクのアドレス)

コード


コードは以下のような感じで表現します。
(グレイブアクセントを使用する)

1
p 'Hello!!'

上記は以下のように記載しています。

“`
p ‘Hello!!’
“`

画像


[画像の代替テキスト](画像のアドレス) という感じで記載します。
リンクと同じ方法ですね。

その他


エスケープ

markdownの先頭に「\」(バックスラッシュ)を追加すれば、エスケープできます。

インラインHTML

以下のようにしてインラインHTMLを書くこともできます。

1
2
3
4
5
<table>
 <tr>
  <td>表</td>
 </tr>
</table>
テーブル

残念ながらマークダウン記法では使用できません。
ですが、octpressでは使用することができます。
こちらのサイトを参考にさせて頂きました。

  • 以下のようなCSSファイルを作成します。(値は適宜調整してください)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
* + table {
    border-style:solid;
    border-width:1px;
    border-color:#e7e3e7;
    margin: 10px 0 30px 0;
}

* + table th, * + table td {
    border-style:dashed;
    border-width:1px;
    border-color:#8888AA;
}

* + table th {
    border-top:    1px #666688 solid;
    border-bottom: 2px #666688 solid;
    font-weight:bold;
    background-color: #C0C0C0;
    padding: 2px 9px;
}

* + table td {
    border-bottom: 1px #666688 solid;
    background-color: #F0F0F0;
    padding: 0 10px;
}

* + table th[align="left"], * + table td[align="left"] {
    text-align:left;
}

* + table th[align="right"], * + table td[align="right"] {
    text-align:right;
}

* + table th[align="center"], * + table td[align="center"] {
    text-align:center;
}
  • CSSを読み込むように「source/_includes/head.html」を編集します。
1
<link href="/stylesheets/table.css" rel="stylesheet" type="text/css">
  • 記述方法は以下のようにします
1
2
3
4
5
6
7
8
| Left align | Right align | Center align |
|:-----------|------------:|:------------:|
| This       |        This |     This     |
| column     |      column |    column    |
| will       |        will |     will     |
| be         |          be |      be      |
| left       |       right |    center    |
| aligned    |     aligned |   aligned    |

こんな感じで表示されます。 リスト同じく上下に空行は必須です。

Left align Right align Center align
This This This
column column column
will will will
be be be
left right center
aligned aligned aligned

とまぁ、こんなにあるけど覚えることが少ないので慣れればこちらのほうがいいかもしれないですね。