• WeeChatで~(全角チルダ/波ダッシュ)を入力したい(iso-2022-jpなIRCサーバ環境)

    私はWeeChatを使ってIRCを使っています。
    このときに、「~」を入力するとLimeChat等の他のクライアントでは文字化けしてしまうという問題がありました。

    どうにかこれを改善したいと思って試行錯誤した結果、改善できたのでメモしておきます。

    環境

    • WeeChatを起動させているサーバ
      • CentOS7
        • WeeChat 1.4(但し0.x台の頃から変わらない事象です)
        • screen 4.01.00
      • Linuxの$LANGは、ja_JP.UTF-8
      • WeeChatで接続しているチャンネルの文字コードは、iso-2022-jp
      • /set charset.default.decode = “iso-2022-jp”
      • /set charset.default.encode = “iso-2022-jp”
    • WeeChatを表示させているクライアント
      • Windows7
      • cygwin
      • ssh接続でscreenを表示してその上のWeeChatを使用

    クライアントからWeeChatとLimeChat(Windows上で動作するIRCクライアント)を操作し、同じサーバ、同じチャンネルにJOINします。

    問題の事象

    WeeChat上で「~」を入力すると、LimeChatから見ると文字化けします。
    LimeChat上で「~」を入力しても、WeeChatでは文字化けしません。
    ですが、2つの波ダッシュは、WeeChat上では別の文字(波の向きが違う)で表示されます。

    • WeeChatで入力した「~」:wavedash_wee
    • LimeChatで入力した「~」をWeeChatで表示:wavedash_lime

    この事から、Windowsで使われる「~」がLinuxでは扱いが異なっているのではないかと想像できます。
    これについては参考ページが以下の様にいくつかあります。

    解決

    要はWeeChatから入力する「~」をwavedash_weeからwavedash_limeに変換してやればいいわけです。
    そのため、送信時にテキスト置換できるようなスクリプトがないかを調べたところ、「text_replace.py」というスクリプトがあったのでこれを使ってみました。

    以下はWeeChat上での操作です。

    
    /script install text_replace.py
    /set plugins.var.python.text_replace.replacement_pairs "~=~"
    
    

    plugins.var.python.text_replace.replacement_pairsには、=区切りで変換前と変換後のテキストを指定します。

    “~=~”の部分は実際には以下の様に指定します。

    • 左側:普通にWeeChatに入力した「~」
    • 右側:LimeChatで入力した「~」をWeeChatで表示したwavedash_limeをコピーアンドペースト
    • こんな感じ:”wavedash_wee=wavedash_lime

    これで、普通にWeeChatで入力したら文字化けする「~」を、LimeChatで見ても文字化けしない「~」に変換して送信することが出来るようになりました。


  • rsyncでドットファイルだけ同期する

    rsyncの–includeオプションと–excludeオプションを使って実現出来ます。
    –includeと–excludeは記載順で評価順が変わるので注意です。

    rsync -av --include '.**' --exclude '**' /home/username/ remote:~/backup/
    

    みたいな感じです。

    簡単なパラメータの説明をしておくと:

    • –include ‘.**’
      ドットから始まるファイルとディレクトリ以下のファイルを含めます。
    • –exclude ‘**’
      全てのファイルを除外します。

    ちなみに、除外したいドットファイルなどがある場合は、–include ‘.**’の前に記載をする必要があります。


  • Twit Side 0.7.6リリース

    tukapiyoです。

    今回のリリースは、バグ修正と機能追加のアップデートとなります。

    Mozilla公式外のアドオンインストールについて

    Firefox開発元のMozillaの方針により、当ブログ等を含めたMozilla公式ページ以外からダウンロードしたアドオンは、インストール出来なくなりました。
    そのため、こちらのページで公開しているファイルは、一部の方を除いて使用できないため、通常はMozilla公式ページよりダウンロードいただくようお願いいたします。(最新バージョンの公開がブログよりも遅くなります。御了承ください。)

    なお、Firefox Developer Editionをご使用中の玄人の方々に於かれましては、設定変更により当ブログで公開のアドオンもご利用いただけます。

    告知

    続きを読む 投稿 ID 1325


  • Twit Side 0.7.5リリース

    tukapiyoです。

    今回のリリースは、バグ修正と機能追加のアップデートとなります。

    Mozilla公式外のアドオンインストールについて

    Firefox開発元のMozillaの方針により、当ブログ等を含めたMozilla公式ページ以外からダウンロードしたアドオンは、インストール出来なくなりました。
    そのため、こちらのページで公開しているファイルは、一部の方を除いて使用できないため、通常はMozilla公式ページよりダウンロードいただくようお願いいたします。(最新バージョンの公開がブログよりも遅くなります。御了承ください。)

    なお、Firefox Developer Editionをご使用中の玄人の方々に於かれましては、設定変更により当ブログで公開のアドオンもご利用いただけます。

    告知

    続きを読む 投稿 ID 1325


  • 2016年明けましておめでとうございます

    2016年も変わらないご贔屓宜しくお願いいたします。

    昨年12月には、当WebサイトのSSL化を行いました。
    いつの間にか https に変わっているのでチェックしてみてください。

    証明書は、Let’s encryptという無料で発行できる証明書を利用することにしました。
    詳しくは以下のページを参照してみてください。


  • さくらVPSではL2TPv3の利用は出来ない

    かなり寝かせてしまったお話なのですが…
    2015年7月頃、ふと何を思ったか、家のネットワークとさくらVPSのネットワークをL2TPv3で結んでみたいと思い立ったので、そそくさと構築してみたことがありました。

    L2TPv3を構築するも…

    家のルータ(VyOS)とさくらVPS上のルータ(VyOS)間でL2TPv3の設定をしてみたのですが、ルータまでは疎通があるのに、LAN配下(家もさくらも)の端末にはpingが飛ばなかったのです。
    家のネットワークについては原因が分かりました。
    VyOSをESXiの上で動かしていたのですが、vSwitchが「無差別モード(プロミスキャスモード)」を有効にしていないとダメだということでした。

    この設定を施してやることでLAN配下の端末への通信が通るようになりました。

    家の中には通信が通ったもののさくらには通信が通らない…

    が、相変わらずさくらVPSの方には通信が出来ません。
    大体原因の予想が付きますよね。
    家と同じで、プロミスキャスモードが有効になっていないのだろうと。

    ただ正確なところは分からないため、一度サポートに問い合わせることにしました。

    VPSのローカルネットワークを構成する仮想スイッチ上でプロミスキャスモードは有効になっていますでしょうか?

    回答は、ブリッジ等ではプロミスキャスモードが有効になっている、とのことでした。
    ただtcpdumpのデータをくれれば原因調査してくれるとのことだったので、ルータと配下のサーバでパケットキャプチャを行って送付したところ、原因不明。

    基盤側でパケット見ることも出来るよ、と言ってくれたのでお言葉に甘えて調査してもらいました。

    原因判明

    最終的に、さくらさんにパケットキャプチャしてもらった結果、こんな回答が返ってきました。

    弊社にてホスト側のtcpdumpを確認した結果、「vyos_sakura」の収容ホストサーバ側のセキュリティ設定によって、パケットがフィルタされていたことが判明いたしました。

    前回までのご案内にて原因の特定に至らず、お手間をおかけいたしましたこと、深くお詫び申し上げます。

    ホストサーバ上ではARP-spoofingや、MAC-Spoofingを防ぐためのセキュリティ設定を導入しており、その影響によりフィルタされておりました。

    セキュリティ設定に関しましては、現時点で変更することが困難でございます。何卒ご了承ください。

    プロミスキャスモードじゃないけどMAC偽装は出来ないよってことで、ファイナルアンサーでした。

    結論

    さくらVPSではおとなしくIPsecとかでVPN張りましょう、ということです。

    いやしかし、こんな格安でサービス提供してくださっている上に、サポートも非常に充実していて、改めて素敵なサービスだと実感しました。
    みなさん、さくらインターネットでクラウド初めてみませんか?

    ※この記事は広告ではありませんw


  • Twit Side 0.7.4リリース

    tukapiyoです。

    今回のリリースは機能追加のアップデートとなります。

    Mozilla公式外のアドオンインストールについて

    Firefox開発元のMozillaの方針により、当ブログ等を含めたMozilla公式ページ以外からダウンロードしたアドオンは、インストール出来なくなりました。
    そのため、こちらのページで公開しているファイルは、一部の方を除いて使用できないため、通常はMozilla公式ページよりダウンロードいただくようお願いいたします。(最新バージョンの公開がブログよりも遅くなります。御了承ください。)

    なお、Firefox Developer Editionをご使用中の玄人の方々に於かれましては、設定変更により当ブログで公開のアドオンもご利用いただけます。

    告知

    要望のあった機能

    • すべてのツイートを通知(@Slightfox)

    修正したバグ

    • 特になし

    追加機能・調整

    • DMの10000文字送受信に対応。
    • DMの削除機能を追加。
    • Twit Sideロゴを変更。
    • ツールバーボタンが、通知があった際に色が変わるように変更。

    続きを読む 投稿 ID 1325


  • Twit Side 0.7.3リリース

    tukapiyoです。

    今回のリリースは、バグ修正と機能追加のアップデートとなります。

    告知

    要望のあった機能

    • 通知をツールバー上のボタンの色変更でも実施。(nblwさん)
      • 対応を検討中です。
    • Twitterでリツイートを非表示にしたユーザのリツイートをTwit Sideでも表示しないようにする。(conpalloさん)
      • 対応しました。

    修正したバグ

    • 一部の画像投稿サイトでサムネイルが表示できなくなっていた。
    • 画像URLにGETパラメータが含まれる場合サムネイルが表示できない。
    • アニメーションを無効にした場合、サイドメニューやカラムメニューが表示できない。
    • サイドメニューで横スクロールが表示される場合がある。
    • H/Lキーでカラムを左右に移動する際、正常に移動できない。
    • ダイレクトメッセージの一部が抜け落ちる。
    • ダイレクトメッセージの続きが読み込まれない。
    • Twit Side横幅が非常に大きい場合に、カラム切り替えバーがうまく動作しない。
    • Firefox 40(α)で正常に動作しない。
      • 動作はするようになりましたが、非常に重いです(Fx40側の問題と想定しています)。
      • Firefox 38(Release)、Firefox 39(Beta)では問題ありません。

    追加機能・調整

    • 再起動不要な種類のアドオンへ変更。
      • 以前のバージョンから0.7.3へアップデートする際のみ再起動が必要になります。
      • 初めて0.7.3をインストールする際、以降のアップデートでは再起動不要です。
    • pic.twitter.com の複数画像のサムネイル表示に対応。
      • 投稿の対応は現在予定していません。
    • サムネイル画像の一部の解像度を改善。
    • vine.coの動画サムネイルに新たに対応。
    • pixivのサムネイルに新たに対応。
      • pixiv側の仕様変更によりサムネイルが表示できなくなることがあります。
    • Twitter公式でリツイートを表示しない設定にしたユーザのリツイートを表示しないように変更。
      • 定期的にリストを取得するため、場合によってはTwitter側での設定がすぐに反映されないことがあります。
      • タイムライン以外では表示されます。
    • Twitter公式でミュートに設定したユーザのツイートとリツイートを表示しないように変更。
      • 定期的にリストを取得するため、場合によってはTwitter側での設定がすぐに反映されないことがあります。
      • タイムライン以外では表示されます。
      • Twit Side自身がもつミュート機能とは別に働きます。
    • タイムラインの最上部へスクロールする際に、フォーカスも最上部のツイートに移るように変更。
    • プロフィール画面で戻るボタンを設置。
      • プロフィール画面内で他のユーザのプロフィールを表示した際、戻るボタンで前のユーザのプロフィールを再表示できます。
    • 文字サイズの変更機能を追加。
      • 設定画面から文字サイズを変更できます。
    • チュートリアルを追加。
    • UI周り、アニメーション周りの整理。

    続きを読む 投稿 ID 1325


  • putty.iniからssh_configを生成する(手抜き)スクリプトを作ってみた

    沢山あるPuTTyのホスト設定を移行するのが面倒だったので、かっとなって作りました。

    • PuTTyをiniファイル形式で使っている人用ですが。
    • PuTTyのバージョンによっては使えないかもしれません。
    • 全ての設定を変換するわけではありません。
    • 手抜きなので、Default Settingsも変換します(ご自身で削除して下さい)。
    • bash用です。
    • うまく変換できないときは、putty.iniの改行コードをLFにしてみて下さい。

    変換できる設定は以下のものだけです。

    • セッション名
      • これが接続Hostになりますが、基本的には変換後にご自身で手を入れて頂くのが良いかと。エスケープ文字とかも入ると思うので。
    • 接続先情報(ホスト名、ポート番号)
    • ユーザ名
    • 秘密鍵
      • 但し、末尾の拡張子.ppkは除去します(どうせそのままでは使えないので)。
    • プロキシ(ホスト名・ポート番号)
      • SOCKS4、SOCKS5に限ります。
      • 認証は考えていません。
      • 実際に動作させるためには、connectコマンドを導入している必要があります。
    • トンネル

    スクリプトの変数は以下の様に定めています。
    それ以外は内部で使っているものなので変更はしないで下さい。

    • INIFILE
      • putty.iniのファイル名
    • CONFFILE
      • sshのconfigのファイル名
    • SOCKSCMD
      • connectコマンドのパス
    • TRCMD
      • trコマンドのパス

    実行は、引数を付けずに実行するだけです。
    CONFFILEに指定したファイルに出力しますが、標準出力にも同時に出力します。
    標準出力に何も表示されずにコマンドが終了したときは、putty.iniの改行コードをLFにして再度試してみて下さい。

    
    #!/usr/bin/bash
    
    INIFILE=./putty.ini
    CONFFILE=./p2config
    SOCKSCMD=/usr/bin/connect
    TRCMD=/usr/bin/tr
    
    TMP_PXY_ENABLED=no
    TMP_PXY_HOST=""
    TMP_PXY_PORT=0
    TMP_FWD_LALL=no
    TMP_FWD_RALL=no
    TMP_FWD_LIST=""
    
    cat $INIFILE | while read -r LINE; do
    
        if [[ "$LINE" =~ ^\[Session:(.+)\]$ ]]; then
            TMP_PXY_ENABLED=no
            TMP_PXY_HOST=""
            TMP_PXY_PORT=0
            TMP_FWD_LALL=no
            TMP_FWD_RALL=no
            TMP_FWD_LIST=""
            echo Host ${BASH_REMATCH[1]} | tee -a $CONFFILE
        elif [[ "$LINE" =~ ^HostName=\"(.+)\"$ ]]; then
            echo -e \\tHostName\\t${BASH_REMATCH[1]} | tee -a $CONFFILE
        elif [[ "$LINE" =~ ^PortNumber=([0-9]+)$ ]]; then
            echo -e \\tPort\\t${BASH_REMATCH[1]} | tee -a $CONFFILE
        elif [[ "$LINE" =~ ^UserName=\"(.+)\"$ ]]; then
            echo -e \\tUser\\t${BASH_REMATCH[1]} | tee -a $CONFFILE
        elif [[ "$LINE" =~ ^PublicKeyFile=\"(.+)\.ppk\"$ ]]; then
            echo -e \\tIdentityFile\\t${BASH_REMATCH[1]} | tee -a $CONFFILE
        elif [[ "$LINE" =~ ^ProxyMethod=1|2$ ]]; then
            TMP_PXY_ENABLED=yes
        elif [[ "$LINE" =~ ^ProxyHost=\"(.+)\"$ ]]; then
            TMP_PXY_HOST=${BASH_REMATCH[1]}
        elif [[ "$LINE" =~ ^ProxyPort=([0-9]+)$ ]]; then
            TMP_PXY_PORT=${BASH_REMATCH[1]}
        elif [[ "$LINE" =~ ^LocalPortAcceptAll=1$ ]]; then
            TMP_FWD_LALL=yes
        elif [[ "$LINE" =~ ^RemotePortAcceptAll=1$ ]]; then
            TMP_FWD_RALL=yes
        elif [[ "$LINE" =~ ^PortForwardings=\"(.+)\"$ ]]; then
            TMP_FWD_LIST=${BASH_REMATCH[1]}
        fi
    
        # ProxyCommand
        if [ "$TMP_PXY_PORT" != "no" -a "$TMP_PXY_HOST" != "" -a $TMP_PXY_PORT -ne 0 ]; then
            echo -e \\tProxyCommand\\t$SOCKSCMD -S $TMP_PXY_HOST:$TMP_PXY_PORT %h %p | tee -a $CONFFILE
            TMP_PXY_ENABLED=no
            TMP_PXY_HOST=""
            TMP_PXY_PORT=0
        fi
    
        # PortForward
        if [ "$TMP_FWD_LIST" != "" ]; then
            FWD_LIST=( `echo "$TMP_FWD_LIST" | $TRCMD -s ',' ' '` )
            for ITEM in ${FWD_LIST[@]}; do
                if [[ "$ITEM" =~ ^L([0-9]+)=(.+:[0-9]+)$ ]]; then
                    echo -en \\tLocalForward\\t | tee -a $CONFFILE
                    if [ "$TMP_FWD_LALL" != "no" ]; then
                        echo -n : | tee -a $CONFFILE
                    fi
                    echo -e ${BASH_REMATCH[1]}\\t${BASH_REMATCH[2]} | tee -a $CONFFILE
                fi
                if [[ "$ITEM" =~ ^R([0-9]+)=(.+:[0-9]+)$ ]]; then
                    echo -en \\tRemoteForward\\t | tee -a $CONFFILE
                    if [ "$TMP_FWD_RALL" != "no" ]; then
                        echo -n : | tee -a $CONFFILE
                    fi
                    echo -e ${BASH_REMATCH[1]}\\t${BASH_REMATCH[2]} | tee -a $CONFFILE
                fi
                if [[ "$ITEM" =~ ^D([0-9]+)$ ]]; then
                    echo -e \\tDynamicForward\\t${BASH_REMATCH[1]} | tee -a $CONFFILE
                fi
            done
            TMP_FWD_LALL=no
            TMP_FWD_RALL=no
            TMP_FWD_LIST=""
        fi
    
    done
    
    

    バグ報告は歓迎しますが、修正するとは限りません(ぇ