2013年03月29日

つぶやき専用コマンド tweet-command を試してみた

Terminal.app から気軽に一方的につぶやきたいなあと思って そういうのができるようなのがどこか転がってないかなあって探してたら tweet-command という物を見付けたのでそれを試してみた。

まず、このtweet-commandというものがRuby製のコマンドなので Ruby1.9.3または2.0.0が動く環境でも用意しておいてね。

麦汁さんはrbenv+ruby-buildな環境で2.0.0-p0をインスコして

$ rbenv global 2.0.0-p0

とかしてる。

嘘ついてた。2.0.0じゃなかった……。 rvmの1.9.3使ってた……。 rbenvの2.0.0だとSSLエラーになってる。

それから適当なディレクトリにtweet-commandをgithubからcloneしてくる。 hubコマンドを入れてあれば

$ hub clone tomoari/tweet-command

でOKだしgitコマンドさえあれば

$ git clone git://github.com/tomoari/tweet-command.git

でいける。けどhubコマンドのが楽よね。

それからこのリポジトリのREADMEのインストール手順にも書いてるように 適当にPATHの通ってるところにsym linkを張る。

$ ln -s ~/path/to/tweet-command/tweet.rb ~/bin/tweet

ちなみにREADMEには 「Ruby (1.9.3 での動作しか確認していませんが、1.8.7でも動くかもしれません)」 と書いてますが force_encoding とか使ってるので1.8.7では怒られます。 怒られたから2.0.0使ってる。

で、認証通しておくために一度

$ tweet

しておく。

すると認証用のURLが出て来るのでそれをWebブラウザのアドレス欄にコピペして ユーザ名、パスワードを放り込んで承認したら PINコードが表示されるのでそれを元のTerminalに入力。 それが済んだら ~/.tweet に認証情報が放り込まれる。

そこでおもむろに

echo 'オンドゥルラギッタンディスカー!' | tweet

みたいに標準入力をパイプで渡してあげればつぶやいてくれる感じ。 お手軽!

ただこれTwitter API 1.1用ではないのよね。 恐らくURLのバージョン番号を書き換えるだけでいけると思うから 誰かforkして対応してね(はぁと)

タグ:twitter
posted by 麦汁 at 22:54 | Comment(0) | TrackBack(0) | その他 | このブログの読者になる | 更新情報をチェックする

2013年03月03日

youtube-dlを拡張したら男の子達が幸せになれるかもしれないと思ったので

みんな大好きyoutube-dl。 コマンドラインから使えて素敵なこいつ。 名前とは裏腹にいくつかの動画サイトに対応していて素晴らしい。

素敵すぎるので、このサイトのエントリにも何度か登場している。

やたー。emacs-w3mでリンク先のyoutubeの動画をmplayerを使ってストリーミング再生できたよー とか 仕事中にこっそりあれな動画を楽しむ苦肉の策 とかね。

だけど、足りない。 最も有名なあいつは押さえているけど、 男の子が大好きな類のサイトへの対応が全然足りない!!

ってことでハムスターちゃんとか赤いあれとかあれなHostに対応してみました。

具体的なサイト名が知りたい方はgit cloneでもしてから

% PATH/youtube-dl --list-extractors

でもしてくださいな。generalの上あたりに集中して置いてある。

と。これだけでもつまらんので対応サイトを増やす方法書いておく。

まずこいつはInfoExtractors.pyってファイルの中で InfoExtractorクラス及び それを継承した各サイト用の子クラス(FacebookIEなど)を持っている。

なので適当にコピペ(ひどい)して 対応したいサイト用の子クラスを適当に作る。 自分はXVideosIEクラスからコピペした。男の子だもの。

で、とりあえずクラス名と_VALID_URLとIE_NAMEをそれぞれ適当に書き換える。 動画IDを後程使うのでそれをグループ化でうまく取れるように_VALID_URLの正規表現は書いてね!

今回クラス名はHogeIEってことにしますね。(後で使う)

そんで、他にどこをいじるかを説明する前に そのクラスにある_real_extractメソッドのケツを見てもらうと、 infoとかいう連想配列らしきもの(Pythonではディクショナリでしたっけ?)があって それをreturnしてますよね。

その中で

  • video_id
  • video_url
  • video_title
  • video_thumbnail

という変数を使ってる。 つまりこいつらの情報をWebページから拾えればいいわけですよ。

video_id は、このメソッドの頭で_VALID_URLを使って拾っているわけですよ。

video_title はHTMLのタイトル要素から適当に正規表現で拾ってくるわけですよ。

video_urlとvideo_thumbnailはもうHTMLソースの中からそれっぽいのを探してきて それっぽい正規表現を書くことになるわけですよ。

まあflashvarsっていう文字列見付けてきたら その前後でjpgとかflvとかそういう文字列を探せばどうにかなるはずだ頑張ろう。

