Twipod(Twitter連動推薦型ポッドキャストシステム) version 1.1

前回のエントリで作成したWebサービスの更新を行いました

  • 更新点
    • YoutubeとDailymotionに対応しました。
      • 動画ページのURLを登録するとHTMLを解析して、動画ファイルへのURLをRSSに登録します。
      • Youtubeの場合、可能な限りiPodに登録可能なmp4を取得しようとしますが、ない場合はflvのURLを使用します。
    • 多重Mentionで遅れるようにしました。
      • あて先ユーザ名に","区切りで複数登録できるようにしました。
      • DMの場合は最初のユーザのみ有効になります。
    • その他細かい修正
      • "video/"、"audio/"以外のURLを登録できないようにしました。
      • 各アイテムに登録日時要素を追加して、RSS更新時にアイテムをソートするようにしました。

Twipod(Twitter連動推薦型ポッドキャストシステム)を作りました

思い付きから始まったアイデアですが、一応実装できたのでブログのネタにしておきます。

  • システム概要
0.Twipodってなに?
TwipodはTwitterアカウントを使用してオススメの音楽や動画のURLを
自動的にポッドキャストフィードに変換するサービスです。
ポッドキャストクライアントとTwipodを使うことによって自動ダウンロードや
コンテンツ共有が簡単にできるようになります


要するにTwitterで特定のフォーマットに従ったReply/DMを飛ばす事で、そのユーザ用のポッドキャストフィード(RSS)を更新する事ができるシステムです。うまく動作すれば音楽ファイル以外の動画ファイルとかも登録できるだろうし、iTunesのようなポッドキャストクライアントにフィードを設定しておけば他の人に推薦されたコンテンツを自動的にiPodにダウンロードしておいてくれるという事もできるような気がします。

  • つくってみた感想

今回初めてTwitter系のWebシステムを作ってみたので、とりあえずその感想を。システムを実装する上で必要になる個々の技術(PerlSQL、HTML/CSS、OAuth、Feed、etc)は大したこと無いんですが、最近自分が知った色々な技術を使えたような気がします。復習という意味で今回のWebシステム開発は良い勉強になったなと思います。たまにはC/C++から離れてLL系言語でWeb開発するのも面白いかなー。

再生/表示特化型UPnPブラウザ「ubrowser」を作りました

UPnPブラウザと言っても、ただ単にFirefoxのブラウザエンジン(XULRunner)を利用して作った表示アプリを、UPnPで操作制御できるようにしただけです。
それで何がしたかったと言うと、ブラウザ(FlashPlayer)の表示機能を使うことでJPEG/PNG/MP3/FLV/MP4を再生できるDLNA/UPnP互換(手抜きで作ってるので互換性はあまりないですが)の表示デバイス(DMR/MRD)にすることが出来るかなと思いました。

その(DMR/MRD)機能に追加して、一般的なWebのURLなども渡せるように作ってみました。この機能を使えばSlideSharePicasaYoutubeのようなコンテンツ共有Webサービスのページも表示させることが出来るのではないかと思いました。勿論UPnPの仕様ではブラウザ機能の制御方法なんて規定されてないので、「こうすりゃ良いんじゃないかな」って感じで適当に決めたんですけど(まだ全関数が動くわけじゃないですけど)。
もちろんUPnP機能を使わないとただのブラウザになるので、マウスとキーボードを使っても操作することは出来ます。(全画面化するうえでメニューバーとか消しちゃってるので操作し辛いと思います)

続きを読む

samba+lprngでプリンタサーバを構築する

我が家のプリンタサーバの設定値をメモっておきます。これからプリンタサーバを作る人は参考にどうぞ。

ソフトのインストール

sudo apt-get install lprng lpr

設定ファイルの編集

sudo vi /etc/printcap

(中身全文)

DCP-115C|Brother DCP-115C USB Printer:\
        :lp=/dev/usb/lp0:\
        :sd=/var/spool/lpd/DCP-115C:\
        :af=/var/log/lp-acct:\
        :lf=/var/log/lp-errs:\
        :pl#66:\
        :pw#80:\
        :pc#150:\
        :mx#0:\
        :sh:
sudo vi /etc/samba/smb.conf

(中身抜粋)

[global]
    load printers = yes
    printing = lprng
    printcap name = /etc/printcap
    admin users = root, administrator, @ntadmin
    printer admin = root, administrator, @ntadmin

[printers]
   comment = All Printers
   browseable = no
   path = /var/spool/samba
   printable = yes
   guest ok = no
   read only = yes
   create mask = 0700

[print$]
   comment = Printer Drivers
   path = /var/lib/samba/printers
   browseable = yes
   read only = no
   guest ok = yes
   write list = root, administrator, @lpadmin

作業ディレクトリのパーミッション設定

ドライバ置き場
sudo chmod 777 -R /var/lib/samba/printers/
スプールディレクト
sudo chmod 777 -R /var/spool/lpd/DCP115C

再起動

