ぷぎがぽぎ このページをアンテナに追加 RSSフィード

2011-04-27

[] Web関連のUST番組リスト

もはやUSTREAMは一般的なものになりました。奇麗に配信するのにはコツや知識がいりますがとりあえず配信する敷居そのもは低くなりました。そして、バラエティーあふれる番組が配信されていて最近ではWebに関する番組も多く存在するようになりました。

というわけで、USTREAMで視聴、参加できるWeb関連の番組をまとめてみます。

多分、漏れてるものがあるはずなのでコメントか@brtriver宛につぶやいてもらえれば追加しますです。

また、同じテーマではなせる人が周りにいるならUstreamで配信してみると面白いと思いますよ!

(順不動)

週刊Concreate5

USTトーク番組「週刊concrete5」

  • 毎週木曜日 夜22:00〜(1時間ほど)
  • "「concrete5 をもっと身近に」をコンセプトに、concrete5以外のサイト制作に関するいろいろなトピックについても話し合っていくつもりです。"
  • OSSという文化を広めたいというコンセプトもあり、話題は多種多様
  • もうすでに27回も配信されている! (2011/4/27現在)
  • 番組タイトルもかっこいい!

vanitalk (ばにとーく)

http://vanitalk.net/

  • 毎週金曜日 23:00〜 (オフトークあり)
  • バニレートが、誰かとたのしくおしゃべりする、ばにとーく。
  • 毎週ゲストを招いてWeb系のクリエイターの話題を中心に盛り上がってます。

週刊CMS

主婦が知るべき借金返済の極意

  • WordPressXOOPS Cube、ImpressCMS、MODX、concrete5、Joruri、TYPO3などの情報
  • 毎週土曜日11時から1時間放送
  • "CMS に関するニュースや比較などの情報発信を行い、それぞれの認知度や理解を深める"
  • "毎回各 CMS グループが持ち回りで会場提供司会を行う"
  • "3ヶ月に一度、マイクロソフトカンファレンスルームにて公開録画イベントを開催"

Webなんたらかんたら

http://www.webnantara.com/

  • "Webな、なんたらかんたらを二人(@shin1x1+@msng)で話すネットラジオです。"
  • 放送時期:不定期
  • PHPネタだけに限らず。
  • ほんまおもろい。

生放送しながらWebサービスを作る

生放送しながらWebサービスを作る

  • 実際にWebサービスを開発している様子を生Ust
  • "@komagata(プログラマー)と@machida(デザイナー)がフィヨルドという2人の会社でHelp me, Hackers!というWebサービスを作っていきます"
  • 毎日(平日) 18:30〜19:00 (※ 最近は放送されていない模様)

Symfonyしゃべりば

Symfonyしゃべりば(仮) on Ustream


CakeRadioGaGa

CakeRadioGaGa

2011-04-26

[][] USTREAMを使ってSkypeの音声チャットラジオ (Mac環境版)

タイトルそのままですが、これってちゃんとやろうとすると結構大変なんですよね。

@tsukimiyaさんのアドバイスにもあったんですが、普通に何もかんがえずにやると音声がループしたりします。

せっかくなので私がやった方法をまとめておきます。

ポイント

Skypeで利用する音声回線と、USTREAMで利用する音声回線を別居させること。これだけです。これが混在しているとループします。別居させるためには何かしらのミキサーが必要になるので、このミキサーの使い方を理解しておく必要があります。(今回使うのはLadioCastというソフトミキサーです)

最低限必要なもの(ハード)

  • ヘッドフォン ... 自分のしゃべりにスカイプの音声が入ってしまわないようにするために用意しましょ。
  • マイク ... Macbook だと内蔵マイクがあるのでそれでもOKですね。

最低限必要なもの(ソフト)

  • Skype (これが無いと独り言ラジオになりますので)
  • Soundflower (仮想オーディオデバイスです。音声の出力先を変更できます)
  • LadioCast (ミキサー。Skypeの出力音声と自分の声をミックスしてUSTREAMに流します)

接続図

これらを接続した結果は次のようになります。

f:id:brtRiver:20110427005446p:image

ポイントは

  • Skypeの音声出力はSoundflowerの2chを指定する。
  • ミキサーからの出力はSoundflowerの16chを指定する。
  • USTREAMの音声入力はSoundflowerの16chを指定する。

順を追ってキャプチャで設定している内容を見てみると、

