月別: 2014年11月 Page 1 of 2

NFSインストール&設定

向寒のみぎり、お健やかにお過ごしのことと存じます。
サーバーインフラエンジニアの葉です。
今日、NFS centos用の設定をご紹介します。

使用環境

nfsサーバー(192.168.56.22)
nfs-clientサーバー(192.168.56.21)

環境インストール

nfsサーバー

nfsサーバーインストール
[code]
yum install nfs-utils
[/code]

nfs-clientサーバー

nfs-clientサーバーインストール
[code]
yum install rpcbind
[/code]

nfs設定

共有ディレクトリを作成します

[code]
mkdir /home/nfs
[/code]

exportsの編集

vi /etc/exports
[code]
/home/nfs 192.168.56.0/24(rw,no_wdelay,root_squash)

・/home/nfs #公開ディレクト
・192.168.56.0/24 #接続を許可するクライアント
・(rw,no_wdelay,root_squash) #オプション。
[/code]

exportfsコマンドで設定の反映と確認を行います。

[code]
exportfs -ra
exportfs -v
[/code]

オプション。詳細は下記参照

※一般的なオプションの説明

オプション名 説明
ro 読み込み専用で
rw 読み書きを許可して
sync asyncと反対。ファイル更新が直ちに行われる
async ディレクトリ内のファイルは非同期に反映される
wdelay 複数の書き込み処理を1度に行う。NFSサーバ側での更新を一括して行う
no_wdelay wdelayのとは反対。syncオプションと併用する
noaccess 共有しない

マッピングに関するオプションの説明

オプション名 説明
all_squash 全てのUID,GIDを匿名アカウントへマッピング(nfsnobody)
anonuid 全てのUIDを匿名アカウントへマッピング
anongid 全てのGIDを匿名グループへマッピング(nfsnobody)
squash_uids 指定UIDを匿名アカウントに変換
squash_gids 指定したGIDユーザをすべて匿名グループへマッピング
map_daemon 動的なUID,GID変換を有効
map_identity UID,GIDに関する変換を行わない。
map_static UID,GIDに関する変換を定義するマップファイルを指定する
map_nis NISベースのUID,GID変換を有効
root_squash root特権をnfsnobodyに変換する
no_root_squash root_squashの反対。root特権有効

nfs起動

nfsサーバー

[code]
/etc/init.d/rpcbind start
/etc/init.d/nfslock start
/etc/init.d/nfs start
[/code]

自動起動の設定を行います。

[code]
chkconfig rpcbind on
chkconfig nfslock on
chkconfig nfs on
[/code]

nfs-clientサーバー

rpcbindを起動します。

[code]
/etc/init.d/rpcbind start
[/code]

マウント

[code]
mount -t nfs 192.168.56.22:/home/nfs /home/nfs/
[/code]
マウントした、あれ?エラーがでました。
・下記のエラーが出る場合
mount: 間違ったファイルシステムタイプ、不正なオプション、
192.168.56.22:/home/nfs のスーパーブロックが不正、コードページまたは
ヘルパープログラムの未指定、或いは他のエラー
(for several filesystems (e.g. nfs, cifs) you might
need a /sbin/mount. helper program)
In some cases useful info is found in syslog – try
dmesg | tail or so
[code]
yum install nfs-utils nfs-utils-libパッケージをインストールすればokです。
[/code]

自動マウントの設定

vi /etc/fstab
192.168.56.22:/home/nfs /home/nfs nfs rw 0 0

まとめ

同期時間、2.4GBのファイル22秒くらいです。
お役に立ちそうでしたら、ぜひご参考ください。

PHP Pear::File_Archive 特定の文字が文字化け

PHP Pear::File_Archive 特定の文字が文字化けについて

PEARPHPライブラリ「File_Archive」のバグを発見しました。

■現象
SJISのファイル名を圧縮すると特定の文字が文字化けてしまいます。

