9月 30

引き続き「エコー機能」の話しですが。。。
結局、削除機能と返信機能をつけてみました。

2.12.3に組み込んだの図

メッセージの削除

返信機能

サーバーから非同期でメッセージを読み取っているので新着メッセージがあった場合でもページ移管なく更新されます、但しあまり大規模のサイトではDBへの負荷が高くなるためもう少し工夫(今は新着があろうが無かろうが全件検索を実行している)が必要かと思いますが、少人数のサイトでは「ショートメッセンジャー」として十分役に立つことと思います。

Tagged with:
9月 23

Twitterに始まり Wassr, mixiエコー(mixiボイス)等々、ゆるめの一言コミュニケーションツールが流行っているようですね、それに負けじと(もちろん負けてますが)OpenPNE上で使える「さらにゆるめのチャット機能」を試作してみました。動作は単純でブラウザーを使った自動リロード型のチャットボードのような感じ。OpenPNEコアのソースには変更を全く加えず(DBへのテーブル追加は必要)、管理画面からのテンプレートの挿入と、I/O用のPHPスクリプトをUPをするだけという比較的お気軽に設置ができます。

最初はテンプレへFlashを埋め込む形を考えていましたが とりあえずJavascriptで書いてみたらこれで十分な気がしてきました(いや実はもう書き直すのが面倒くさいんです)。

こんな単純ですがフレンド間でのチャットが楽しめます。
因にmixiエコーのようなレス機能や削除機能なんてありません!(それが売りです。笑)

ところで、Usagi ProjectさんのMyNETS-1.2.0の新機能として実装された一言発言「今日のひとこと」、これはmixi エコー(ボイス)の使い勝手を上回る至れり尽くせりな機能が満載ですね。

Tagged with:
9月 13

外部ログインページだけですが、iPhone用のお手軽カスタマイズ方法。

処理の流れ

  • 全てのアクセスを外部ページ(index2.php)で受ける
  • iPhone以外からのアクセスは通常のログインページへ
  • iPhoneからのアクセスは外部ページで処理

管理画面|SNS設定

index2.php

最小構成はこんな感じ


<?php
$ua = $_SERVER['HTTP_USER_AGENT'];

if (ereg("iPhone",$ua)) {
  //iPhone用の処理
  ・・・ 省略 ・・・
  exit;
}
//iPhone以外(標準のログインへとばす)
header('Location:http://OPENPNE_URL/?m=pc&a=page_o_login');
?>

※iPhone以外のエージェントと判定された場合index.phpへ飛ばすとループしてしまうため注意。

本体の向き(縦横)でスタイルシートを切り替えてみました


<?php
$ua = $_SERVER['HTTP_USER_AGENT'];

if (ereg("iPhone",$ua)) {
print <<<EOD
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
  <meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0;">
  <title>My iPhone Page</title>
  <link rel="apple-touch-icon" href="iphone/images/myiphone_ico.png"/>
  <link rel="StyleSheet" href="./iphone/css/iphone_portrait.css" type="text/css"  media="screen" id="orient_css">
  </head>
  <body onorientationchange="orient();">
  <form action="http://OPENPNE_URL/" method="post">
    <div id="wrap">
      <div id="header"></div>
      <div id="content">
      <p>Member Sign In</p>
      <p>Please enter your ID and Password.</p>
      <input type="hidden" name="m" value="pc" />
      <input type="hidden" name="a" value="do_o_login" />

      <ul>
      <li class="myLabel">Email:</li>
      <li><input type="text" name="username" id="username" value="" tabindex="1"></li>
      </ul>

      <ul>
      <li class="myLabel">Password:</li>
      <li><input type="password" name="password" id="password" tabindex="2"></li>
      </ul>

      <p><input type="checkbox" name="is_save" id="is_save" value="1" tabindex="3"><label for="is_save">次回から自動的にログイン</label></p>
      <p><input type="submit" value="Sign In" tabindex="4"></p>
      </div>
      <div id="bottom"></div>
    </div>
  </form>
  </body>
</html>

<script type="text/javascript">
function orient()
{
  switch(window.orientation){
  case   0:  document.getElementById("orient_css").href="./iphone/css/iphone_port.css";  break;
  case -90:  document.getElementById("orient_css").href="./iphone/css/iphone_land.css";  break;
  case  90:  document.getElementById("orient_css").href="./iphone/css/iphone_land.css";  break;
  }
}
window.onload = orient();
</script>
EOD;
  exit;
}