Skypeは設定画面で以下のように設定

f:id:brtRiver:20110427005447p:image

呼び出し音などもUSTに流したい場合は「呼び出し音」のタブも同じように変更すればOK


LadioCastでは以下のように設定

f:id:brtRiver:20110427005448p:image

左側の3つが入力、右の3つが出力の制御です。左上がSkypeの音声、左中が自分の声です。この2つをミックスした結果が右上です。Skypeの出力には自分の声は入っていないのでこのようにしてミックスする必要があるのです。

USTREAMの配信画面では以下のように設定

f:id:brtRiver:20110427005450p:image

LadioCastで出力先に指定したSoundflower16chを指定すればOK

なんだかよくわからねーって声も聞こえてきそうですが、これを参考にトライ&エラーするとそれとなく解るようになると思います。

あと、ヘッドフォンでモニタしてますが、soundflower16chに出力を指定しただけではヘッドフォンをさしても音はきこえません。仮想デバイス上を音がながれているだけなので。

そこで、アプリケーションのSoundflowerディレクトリにあるSoundflowerbedを起動させ、以下のように16chの出力を build-in outputに指定します。これでヘッドフォンで16chの出力音声をモニタできるようになります。

16chを直接モニタリングに使用しているのは最終的に出力される16chを聞くことで自分の声とSkypeの音量のバランスを聞いて確認できるからです。

自分の声が聞こえるのがしゃべりにくいということもあるかと思いますので、その場合は2ch側をモニタリングすると良いんじゃないんでしょうか。

f:id:brtRiver:20110427005454p:image

こだわり配信

実際は上記構成にさらに手を入れた構成で配信してます。

というわけで、これの応用編が「こだわり配信」というわけで簡単に説明をば。

どこがこだわりかというと、

・BGMも流したい。

・ついまるの音声もUSTに流したい。

・自分の声は外部マイクにしてよりクリアな音声に

・ラジオといいつつ、映像がないのは寂しいのでスクリーンキャストを流したい

・より高品質で配信できるようにしたいのでFlashMediaLiveEncoderを使いたい

それほど欲張りというものでもないですけどね。。

意識したことは、ソフトウェアでの制御はできるだけやらない。ハードウェアで制御できるものはハードウェアで制御する。

これはシステムが安定するからということです。たとえばBGMをiTunesから流すこともできますが外部ミキサーがあって音楽プレイヤーがあるならそこから流したほうがメモリも使用せずに安定した配信が可能です。とかいいながら ついまる がWindowsにしか対応していないのでVMwareをわざわざ立ち上げる必要があるのですが。。。

という流れで最終的には以下のような構成になりました。

f:id:brtRiver:20110427005453p:image

どこまで参考になるかわからないですがお役にたてればこれ幸い。

2011-04-24

[][][]Symfony しゃべりば(仮) #1 は 4/27(水) 22:00〜

f:id:brtRiver:20110425015404p:image

日本Symfonyユーザー会では@hidenorigotoさんが中心となってIRC集会を不定期に開催していましたが、さらに気軽に参加できるようなことができないかということでラジオ番組のようなUstream番組として一度配信してみることにしました。

Ustream Symfonyしゃべり場(仮) (4/27)のご案内 | 日本Symfonyユーザー会


Video streaming by Ustream

番組詳細

番組名:「Symfony しゃべりば(仮) on Ustream」

日時: 4/27(水) 22:00 ~ 23:30 (予定)

URL: http://www.ustream.tv/channel/sfbeer

ハッシュタグ: #sfbeer

話す人たち: @hidenorigoto, @HIROCAST, @shishi4tw, @brtriver

ネタ

ちょうど時期的にネタも多く

・Symfony2のβ版が出そう

・symfony1.4本がようやく出版されたよね

・そういえば日本Symfonyユーザー会ってもうすぐ1周年だよね

・symfony1.4勉強会もうすぐだよね

・Symfony2勉強会が内容濃すぎだよね

・SilexとかSismoとか何かでてきてるよね

などなど、気になるところを4人で話してみたいと思います。

参加方法

ラジオのように聞くだけでもいろいろ情報が聞けるので楽しいと思いますが、Ustreamのページからtwitterなどのアカウントログインし、チャットに参加してみてください。できるだけ発言内容を番組内で拾いたいと思います。

また、発言された内容は「ついまる」という愛らしいガジェットがクールな発音で読み上げてくれます。

