getopts sample

Webからもらったコードを少しだけカスタマイズ。徐々に強化していく予定。

#!/bin/bash

CMDNAME=`basename $0`

usage() {
    echo "Usage: $CMDNAME [-f format] [-m macro] [file]" 1>&2
}

# check the number of parameters
if [ $# -lt 2 ]; then
    usage
    exit 1
fi

# check options
while getopts f:m: OPT
do
  case $OPT in
    "f" ) FLG_F="TRUE" ; VALUE_F="$OPTARG" ;;
    "m" ) FLG_M="TRUE" ; VALUE_M="$OPTARG" ;;
      * ) usage
          exit 1 ;;
  esac
done

# skip options
shift `expr $OPTIND - 1`

# main 
if [ "$FLG_F" = "TRUE" ]; then
  echo "値は $VALUE_F です。"
fi

if [ "$FLG_M" = "TRUE" ]; then
  echo "値は $VALUE_M です。"
fi

echo "引数に $1 が指定されました。"

exit 0

The Goal

ザ・ゴール ― 企業の究極の目的とは何か

ザ・ゴール ― 企業の究極の目的とは何か

この本すごいです。納期遅延でダメダメだった工場が、
生まれ変わって行くサクセスストーリーなんですが、
ゴールドラット博士の提唱する TOC(Theory of Constraints) という理論に
基づいており、実践すれば本当に効果があるようです。
トヨタの看板方式などとの位置づけが分かっていませんが、
読み物としても面白いのでぜひお勧めです。

案本

大変、勉強になりました。何をするにも経験量が絶対必須ですが、
それを補うために脳内経験を蓄積することができる、というのは
とても大切なことだと思いました。
* 脳内経験
* 経験量の増加によって、主観の妥当性を高められる
* 脳内アングル、脳内ツリーというツール

バカでも年収1000万

バカでも年収1000万円

バカでも年収1000万円

とても勉強になった。今日から6大奥義を使います!
* 成功の糸を捕まえて、100% 全力で実行する。
* 超速行動
* 逆さまの法則

20代じゃない僕が読む本

20代で人生の年収は9割決まる

20代で人生の年収は9割決まる

もう数年早く出会いたかった本。
* 仕事は欲しい結果でえらぶ
* 会社の評価と市場価値のずれ
* マネジメントは避けられない

20歳のときに知っておきたかったこと

20歳のときに知っておきたかったこと スタンフォード大学集中講義

20歳のときに知っておきたかったこと スタンフォード大学集中講義

  • 作者: ティナ・シーリグ,Tina Seelig,高遠裕子
  • 出版社/メーカー: CCCメディアハウス
  • 発売日: 2010/03/10
  • メディア: ハードカバー
  • 購入: 475人 クリック: 17,353回
  • この商品を含むブログ (395件) を見る

本当に知っておけば良かったと思える本。

  • やりたいことを一番邪魔しているのは自分自身だ
  • 何度も失敗せよ
  • キャリアは常に最適化が必要

スタンフォードのDスクールを受講してみたい。

org-export-hatena の改造

org-mode で書いた文章をはてなダイアリー形式にするための elisp
org-export-hatena として 公開] されています。これをベースに、
未サポートの文法を追加してみました。ありがとうございます > r_takaishiさん!

私が使う文法でブログで足りていないとしたら、まずはリンクですね。
というわけで、リンクの変換を追加したものが以下です。

;;; hatena.el ---

;;; for hatena export to diary
(defvar org-export-hatena-notation-section
  '("^\\* \\([^\t\n\r\f]*\\)\n\\[.*$" "* \\1"))
(defvar org-export-hatena-notation-subsection
  '("^\\*\\* \\([^\t\n\r\f]*\\)$" "** \\1"))
(defvar org-export-hatena-notation-subsubsection
  '("^\\*\\*\\* \\([^\t\n\r\f]*\\)$" "*** \\1"))
(defvar org-export-hatena-notation-link     
  '("\\[\\[\\(.*\\)\\]\\[\\(.*\\)\\]" "[\\1:title=\\2]"))   ; 追加
(defvar org-export-hatena-notation-quote
  '("[ ]*#\\+BEGIN_QUOTE[ \t]*" ">>" "[ ]*#\\+END_QUOTE" "<<"))
(defvar org-export-hatena-notation-super-pre
  '("[ ]*#\\+BEGIN_EXAMPLE[ \t]*" ">||" "[ ]*#\\+END_EXAMPLE" "||<"))
(defvar org-export-hatena-notation-src
  '("[ ]*#\\+BEGIN_SRC[ \t]*\\([^\t\n\r\f]*\\)" ">|\\1|" "[ ]*#\\+END_SRC" "||<"))
(defvar org-export-hatena-temp-buffer-name "*Org Hatena Export*")

(defun org-export-hatena-section (notation)
  ;; buffer で取り得る最小の位置に移動する
  (goto-char (point-min))
  ;; notation[0] に match しなかったら停止する、をバッファの終わりまで繰り返す。
  ;; match しなかった場合は nil を返す
  (while (re-search-forward (nth 0 notation) nil t)
    (replace-match (nth 1 notation))))  ; 最後の検索結果を notation[1] で置換する

;;; org-export-hatena-section を2回実行する関数
;; 一回目は、notation[0] -->  notaition[1]
;; 二回目は、notation[2] -->  notaition[3]
(defun org-export-hatena-begin-to-end (notation)
  (goto-char (point-min))
  (while (re-search-forward (nth 0 notation) nil t)
    (replace-match (nth 1 notation)))
  (goto-char (point-min))
  (while (re-search-forward (nth 2 notation) nil t)
    (replace-match (nth 3 notation))))

;;; 
(defun org-export-hatena (beg end)
  (interactive "r")                     ; Region
  (let ((diary (buffer-substring beg end))                     ; local var1
        (begin-to-end `(,org-export-hatena-notation-quote
                        ,org-export-hatena-notation-super-pre
                        ,org-export-hatena-notation-src))      ; local var2
        (section `(,org-export-hatena-notation-section
                   ,org-export-hatena-notation-subsection
                   ,org-export-hatena-notation-subsubsection
                   ,org-export-hatena-notation-link            ; 追加
                   )) ; local var3
        (buffer (get-buffer-create      ;  create buffer
                 (generate-new-buffer-name
                  org-export-hatena-temp-buffer-name))))       ; local var4
    (set-buffer buffer)                                        ; make buffer
    (insert diary)                                             ; point に引数を追加
    (mapc (function org-export-hatena-begin-to-end) begin-to-end)
    (mapc (function org-export-hatena-section) section)
    (switch-to-buffer-other-window buffer)))

(provide 'hatena)
;;; hatena.el ends here  

正規表現は、もちろん、M-x re-builder で作成しました。
知らない関数は、F1-f で検索することも覚えました。
後は、いろいろと追加するだけですね。

これで、org-mode で日記を付けて、org-export-hatena で
はてな形式に変換し、それをカットしてはてなに貼付けるだけ良くなりました。
らくちんだー。

大部、elisp のソースが理解できるようになってきました。