んで、実はこれだけじゃあ足りなくて 上記ファイルの最後にある gen_extractorsメソッドの中にある配列っぽいやつの中で 自分が定義したやつを追加しておかないといけない。

まあ、適当に

GenericIE()

とか書いている行の上あたりにでも

HogeIE(),

とでも書けば幸せになれるはず。

以上で簡単なところは対応できるので 後はmakeしてyoutube-dlを適当にPATHが通ってるところに放り込めば ムスコも泣いて大喜び。

というわけでまだ対応されてないけど有用だというところに対応して 僕にも対応版使わせてくださいね!

タグ:youtube-dl Python
posted by 麦汁 at 02:03 | Comment(0) | TrackBack(0) | その他 | このブログの読者になる | 更新情報をチェックする

2013年02月23日

最近の麦汁さんのPHPのためのEmacsの設定

最近PHPやってます。 前にもやってたけど当時はほとんどコード書いてなかったので がっつりPHPのコードを書いているのは今年に入ってからになりますね。

そんな2ヶ月未満なPHP初心者のEmacs設定晒します><

PHP関係設定

php-mode-improved

まず使っているモードはphp-mode-improved。 こいつは適当にel-get-installしたら入ってくる。

で、

(add-to-list 'auto-mode-alist '("\\.php$" . php-mode))

とでもしておけばphpなファイルを開いた時にphp-modeになってくれると。

インデント

で、最近はタブ4なインデントを使ってるとかで今は

(add-hook 'php-mode-hook
          (lambda ()
            (defun ywb-php-lineup-arglist-intro (langelem)
              (save-excursion
                (goto-char (cdr langelem))
                (vector (+ (current-column) c-basic-offset))))
            (defun ywb-php-lineup-arglist-close (langelem)
              (save-excursion
                (goto-char (cdr langelem))
                (vector (current-column))))
            (c-set-style "stroustrup")    ; インデントは4文字分基本スタイル
            (c-set-offset 'arglist-intro 'ywb-php-lineup-arglist-intro) ; 配列のインデント関係
            (c-set-offset 'arglist-close 'ywb-php-lineup-arglist-close) ; 配列のインデント関係
            (c-set-offset 'arglist-cont-nonempty' 4) ; 配列のインデント関係
            (c-set-offset 'case-label' 4) ; case はインデントする
            (make-local-variable 'tab-width)
            (make-local-variable 'indent-tabs-mode)
            (setq tab-width 4)
            (setq indent-tabs-mode t)))   ; インデントにタブを使う

こんな感じ。

普通は

(setq php-mode-force-pear t)

とでもしてpear規約を守る方向がいいと思います。 最近はPSRとかもあるけど。

みんな大好きflymake

リアルタイムに文法チェックぐらいしたいよね。 そんな貴方にflymake。 Emacsに同梱されているのであとはphp用に設定を追加したらいい。 ってことでこんな感じ。

;; flymake
(defun flymake-php-init ()
  (let* ((temp-file (flymake-init-create-temp-buffer-copy
                     'flymake-create-temp-inplace))
         (local-file (file-relative-name
                      temp-file
                      (file-name-directory buffer-file-name))))
    (list "php" (list "-l" local-file))))
(push '(".+\\.php$" flymake-php-init) flymake-allowed-file-name-masks)
(push '("(Parse|Fatal) error: (.*) in (.*) on line ([0-9]+)" 3 4 nil 2) flymake-err-line-patterns)

(add-hook 'php-mode-hook (flymake-mode t))

補完系

それから補完とか欲しいよね。 じゃあ el-get-install で php-comoletion でも入れようか。

(add-hook 'php-mode-hook
          (lambda ()
            (require 'php-completion)
            (php-completion-mode t)
            (define-key php-mode-map (kbd "C-o") 'phpcmp-complete))) ;php-completionの補完実行キーバインドの設定

C-o とか書いているけど実は使ってない。 むしろphp-completionは みんな大好きauto-completeのために使っている。

ってことで

(add-hook 'php-mode-hook
          (lambda ()
            (make-local-variable 'ac-sources)
            (setq ac-sources '(
                               ac-source-words-in-same-mode-buffers
                               ac-source-php-completion
                               ac-source-filename
                               ac-source-etags
                               ))))

ac-source-etagsとかするために el-get-install で auto-complete-etags を入れてたりする。

ともかくこれで

  • 他に開いているバッファ
  • php-completion
  • ファイル名
  • etags

から自動補完の候補を作ってくれる。

etagsは今のところ、プロジェクトのディレクトリで手動で

$ ctags -e **/*.php --exclude=.git

とかして吐いている。

この状態で適当にphpファイルを開いて適当に編集すると 自動補完するためのTAGファイルの場所を聞いてきたりので指定する。 Emacs立ち上げ直してPHPファイルをいじる度に聞かれるのはうざいけど まあ立ち上げたら基本的に終了させないので気にしないことにした。

自動改行

セミコロン入力してから改行するのってだるいよね! セミコロン入れたら改行でいいよね! とかそんな感じの設定

;; セミコロンとかで自動的に改行する
;; パクリ元 http://insnvlovn.blogspot.jp/2010/04/emacs-php-mode.html
(add-hook 'php-mode-hook
          (lambda ()
            (c-toggle-auto-hungry-state t)
            (setq c-hanging-braces-alist
                  '(
                    (class-open nil)
                    (class-close nil)
                    (defun-open before after)
                    (defun-close nil)
                    (inline-open nil)
                    (inline-close nil)
                    (brace-list-open nil)
                    (brace-list-close nil)
                    (block-open nil)
                    (block-close nil)
                    (substatement-open before after)
                    (statement-case-open before after)
                    (extern-lang-open nil)
                    (extern-lang-close nil)
                    ))))

マニュアルを開くために

eldocを入れてるとマニュアルを読むのに便利。

(add-hook 'php-mode-hook
          (lambda ()
            (setq php-doc-directory "~/Documents/php-chunked-xhtml")
            (require 'tree-mode)
            (require 'windata)
            (require 'help-dwim)
            (require 'php-doc nil t)
            (local-set-key (kbd "\C-c h") 'php-doc)
            (set (make-local-variable 'eldoc-documentation-function)
                 'php-doc-eldoc-function)
            (eldoc-mode 1)))

requireしているのは多分 el-get-install とかで入れる必要がある。

こんな感じにしておくと C-c h した時にマニュアルをブラウザ(自分の設定だとemacs-w3m)で見れたり、 あとは関数を適当に書いたらその引数なんかの情報がミニバッファに現れたり、 M-x php-doc-tree とかするとドキュメントツリーが見れたりする。 今の今まで気付いてなくて使ったことないけど。

context-skk

ddskk使いのプログラマなら当然context-skk-modeは使ってるよね。 使ってない君は今すぐ

(require 'context-skk)

しよう。 いちいちコードを書く時に日本語入力をOFFにする煩わしさから開放されるぞ!

で、これだけを設定しても実はphpには利かなかったりするので

(add-to-list 'context-skk-programming-mode 'php-mode)

しておこう。

PHPはあんまり関係ない系

上で書いたことはphp-modeで動くようにした感じのものだけども それ以外にもいろいろ便利なのがあるのでそれも書いとく。

magit

最近なら当然リポジトリはGitだよね。 いやmercurialでもいいんですけど僕はGit派です。 そしてgit-svnする派です。 ならば当然これ使うよねって感じのがmagit

https://github.com/magit/magit

今のところ設定はこんな感じ

(require 'magit)
(require 'magit-svn)
(setq magit-diff-options '("-w" "-b"))

実はそんなに使いこなしていない。てへっ。

edbi

EmacsからDBをいじるのに使うやつ

https://github.com/kiwanami/emacs-edbi

PerlでCPANからほげほげしたりなどで 導入の敷居が若干高いけど大分おいしいツール。

今のところ設定はこれだけ

(require 'edbi)
(autoload 'e2wm:dp-edbi "e2wm-edbi" nil t) ; e2wmとの連携

これ単品より後述のe2wmから利用するとすっごいおいしい。

e2wm

こいつはEmacsをIDEっぽくするやつ

https://github.com/kiwanami/emacs-window-manager

こいつもel-getで手に入るから適当に放り込もう。

今のところ設定は

(require 'e2wm)
(global-set-key (kbd "M-+") 'e2wm:start-management)
(e2wm:add-keymap
 e2wm:pst-minor-mode-keymap
 '(("prefix 9" . e2wm:dp-edbi)
   ) e2wm:prefix-key)

(require 'e2wm-vcs)

;; C-c ; m に magit パースペクティブ変更を割り当て
(e2wm:add-keymap
 e2wm:pst-minor-mode-keymap
 '(("prefix m" . e2wm:dp-magit))
 e2wm:prefix-key)

こんな程度で過ごしている。

C-c ; 9 でedbiなパースペクティブが表示されるようにしている。 うまく繋がると画面左にDBのテーブル一覧、 画面上にSQL入力するところ、 画面下の広いところにテーブル内容とかそういうのが表示されるようになっておいしい。

magit用パースペクティブも導入してるのでコミットする時も快適。 差分見て「うわ、デバッグ文残ってるじゃん恥ずかし!」 ということで修正して保存した瞬間magitに戻るあたりかなりおいしい。便利。

実はne2wmという拡張もあるけどそこまで手を出し切れてない感じ。

という感じで過ごしていますです。 足りてない設定もいっぱいあるのでそれはまた今度いじろう。

タグ:Emacs PHP 開発
posted by 麦汁 at 00:06 | Comment(0) | TrackBack(0) | emacs | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。