no title

4/28 追記

無事に第1回の放送が終わりました。ちょっと飲み過ぎてしまいましたが楽しく放送できました。

MAXで35人ぐらいの方が同時視聴数だったような記憶があります。

2回目以降も企画したいと思いますのでよろしくおねがいしますー

2011-04-17

[][] SilexでPHPTALを使う

SilexでPHPTALを使うためのエクステンションを作ってみました。

Silexとは

Silexの詳細については前回の記事 Silexを試してみた を見てください。

また、前回の記事で紹介したMameFormアプリはひっそりと更新されています。

というのも、Silexのエクステンションが幾つか追加されたのでメール送信はSwiftmailerエクステンションで送信されるようにしました。

PHPTALとは

PHPTALとはPHPテンプレートエンジンです。HTMLのタグの属性で表現し、SmartyやTwigのようなテンプレートエンジンのように独自タグを使わないのデザイン確認などの組み込み作業時でも確認が行えます。そのためデザイナーさんが使いやすいテンプレートエンジンといえます。pinocoのようなデザイナーフレンドリーなフレームワークで採用されています。

使い方(準備)

もともとエクステンションといってもPHPTALのインスタンスを簡単に作成してくれるにすぎません。

PHPTALのライブラリをvendor/phptalに配置します。

PHPTALExtensionをGitHubからとってきます。

このとき、src/Silex/Extensionというディレクトリを作りそこに配置します。

$ git clone git://github.com/brtriver/PHPTALExtension.git ./src/Silex/Extension

これで準備は完了です。PHPTALのテンプレートは標準ではviewsディレクトリ以下に配置するようになっています。

そして、ディレクトリ構成は以下のような感じになることを想定しています。

/project_directory
│  ├── silex.phar
│  └── index.php
├── src
│   └── Silex
│       └── Extension
│           └── PHPTALExtension.php
├── vendor
│   └── phptal
└── views (PHPTALのテンプレートはviewsディレクトリに配置します)
    └── teset.html

使い方(コントローラーの書き方)

あとはSilexのコントローラーで以下のように書けばOKです。

<?php
require_once __DIR__.'/silex.phar';
require_once __DIR__.'/src/Silex/Extension/PHPTALExtension.php';

use Silex\Extension\PHPTALExtension;

$app = new Silex\Application();
$app->register(new PHPTALExtension());

$app->get('/test/{name}', function($name) use($app) {
    // set your view file. view file is set under /views directory
    $app['phptal.view'] = "test.html";
    $app['phptal']->title = "PHPTAL in Silex";
    $app['phptal']->name = $name;
    return $app['phptal']->execute();
});
$app->run();

ポイントは以下の点です。

  • PHPTALExtension.phpをrequireで読み込む
  • use Silex\Extension\PHPTALExtension を宣言しておく
  • エクステンションを使うために登録を行う[$app->register(new PHPTALExtension())]
  • $app['phptal.view'] にテンプレートのパスを書く
  • $app['phptal']はPHPTALのインスタンスなので、最後に return $app['phptal']->execute()する

これでhttp://example.com/test/brtriver のような呼び出しが行われると$app->getメソッド部分が処理され、views/test.htmmlが処理されます。

その他

$app['phptal.view']でテンプレートのファイルのパスを指定します。もしviewsディレクトリ以下にディレクトリを作成しそこに配置したい場合は

$app['phptal.view'] = "dir/test.html";

ようにディレクトリ名部分を含むパスを記述すればOKです。

ここで$app['phptal']はPHPTALのインスタンスそのものです。なのでPHPTALを使いなれている方はnew PHPTAL()を行った結果のものと同じと考えてもらえればわかりやすいかと。


「簡単なデザイン寄りなサイトでテンプレートとルーティングが使いたい」などと言う場合はSilex + PHPTAL はなかなか使いやすいのではないでしょうか?

2011-04-06

[][] Silexを試してみた

シンプルな問い合わせフォームアプリをSilexを使って作ってみましたのでその紹介。

Silexとは?

SilexとはPHPで書かれたマイクロフレームワークです。RubyのsinatoraにインスパイアされてSymfony2のリードマージャー(Lead Merger)であるファビアンさんが作っています。特徴として名前空間がしがし使っていたりするのでPHP5.3.2以上でないと動きません。