■例
○対象ファイル
表-入稿データ.pdf

■原因
PHP「5C問題」

■対策パッチ
/usr/share/pear/File/Archive/Reader.php

下記を修正
– $std = str_replace(“\”, “/”, $path);
+ $std = preg_replace (“/\//” ,”/”,$path);

○補足
ディレクトリの区切り文字を「\」(0x5c)から「/」に置き変える処理が、SJIS文字の2byte目に含まれる0x5cまで置換されています。

fuelphpからPDFを生成

こんにちは。

この業界に入ってまだ4ヶ月のWEBエンジニアのyuchiです。

以前開発でfuelphpからPDFを出力しないといけなかったので、今回その時調べた方法を書きたいと思います。

まずは準備からです。

①TCPDFをダウンロードする

②/fuel/app/vendor/の下にダウンロードしたファイルを解凍後、設置する

③/fuel/app/bootstrap.phpに下記を追加する

Autoloader::add_classes(array(
'TCPDF' => APPPATH.'vendor/tcpdf/tcpdf.php',
));

これで準備OKです。

④あとはPGに組み込みます

//PDF付加情報(一番初めの引数はPが縦、 Lが横)
$pdf = new TCPDF('L', PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
$pdf->SetCreator('');
$pdf->SetAuthor('');
$pdf->SetTitle('');
$pdf->SetSubject('');
//ヘッダーフッター情報
$pdf->setHeaderFont(Array('kozgopromedium', '', 14));
$pdf->setFooterFont(Array('kozgopromedium', '', 9));
$pdf->SetHeaderData('', '', リストの名前, $time . ' / ' . '発行者:' . Auth::get_screen_name());
//余白マージン設定
$pdf->SetMargins(5, 25, 5);
$pdf->SetHeaderMargin(5);
$pdf->SetFooterMargin(5);
//自動ページ切り替え設定
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
//カラム幅
$w = array(30, 30, 30, 30);
//塗りつぶし色
$pdf->SetFillColor(255, 255, 255);
$pdf->SetTextColor(20, 20, 20);
//日本語フォント設定
$pdf->SetFont('kozgopromedium', '', '9');
//固定長フォント設定
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
//ページ追加
$pdf->AddPage();
//値をセット
$pdf->Cell
//PDF を出力
$pdf->Output("output.pdf", "I");
//終了
exit();

こんな感じでPDFを出力することができました。

一息ついたところで、今日は終わります。

 

CSS Nite in KYOTO, Vol.3「Web制作業界最前線」に参加してきました!(その1)

11月14日(金)に開催された、CSS Nite in KYOTO, Vol.3「Web制作業界最前線」に参加してきたのでご紹介します。

CSS Nite in KYOTO, Vol.3「Web制作作業最前線」

タイムテーブル

セッション1:
ディレクションが苦手な人のための、「Webディレクション」の処方箋(Webデザイナーだったら編)
高田 信宏さん(クリエイター育成協会)

セッション2:
コンテンツマーケティングは恋のライセンス
成田 幸久さん(インフォバーン

セッション3:
Webプログラミングの今とこれから 〜最新Web技術の紹介とそこから考えるWebクリエイターの可能性〜
村岡 正和さん(バスタイムフィッシュ)

セッション4:
Evernoteでも採用されたMaterial Designの概要と導入方法
阿部 正幸さん(KDDIウェブコミュニケーションズ)

セッション5:
UIデザイナーとは何者なのか?
土屋 尚史さん(グッドパッチ)

Session1:
ディレクションが苦手な人のための、「Webディレクション」の処方箋(Webデザイナーだったら編)

講師:高田 信宏さん(クリエイター育成協会

まさかの信号の故障により、電車が大幅に遅れて途中からの参加。
そのため全部聞くことが出来なかったのですが、サンプルのヒアリングシートを紹介して、その重要性を説明されてました。
詳細は、Webディレクション教科書(通称「黒本」)で確認してね!とのことwww

実際の業務に一番近い内容だったのですが、残念。。。
また機会があれば参加します!

Session2:
コンテンツマーケティングは恋のライセンス

講師:成田 幸久さん(インフォバーン

とてもいい響きのナイスなセッションタイトル。

京都にも支社を置かれてから、業務でもお世話になっているインフォバーンさんですが、企業紹介の中で、「GIZMODO(ギズモード・ジャパン)」や、「lifehacker(ライフハッカー)」、「roomie(ルーミー)」といった、メディアも運用されているとのことを(今更?)知りました。
すみません。いつもお世話になっているのに、全く知りませんでしたw

(正確には、グループ会社「メディアシーン」が運営)

コンテンツマーケティング=恋愛戦略

コンテンツマーケティングとは、「顧客にとって価値のあるコンテンツを提供していくこ­とで、興味を惹き、共感をしてもらい、結果として売上げにつなげる」というマーケティング戦­略とのこと。
この戦略を、恋愛に例えて分かりやすく紹介してくださいました。

5つのメリット

1.あなたに恋を持った人だけが訪れる
2.アプローチしたい人だけに絞れる
3.あなたの優位性をアピールできる
4.あなたの評判が拡散する
5.あなたをどう思っているのか分かる

戦争の時代から、恋愛の時代へ

これまでのコンテンツは、ターゲットに向けてどのように情報を発信していくか、コンテンツを届けるかというSEOをベースとした一方通行の奪い合い(戦争)のようなものだったが、もうそんな時代が終焉を迎えようとしている。
これからは、ターゲットに届けることはもちろんだが、双方向に「愛」が芽生えない限りそのコンテンツに成功は望めない。
そう、これからは「恋愛」の時代なんだ。

--まとめると、こんな感じの設定でした。うん、分かりやすい。

地道な努力と、「愛」が求められる

とはいっても、恋愛はそうはかんたんに成就するものではありませんよね。
「恋愛は一日にして成らず」
愛を持った、地道な努力が必要なのだそうです。

「恋というのは一つの芝居なんだから、筋を考えなきゃだめだよ」by 谷崎潤一郎

そこで、次のような「成功に導く7つのステップ」を紹介してくださいました。

1.目標設定(KPIとKGI)

・KPI(重要業績評価指標)を明確化し、各プロセスごとのKGI(重要目標達成指標)を設定することで、顧客とのつながりを長期的に維持

2.状況分析とトピックの設定

・情報なくして戦略なし
SWOT分析(強み、弱み、機会、脅威)

3.ペルソナ設定と購買ファネル

・ターゲットは1人!
30%ではなく、「30倍」!インフォバーン総研)

4.コンテンツの編集計画

・コンテンツカレンダーを作成し、PDCAをスケジュール化して管理

5.心を動かすコンテンツの制作

アリストテレスの「ストーリー三幕」(状況設定 > 葛藤 > 解決)インフォバーン総研)
・「変化」、「対比」が重要!
インパクトを与え、自分ゴト化させる!

6.コミュニケーションの管理
7.達成度の測定(SMART goal)

・Specific(具体的に)
・Measurable(測定可能な)
・Achievable(達成可能な)
・Related(経営目標に関連した)
・Time-bound(時間制約がある)

日々やっていることだったり、なんとなく分かっていることなんですが、「恋愛」という状況に照らしあわせて考えていくことが出来るため、ペルソナを設定することと同じように、チーム内でその重要性を共有しやすくなりそうだと感じました。
楽しく、とてもためになるお話をありがとうございました!


(長くなってしまったので、セッション3移行は次回に紹介しようと思いまーす。興味ある方はお楽しみに!)

WebSocketでルータ越しの通信を行う

概要

弊社ではコミュニケーションツールとして、
チャットサービスの「Slack」を使用しています。

https://slack.com/

Slackでは、
チャット内で動作するBotを簡単に作成できるような仕組みが用意されています。

とても簡単なので、色々とBotを作成していますが、
今回はその中でも「Kanasanコマンド」を作成した時に行ったテクニックをご紹介します。

Kanasan-API

社内には、Mac miniにつながっている大きなスピーカーがあります。


参考:http://seeds-std-pr.blogspot.jp/2014/09/kana-san.html

このMac miniで再生すると、
スピーカーから音が出て社内全体に響き渡るようになっています。

普段は、朝礼の時間にラジオ体操を流したり、
がんばるタイムの始めと終わりに学校のチャイムを鳴らしたりしています。

また、SayKana (http://www.a-quest.com/quickware/saykana/)というソフトを使用して、
任意の日本語文字列を喋らせたりもしてます。
単純なものですが、このシステムを「Kanasan」と名づけました。

先日、このツールと連携するKanasan-APIというWebAPIも作りました。
https://github.com/memememomo/p5-KanaSan-API

このKanasan-APIをSlackと連携させたいなと考えました。

Kanasanコマンド

Slackは、(噂では)バックエンドがIRCということもあり、
メッセージの最初にスラッシュ(/)をつけると、コマンドとして認識されます。

Slackには、新しくコマンドを作成できる仕組みも用意されています。

ということで、「/kanasan ほげほげ」とSlack上で入力したら、
社内のスピーカーに「ほげほげ」と喋らせることができるKanasanコマンドを作成しようと考えました。

メッセージ反応系botの仕組みと問題点

任意のURLを設定すると、Slack上でメッセージが投稿されたタイミングで、
設定したURLにリクエストを飛ばすことができます。

メッセージ反応系botでは、
このリクエストを処理して反応を返します。

Kanasanコマンドもこの仕組を利用します。
しかし、今回のKanasan-APIはオフィスのルータ下にあるため、
Slackに直接叩いてもらうことができません。

Websocketでルータ越しの通信

上記の問題点を解消するため、
まずはSlackに叩いてもらうエンドポイントをHeroku上に置くことにしました。
そして、Heroku上のエンドポイントとオフィス内のサーバをWebsocketでつなぎ、
なるべくリアルタイムに反応できるようにしました。

Heroku上のエンドポイントのソースは以下のようになります。

heroku.coffee
HTTP_PORT = process.env.PORT || 8000
app = require("express")()
socketio = require 'socket.io'
server = require('http').Server(app)
io = socketio.listen(server)
# 社内サーバにデータを送るWebSocket
s = undefined
io.sockets.on 'connection', (socket) ->
  s = socket
  console.log 'connected'
# Slackからのリクエストを処理
app.get "/api", (req, res) ->
  t = req.param 'text'
param =
    text:t
if s != undefined
    s.emit 'news', param
    res.send 'ok'
  else
    res.send 'ng'
server.listen(process.env.PORT)
console.log HTTP_PORT

express と Socket.io を使用しています。
expressでSlackからのリクエストを受け付ける処理を記述し、
Socket.ioで社内サーバにWebsocket経由でデータを送る処理を記述しています。
expressとSocket.ioを連携させる機能があったので比較的簡単に書けました。

社内のサーバのソースは以下のようになります。

local.coffee
WEBSOCKET_URL = 'http://hogehoge.herokuapp.com/'
API_URL = 'http://local-kanasan.net/api'
request = require('request')
io = require('socket.io-client')(WEBSOCKET_URL)
# Heroku上のサーバにWebSocketで接続する
socket = io.connect WEBSOCKET_URL
# Herokuからのデータを受信するWebSocket
socket.on 'news', (data) ->
try
# Kanasan-APIを叩く
options =
      uri: API_URL,
      form: {text: data.text}
request.post options, (error, response, body) ->
console.log body
catch e
console.log 'error'

Socket.io と request を使用しています。
Socket.ioでHeroku上からのデータを受け付る処理を記述し、
requestでKanasanAPIを叩く処理を記述しています。

以上で、Kanasanコマンドを動作させることができました。

まとめ

WebSocketでルータ越しの通信を実現しました。
Node.jsを使用すると、今回のように双方向通信処理をカジュアルに書けていいですね。
ブラウザとの双方向通信以外の用途で色々使えそうな可能性が見えてきました。

SublimeTextの設定まとめ

私は普段SublimeTextというエディタを使っています。

なかなか使い易いです。

今日はこのなかなか使い易いSublimeTextをさらに快適に使う設定を紹介したいと思います。

ちなみにMacです。

環境設定

まず、基本的な環境設定を行いましょう。環境設定は左上のメニューから

Preferences > Setting – User

を選択します(もしくは⌘+,)。

すると

// Settings in here override those in "Default/Preferences.sublime-settings",
// and are overridden in turn by file type specific settings.
{
}

と書かれたテキストが開きます。SublimeTextの環境設定は全てこのファイルに記述していきます。

私の環境設定はこんな感じです。

// Settings in here override those in "Default/Preferences.sublime-settings",
// and are overridden in turn by file type specific settings.
{
// オートコンプリートの選択時にEnterを使えないようにする
"auto_complete_commit_on_tab": true,
// オートコンプリートが表示されるまでの時間
"auto_complete_delay": 50,
// サイドバーでフォルダを太字で表示する
"bold_folder_labels": true,
// デフォルトの文字コード
"default_encoding": "UTF-8",
// スペースやタブを表示する
"draw_white_space": "all",
// 折りたたむボタンを隠す
"fade_fold_buttons": false,
// フォント
"font_face": "M+ 1m",
// フォントサイズ
"font_size": 13.0,
// カーソルのある行をハイライトする
"highlight_line": true,
// 変更されたファイルのタブを強調する
"highlight_modified_tabs": true,
// 改行時、括弧でインデントを揃える
"indent_to_bracket": true,
// 左の行番号との間隔
"margin": 0,
// スクロールバーを重ねる
"overlay_scroll_bars": "enabled",
// ルーラー(縦線)の位置(複数指定可能)
"rulers":
[
80
],
// タイトルバーにファイルのフルパスを表示する
"show_full_path": true,
// タブをスペース何個分にするか
"tab_size": 4,
//テーマの変更
"theme": "Default.sublime-theme",
// タブをスペースに変換する
"translate_tabs_to_spaces": true,
//空白の削除
"trim_trailing_white_space_on_save": false,
// window幅で自動で折り返す
"word_wrap": true
}

これをコピーして、先ほど開いたテキストにペーストして保存すれば設定完了です。
他にも色々設定できて、以下のページによくまとまっています。
Sublime Text 2 のDefault設定ファイルについて

Google日本語入力を使う

Google日本語入力も普段使っています。

Google日本語入力は、日本語入最中に候補が出てTabキーを使って選択できます。

しかし、SublimeTextではTabキーが他の動作に割り当てられているので、候補を選択できません。

そこで、以下のように設定します。

Preferences > Key Bindings – Default
を開き、以下のコード(95 行目から101 行目までの 7 行)をコメントアウトします。

// { "keys": ["tab"], "command": "insert_best_completion", "args": {"default": "\t", "exact": true} },
// { "keys": ["tab"], "command": "insert_best_completion", "args": {"default": "\t", "exact": false},
//     "context":
//     [
//         { "key": "setting.tab_completion", "operator": "equal", "operand": true }
//     ]
// },

MacのSublimeText3だと最初このファイルは編集できないようなので、参考URLに沿って編集できるようにして下さい。

これで日本語入力時、Tabキーを押すことで候補を選択できるようになります。

Sublime Text 3 で日本語入力中に Tab キーで入力・変換候補を選択できるようにする | R

 

日本語で検索する

SublimeTextは基本的に日本語が嫌いなようです。日本語の文字列を検索しようとするとよく分からないことになります。

これも以下のように設定することで検索できるようになります。

Preferences > Key Bindings – Default
を開き、以下のコード(627行目あたりから)をコメントアウトします。

// Find panel key bindings
// { "keys": ["enter"], "command": "find_next", "context":
//     [{"key": "panel", "operand": "find"}, {"key": "panel_has_focus"}]
// },
// Replace panel key bindings
// { "keys": ["enter"], "command": "find_next", "context":
//     [{"key": "panel", "operand": "replace"}, {"key": "panel_has_focus"}]
// },
// Incremental find panel key bindings
// { "keys": ["enter"], "command": "hide_panel", "context":
//     [{"key": "panel", "operand": "incremental_find"}, {"key": "panel_has_focus"}]
// },

はい、これで日本語でも正常に検索できるようになります。

Sublime Text 3 で日本語を検索したとき文字が消える不具合を直す

 

パッケージ

SublimeTextには様々なパッケージがあって、こんな機能があったらいいなというものがよく見つかります。

私が便利だと思うのは

  • GitGutter:gitの差分行に目印をつけてくれます
  • SideBarEnhancements:サイドバーでファイルコピーとかできるようになる
  • SFTP:保存と同時にFTPでアップロードしてくれます
  • SublimeLinter:コーディングしながら構文間違いを指摘してくれます

とかです。他にも、便利な機能がたくさんあると思います。

ちなみに、SublimeTextで残念なのは、Shift_JISEUC-JPに対応していないことです。
この文字コードのソースを扱う時は、SublimeTextが使えないので作業スピードが半減です。
この文字コード問題が解決したら、SublimeTextは最強になると思います!

 

要素の選択について

近頃は朝夕の気温がめっきり下がり、外に出るのが億劫になってきています。
そんな時は自宅にこもり、先日発売されたモンスターハンター4Gなんかをやりたくなりますね…まだ持っていませんが…
社内でモンハン部が発足すれば、迷わず購入するのですが…|ω・`)チラ

閑話休題、業務でjQueryを用いて諸々の機能を実装するのですが、その際に少々悩むjQueryでの要素の選択について、自身の備忘録を兼ねて書きます。

DOM要素の選択

まず、jQueryでは容易にDOM要素の選択が行なえます。

$("body")

上記のコードだけでbody要素を選択することができます。

基本的なセレクタ(セレクター)指定方法

セレクタの指定方法には、タグを指定する以外にも様々なパターンがあります。
以下に基本的なセレクタ指定方法を記述します。

要素(タグ)セレクタ

$("div")

div要素が選択ができます。

idセレクタ


指定したidを持つ要素が選択できます。

classセレクタ

$(".hogehoge")

指定したclassを持つ要素が選択できます。

グループセレクタ

$("body, div, p")

指定した要素が選択ができます。

$("body, #hoge, .hogehoge")

また、上記コードのように、異なるセレクタでの指定も可能です。

ユニバーサルセレクタ

$("*")

全ての要素が選択ができます。
ワイルドカードでの指定です。

属性セレクタ

<a href="" target="_blank">リンク</a&gt

このようにtarget属性を持ったaタグがあるとして、

$("a[target='_blank']")

上記コードで、target=’_blank’の属性と値を持つaタグが選択できます。
また、属性セレクタには色々と指定方法があり、それについても記述します。

[属性名]

$("input[name]")

特定の属性を持つ要素を選択できます。

[属性名=値]

$("input[name="hoge"]")

属性の値が一致した要素を選択できます。

[属性名=!値]

$("input[name!='hoge']")

属性の値が完全一致しない要素を選択できます。

[属性名 *= 値]

$("input[name*='hoge']")

属性の値が部分一致した要素を選択できます。

<input name="hoge" type="text" >
<input name="hoge123" type="text" >
<input name="hoge hoga hogi" type="text" >

上記コードでは、全て対象です。

[属性名 ~= 値]

$("input[name~='hoge']")

区切られた単語ベースで一致した要素を選択できます。

<input name="hoge" type="text" >
<input name="hoge123" type="text" >
<input name="hoge hoga hogi" type="text" >

上記コードでは、1行目と3行目が対象です。

[属性名 ^= 値]

$("input[name^='hoge']")

値と前方一致した属性を持つ要素を絞り込みます。

<input name="hoge123" type="text" >
<input name="123hoge" type="text" >

上記コードでは、1行目が対象です。

[属性名 $= 値]

$("input[name$='hoge']")

値と後方一致した属性を持つ要素を絞り込みます。

<input name="hoge123" type="text" >
<input name="123hoge" type="text" >

上記コードでは、2行目が対象です。

階層構造でのセレクタ指定方法

基本的な指定方法では、ピンポイントでその要素の選択でしたが、階層構造でのセレクタ指定もできるので、子孫要素の選択などが可能です。
以下に基本的な子孫、兄弟要素を選択するセレクタの指定方法を記述します。

子孫セレクタ

$("body div")

body要素の中にある、div要素を選択できます。

$("body div.hoge")

上記のように、特定のclassを持ったdiv要素の選択などもできます。

セレクタ

$("body > div")

body要素の直下の、div要素を選択できます。

隣接セレクタ

$("h1 + div")```
h1要素の”すぐ”後に続く(隣接する)、div要素を選択できます。
<h3>兄弟セレクタ</h3>

$(“h1 ~ div”)

h1要素の後に続く(弟要素)、div要素を選択できます。
”兄弟セレクタ”と書きましたが、基準となる要素より後の要素のみが対象のようです。<br /><br />
以上が私が思う、ごく基本的なセレクタの指定方法のまとめです。
<h2><span style="color: #2196f3">まとめ</span></h2>
セレクタの指定方法は多くあり、今回の内容で全て網羅しているわけではありません。
私の知らないセレクタの指定方法もまだあるかと思います。
また、セレクタではなくjQuery関数で、先祖子孫、親子、兄弟要素の選択の方法や、フィルタと呼ばれるセレクタの指定方法もあります。
それらについては次回以降に書こうかと考えております。
<h2><span style="color: #2196f3">後述</span></h2>
今回も至極当然な記事になってしまった…が、備忘録も兼ねているということでよしとします。
頻繁に利用するので、作業の度に調べることの無いようにしよう。

PS3 Media Server をDebian(wheezy)にインストールしてDLNAサーバにする

自宅のDebiansambaを入れてファイルサーバとして使用しています。

今回、このサーバーに保存された動画をリビングの大きいテレビで再生したいと思いました。
再生側はPS3ですのでPS3 Media Serverを導入してDLNAサーバーとし、PS3から再生できるようにします。

PS3 Media Serverとは

PS3用のDLNAサーバソフトです。
javaで作成されており、WindowsMAC、そしてLinuxでも動作します。

DLNAとは

DLNA(Digital Living Network Alliance)とは、AV家電やパソコン、スマホタブレットなど、
機器やメーカーを問わず、LANを通じて、映像・音楽・写真をやりとりできるようにするための規格です。

PS3DLNA対応機器ですので、DebianサーバーをDLNAサーバとすればリビングのPS3Debianサーバーの動画を再生することができるようになります。

インストール手順

sources.list にマルチメディア関連のリポジトリを追加

vi /etc/apt/sources.list
deb http://www.deb-multimedia.org wheezy main non-free

マルチメディアリポジトリのキーリングを入れる

apt-get install deb-multimedia-keyring

リポジトリ情報を更新

apt-get update

必要パッケージのインストール

apt-get install openjdk-6-jre openjdk-6-jre-headless openjdk-6-jre-lib unzip
apt-get install mediainfo mplayer mencoder ffmpeg

PS3 Media Server の本体をインストール

PS3 Media Server の本体をhttp://ps3mediaserver.googlecode.com/ からインストール

cd /usr/local/src
wget http://sourceforge.net/projects/ps3mediaserver/files/pms-1.90.1-generic-linux-unix.tar.gz/download
tar zxvf pms-1.90.1-generic-linux-unix.tar.gz
cd pms-1.90.1
mkdir /opt/pms
mkdir /var/log/pms
cp -r ./pms-1.90.1/* /opt/pms/

設定ファイルを編集

vi /opt/pms/PMS.conf
language = ja
minimized = true
folders = /home/data/video1,/home/data/video2

foldersに公開したいディレクトリをカンマ区切りで記述します

起動ファイルを準備

起動ファイルがフォーラムで配られているのでダウンロードして使わせてもらう

cd /opt/pms/
wget http://www.ps3mediaserver.org/forum/download/file.php?id=1741\&amp;sid=eaf9e0f97250b087e1bc6c608627a963 -O PS3MediaServer30.zip
unzip PS3MediaServer30.zip
mv PS3MediaServer /etc/init.d/.
chmod a+x /etc/init.d/PS3MediaServer
chown root:root /etc/init.d/PS3MediaServer

起動ファイルを修正

vi /etc/init.d/PS3MediaServer

実行ユーザーがマルコさんになってるのでrootに変更する

PMSUSER=marco
PMSGROUP=sfz
↓
PMSUSER=root
PMSGROUP=root

自動起動設定を行う

update-rc.d PS3MediaServer defaults

PS3 Media Server を起動!

/etc/init.d/PS3MediaServer start

PS3から確認する

PS3を起動して、PS3 Media Server が項目に現れれば成功です。
選択して動画の再生をテストしましょう。

参考

参考というかほぼこのままです
Debian に PS3 Media Server 導入 -squeeze編-

コメント欄をレビュー機能にカスタマイズ[WordPress]

やること

・★マークでユーザーが評価できる
・投稿されたレビューに参考になったかを評価できる

使用するプラグイン

Comment Rating Field Plugin
Like Button Voting & Rating

Comment Rating Field Plugin

★のマークで評価できる項目が自動挿入されます。
星の画像はカスタマイズ可能で無料のプラグインにしてはとても自由度が高いです。
有料も検討したくなります。

Like Button Voting & Rating

評価するボタンのテキストや、アイコンをWPの管理画面から編集可能。
また、デザインのバリエーションも豊富。

以上の二つのプラグインを入れただけで下の画像くらいにはなります。
この状態でも使えそう。

コメント欄に5段階評価のレビュー機能を追加出来るComment Rating Field Plugin
こちらの記事によると平均点なども実装できそうなので
今後、もっと工夫できそうです。

phpPgAdminにログインできない時

サーバーインフラエンジニアの葉です。
今日は、phpPgAdminについて少しお話します。

phpPgAdminとは何か?

phpPgAdminは、ウェブブラウザから PostgreSQL データベースを管理・操作する為のツールで、テーブルの作成や参照、
データのバックアップやリストア等の操作を行うことができる、とても便利なウェブブラウザです。

管理画面

インストールが完了すると、管理画面が下の画面ようになります。

早速ログインしましょう!

あれ?ログインできなかった・・・>_<

解決方法

こんなとき、conf/config.inc.phpで修正しなければいけない箇所が2つがあります。

ポイント1

[code]
$conf[‘servers’][0][‘slony_support’] = true; → falseを変更
[/code]

ポイント2

[code]
$conf[‘servers’][0][‘sslmode’] = ‘disable’;
[/code]
コメントアウトします。

以上、2点を修正してみました。
それでは気を取り直して、もう一度ログインしてみましょう!

できました\^0^/


ばっちりログインしました。

ぜひ、参考にしてみてください。

Page 1 of 2

© SEEDS Co.,Ltd.