雑記帳

ちょっとした文章とかメモ書きとか。

カテゴリーアーカイブ: mikutter

MikutterInstallBattle with nokogiri 1.6.5 at develop branch

#mikutterinstallbattle with nokogiri 1.6.5

Homebrewでlibxml2を入れている場合は、OS Xのライブラリと競合しないようにkeg-onlyフラグが付けられている。

これは、Cellarには入れるが、system wideに参照する事ができない状態にしてインストールするという意味。

それを参照するには以下の記述をbashrcなどに加えれば良い。

export PKG_CONFIG_PATH=/usr/local/opt/libffi/lib/pkgconfig:/usr/local/opt/libxml2/lib/pkgconfig:$PKG_CONFIG_PATH

libffiは要らないかも知れない。

おしまい。

広告

mikutter無しな*nix環境なんてあんまりだ

この記事はmikutter Advent Calender 21日目の記事です。

タイトルは若干誇張気味です。
Linuxや*BSDを入れたらTwitterをしたくなった時にツイッタークライアントは何を使いますか?
僕はmikutterを使います。いや、使わせてください。

ですが、mikutterはRuby製でしかもruby-gtk2への依存も有るわけです。ちょっと手軽に使うには依存が多過ぎます。

何かもっとこう、サクッとインストールしたいと思うわけです。

そこでChefですよ

Chefとは最近Chef社に社名変更したChef社が作っている(DevOpsと最近呼ばれるようになった)インフラ構築自動化フレームワークです。

え?自動化しても嬉しくない??いやいや、嬉しいことはあります。
sshログイン出来る環境だったらknife-soloによりsshして調理するだけでそのマシンにmikutterが!

他には、Vagrantとの連携が考えられます。
Vagrantは各所で語られてきているので省略するとして、なぜ自動化すると嬉しいかもうひとつの回答を示しましょう。

それは・・・

vagrant upしただけでcookbookのレシピが導入済みの環境が気軽に手に入るわけです。すばらしいですね。夢のような話です。

が、

今回はそこまで到達しませんでした。無念。。。

mikutterのcookbook

そうして出来上がってしまったmikutterのcookbook。ただし、かなり手抜きなのでておくれgitリポジトリからcloneしてくるcookbookになっています。。。
cookbookがちゃんとした形式に沿っているかは食の批評家に判断してもらいましょう。
はい、foodcriticの出番です。

批評するタイミングはgithubにプッシュしたタイミングで行なって欲しいですね。Travis CIまで動員してみましょう。
動員するには.travis.ymlをGithubのリポジトリに作成した後、Travis CIのアクセスをONにします。(詳しい説明は省きます)

そうすると批評家が自動で批評してくれるわけですね。

mikutterをインストールするcookbookはこちらです。

(実はvagrant+berkself用に書いたものなんですが…。)

これで新たに環境をセットアップした時にすぐにmikutterの環境が手に入ります。詳しいcookbookのカスタマイズの仕方はREADMEを見て下さい。

え?ておくれ要素が無いのでは、って?

*nix環境にmikutterがインストールされて無いなんてあんまりだ、なんて言っている時点でておくれです。

第九回Kernel/VM探検隊でLTをしました

時間が経ってしまいましたが、Kernel/VM探検隊でLTをしました。

mikutterを使っていたらひょんな事でコミット権を得てしまい、
歴史を感じるコードに右往左往した記録(?)です。

今はTravis CIのVM imageが新しくなっているかも知れないのでGreenになっているかどうか怪しげですが
typoをスナイプしたコミットをしたらGreenでした。
過去600回以上もの間Travis CIがFailureと言い続けていたのをGreenにする作業に(全部ではないですが)貢献できたのは良かったなぁと。

LTではあまり詳しく話せなかったのでどんな事をしてたかはスライド中のリンクを辿るなりして眺めてみて下さい。

bundlerでmikutter

mikutterにはdevel/debian配下に開発用スクリプトがあったのですが、明らかに更新されてないのでbundlerを使ってみることにしました。

bundlerはGemfileを必要とします。

mikutter用の最低限のGemfileは次のようになります。

source "https://rubygems.org/"
ruby '2.0.0'
gem "gtk2"
gem "ruby-hmac"

これで、bundleの管理下に依存関係を解決したgemが入ります。

$ [sudo] bundle install

すると、bundlerがgemを管理するようになります。

rbenvをインストールして、更にruby-2.0.0p0をインストールした上で上記のコマンドを使えばシステムのrubyの更新が遅くても快適なruby環境が手に入ります。