というと、Symfony2っぽいと思われる方がいると思いますが、このSilexのライブラリはSymfony2でも利用しているコンポーネント類の一部を利用して作成されています。いわばSymfony2の妹分といったところでしょうか。

あと、ライブラリをpharアーカイブで配布しているので基本silex.pharの1ファイルさえあれば動かせます。

冗談のようなアプリかと思っていたら意外(失礼)と本気のようで公式サイトができました。

no title

f:id:brtRiver:20110406181741p:image

ちょっとしたアプリをさくっと作りたい場合に良いのではということで実際に作ってみました。

MameForm

詳しいインストール方法は no titleで。

インストール
git clone git://github.com/brtriver/MameForm.git ./MameForm
git submodule init
git submodule update

名前、メールアドレス、メッセージを入力し、指定したメールアドレスに送信するそれだけです。

テンプレートエンジンにTwig, メール送信にSwiftMailer4を使っています。

これらのライブラリはサブモジュール化しているのでgit submoduleコマンドで同期してください。

ということは、日本語メール送ると文字化けするかもですが。まぁサンプルですので。

構造

Twig,SwiftMailerのファイルは多いですが、それを除けば以下だけ。

f:id:brtRiver:20110406181802p:image

処理のすべてはindex.phpに書かれています。viewsはTwigのテンプレート置き場です。

.htaccessがいっぱいあるのはドキュメントルート以下におかれてもdenyするためとindex.phpへのリライト設定のためです。

処理(index.php)

準備

今回はTwigやSwiftMailerを使うので記述が増えていますがそれらを除くと必要なのは以下だけです。

<?php
require __DIR__.'/silex.phar';
use Silex\Application;

$app = new Application();
....

pharアーカイブのおかげですね。

問い合わせ画面

http://localhost/MameForm/ようにアクセスすれば以下のような問い合わせ画面がでます。

f:id:brtRiver:20110406182132p:image

Silexの該当処理をみてみます。

<?php
...
// entry
$app->get('/', function() use ($app) {
    return $app['twig']->render('entry.twig', array());
});

無名関数のおかげでシンプルです。"/"へのGETメソッドでのアクセス時にこの処理が行われます。

フォームを表示するだけなのでentry.twigテンプレートを表示するだけですね。

バリデーション

Silexにはバリデーションの機能はありません。自分で用意するか書けば良いのですが今回は以下のようにしてみました。

<?php
...
// send email
$app->post('/', function() use ($app) {
	// validate
	$errors = array();
	// check empty
	foreach (array('name', 'email', 'message') as $k) {
		if (trim($app['request']->get($k)) === "") {
			$errors[] = sprintf("%s is required.", $k);
		}
	}
	// check email
	if (!filter_var($app['request']->get('email'), FILTER_VALIDATE_EMAIL)) {
		$errors[] = sprintf("email is not valid.");
	}
	// send email
	if (count($errors) === 0) {
          //..メール送信処理後にリダイレクト
	}
	return $app['twig']->render('entry.twig', compact('errors'));
});

問い合わせ画面と同じ"/"へのリクエストですが、POSTメソッドでアクセスされたときに処理される点($app->post())であることが異なります。

$app['request']->get('リクエストパラメータ名')でPOSTされたデータを受けることができるので、これを利用して必須チェックとメールアドレスチェックを行っています。メールアドレスのチェックはPHP5.2から利用できるfilter_var関数を使っています。そして、エラーがあれば$errorsに配列エラーメッセージを入れてエラーがある場合は再度問い合わせ画面に戻るという流れです。

エラー時のvalue属性の値の設定

テンプレートはTwigを使っていますが、appにSilexのアプリケーションインスタンスが格納されているのでそれを呼び出せば大抵のパラメータにもアクセスできます。

なので、POSTされたnameパラメータにアクセスしたい場合は {{app.requset.request.get('name')}}とすればアクセスできますが、.....ちょっと長ったらしいです。

そこで、Silexのアプリケーションのbeforeフィルター機能を使って、requestというグローバル変数にapp['request']->requestパラメータをアサインしておきます。

<?php
...
// filter
$app->before(function() use($app){
	// assign request parameters to "request" for Twig templates with shorter name
	$app['twig']->addGlobal('request', $app['request']->request);
});

これで、entry.twigは以下のようになりました。