sudo /etc/init.d/lpd restart
sudo /etc/init.d/samba restart

後は管理者ユーザにてドライバのアップロード、各マシンへのドライバインストール後使用できるようになります。

GtkWidgetブラウザコンポーネント比較その3( マルチスレッド環境のGTK+制御)

久しぶりのブラウザ開発シリーズです。といっても今回はブラウザコンポーネント依存の話ではなく、GTK上で動作するコンポーネント(Gtkオブジェクト)をサブスレッドから操作する方法を紹介します。今回の話はあくまでサブスレッドからの制御についての話なので、ボタンコンポーネント(戻るボタン等)やテキストフィールドコンポーネント(URL指定部等)などGUIコンポーネントの動作を起因に処理を行う場合は、イベント処理で制御する事になると思うので、この話は役に立たないと思います。
何らかのサブスレッドで動く(例えば何らかのネットワークサーバ内の動作や進捗インジケータのアニメーション処理など)ものから操作を行う場合の話になります。

まずGTKライブラリはスレッドセーフに作られていないので、ロックなどで正しくGTK関数の実行を排他的に制御されていないとセグメンテーションフォルトなどが頻発してしまい正しく動作しません。なのでマルチスレッド環境の制御方法としては、

  1. 正しくロック管理を行い、サブスレッドからGTKオブジェクトに操作を行う
    • gdk_threads_init/gdk_threads_enter/gdk_threads_leaveを使うことで実現できます
  2. GTKオブジェクトへの操作はメインスレッドに限定させ、サブスレッドからメインスレッドのアイドル時に行う操作を指定する
    • g_idle_add_fullを使うことで実現できます

のいずれかの方法で実装する必要があります。詳しくはGTK+FAQのページに書かれているので参照してください(両実装のサンプルコードが記載されています)
今回は後者のg_idle_add_fullによるマルチスレッド実装を行ってみます。

続きを読む

TwitterクローンOSSのJisko用クライアント「Jasko」作りました

TwitterクローンのOSS「Jisko(http://jisko.org/)」用のクライアント「Jasko」を作りました。
TwitterクライアントのTweenに似せたUI(機能は全然不足してますが)で投稿などの操作ができます。
クローズなコミュニティ用のミニブログとして構築したJiskoを利用されてる方はご利用ください。

  • バージョン
    • 1.1


1k程度のコードなので改修して利用することも可能です。
(ライセンスはGPLv2)

C/C++でTwitterのXAuth認証を行う

前置き

なんか急にTwitterに書き込みを行うプログラムを書きたくなったので、どんな方法があるか調査してみました。

Twitterの読み込み動作に関しては特定ユーザのフィード情報を取得すれば良いだけなので簡単に実現できますが、書き込み動作になるとユーザ認証が必要になるのでチョット複雑になります。認証方法は大きくわけて2種類(OAuthとXAuth)あるみたいです(昔はAPIを実行する度に認証を行うベーシック認証ってのがあったらしいです)。
OAuth認証、XAuth認証のといった認証関連の仕組み、違いについてはここで説明しないので他のページを参照してください。軽く説明するとOAuthはTwitter/ユーザ/Webサービスの3者間で使われる認証で主にWebサービス上で利用される方式、XAuthはTwitter/ユーザの2者間で使われる認証でブラウザ操作を使わないスタンドアローンプログラムで利用される方式です。どちらもユーザ情報とパスワード情報に関連する情報を毎回通信しなくて済むようなフローになっています。(セキュアなHTTPクッキーをイメージしました)

さらに調査した結果、Twitterは色々な言語でライブラリ化されているらしく、単純な書き込み動作くらいだったら結構簡単に実装できそうだということが判りました。しかしWebサービスの開発言語として良く使われるPerlPHPのサンプルコードは見つかるものの、目的だったC/C++で実装する方法はあまり無かったので、今回はC/C++CUIプログラムで動作するように実装してみようと思います。前述のとおりスタンドアロンプログラムとして実装するのでXAuthを利用して認証させます。Twitter-devを見てみると、C/C++向けのOAuth用ライブラリとしてliboauthというものが推奨されてました。これはTwitterに限定されたものではなく、OAuthで認証を行うサービス全般で使えるライブラリみたいです。もちろんXAuthのライブラリとしても利用できます。

C/C++で実装するメリットとして、既存のC/C++で実装されたプログラム(ライブラリ)とリンクしやすい、という事があるとおもいます。それ以外の目的の場合、例えばWebサービスとして実装する場合はPHPPerlRubyなどの言語で実装するべきですし、たとえスタンドアロンプログラムでも、ゼロから実装する場合はC#やJavaなどTwitterのサポートが厚い言語で実装する方が良いとおもいます。

前置きはこのくらいにして、C/C++でXAuthの仕組みに沿ってaccess-keyの取得(読み込み保存機構付き)、access-keyを使ってTwitterに書き込んでみるというプログラムを書いてみようと思います。

続きを読む