2010/6/22 火曜日

backgroundrbを再起動してもうまく新しいソースが動かなかった件

カテゴリー: — gabon @ 16:34:52

railsと連動しバックグラウンドタスクの処理を行うブラグインとしてbackgroundrbが有名で、ぼくらもrails1.3系とbackgroundrbの0系を使わせてもらっていますが、ちょっとハマリが発生。

ある時、
hoge_worker.rbというbackgroundrb用のプログラムを書き換えようとしました。
その前に、パックアップ代わりに、100601hoge_worker.rb
と同じディレクトリにコピーし、もとのhoge_worker.rbを書き換えました。

backgroundrbをstop、startして再起動しても、
なぜか、hoge_worker.rbに新しく記述した処理が実行しない?あれ?あれ?と、相当な時間悩みました。

結果、backgroundrbは、リネームして保管しておいた、同じディレクトリの100601hoge_worker.rbを読み込んで実行していた事が発覚。。。

かつて、hoge_dev_worker.rbなどとしていたときはまちがって読み込まれることは無かったのに、
ファイル名が後方一致するとダメなもようです。

backgroundrbの1系では修正されているかもしれませんが、気をつけてくださいね!

2010/6/14 月曜日

SafariでもIEでもFireFoxでも対応できる、戻る、閉じるjavascriptについて

カテゴリー: — gabon @ 14:25:54

IEとFireFoxの間での互換性があるjava scriptはよく記述がありますが、safariもとなると、ちょっと探さねばなりませんでしたので、ここにメモしておきますね。

もどる

<script>
<a href=”javascript:window.history.back()” ><img src=”img/btn_back.gif”
alt=”\xcc\xe1\xa4\xeb” border=”0″ /></a>
</script>

↑safariでは#とonClickで書かないのがポイント

とじる

http://www.webstudio.jp/webstudio/contents/mac_safari/mac_safari.html より引用です(感謝)

[/html]
<script>
<input type=”button” onclick=”fnWinClose()” />
</script>

[/javascript]
<script>
function fnWinClose(){
window.opener = window;
var win = window.open(location.href,”_self”);
win.close();
}
</script>
↑safariではhtmlの中で閉じるアクションを書くのでなく、javascriptでウインドーに対して閉じさせるコードを書くのがポイントです。

2010/4/29 木曜日

docomoへの添付メール送信で添付認識されなかった件

カテゴリー: — gabon @ 14:39:20

添付ファイルのついたメールをdocomoの端末で受信するとうまく添付と認識されずにハマりました。

開発サーバーでは問題なかったのですが、本番サーバーから送信すると。
調査の結果、mb_sendmailの挙動の違いが原因でした。

開発サーバはPHP5で、本番はPHP4。

PHP4のmb_sendmailは余分なヘッダ(忘れました・・・)を出すため、

mb_sendmailを使わず、mailで対応しました。


$to_s = mb_convert_encoding( $to, "ISO-2022-JP","UTF-8");
$subject_s = mb_encode_mimeheader($subject, "ISO-2022-JP", "B", "\n");
$message_s = mb_convert_encoding( $message, "ISO-2022-JP","UTF-8");
$header_s = mb_convert_encoding( $header, "ISO-2022-JP","UTF-8");
// 送信
mail($to_s, $subject_s, $message_s, $header_s, $add_param)

と解決~

2010/4/9 金曜日

FPDF error: Unable to find xref table がでたら

カテゴリー: — gabon @ 17:26:06

PHPのFPDF(MB FPDFでも) error: Unable to find xref table
と出たら、primo PDFなどでプロパティやセキュリティの項目を「なし」に
して再出力するとよいようです。

こちらのブログの情報に大感謝です!

2010/3/22 月曜日

Flashムービーの動作チェックはPowerPC Macも対象にいれて!

カテゴリー: — gabon @ 16:55:07

めでたく、gothicmade.comのムービー公開ができました。
f4vフォーマットでの公開でしたが、
直前に、PowerMac&MacOS10.4.11のみでムービーにノイズが発生する現象に悩まされました(MacOSでもIntelMacは問題なし)。
もちろんWindowsでは問題なし。

結果、ムービーをちょっびりリサイズして再生したらノイズはウソのようになくなり・・・なんとも不思議な現象で対処のしようがないのですが、
みなさんも検証の対象にPowerPCのマックもいれておくとよいと思いますよ。

2010/2/16 火曜日

コピーコマンドでディレクトリの中身だけコピーするには

カテゴリー: — gabon @ 16:40:47

コピーコマンドで、ディレクトリ中身だけをコピーしようとすると、ディレクトリ自体もコピーされて、困る時があります。
ぼくもわすれっぽいのでメモがわりに