{% extends "base.twig" %}
{% block title %}Entry Page{% endblock %}
{% block content %}

  <h1>Contact Form</h1>

  <ul class="error">
{% for error in errors %}
    <li>{{error}}</li>
{% endfor %}
  </ul>

  <div id="entryForm">
      <form method="post" action="{{app.request.baseUrl}}/">
	    <div id="formName">
          <label for="Name">Name:</label>
          <input type="text" name="name" id="Name" value="{{request.get('name')}}">
        </div>
        <div id="formEmail">
          <label for="Email">Email:</label>
          <input type="text" name="email" id="Email" value="{{request.get('email')}}">
        </div>
	    <div id="formMessage">  
          <label for="Message">Message:</label><br>
          <textarea name="message" rows="20" cols="20" id="Message">{{request.get('message')}}</textarea>
         </div>
         <div>
          <input type="submit" name="submit" value="Submit" class="submit-button">
         <div>
      </form>
  </div>
{% endblock %}

もちろん、Twigを使っているので標準でエスケープ処理されているのでXSSの心配はありません。

メール送信

Silexのドキュメントにあったサンプルとほぼ同じです。ただメール本文をTwigのテンプレートで書けるようにしただけです。

<?php
...
	// send email
	if (count($errors) === 0) {
	    $body = $app['twig']->render('mail.twig'); // twigのテンプレートの描画結果を代入
	    $message = \Swift_Message::newInstance()
	        ->setSubject(EMAIL_SUBJECT)
	        ->setFrom(array($app['request']->get('email')))
	        ->setTo(array(EMAIL_ADDRESS_FROM))
	        ->setBody($body);
	    $transport = \Swift_MailTransport::newInstance();
	    $mailer = \Swift_Mailer::newInstance($transport);
	    $mailer->send($message);
	    return $app->redirect($app['request']->getBaseUrl() .'/complete');
	}

メール送信後はcomplete画面にリダイレクト処理しています。これもSilexに用意された機能です。

Not Foundページ

ルーティングに基づいて動きますので、設定されたルーティングがないと例外を投げてくれます。

なので、アプリケーション実行時(run)をtry-catchしておけばOKです。本当はもう少し丁寧に処理したほうが良いかと思います。

<?php
...
// run app
try {
	$app->run();
}catch (Exception $e) {
	echo $e->getMessage();
}
感想

このindex.phpは全部で65行になりました。バリデーションの処理やメール送信の処理も書きつつルーティング機能、Twigのテンプレートが使えて65行はかなーり短いです。それほどページ数が多くない、またはTwigを手軽に使ってみたいという場合にはSilexはかなり使えると思います。

もちろん、エクステンションの仕組みがあるので、必要があれば機能を追加していくことも難しくないですし。

また、とにかくpharアーカイブされているのでFTPアップロードするとしてもストレスは少ないです。

そして、Symfonyコンポーネントを使っているという点は安心感が大きいです。なにせSymfony2でも使っているコア機能です。

ちょっと触っただけですがSilexに惚れました。

2011-04-02

[]PHPカンファレンス関西が楽しかった件

朝一で東京(正しくは千葉)から、大阪まで来てます。

本当はカメラでパシャパシャ写真撮ろうと思いながらカメラ忘れるとか、LTの資料をほぼ徹夜で作っていたのでせっかく電源がとれる席を取ったのに寝てたとか色々ありましたがそれでも行っただけの価値がありました

大阪で初めてのPHPカンファレンスといいながら東京でよく見かける人も多くいらっしゃいましたが、多くの大阪の方ともお話させていただき刺激も多い一日でした。

次世代PHPフレームワーク Symfony2

という内容でLTしてきました。

ちょっとでもSymfony2に興味をもってもらったらという目標のもと、5分オーバーするはずが5分で収まってしまうとか、、ありましたが反応をいただけたようで良かったです。

ドラ娘さんかわいかった

Symfony2は触っていて楽しいと思えるフレームワークなのでおすすめです。

ぜひno titleをチェックしてみてください。

ドラ娘さんかわいかった

今後も定期的に大阪でもこういったイベントがあるといいですよね。

共通項目を持つ仲間が集まることは楽しいものです。

ドラ娘さんかわいかった

さて、今は@itemanさん家で熱くドメイン駆動開発の話がつづいていてまだまだ楽しい時間はつづきます。

そして、少しだけでも自分がやらならなければならない方向が見えてきたような気もします。

いやー。かわいかったですね。

2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2013 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2014 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2015 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2016 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |