Twipod(Twitter連動推薦型ポッドキャストシステム) version 1.1
Twipod(Twitter連動推薦型ポッドキャストシステム)を作りました
思い付きから始まったアイデアですが、一応実装できたのでブログのネタにしておきます。
- システム概要
0.Twipodってなに? TwipodはTwitterアカウントを使用してオススメの音楽や動画のURLを 自動的にポッドキャストフィードに変換するサービスです。 ポッドキャストクライアントとTwipodを使うことによって自動ダウンロードや コンテンツ共有が簡単にできるようになります
要するにTwitterで特定のフォーマットに従ったReply/DMを飛ばす事で、そのユーザ用のポッドキャストフィード(RSS)を更新する事ができるシステムです。うまく動作すれば音楽ファイル以外の動画ファイルとかも登録できるだろうし、iTunesのようなポッドキャストクライアントにフィードを設定しておけば他の人に推薦されたコンテンツを自動的にiPodにダウンロードしておいてくれるという事もできるような気がします。
- つくってみた感想
今回初めてTwitter系のWebシステムを作ってみたので、とりあえずその感想を。システムを実装する上で必要になる個々の技術(Perl、SQL、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なども渡せるように作ってみました。この機能を使えばSlideShareやPicasaやYoutubeのようなコンテンツ共有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関数の実行を排他的に制御されていないとセグメンテーションフォルトなどが頻発してしまい正しく動作しません。なのでマルチスレッド環境の制御方法としては、
- 正しくロック管理を行い、サブスレッドからGTKオブジェクトに操作を行う
- gdk_threads_init/gdk_threads_enter/gdk_threads_leaveを使うことで実現できます
- 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サービスの開発言語として良く使われるPerlやPHPのサンプルコードは見つかるものの、目的だったC/C++で実装する方法はあまり無かったので、今回はC/C++のCUIプログラムで動作するように実装してみようと思います。前述のとおりスタンドアロンプログラムとして実装するのでXAuthを利用して認証させます。Twitter-devを見てみると、C/C++向けのOAuth用ライブラリとしてliboauthというものが推奨されてました。これはTwitterに限定されたものではなく、OAuthで認証を行うサービス全般で使えるライブラリみたいです。もちろんXAuthのライブラリとしても利用できます。
C/C++で実装するメリットとして、既存のC/C++で実装されたプログラム(ライブラリ)とリンクしやすい、という事があるとおもいます。それ以外の目的の場合、例えばWebサービスとして実装する場合はPHP、Perl、Rubyなどの言語で実装するべきですし、たとえスタンドアロンプログラムでも、ゼロから実装する場合はC#やJavaなどTwitterのサポートが厚い言語で実装する方が良いとおもいます。
前置きはこのくらいにして、C/C++でXAuthの仕組みに沿ってaccess-keyの取得(読み込み保存機構付き)、access-keyを使ってTwitterに書き込んでみるというプログラムを書いてみようと思います。