Hatena::ブログ(Diary)

<ヘプタポッドB> RSSフィード

2011-12-10

vimで自動バルス

日本人は暇だよな。

気象庁は9日午後4時、緊急の記者会見を行い、日本全域に大バルス警報を発令した。大バルス警報の発令は2009年11月20日以来約2年ぶり。警報発令を受け、野田佳彦首相は午後4時30分、官邸内に自らを本部長とするバルス緊急対策本部を立ち上げた。

気象庁、日本全域に大バルス警報発令 2年ぶり

…自動投稿?

f:id:hilolih:20111210093542p:image

http://twitter.com/#!/hilolih/status/144995013334548480

twitvimをつかうことに

TwitVim - Twitter client for Vim : vim online

vim上から呟くpluginだけど、直接ポストするコマンドが見つからなかったため追加した。また、さくらインターネットのcron環境ではcurlを見つけられなかったので、絶対パスに変更して、無理やり実行できるようにした

hirorih@www1086:~/.vim/plugin$ diff -c twitvim.vim.bak twitvim.vim
*** twitvim.vim.bak     2011-12-09 19:20:22.000000000 +0900
--- twitvim.vim 2011-12-09 21:40:41.000000000 +0900
***************
*** 1048,1054 ****
      let error = ""
      let output = ""

!     let curlcmd = "curl -s -S "

      if s:get_twitvim_cert_insecure()
        let curlcmd .= "-k "
--- 1048,1054 ----
      let error = ""
      let output = ""

!     let curlcmd = "/usr/local/bin/curl -s -S "

      if s:get_twitvim_cert_insecure()
        let curlcmd .= "-k "
***************
*** 2180,2185 ****
--- 2180,2190 ----
      echo 'Tweet' (a:unfave ? 'unfavorited.' : 'favorited.')
  endfunction

+ " Shell user for tweet. ( vim -c SPosttoTwitter hogehoge )
+ if !exists(":SPosttoTwitter")
+     command -nargs=+ SPosttoTwitter :call <SID>post_twitter(<f-args>, 0)
+ endif
+
  " Prompt user for tweet.
  if !exists(":PosttoTwitter")
      command PosttoTwitter :call <SID>CmdLine_Twitter('', 0)

これをcronで実行してやりますよっと。

hirorih@www1086:~$ crontab -l
LD_LIBRARY_PATH=/home/hirorih/local/lib
21      23      9       12      *       $HOME/local/bin/vim -S $HOME/barusu.vim

barusu.vim

set fileencoding=utf-8
SPosttoTwitter バルス\ #laputa
q!

結果は…?

f:id:hilolih:20111210101448p:image

2回目は手動。やっぱりきつかった。これ以上の精度を求めるには、どんな方法があるかな。来たる数年後のバルスまでに対策を練らないと。

2011-12-03

LOCAL DEVELOPER DAY ’11/infra に参加してきた

…試食会かなんか?

f:id:hilolih:20111204004928j:image

f:id:hilolih:20111204004958j:image

LOCALでは毎年複数回、LOCAL DEVELOPER DAYというコミュニティ横断型のイベントを開催しております。

今回「LOCAL DEVELOPER DAY ’11/infra」と題して、「LOCALインフラ部」と「北海道情報セキュリティ勉強会」の合同で、 ネットワークやセキュリティといったインフラ系技術に特化したイベントを企画しました。このイベントを通して、インフラ系技術者の交流が活発化し、北海道の技術者文化が更に醸成されればと考えております。

LOCAL DEVELOPER DAY ’11/infra | LOCAL

とっても真面目で、アツい人たちが集まった見ておいしい食べておいしい勉強会。自分は今回初めてで、しかもネットワークやセキュリティもドがつくほどの素人。引っ込み思案な性格も相まって、後ろのほうでじっとしていた。

そういう勉強会だけあって、参加者のほとんどがYAMAHAルータの使用経験者というのがびっくり。ルータをCUIで設定するなんて、すげーなーやってみてーなーって感心しきり。会社ではそういう立場にはないし、…C社のルータだし。ところでデモで行っていた、ルータのWEB設定画面でネットワークのトポロジー図を表示する、なんて便利機能はC社のにもあるのかね。今度聞いてみよう。

ところでYAMAHAの平野さんの話を聞いて、俄然家にYAMAHAルータが欲しくなった。NVR500という家庭用のルータで約3万円かぁ、手が届かないわけではないけど、ちょっとつらい。何よりルータで3万円は嫁の承認が得られない。というわけで、当面はvmにvyattaを入れて勉強してみようと思う。小岩さんのるびま見ていろいろと勉強させてもらおう。

ネットワークちょっと本腰入れて勉強してみようかなーと思わせてくれる良い勉強会でした!来年もでるぞーっと。

2011-11-22 DialogPreferenceの拡張について

[]DialogPreferenceの拡張について

PreferenceActivityでユーザー、パスワードを一緒に表示したかった。調べてみると、どうやらDialogPrefrenceをextendしなくてはならないらしいのだが、見事にはまった。

f:id:hilolih:20111123000216p:image:medium

DialogPrefrence内でのonCreateDialogViewの定義が

protected View onCreateDialogView() {
   if (mDialogLayoutResId == 0) {
       return null;
   }
      
    LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(
        Context.LAYOUT_INFLATER_SERVICE);
    return inflater.inflate(mDialogLayoutResId, null);
}

…こうなっているのだから、inflater渡せばいいじゃん。すごい単純なことなのだが、他の人がブログで紹介しているのを見ると、直接EditTextなんかを渡していたりしていた。これだと、一回目の呼び出しは上手くいくが、二回目は" You must call removeView() on the child's parent first."なんていう例外を吐いて落ちる。

ちゃんとViewをxmlに記述してinflaterに渡してやることが必要だった。以下、overrideしたメソッド。

protected View onCreateDialogView() {
	// TODO Auto-generated method stub
	sharedpreference = PreferenceManager.getDefaultSharedPreferences(mContext);
	LayoutInflater layoutInflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
	View v = layoutInflater.inflate(R.layout.my_dialog_inflate, null);
	user = (EditText) v.findViewById(R.id.user);
	pass = (EditText) v.findViewById(R.id.pass);
	user.setText( sharedpreference.getString("USER", ""));
	pass.setText( sharedpreference.getString("PASS", "" ));
	return v;
}