header('Location:http://OPENPNE_URL/?m=pc&a=page_o_login');
?>

※ OPENPNE_URL は各自自分のサイトURLに読み換えて下さい。

スタイルシート例

iphone_land.css(横用レイアウト)


body
{
	background-color:#333;
	margin:0;
}

#wrap
{
	overflow:auto;
	width:480px;
	height:350px;
}

#header
{
	background:url(../images/header_land.jpg);
	background-repeat:no-repeat;
	height:100px;
}

#content
{
	background:url(../images/middle_land.jpg);
	background-repeat:repeat-y;
	margin-top:-5px;
}

p
{
	margin:5px;
	padding-left:25px;
	width:370px;
}

#bottom
{
	background:url(../images/bottom_land.jpg);
	background-repeat:no-repeat;
	height:30px;
	margin-top:-5px;
}

ul{
	margin:5px;
	padding-left:25px;
	list-style:none; inside;
}

li.myLabel{
	width:80px;
	float:left;
	text-align:right;
}

iphone_land.css(縦用レイアウト)


body
{
	background-color:#333;
	margin:0;
	padding:0;
	font-size:12px;
}

#wrap
{
	overflow:auto;
	width:320px;
	height:480px;
}

#header
{
	background:url(../images/header_port.jpg);
	background-repeat:no-repeat;
	height:100px;
}

#content
{
	background:url(../images/middle_port.jpg);
	background-repeat:repeat-y;
	margin-top:-5px;
}

p
{
	margin:5px;
	padding-left:25px;
	width:270px;
}

#bottom
{
	background:url(../images/bottom_port.jpg);
	background-repeat:no-repeat;
	height:30px;
	margin-top:-5px;
}

ul{
	margin:5px;
	padding-left:25px;
	list-style:none; inside;
}

画像

header

body

bottom

[public_html]
  index.html
  index2.html(今回追加したコード)
  [iphone](以下今回追加したファイル)
    [css]
        iphone_land.css
        iphone_port.css
    [images]
        header_land.jpg
        header_port.jpg
        middle_land.jpg
        middle_port.jpg
        bottom_land.jpg
        bottom_port.jpg

Tagged with:
9月 04

chrome

Google社製インターネットブラウザー「Google Chrome」、公開から数時間後にブラウザーのクラッシュに繋がるセキュリティーの脆弱性が発見されてしまったそうですが、自分の周りの評価は中々好評なようです。あまりのシンプルさにBookMarkの出し方すらわからず戸惑っているアナタ、とりあえず、[Ctrl+B] でブックマークの表示/非表示が切り替わります。
後は、まもなく登場するであろうエクステンションAPIが楽しみです。

ブラウザーの未来

たかがブラウザーと侮る無かれ、確かに数年前まではホームページをビジュアル化して表示させるためのツールだったわけですが、今やオフィスアプリケーションから3DCADまで殆どのアプリがブラウザー上で動いています、今後は益々高機能化してこの傾向は更に加速していくのではないでしょうか?
そうなるともうWindowsだとかMacOSだとかあまり関係なくなってきて、極端な話OS無しでブラウザーが動くとか、ブラウザー上でMacOSXのエミュレータを動かすとか、そんな時代になるかもしれませんね。笑

Google Chromeの隠しコマンド?

ところでChromeのアドレスバーにはサイトのURLやローカルのフォルダー名やファイル名だけではなく、検索キーワードも打ち込めるのですが、更に以下のコマンドを打ち込むと様々な情報を確認することができます。

  • about:internets
  • about:version
  • about:crash
  • about:memory
  • about:stats
  • about:network
  • about:plugins
  • about:dns
  • about:cache
  • about:histograms
  • about:hang  注意:カレントのタブがハングアップします
Tagged with:
9月 02

最近iPodの音が悪い、音圧が出ないし特に低域があまり聴こえない。iPod本体には、購入時から1年間のメーカー保障が付いていることは知っていたが、なんと付属アクセサリーにも適応されると聞いて即連絡!。数日後にはヤマト急便の人が、交換のため新品のイヤホンを持って来てくれました。
毎日使用していると大体一年前後で壊れます、自分の場合はこれで3個目、最初の2個は保障の事など頭に無くて自腹で購入、使えているうちは余り気にしないものの、いざ自分で選んで買うとなるとやはり高性能のものが欲しくなって一万円くらいの出費になります。(下手したら本体より高くつく!)
そして修理(交換)の手続きはWebから簡単に行えます。
オンライン修理サービス