rbenvを用いてインストールした場合のmikutterの起動スクリプトの一例:

#!/usr/bin/env bash
#mikutter directory
GEM=<path to mikutter>/mikutter.rb
DIR=<path to mikutter>
RUBY=/home/`whoami`/.rbenv/shims/ruby

cd $DIR
$RUBY -rubygems $GEM

追記:上の方法だと–path指定したものが読み込まれないので、
bundlerを使っているならbundle execしたほうが良さそうです。

#!/usr/bin/env bash
#mikutter directory
DIR=<path to mikutter>

source ~/.bashrc
cd $DIR
bundle exec ruby mikutter.rb

fav2toshi_a

この記事は #fav2toshi_a Advent Calendar の12日目の記事です。

まさかとしぁさん、call_api_fav.rbの存在忘れていませんよね…?

ということで、3アカウント×250ふぁぼをとしぁさんに贈りました。

としぁさんからておくれと宣告されてしまったのは思えばこのツイートからですね:

mikutterこわい

call_api_fav.rbが生まれてしまった経緯について。

元々search_api_fav.rbという遡りふぁぼのプラグインを作っていたのですが、
これは本人のTLを公式RTも含めてふぁぼってしまうため、
RT魔には周りにも被害が及ぶという大変アレなプラグインだったわけです。

じゃあどうしようと言うので、mikutterのソースコードを眺めていたらprofile.rbに本人のツイートだけを取ってくるコードが実装されて居るじゃないですか、これは使ってみるしか無いですね!!

ってなわけで組み込んでしまったのでした。