http://oshiete1.goo.ne.jp/qa2373223.html の情報です。


カレントディレクトリが/homeとします。
cp ./aaa/* ./bbb/
とすればいいと思います。ドットファイルまでコピーしてくれるかどうかは自信がありません。manを読んで下さい。

2010/1/23 土曜日

Rails1.2で複数選択フォームで初期値が選ばれているようにするには

カテゴリー: — gabon @ 14:45:41

Rails1.2で複数選択フォームを作るには、
ビューで、collection_selectでmultipleを指定し、nameを出すところに、kaitous[kaitou_id][]と書いてあげれば、指定したモデルのidと名前で選択肢を出してくれ、コントローラに複数選択した値が渡されます。
<code>
<select id =”hoge”  name=”kaitous[kaitou_id][]” multiple=”multiple”>
  <option value=”1″>回答A</option>
  <option value=”2″>回答B</option>
</select>(ctrlキーで複数選択)<br>
</code>

新規作成の場面では上記でよいのですが、編集をするときに、既に選んでいたものが選択されておらず悩みました。

結局、ビューでコードを直接書きました
配列fugaに選択した結果が入っているとして、、、

<code>
<select id=”hoge” name=”kaitous[kaitou_id][]” multiple=”multiple”> <option value=”"></option>
<% Kaitou.find(:all).each do |r| %>
     <option value=”<%= r.id %>” <%= fuga.include?(r.id.to_s) ? “selected=\”selected\”" : ” %> ><%= r.kaitou %>
     </option>
<% end %>
</select>(ctrlキーで複数選択)<br>
</code>

ほんとうはもっと上手なヘルパの使い方があるのかと思いますが、まずは解決です。

2009/12/13 日曜日

InstantRailsでハマったところ

カテゴリー: — gabon @ 19:44:05

InstantRails自体は簡単に動きますが、 mySQLが動かずにはまりました。

原因は、、

マカフィーセキュリティセンターがブロックしていました。。。
また、error: ‘Access denied for user ‘ODBC’@'localhost’ に悩まされました(考えすぎ)が、なんということはなく、

「ログインするパスワード違い」という意味でした。
パスワード変更は、@localhostのようにホスト名をつけるようです。

mysql> set password for root@localhost=password(’a');←セミコロンを忘れずに

railsにcgi的に使うphpなどをおくには

カテゴリー: — gabon @ 19:42:17

railsが作るpublicというディレクトリの下にいれてけばOK

/home/tufs/mailsys/public/popup_msg_maker_utf.php といれて
http://サーバーURL/popup_msg_maker_utf.php と指定する
railsから呼び出すには、controller内のコードにredirect_toと書く

redirect_to “/hogehoge.php”

2009/11/18 水曜日

NetCommons2 モジュールをモバイル対応にする

カテゴリー: — kurowanko @ 18:23:52

NetCommons2をインストールしたままの状態では携帯画面で利用できるモジュールは下記の12個です。
    ・ログイン         ・メニュー
    ・新着情報        ・カレンダー
    ・お知らせ         ・アンケート
    ・Todo           ・掲示板
    ・小テスト         ・日誌
    ・汎用データベース   ・登録フォーム

これら以外のモジュール、またはオリジナルで作成したモジュールを携帯でも使用するためにはモジュールをカスタマイズする必要があります。
ここではオンライン状況モジュールを例にします。
 
 
install.iniに下記を追加。

[Mobile]
mobile_action_name = "online_view_mobile_init"

 
 
viewフォルダにmobileフォルダを作成し、さらにその中にinitフォルダを作成します。
initフォルダ内に3つのファイル(dicon.ini、maple.ini、Init.class.php)を作成。
dicon.iniの作成

[DIContainer]
onlineView = "modules://online.components.view"

 
 
maple.iniの作成

[DIContainer]
filename = dicon.ini

[SmartyAssign]
config = main.ini

[AllowIdList]
room_id  = "TARGET_ROOM_ID"
module_id = "TARGET_MODULE_ID"
block_id_arr = "ALLOW_BLOCK_ID"

[ValidateDef]
block_id_arr.online.mobileBlock = "1:lang._mobile_error_noblock"

[MobileView]
define:theme = 1
success = "online_mobile_init.html"

 
 
Init.class.phpの作成

<?php
	class Online_View_Mobile_Init extends Action
	{
		// 値をセットするため
		var $onlines = null;

		/**
		* execute実行
		*
		* @access  public
		*/
		function execute()
		{
			return 'success';
		}
	}
?>

 
 
view/main/init/maple.iniに下記を追加