Docomo携帯のバッテリーも「プレミアム会員(無料)」に入っていると2年以上から無料交換の対象です、自分の場合1年半くらいでも無料で交換してもらいました。

9月 01

OpenPNE3 alpha2(OpenPNE3_trunk_20080827)で使われているTABLEの一覧です。

admin_user

NAME TYPE NULL DEFAULT PRIMARY UNIQUE FLAG
id int ( 11 ) YES auto_increment
username string ( 64 ) YES unique_key
password string ( 40 )

authentication_login_id

NAME TYPE NULL DEFAULT PRIMARY UNIQUE FLAG
id int ( 11 ) YES auto_increment
member_id int ( 11 ) YES NULL multiple_key
login_id string ( 128 ) YES NULL YES unique_key
password string ( 32 ) YES NULL

authentication_pc_address

NAME TYPE NULL DEFAULT PRIMARY UNIQUE FLAG
id int ( 11 ) YES auto_increment
member_id int ( 11 ) YES NULL multiple_key
password string ( 32 ) YES NULL
register_session string ( 32 ) YES NULL

community

NAME TYPE NULL DEFAULT PRIMARY UNIQUE FLAG
id int ( 11 ) YES auto_increment
name string ( 64 ) YES unique_key

community_member

NAME TYPE NULL DEFAULT PRIMARY UNIQUE FLAG
id int ( 11 ) YES auto_increment
community_id int ( 11 ) multiple_key
member_id int ( 11 ) multiple_key
position string ( 32 ) YES NULL multiple_key

friend

NAME TYPE NULL DEFAULT PRIMARY UNIQUE FLAG
id int ( 11 ) YES auto_increment
member_id_to int ( 11 ) multiple_key
member_id_from int ( 11 ) multiple_key

member

NAME TYPE NULL DEFAULT PRIMARY UNIQUE FLAG
id int ( 11 ) YES auto_increment
name string ( 64 )
is_active int ( 11 )
created_at datetime ( 19 ) YES NULL
updated_at datetime ( 19 ) YES NULL

member_config

NAME TYPE NULL DEFAULT PRIMARY UNIQUE FLAG
id int ( 11 ) YES auto_increment
member_id int ( 11 ) multiple_key
name string ( 64 )
value text YES NULL

member_profile

NAME TYPE NULL DEFAULT PRIMARY UNIQUE FLAG
id int ( 11 ) YES auto_increment
member_id int ( 11 ) YES NULL multiple_key
profile_id int ( 11 ) YES NULL multiple_key
profile_option_id int ( 11 ) YES NULL multiple_key
value text YES NULL

navi

NAME TYPE NULL DEFAULT PRIMARY UNIQUE FLAG
id int ( 11 ) YES auto_increment
type string ( 64 ) multiple_key
uri text YES NULL

navi_i18n

NAME TYPE NULL DEFAULT PRIMARY UNIQUE FLAG
caption text YES NULL
id int ( 11 ) YES
culture string ( 7 ) YES

profile

NAME TYPE NULL DEFAULT PRIMARY UNIQUE FLAG
id int ( 11 ) YES auto_increment
name string ( 64 ) YES unique_key
is_required int ( 11 )
is_unique int ( 11 )
form_type string ( 32 )
value_type string ( 32 )
value_regexp text YES NULL
value_min int ( 11 ) YES NULL
value_max int ( 11 ) YES NULL
is_disp_regist int ( 11 )
is_disp_config int ( 11 )
is_disp_search int ( 11 )
sort_order int ( 11 ) YES NULL

profile_i18n

NAME TYPE NULL DEFAULT PRIMARY UNIQUE FLAG
caption text
info text YES NULL
id int ( 11 ) YES
culture string ( 7 ) YES

profile_option

NAME TYPE NULL DEFAULT PRIMARY UNIQUE FLAG
id int ( 11 ) YES auto_increment
profile_id int ( 11 ) YES NULL multiple_key
sort_order int ( 11 ) YES NULL

profile_option_i18n

NAME TYPE NULL DEFAULT PRIMARY UNIQUE FLAG
value text YES NULL
id int ( 11 ) YES
culture string ( 7 ) YES

sns_config

NAME TYPE NULL DEFAULT PRIMARY UNIQUE FLAG
id int ( 11 ) YES auto_increment
name string ( 64 ) YES unique_key
value text YES NULL
preload preload preload