今はなぜかとしぁさんの魔の手(https://github.com/cosmo0920/Call_API_fav/commit/bd59a84fe99085d4e4afc8fa9e1614747e8fe4e9#call_api_fav.rb)が入り、
真っ先にmikutter0.2対応されるプラグインとなりました、謎い…。

ふぁぼった中での気になったツイート

ふぁぼったツイートのなかではこのツイートが一番ておくれ感が溢れているようです:

あと目に付いたものとしてはこれですかね。最近ふぁぼってもいないツイートがふぁぼったように感じられるのはアレはツイッターの不具合だったのか。

最後に、普段からとしぁさんにあまりふぁぼを贈らないのでもっと贈るようにできたらいいかなとか。

HaskellでTCPソケットクライアント

HaskellでTCPソケットクライアントを書いてみました。

mikutterにTCPソケットサーバーを立てて、
それにTCPソケットクライアントとして接続しに行きます。
mikutterはUTF8を扱うのでhSetEncoding h utf8でUTF8としています。

import Network
import System.IO
import System.IO.Error
import Prelude hiding (catch)

sendMessage :: String -> IO ()
sendMessage msg = withSocketsDo $ do 
        hSetBuffering stdout NoBuffering 
        h <- connectTo "127.0.0.1" (PortNumber 3939)
        hSetEncoding h utf8
        hSetBuffering h LineBuffering
        hPutStrLn h msg
        catch (hGetLine h)
              (\e -> checkEOFOrError e)
              >>= putStrLn
        hClose h

-- isEOFErrorは見なかったことにして終了
checkEOFOrError :: IOError -> IO [Char]
checkEOFOrError ex = if isEOFError ex then 
                         return () >> return "send done."
                     else ioError ex >> return "IOerror."

-- 文字数のチェック -- TODO:URLの文字数カウント
checkLengthAndTwit :: [Char] -> IO ()
checkLengthAndTwit msg
 | 0 == length msg = putStrLn "at least 1 character!" 
 | 140 < length msg = putStrLn "over 140 characters!!"
 | otherwise = sendMessage msg

main = do putStrLn "Input Tweet:"
          msg <- getLine
          checkLengthAndTwit msg

EOFの時のエラーを

-- isEOFErrorは見なかったことにして終了
checkEOFOrError :: IOError -> IO [Char]
checkEOFOrError ex = if isEOFError ex then 
                         return () >> return "send done."
                     else ioError ex >> return "IOerror."

として見なかったことにしているのだけれどいいのかこれ…
作っている最中にできない理由をつぶやいていたらすぐにリプライが飛んでくるTwitterこわいです

mikutterにTCPソケットサーバ立ててみる

mikutterにTCPソケットサーバを立ててほげほげしてみようと思い立って一気に書き上げました。

発端

ぺんぎんさん(@penguin2716)がmikutterでTCPソケットサーバを立てて、
AndroidをTCPソケットのクライアントにしてつぶやいてみてるのを見かけたのが発端。

TCPソケットのポートは3939(みくみく)にしました。

書いたもの

大体このへんに↓
https://github.com/cosmo0920/MikuTCPConnect

Windows用のTCPソケットクライアントのプログラムをC#+WPFで書いたのがこちら:
https://github.com/cosmo0920/MikuTCPConnect/tree/master/Client_for_Windows/mikuSockCleint

バイナリは同梱してません。
各自でビルドしてください、というのもIPを格納するテキストボックスを作るのを忘れただけなんですが…

mikutterのプラグインになっているのはTCPServerフォルダのものだけです。

他にも
C++(boost::asio)
で書いたTCPソケットクライアント
https://github.com/cosmo0920/MikuTCPConnect/tree/master/Cpp_Client
とか
RubyのTCPソケットクライアント
https://github.com/cosmo0920/MikuTCPConnect/tree/master/Ruby_Client
とか
あります。

通信のプログラムが書けるようになると出来ることが一気に広がりますね!

mikutterのフィルタプラグイン

mikutterのフィルタプラグインを書いてみました

mikutterのクライアント名によるフィルタプラグインは以前書いていましたが、単語によるミュートや設定を直接ソースに記述しなければなりませんでした。
これではプラグインとしてやさしくないのでGUIを設定タブに出現させるようにしました。

ということでmikutterにも今や普通のクライアントには有るようなフィルターの機能がプラグインとして仮実装されたよ!

ということになりますかね。

入手はこちらから↓
https://github.com/cosmo0920/mikutter_filter

mikutterのクライアント名フィルタプラグイン

書きました。

きっかけ

mikutterの薄い本のfilter_show_filterのサンプルを見ていて
これクライアント名を配列にして持ってやってフィルタの条件にすると
例えば自動ツイートはフィルタにかけられるのでは?

てな訳でておくれさん…じゃなかったとしぁさんに相談してみたところ、
出来るらしいとのこと。

実際に書いてみる

以下のようなコードで実現できるようです。

#!/usr/bin/env ruby -Ku
# -*- coding: utf-8 -*-
Plugin.create(:client_filter) do
  #exclude_clientの配列にTLから除外したいクライアント名を指定します。
  exclude_client = ["<client_name>","teokure"]
  filter_show_filter do |msgs|
    msgs = msgs.select{ |m|
      not exclude_client.any?{ |word|
        word.to_s.include?(m[:source])
      }
    }
    [msgs]
 end end

もちろんGithubに上げておきました。
こちらから入手出来ます→https://github.com/cosmo0920/client_filter

これを入れることによりmikutterが重くなったり、
落ちる原因になるかも知れませんが使用は自己責任にて。

mikutterのruby1.9.3環境を導入する

以下mikutter/devel/debian/build.shのパッチです

現時点では有効ですが、将来的にRuby1.9.3がhttp://ftp.ruby-lang.org/pub/rubyに来たときはこのパッチをあてなくても済みますし、パッチレベルが上がってしまうと有効では無くなります。(パッチレベル違いも全てビルドされてしまうため)

--- build.sh 2011-10-26 18:55:09.000000000 +0900 
+++ build_new.sh 2011-11-04 07:36:52.545798602 +0900
@@ -4,11 +4,12 @@
# mikutter environment builder for developer (debian & ubuntu)
#**************************************************************
-RUBY_SERVER='http://ftp.ruby-lang.org/pub/ruby'
+RUBY_SERVER='http://ftp.ruby-lang.org/pub/ruby/1.9'
INSTALL_DIR='/opt/miku'
SRC_DIR="${INSTALL_DIR}/src"
DEPENDS='gcc make bzip2 wget pkg-config subversion
libgtk2.0-dev libyaml-dev libssl-dev zlib1g-dev'

if [ -e ${INSTALL_DIR} ] && [ -d ${INSTALL_DIR} ]; then
echo "mikutter setup to ${INSTALL_DIR}"
@@ -74,7 +75,7 @@
# Setup ruby environment
#-------------------------------------------------------
wget -O- ${RUBY_SERVER} |
-egrep -o '1..?..?-p[0-9]{1,3}' | sort | uniq |
+egrep -o '1..?..3-p[0-9]{1,3}' | sort | uniq |
while read RUBY_VERSION; do
S_VERSION=`echo ${RUBY_VERSION} | sed 's/-p.*//' | sed 's/\.//g'` 

mikutterの環境をRuby1.9.3に出来ます。

日本語入力がおかしくなるかも知れませんが自己責任にて。

追記:http://ftp.ruby-lang.org/pub/rubyに1.9.3p0来ました。
ふぇのまースクリプトで1.9.3まで入るようになりました。