[MobileView]
define:theme = 1
success = "online_mobile_details.html"
nonexistent = "online_nonexistent.html"

 
 
components/View.class.phpに下記を追加

/**
 * 携帯用ブロックデータを取得
 *
 * @access	public
 */
function getBlocksForMobile($block_id_arr)
{
	$params = array("block_id IN (".implode(",",$block_id_arr).")" => null);
	$order_params = array("insert_time" => "DESC");
	return $this->_db->selectExecute("online", $params, $order_params, null, null, array($this, "_getBlocksForMobile"));
}

/**
* 携帯用ブロックデータを取得
*
* @access	public
*/
function &_getBlocksForMobile(&$recordSet)
{
	$commonMain =& $this->_container->getComponent("commonMain");
		$convertHtml =& $commonMain->registerClass(WEBAPP_DIR.'/components/convert/Html.class.php', "Convert_Html", "convertHtml");

	$result = array();
	while ($row = $recordSet->fetchRow()) {
   		$content = $convertHtml->convertHtmlToText($row["content"]);
	    	$content = trim(preg_replace("/\\\n/", " ", $content));
	    	$row["title"] = mb_substr($content, 0, ONLINE_LENGTH + 1, INTERNAL_CODE);
	    	$result[] = $row;
	}
	return $result;
}

 
 
configフォルダを作成(install.iniがある階層)し、configフォルダ内にmain.iniを作成

[Online_View_Mobile]
define:ONLINE_LENGTH = 16

 
 
templates/default/にモバイル用のhtmlを作成
online_mobile_init.htmlの作成

<{strip}>
	<h3>
	</h3>
	<ul>
		<{section name=i loop=$action.onlines}>
			<li>
				<a href="?action=online_view_main_init&amp;block_id=<{$action.onlines[i].block_id}><{$session_param}>">
					<{if ($action.onlines[i].title != "") }>
						<{$action.onlines[i].title|truncate:$smarty.const.ONLINE_LENGTH:$smarty.const._SEARCH_MORE:true}>
					<{else}>
						<{$smarty.const._SEARCH_SUBJECT_NONEXISTS}>
					<{/if}>
				</a>
			</li>
		<{/section}>
	</ul>

	<div align="right">
		<a href="?action=menu_view_mobile_init<{$session_param}>">
			<{$lang._btn_prev_arrow|smarty:nodefaults}>
		</a>
	</div>
<{/strip}>

 
 
online_mobile_details.htmlの作成

<{strip}>
	<{if ($block_obj.block_name != "") }>
		<h3><{$block_obj.block_name}></h3>
	<{/if}>

	<table class="outer" summary="">
		<{if $action.user_flag}>
			<tr>
				<th class="online_title" scope="row">
					<{$lang.online_user|smarty:nodefaults}>
				</th>
				<td class="online_count">
					<{$lang.online_count|smarty:nodefaults|sprintf:$action.userCount}>
				</td>
			</tr>
		<{/if}>
		<{if $action.member_flag}>
			<tr>
				<th class="online_title" scope="row">
					<{$lang.online_member|smarty:nodefaults}>
				</th>
				<td class="online_count">
					<{$lang.online_count|smarty:nodefaults|sprintf:$action.memberCount}>
				</td>
			</tr>
		<{/if}>
		<{if $action.total_member_flag}>
			<tr>
				<th class="online_title" scope="row">
					<{$lang.online_total_merber|smarty:nodefaults}>
				</th>
				<td class="online_count">
					<{$lang.online_count|smarty:nodefaults|sprintf:$action.totalMemberCount}>
				</td>
			</tr>
		<{/if}>
	</table>

	<div align="right">
		<{if ($action.block_num == 1 ) }>
			<a href="?action=menu_view_mobile_init<{$session_param}>">
		<{else}>
			<a href="?action=menu_view_mobile_detail<{$session_param}>">
		<{/if}>
			<{$lang._btn_prev_arrow|smarty:nodefaults}>
		</a>
	</div>
<{/strip}>

 
 
以上でモジュールのカスタマイズは終了です。
install.iniを編集しているので、インストールをし直す必要があります。

NetCommons2のコントロールパネル開き、モジュール管理からモジュールのアンインストールとインストールをします。
インストールが完了したらコントロールパネルの携帯管理で「携帯からのアクセス許可モジュールの設定」がONになっていることを確認してください。

簡単な作りのモジュールであればこの方法でモバイルに対応させることができそうです。
複雑な作りのモジュールの場合には、これら以外にもいくつかのファイルが必要になると思います。

次ページへ »

HTML convert time: 0.925 sec. Powered by WordPress ME