ホーム > Ryuji

Ryuji

記事一覧 > スタッフブログ

当サイトで使われているモジュール

satoです。

皆様がいまご覧になっているこのスタッフブログですが、これはd3blogモジュールを利用しております。URLもそのまま「/modules/d3blog/」ですね。ちなみに以前はWordPressモジュールを使っておりました。

というわけで、今回はこのryus.co.jpで使われているXOOPSモジュールを紹介したいと思います。
お知らせ
お知らせページはbulletinモジュールを使っております。ニュースのような、一方的に告知する時には定番のモジュールです。
もちろんRSS配信にも対応しておりますので、RSSリーダーに登録することで、簡単にチェックすることができるようになります。

サービス案内事例紹介など
固定的な内容に関しては、picoを利用しております。
時系列の情報が必要でないような、静的コンテンツを作成する時には定番のモジュールですね。
簡単なだけに、内容を考えるのが難しいところです。

ダウンロード
ダウンロードはd3downloadsを使っております。
こちらもファイルダウンロード画面を作る際には定番のモジュールです。
ちなみに、2日前に、ベーシック認証プリロードという、接続元IPアドレスに応じてアクセス制限を行うプリロードが公開されたので、是非試してみてください。

イベント
当社主催のイベントに参加したことのある方なら利用したことがあると思いますが、イベントの予約にはeguideモジュールを利用しています。
なお、次回のイベントは、3/20(土)に開催される第4回XOOPS Cubeサタデーラボとなっておりますので、興味のある方は是非参加してください。

■その他:携帯対応
当サイトは携帯電話(iモードとか)でも閲覧することが可能ですが、それにはWizMobileを使用しております。
ryus_qrcode.png
このQRコードからアクセスすることができるので、是非お試し下さい。

このような構成でryus.co.jpは出来ています。XOOPSを既に使っている方には定番のモジュールばかりですが、定番だからこそ安心して利用することができます。
なお、これらはeguide以外はホダ塾ディストリビューションには全て入っているので、似たような構成のサイトを構築してみたい場合はすぐに試すことができます。
※当サイトで使っているモジュールは、当サイト用に一部カスタマイズを加えているものがあります。

コーポレートサイトをXOOPSで構築したいと考えている方は参考にしてみてください。

2月に開催されたXOOPS Cubeイベント

花粉症のシーズンに入り、天気の良い日はマスクを手放すことが出来ないgusagiです


今日は、2月に開催された第3回XOOPS Cubeサタデーラボと、オープンソースカンファレンス2010 Tokyo/Spring(以下OSC)で行われたセッション『XOOPS Cube Legacy 2.2 の紹介』の簡単なまとめを書こうと思います。

第3回XOOPS Cubeサタデーラボ


スピーカーは、株式会社声優ニュースドットコムの時田氏と当社の天野龍司、そして私の3名でした。
今回は、嬉しいことに15名以上の方が参加して下さり、勉強会・懇親会ともに盛況のうちに完了となりました。

時田氏は、twitter に自動で投稿するサービス「Twitter ボットジェネレーター」の中でHDをどのように使っているかの紹介や、実際に運用する上で発生した出来事などを紹介して下さいました。
当社の天野龍司には、事前に「開発者じゃなくても出来るカスタマイズTIPS」という内容を打診していたのですが、今回のサタデーラボ用に幾つかpreloadを作った上で発表に臨んでくれました。
私は、OpenID認証モジュールについて、簡単にではありますが話させて頂きました。
それぞれの発表の後には参加者からの質問なども行われたりと、ゆるいながらも濃い勉強会となったと思います。
勉強会後の懇親会にも、勉強会参加者の大部分に参加して頂き、お酒を交えながら楽しい一時を過ごすことが出来ました。

発表者の資料は下記となりますので、今回は参加出来なかった方にもご覧頂ければ幸いです。
第3回 XOOPS Cube サタデーラボ発表資料(gusagi)
第3回XCサタデーラボ_XCカスタマイズTIPS(天野龍司)
twitter Bot Generator プレゼン in XOOPS Cubeサタデーラボ(時田氏)

XOOPS Cube Legacy 2.2 の紹介


OSCのセッションでは、XCL2.2の開発担当である氷川氏自らが、XOOPS Cube Legacy 2.2の機能紹介などを行いました。
発表内容に関しては、こちらのブログにサマリを残してあるのでご覧下さい。
また、今回のOSCでは、XCL2.2 Lead DeveloperであるGigamaster氏が来日していたこともあり、セッション以外の時間も会場では活発な議論がなされていたようです。
氷川氏自身のブログでも、今回のOSCについて書かれていますので、そちらも合わせてご覧下さい。
氷川氏のブログ
当日配付資料
プレゼン資料

今後のイベント


XOOPS Cubeサタデーラボは、第4回をこちらのページで告知しています。
現在、参加者募集中ですので、興味のある方はご参加下さい。
また、4月にもXOOPS Cube関連のイベントが行われる予定です。
こちらの詳細は、近日中に公開されると思いますので、こちらも合わせてご期待いただければと思います。

XOOPS Cubeで運用していたWebサイトをリードオンリーにするハック

ホームページを運用していると、最初は興味のあるテーマで頻繁に更新していたけれど、だんだんそのテーマに興味が無くなってきて、更新がすっかり止まってしまうということもあります。

バッサリとホームページを閉じてしまうという選択肢もありますが、ネット上にコンテンツを残しておくと誰かの役にたつこともありますよね。

もしXOOPS Cubeで運用していたホームページで、「もう更新しないけど、コンテンツは読めるように残したい」とおもったら、このハックをお試しください。

XOOPS_ROOT_PATH/class/database/mysqldatabase.phpの 244行目あたり、function queryFの冒頭に次の様に記述します。

    function &queryF($sql, $limit=0, $start=0)
	{
		
		// add read only mode
		$sql = ltrim($sql);
		$sql_parts = explode(' ', $sql);
		$first_part = strtolower(trim($sql_parts[0]));
		if (!preg_match('/^(\/\*|select)/', $first_part )){
			if($first_part == 'insert' || $first_part == 'delete'){
				$table_part = trim($sql_parts[2]);
			}else{
				$table_part = trim($sql_parts[1]);
			}
			

			preg_match('/^`?'.XOOPS_DB_PREFIX.'_([^`].+)`?/', $table_part, $match);
			$table_name = $match[1];
			
			if($table_name == 'session'){
				$is_safe = true;
			}else{
				$is_safe = false;
			}
				
			if($is_safe == false){
				$ret = false;
				return $ret;
			}
		}
このハックを適用すると、
ログインに必要なsession テーブルの読み書きはできますが、他のテーブルは全てselect(読み出し)のみになり、記事の更新をしようとすると全部失敗するようになります。

ログインはできますので、ログインユーザにのみが見られるようなコンテンツがある場合でも利用できます。

自分で書き換えるのは面倒であれば、下記からダウンロードして、XOOPS_ROOT_PATH/class/database/mysqldatabase.phpを上書きしてください。

XOOPS Cubeをリードオンリーにするmysqldatabase.php

XOOPS Cubeで1からWebサイトを構築 第2回インストール編-後編-

argonです。

だいぶ間ができてしまいましたが、今回はXOOPSのインストールの後編です。
レンタルサーバーは以前の回に書いたようにXREAの無料のサーバーを使っています。(特に何も設定しなくても無料版の時に表示されるバナーは表示されるようです)

(5) XOOPS 1st インストール
・XOOPS Cube 2.1 インストールウィザードへようこそ
言語選択画面は日本人なら普通にJapaneseを選択すれば問題ないです。
53.jpg

・イントロダクション
ライセンスや環境について書かれています。
54.jpg

・ファイルのアクセス権のチェック画面
問題がある場合は赤い□が表示されます。問題がある場合はSSH・FTPクライアントで権限を適切な状態に変更します。
55.jpg

・データベース、及びパス・URLの設定画面
先ほど設定したデーターベース名などを設定します。
56.jpg

次から数画面か設定が表示される画面がありますが、入力する項目はないので省きます。

・サイト管理者についての設定
管理者ユーザ名、メールアドレスを設定します。
57.jpg

この次の画面で設定が全て問題なければ、インストール第1ステップ完了です。

次からはインストール第2ステップですが、ちょっとスクリーンショットを撮るのを忘れてしまったので文字だけで…

(6) XOOPS 2nd インストール
まずはログインします。
以前に設定した管理者用の「ユーザ名」「パスワード」でログインします。

基本モジュールのインストール
ここはPM以外は必須なので、PMはお好みで入れる場合はチェックをします。
また、PMモジュールは後からでもインストール可能です。

インストール完了です!
SSH・FTPクライアントでinstall ディレクトリを削除しましょう。

コンテンツをパーツ毎にpicoで作成/管理する

こんにちわ。 なおとです。

テンプレートの使いこなしテクニックを紹介します。 やや上級向けですが、ぜひ見てください。

xugj_blockとpicoのコンテンツ表示ブロックを組み合わせる例

カスタマイズの例として、2つ取り上げます。

  • 目的1 サイトのヘッダー部分をテーマから分離する
  • 目的2 D3ブログで、常に表示するコンテンツを追加する

カスタマイズ完成後

picoのメリット

今回ここで紹介する手法を使わなくても、いくつか別の方法で同じようなことができます。 それに対してpicoを活用する方法によるメリットを、挙げてみましょう。

  • Smartyのテンプレート機能を活用できる
  • 編集履歴が残る
  • 権限管理を細かく設定することができる
  • など

このうち権限管理は、主にサイト管理やコンテンツ管理を複数人で行う場合の利点です。

コンテンツのパーツを、picoのあるカテゴリにまとめておきます。 すると「カテゴリーアクセス権限」で特定のグループやユーザーに、編集権限を設定することもできます。 モジュールの管理者権限を渡さずに、つまり管理者メニューにアクセスできなくても、コンテンツを管理できるのです。

xugj_block

カスタマイズの肝になるのは、「xugj_block」の利用です。 xugj_blockについての詳しい説明は今回の趣旨とは外れますが、簡単に言うと「ブロックを自在に表示できるようになるSmartyプラグイン」です。 ただしXOOPSの標準的な機能ではなく、プラグインを追加する必要があります。

  • カスタムテンプレート
  • テンプレート
  • テーマ
  • picoのコンテンツ

といった部分を編集する際に使えます。

SourceForge.net function.xugj_block.php

上記のリンクからダウンロードできるほか、ホダ塾ディストリビューションであれば含まれていますので、追加インストールの必要はありません。

自分でインストールする場合は、 xoops_trust_path/libs/smartyplugins/function.xugj_block.php もしくは html/class/smarty/plugins/function.xugj_block.php に配置します。作業前の時点でxoops_trust_path/libsが空であるなら、html/class/smarty/plugins/を使った方が手軽でしょう。

カスタムテンプレート

xugj_blockは非常に「使い出」があり、オプションなどの記述もかなり複雑です。 使うたびに長い記述をするのはミスを招きます。 そのため今回は、「カスタムテンプレート」を使って、簡単に書けるようにします。

<{xugj_block func="b_pico_content_show" options="pico|12||1" file="/modules/pico/blocks/blocks.php"}>

このような記述をするところを、picoのdirnameが標準的な「pico」であるならば、最低限度として、content_idだけ指定すれば動きます。

<{include file="db:_custom_xugj_block_pico.html" content_id="12"}>

こうなります。「db:_custom_xugj_block_pico.html」部分は固定ですので、最後の数字だけ変えればいいことが解かります。

カスタムテンプレート作成

カスタムテンプレートというものが出てきました。 これはALTSYSモジュールを使って作成します。

カスタムテンプレート作成

今回はテンプレート名「_custom_xugj_block_pico.html」として説明します。 実際にはファイルではなく、データベース内にのみ作成されます。なのでファイルを探してもありません。

作成するときは「新規カスタムテンプレート作成」リンクを、既に作成済のテンプレートを編集する場合は、「編集」リンクです。

_custom_xugj_block_pico.html

<{* xugj_block pico.content_block ここから *}>
<{assign var="picoDirname" value=$picoDirname|default:"pico"}>
<{assign var="content_id" value=$content_id|default:"1"}>
<{assign var="this_template" value=$this_template|default:""}>
<{assign var="process_body_yes" value=$process_body_yes|default:"1"}>

<{capture assign="xugj_block_options"}><{strip}>
<{$picoDirname}>|<{$content_id}>|<{$this_template}>|<{$process_body_yes}>
<{/strip}><{/capture}>

<{capture assign="xugj_block_file"}><{strip}>
/modules/<{$picoDirname}>/blocks/blocks.php
<{/strip}><{/capture}>

<{xugj_block func="b_pico_content_show" options=$xugj_block_options file=$xugj_block_file}>
<{* xugj_block pico.content_block ここまで *}>

ここまででまだ、準備も半ばです。

コンテンツの作成

次に、コンテンツの「パーツ」を作成します。

「サイトのヘッダー部分」「D3ブログで、常に表示するコンテンツ」の2つです。

picoの扱いに付いては説明を省きます。 うさぎにもできるXOOPS Cube入門♪ - モジュールを使おうpico編を参考にしてください。

コンテンツ(サイトのヘッダー)の作成

注意点として、オプションで「表示」のチェックを付けてください。 これを忘れると、ゲスト(ログイン前の状態)に対して正常な表示ができません。 ほかに適宜、アクセス権現の設定を見直してください。ゲストにpicoモジュールのアクセスを許可する必要があります。

目的1 サイトのヘッダー部分をテーマから分離する

そして次に、テーマの編集です。 「default」テーマを使っていて、またDBテーマ編集モジュールを使う場合の例を挙げますが、ここは特に決まりはなく、基本的にどのテーマでも可能ですし、直接テーマ・ファイルを修正しても構いません。(その方が手順はシンプルになるかもしれません。)

テーマの修正

目的2 D3ブログで、常に表示するコンテンツを追加する

次にD3ブログのテンプレートを修正します。 修正するテンプレート名は「d3blog_inc_header.html」です。(d3blogというdirnameでインストールしている場合)

D3ブログ テンプレートの修正

以上で修正箇所は終わりです。

プラスαの応用編

最後に、プラスαの技を紹介します。 pico側で作成したコンテンツを全て表示する替わりに、「続きを読む」形式で省略表示する方法です。

次の内容でカスタムテンプレートを作成(_custom_pico_short)し、

<{include file="db:_custom_pico_short" content_id="12" truncate_num="100"}>

のように呼び出して使います。

<{* xugj_block pico.content_block ここから *}>
<{assign var="picoDirname" value=$picoDirname|default:"pico"}>
<{assign var="content_id" value=$content_id|default:"1"}>
<{assign var="this_template" value=$this_template|default:""}>
<{assign var="process_body_yes" value=$process_body_yes|default:"1"}>
<{assign var="truncate_num" value=$truncate_num|default:"30"}>

<{capture assign="xugj_block_options"}><{strip}>
<{$picoDirname}>|<{$content_id}>|<{$this_template}>|<{$process_body_yes}>
<{/strip}><{/capture}>

<{capture assign="xugj_block_file"}><{strip}>
/modules/<{$picoDirname}>/blocks/blocks.php
<{/strip}><{/capture}>

<{xugj_block item="xugj_block_pico" func="b_pico_content_show" options=$xugj_block_options file=$xugj_block_file}>
<{$xugj_block_pico.content.body|mb_truncate:$truncate_num}>
<a href="<{$xugj_block_pico.mod_url}>/<{$xugj_block_pico.content.link}>">続きを読む</a>
<{* xugj_block pico.content_block ここまで *}>

XOOPS Cube LegacyをIIS対応させる場合のはまりどころ

ようやく年末年始の連休ボケが抜けたgusagiです

今日は、Ryujiが先日書いた記事を踏まえて、Web Platform Installer(以下WebPI)でインストール可能なパッケージに含まれていないモジュールをIISに対応させる場合のはまりどころを2つほど紹介しようかと思います。

なお、この記事の前提として、動作を確認したのはWindows Server 2008 R2に対してWebPI経由でインストールしたIIS・MySQLなので、バージョンによっては動作が異なる可能性があります。

(1) MySQLのsql-mode
WebPIでMySQLをインストールした場合、sql-modeが「STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION」として設定されるようです。
この状態だと、モジュールインストールの際のテーブル作成でストレージエンジンを指定していないモジュールでは、fulltext indexを指定した際にエラーが発生します。
また、NOT NULL制約を持ったBLOB型・TEXT型のカラムに対して、値を指定しないINSERT文を発行した場合にもエラーが発生します。
私もよくやってしまっているのですが、デフォルト値の性質上、BLOB型・TEXT型のカラムに「NOT NULL default ''」を指定する方法は対応としては正しくなく、BLOB型・TEXT型のカラムに対しては必ず値を指定する必要があるようです。

(2) WinCache拡張
IIS7.5では、PHPの拡張「Windows Cache Extension for PHP」が有効となっています。
この拡張は、Windows Server上のIISなどでPHPを利用している場合に、実行コードをキャッシュして高速化してくれる拡張なのですが、テンプレートキャッシュなどもキャッシュされてしまうのか、あちこちで予期せぬエラーが発生してしまいます。
WebPIでXCLをインストールした場合は、mainfile.phpにWinCache拡張を無効にする記述があるので問題ないと思いますが、自前でXOOPSをインストールした場合などは、
if (extension_loaded('wincache') === true) {
    ini_set('wincache.fcenabled', 0);
    ini_set('wincache.ocenabled', 0);
}
をmainfile.phpの最初に記述すると良いようです。


今回は2つほどはまりどころを書かせて頂きましたが、他にもノウハウなどが溜まったらまた書かせて頂きます。

XOOPS CubeをIISに簡単インストール&quot;Microsoft Web Platform Installer&quot;

MicrosoftのWeb Platform Installerってご存知ですか?

Web Platform Installerを使うと、このサービスに登録されているオープンソースWebアプリケーションをMicrosoft IISに簡単にインストールすることが出来ます。
Webアプリケーションを動作させるために必要なPHPやMySQLのダウンロード、インストール、設定(IISも)までWeb Platform Installerが自動でやってくれます。

このWeb Platform InstallerのWebアプリケーションギャラリーにXOOPS Cubeも登録されましたので、XOOPS CubeをIISに簡単にインストールして使えるようになりました。
MicrosoftのIISでXOOPS Cubeを動かそうとして苦労した方は少なくないと思います。私も苦労した一人です。

IISでXOOPS Cubeを動かそうとすると、まずPHPとMySQLのインストール。
それから、日本語が正しく処理されるように設定。
そこまで済んでから、やっとXOOPS Cube本体のインストールです。

インストールが終わったと思っても、文字化けが発生してまた設定を見直してインストールしなおす。。。
LAMP環境で動かすのと比べて何かとはまりやすかったものです。

他のオープンソースWebアプリケーションをIISにインストールするときもだいたい同じような苦労をされてると思います。

このような苦労をしなくても手軽にIISで動作するというのは楽ですね。

では、具体的な使い方です。

Step1 Microsoft Web Platform Installerのインストール
Microsoft Web Platform Installerのダウンロード
Web Platform Installerは上記からダウンロードできますので、これをインストールして実行します。

Step2 Web Platform InstallerでXOOPS Cubeをインストール
Web Platform Installerを実行して「Webアプリケーション」→「コンテンツ管理」とすすみ、「XOOPS Cube Legacy(ホダ塾ディストリビューション)」にチェックをいれます。
あとは、インストールボタンを押すと、ライセンスへの同意画面がでますので「同意する」とXOOPS Cube本体と必要となるPHPやMySQLのインストールがはじまります。

Step3 最後にXOOPS Cubeのインストールウィザードを実行
Step2が終わった時点で、IIS上で必要な設定はすべて済んだ状態になります。
あとは、XOOPS Cube本体のインストールウィザードを実行すれば、XOOPS Cubeのインストールは完了です!

実際に試してみて
私も実際に試してみましたが、今までIISでXOOPS Cubeを動かすために四苦八苦していたのは、いったい何だったんだろうと思えるぐらいアッサリとインストールできて、文字化けもなくXOOPS CubeをIIS上で動かすことが出来ました。

これまでも社内ポータルにXOOPS Cubeを利用するケールは多くありましたが、このWeb Platform Installerにより、社内でのXOOPS Cubeの利用が更に進むだろうと思っています。

XOOPS Cubeで1からWebサイトを構築 第2回インストール編-前編-

argonです。

今回はXOOPSのインストールについて書いてみようと思います。
レンタルサーバーは以前の回に書いたようにXREAを使っています。

(1) XOOPS Cube Legacyのダウンロード
まず、アップロードするXOOPS Cube Legacy(以下、長いのでXOOPSと表記)をダウンロードしてきます。

Package_Legacy_2_1_7.zip
40.gif

(2)ZIPファイルの解凍
次にこのzipファイルを解凍します。
解凍すると「docs」「extras」「html」の3つのフォルダが作成されます。
41.gif

(3) ファイルのアップロード
解凍できたフォルダから必要なフォルダをアップロードします。
htmlフォルダの内容をXREAの場合/public_html以下にアップロードします。
こちらもファイル数が多いので時間がかかります。
ちょっと面倒ですがフォルダ単位にわけてアップロードするなどして
確実にアップロードします。またファイルをアップロードするとき
SSHが使えるサーバーの場合はSSHを使った方が良いでしょう。
SSHを使う時は自分はWinSCPというソフトを使っていますが、このソフト
はFTPも使えるので、複数のソフトを使うことにならず便利です。

WinSCP Japanese site

(4) データーベースの設定
XREAの管理画面からデーターベースの作成を行います。
データベース作成のボタンを押してから反映までに3分くらい時間がかかるので、
先に作業していても良いかもです。

前編はここまでにします・・・
次回はブラウザ上でのXOOPSのインストールから続きを書いていきます。

FCKeditorのカスタマイズ その1

hamacoです。

XOOPSを使い始めてから、FCKeditor on XOOPSというものを良く触るようになりました。
今迄こういったテキストエリアを拡張するような物を使ったことがなく分からない事も多い為、色々と勉強しながら触っています。
勉強するならついでにブログのネタにしてしまおうということで、FCKeditorのカスタマイズとかを何回かに分けて紹介してみたいと思います。

ツールバーのカスタマイズ


デフォルトのツールバーは色々と表示されていて結構ゴチャゴチャしています。

これはXOOPS_ROOT_PATH/common/fckeditor/fckconfig.jsの97行目にある
FCKConfig.ToolbarSets["Default"] = [
	['Source','DocProps','-','Save','NewPage','Preview','-','Templates'],
	['Cut','Copy','Paste','PasteText','PasteWord','-','Print','SpellCheck'],
	['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'],
	['Form','Checkbox','Radio','TextField','Textarea','Select','Button','ImageButton','HiddenField'],
	'/',
	['Bold','Italic','Underline','StrikeThrough','-','Subscript','Superscript'],
	['OrderedList','UnorderedList','-','Outdent','Indent','Blockquote'],
	['JustifyLeft','JustifyCenter','JustifyRight','JustifyFull'],
	['Link','Unlink','Anchor'],
	['Image','Flash','Table','Rule','Smiley','SpecialChar','PageBreak'],
	'/',
	['Style','FontFormat','FontName','FontSize'],
	['TextColor','BGColor'],
	['FitWindow','ShowBlocks','-','About']		// No comma for the last row.
] ;
の部分を書き換えて変更できます。

例えば以下の様な感じに変更すると、
FCKConfig.ToolbarSets["Default"] = [
	['Cut','Copy','Paste','PasteText','PasteWord','-','Print','SpellCheck'],
	['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'],
	'/',
	['Bold','Italic','Underline','StrikeThrough','-','Subscript','Superscript'],
	['OrderedList','UnorderedList','-','Outdent','Indent','Blockquote'],
	['JustifyLeft','JustifyCenter','JustifyRight','JustifyFull'],
	'/',
	['Link','Unlink','Anchor'],
	['Image','Smiley','PageBreak'],
	['TextColor','BGColor'],
] ;
こんな感じになります。


スキンの選択


FCKeditorのスキンと言えば上の様な感じのを良く見ますが、
他にもデフォルトでいくつかスキンが用意されています。

これはXOOPS_ROOT_PATH/common/fckeditor/fckconfig.jsの45行目にある
FCKConfig.SkinPath = FCKConfig.BasePath + 'skins/default/' ;
の部分を変更することで3種類のスキンから選ぶことが出来ます。

FCKConfig.SkinPath = FCKConfig.BasePath + 'skins/office2003/' ;


FCKConfig.SkinPath = FCKConfig.BasePath + 'skins/silver/' ;


これらのスキンはCSSと画像を用意すれば好きな様にカスタマイズできるので、サイトのデザインに合わせてオリジナルのスキンを作成することも出来ます。

AutoPagerizeでpicoのページをサクサクみよう

haltです。

皆さんはAutoPagerizeをご存知ですか?

http://autopagerize.net/

AutoPagerizeは、 Firefox や Google Chromeブラウザで利用できる拡張で、「あらかじめ決められたタグやルールに基づいて、次のページの内容を自動的に取得して同じページ内に表示する」機能を実現します。

例えば、弊社サイト内の「サービス案内 ( http://ryus.co.jp/modules/s... )」をAutoPagerizeをインストールした状態でページの最後まで読むと、自動的にページの内容が付加され、それぞれのサービスの詳細ページが、画面遷移なしで表示されるようになります。
また、Google検索などの結果も、自動的にページ送りされるようになるので、毎回「次へ」ボタンを押す必要がなくなり、スムーズにページを閲覧する事ができます。

YouTubeに、AutoPagerizeを使った場合のブラウザ画面の動画があったので紹介しておきます。この動画ではブログサイトの記事をページ遷移せずに次々と読んでいる例です。



Xoopsだと、picoモジュールやXiggモジュールのページ構成を自動的に読んで先読みしてくるようになっているので、これらのモジュールを使っている人はAutoPagerizeをインストールして自分のサイトを見てみるとAutoPagerizeのおもしろさを体験できると思います。

Shioriモジュールを試してみました

こんにちわ。なおとです。

Shioriモジュールを使ってみることにしました。

それで簡単な説明と、気づいた点を書いていこうと思います。

概要

  • モジュール名 Shiori(サイト内ブックマーク)
  • ディレクトリ名 shiori
  • バージョン 1.02
  • モジュール説明 このモジュールはサイト内のページをブックマークするためのモジュールです。
  • モジュール作者 Suinさん http://suin.asia/

いわゆるXOOPS2時代に開発されていた、栞(最終バージョン 0.51)の後継版です。 すっかり作り替えたそうです。

PHPのバージョンがある程度より古いと、動作しない(サポート外)ようです。 PHP 5.2.4 以上 (mbstring 必須)。

ダウンロードしました

Shiori 1.02 | スイナシア (説明「shiori」なエントリー)

インストール

さっそく付属の説明書を確認しました。

readme_ja.html という名前のファイルです。 配布元のサイト以上に、詳しいことが書いてあるようです。 以後はこれを読んで、その内容のまま進めてみます。

インストール手順はごくオーソドックスで、モジュールのインストールに慣れた方であれば、悩むことはないでしょう。 そのあたりはちょと端折って説明します。

インストールの最初は、サーバーにファイルを配置しました。

管理画面の「モジュールのインストール」で、インストールしました。

また説明の通りに、ブロックのインストールと権限の設定もしました。

ここまでで、基本的な機能が使えるようになりました。

カスタマイズなど

説明書にある動画を見ました

Shioriモジュールのワンクリックブックマーク機能 | スイナシア

★型のアイコンをクリックすると、そのアイコンがくるくる回る画像になって、ブックマークできる様子が見えます。 これに挑戦しました。

説明書の通りに、ユーザーメニューを修正しました。

詳しいことは省きますが、残念ながらこれだけでは、動画のような動きにはなりませんでした。

変更1:ブロックのテンプレートを変えました

スタイルシートで非表示になっているので、それを解除します。

修正するファイル 互換モジュール
legacy_block_usermenu.html

修正前(説明書にある追加部分)

<a href="<{$xoops_url}>/modules/shiori/"><img src="<{$xoops_url}>/modules/shiori/images/unbookmarked.png" id="shiori_bookmark_star" style="float:right;display:none;" rel="<{$xoops_url}>" />Bookmark</a>

修正後(スタイルシートを修正)

<a href="<{$xoops_url}>/modules/shiori/"><img src="<{$xoops_url}>/modules/shiori/images/unbookmarked.png" id="shiori_bookmark_star" style="float:right;" rel="<{$xoops_url}>" />Bookmark</a>

注意点:テーマによっては、サーバーのファイルを修正する必要があります

大抵のケースでは、テンプレートの修正はALTSYSを使うと便利です。 管理者メニューから、書き換えたいテンプレートを編集できます。

しかし使っているテーマによっては、その方法が通用しません。 「hd_default」がこれに該当します。 「テーマ下テンプレート」と言われる仕組みでテンプレートを管理しているので、それを書き換える必要があるのです。

しかも、全てのテンプレートがテーマ下テンプレートになる訳ではなくて、hd_defaultに同梱されていた(+自身で追加した)テンプレートだけがそのようになります。 この条件に合ってないテンプレートは、いつものように、ALTSYSで編集できます。

修正するファイル
html/themes/hd_default/templates/legacy_block_usermenu.html

変更2:画像のパーミッションを変えました

これは、大抵のひとには問題にならないと思われます。

問題となるのは、サーバーの中でZIPファイルを直接展開しているなどで、 ZIPファイルが作成された時のパーミッションをそのまま引き継いだ場合です。

これを修正しました。

html/modules/shiori/images/ の中の画像ファイルは全て、「644」にします。

サイト名は省きたい

ブックマークには名前(ページ名)が付くのですが、それにサイト名も一緒に入っていて、これは変えたいと思いました。 どうやらこの文字列は、title要素のテキスト(ブラウザのタイトルバーに表示されている)が使われるようです。

この部分はテンプレートの修正で対応可能です。 こちらはALTSYSで編集しました。

管理者メニューでALTSYSの管理画面を開き、さらに「テンプレートの管理」というサブメニューを辿って、Shioriモジュールのテンプレートを見付けます。

修正するテンプレート Shioriモジュール
shiori_block_bookmark.tpl

修正前(テンプレートの最後のほう)

document.write('<input type="hidden" name="title" value="' + document.title + '" />');

修正後(repleceを追加)

document.write('<input type="hidden" name="title" value="' + document.title.replace('XOOPS Cube Site - ', '') + '" />');

「XOOPS Cube Site - 」の部分は、サイト名+「(スペース)(マイナス)(スペース)」です。 もしこのブログ記事を読んで同じことする場合は、各自のサイトで使っているサイト名を当てはめます。 これで、サイト内のブックマークではサイト名が付かないようになりました。

一般設定の説明

おまけです。

  • 項目名 (初期値)
  • ブックマークの最大保存件数 (30)
  • 1ページ当たりに表示するブックマークの件数 (30)
  • URLを入力して登録できるようにする (いいえ)
  • 外部のサイトへのブックマークを許可する (いいえ)

「ブックマークの最大保存件数」は、各ユーザーが一人でブックマークできる件数でした。

「1ページ当たりに表示するブックマークの件数」は、Shioriの画面でブックマーク一覧を見るとき、に使われる設定になっています。

以上です。

[モジュール紹介]XOOPS汎用データベースモジュール

satoです。

XOOPS Cube日本サイトのニュースのページから新着情報を見ることが多いのですが、一昨日この中にXOOPS汎用データベースモジュール 0.1リリースというニュースがありました。

汎用データベース(以下汎用DB)とは何かと言うと、名前の通り、どんな用途にでも使えるデータベース、ということになります。
Accessとか使ったことがある方は、あれをXOOPS上で行うものだと思えばわかりやすいと思います。
項目を自由に定義して、そこに自由にデータを入力することができます。社員名簿、出欠記録、売上記録、商品リストなど、様々な用途で利用することができます。

XOOPSでは既にwaffleという汎用DBモジュールが存在しますが、選択肢が増えるのはいいことなので、今回はこちらを試してみたいと思います。
XOOPS汎用データベースモジュール(何か固有名詞があるといいのですが…)のダウンロードはこちらから行えるようです。

ダウンロードして解凍してみたところ、ja_utf8の言語ファイルがなかったため、最近のXOOPS Cubeで動作させようとすると文字が表示されません。
まずlanguage/japaneseフォルダを、language/ja_utf8としてコピーします。そのあとja_utf8以下のファイルを全てUTF-8に変換します。Windowsであれば適当なフリーソフトをVectorなどからダウンロードするのが楽ですが、findとnkfが入っている環境であれば、
find . -type f | nkf -w --overwrite
で変換できます。

言語ファイルを用意できたら、普通にインストールします。

install.png

インストールして、メニューから開くと、以下のような画面になります。

start.png

どうやら初期状態でいくつか項目が定義されているようです。すぐ試せるようになっているのはいいですね。

この状態でメニューを見ると、「登録」というサブメニューが出ているのがわかります。

menu.png

クリックすると、以下のような入力画面になります。

register.png

適当に入力してみたところ、「File A」の項目で「ファイル「File A」をアップロードできませんでした。」と言われてしましました。
どうやらこの「File A」の項目はPDFしか許可されていないようです。詳しくは後で説明しますが、今回は空にしておきます。(どのファイル形式ならアップロードできるか表示されるといいですね)

「登録」を押すと登録され、以下のような詳細画面になります。

item.png

入力したものが登録されているのがわかります。ここでデータの修正や削除も行えるようです。

この状態でトップページに戻り、入力した内容で検索してみると、

ちゃんと検索結果が表示されます。
これで、現在定義されている項目に基づいたデータの登録・修正・削除・検索という、一通りの操作を行うことができることが確認できました。

さて、このままだとただの入力フォームですが、「汎用データベース」というからには、「Text Box A」や「Check Box A」といった項目を独自に定義することが可能です。
管理画面に移動してみましょう。

manage.png

管理画面を開くと、このような画面になります。
これは、現在定義されている項目の一覧が表示されています。
実際に利用する場合は、「Text Box A」というような名称であることはないと思うので、最初は一度全て消してしまうのがいいと思います。ただし、「一覧リンク」が「はい」の項目は1つは残しておく必要があるようなので、先に「一覧リンク」が「はい」の項目を1つ作ってから、いらないものを削除するのがいいようです。「一覧リンク」は、検索結果から詳細画面にリンクさせる項目を指定するもので、これを指定されている項目がないと、検索結果から詳細画面に遷移できなくなります。
なお、項目を削除すると、その後の画面が真っ白になるので、「削除」のリンクは右クリックで別ウィンドウ(タブ)で開いて実行するのがいいようです。削除自体は正常に動作するようです。
今回は簡単な例として、「XOOPS Cubeリンク集」というデータベースを作ろうと思います。(リンク集ならWebLinksなどを使ったほうがいいと思いますが)

リンク集に必要な項目は
・URL
・サイト名
があれば最低限足りると思います。あとは好みで
・バナー画像
・サイトのスクリーンショット
・サイトの紹介文
などを用意してみるのもいいかと思われます。

管理画面の上部で項目の新規追加ができるので、ここで「テキストボックス」を新規追加します。
すると、項目の詳細情報を入力する画面になります。

column_register.png

ここで「キャンセル」を押すと画面が真っ白になる不具合があるようです。今のところは戻りたい場合はブラウザの「戻る」を使うか、メニューから戻るしかないようです。

まず「URL」項目から作成します。入力内容は
・項目名:url
・タイトル:URL
・必須:はい
・表示順:1
・検索ページ:表示
・一覧ページ:表示
・登録ページ:表示
・更新ページ:表示
・詳細/削除ページ:表示
・サイト内検索の対象:はい
・重複チェックの対象:はい
・一覧リンク:はい
・値型:文字列
・初期入力サイズ:32
・最大入力サイズ:255
・あいまい検索:有効
とします。他は特に入力しません。

同じ要領で「サイト名」も入力します。
・項目名:sitename
・タイトル:サイト名
・表示順:2
で、他はURLの時と同じにします。

あとは余計なものを削除して、「URL」と「サイト名」だけの画面になっていれば完成です。

linkadmin.png

トップページに戻り、データを入力してみました。

links.png

このように、簡単なリンク集が完成しました。
この要領で、自在にデータベースを作成することができます。

不具合がいくつか気になりますが、それ以外は十分実用できるレベルだと思いますので、汎用DBを使いたい場合は選択肢に入れておくといいと思います。
なお、このモジュールの作者はXOOPSモジュール開発研究所様です。質問や不具合報告などはそちらでお願いします。

XCL on IIS 始めます

急に寒さを増した気候に、体調を崩しそうで戦々恐々としているgusagiです

とあるきっかけで、IIS上でXOOPS Cube Legacy(以下XCL)を試すこととなりましたので、「XCL on IIS」と銘打って、今回から複数回に渡って色々と書いてみたいと思います。

今回は動作予定の環境などについて書こうと思います。
OSには、つい最近リリースされたWindows Server 2008 R2を選択しましたので、IISのバージョンは7.5となります。
このバージョンを選んだ主な理由は、先日に開催されたPHPカンファレンス2009でマイクロソフト株式会社の奥主さんが発表していた内容に興味を覚えたからだったりします。
こちらのブログにも書かれていますが、マイクロソフトさんはPHPに対して強力に支援していくとのことですので、IISでXCLを動かすことが今後増えていく可能性がありそうです。
今回は、OSのインストールまで行ったのですが、予想以上にさくさくと進んでしまいました。

○インストール開始


○インストール完了(1)


○インストール完了(2)


今回は、はまったところは特にないのですが、Windows Server 2008 R2からリリースされるバージョンが64ビット版のみとなっています。
最近のハードウェアであれば特に問題ないと思いますが、VMwareや古いPCで動作確認などを行う場合には、64ビット対応がなされているか確認する必要がありますので、頭の片隅に留めておく必要はありそうです。

XOOPSユーザのランク情報を表示するSmaryプラグイン&quot;ryus_user_rank&quot;

うさできの質問に回答するために、久々にSmartyのプラグインつくってしまいました。

作ったのはXOOPSユーザのランク画像等を表示するためのプラグインです。

ユーザのランク情報を表示する ryus_user_rankプラグイン

ユーザメニューなら下記のような感じで使えます。
<img src="<{$block.uid|ryus_user_rank}>" title="<{$block.uid|ryus_user_rank:"title"}>" />


<{$block.uid|ryus_user_rank}> あるいは <{$block.uid|ryus_user_rank:"image"}> で画像URL
<{$block.uid|ryus_user_rank:"title"}> でランク名
を表示するだけです。

XOOPSユーザのuidさえSmarty変数にアサインされていれば、ランク画像表示ができますので他に使えそうなところがあればいろいろためしてみてください。

また、短時間でサクッとつくれそうなプラグインがあったら作ってみますね。

オープンソースカンファレンス 2009 Tokyo/Fall 参加中!

本日から2日間、東京は蒲田にある日本工学院にてオープンソースカンファレンスが開かれています。




「オープンソースカンファレンス???」と思われる方は

オープンソースにまつわるいろんな団体が参加する、お祭り!

と思っていただければと思います。あ、オープンソースというのはフリーソフトのように自由に使えるソフトウェアというようなもの、、です。


RYUSではこのところスタッフが力を注いで作成している「ITXOO(あいてぃずー)」という名前の商品を展示しています。

お手持ちの定期券に使われているPASMOやSUICA、携帯電話に付いているICカード、その他色々なところに付いているICカードを利用してタイムカードの替わりに打刻できるというシステムです!

開発するきっかけとなったのは実はRYUSでタイムカード管理するのが面倒だなぁということでした!

最初は〜
 何もしてなくて…でも社労士さんがちゃんとつけないといけない、というから

反省して
 入り口に置いた紙に各自が書いて…うーでもめんどくさいし、つけ忘れちゃう。それに時刻の計算も手作業で、、昭和の会社か!とつっこみたいような状況でした

めんどくささに負けて、いよいよモジュール化
 めんどくさがりやが管理してますので、手計算もすぐに限界になりました。かといって今更、がっちゃん!っていうのも…。てことでモジュール化を考えました。ICリーダーからの読み込みも考えましたがドライバが見つからず、とりあえず手持ちのバーコードリーダーで読み取る形のタイムカードモジュールを作成して運用を開始。

RYUS初の商品に!
 モジュール化してからずっと使い続けていました。RYUSで商品を作ってみよう!と話をしてるときに「じゃぁタイムカードモジュールを商品に」ということになりました。せっかくなのでICカードを読み込んでハード付きでかっこよく♪ということで今の形に

というようなストーリーです。いよいよ11月には発売となります。

会場では皆さん試していただき

「お〜!便利ですね」
「インストールが不要で各自のパソコンから参照したり管理できるのがいい♪」

と好評です。

オープンソースカンファレンスは明日まで開催されていますから、遊び気分で是非RYUSの商品 ITXOO を触りに来てください♪

XOOPS Cubeで1からWebサイトを構築 第1回

久しぶりにXOOPS CubeでWebサイトを1から構築してみようと思います。
その過程を連載記事としてブログに書いていこうと思います。

さて、作るサイトは身内なのですが、自分の弟のサイトです。
彼はストリートで音楽を演奏したりライブをやったりと音楽活動をしているので
そういった事を載せるサイトにしていけたらと思います。

まず、レンタルサーバーをどこにするかを検討します。

参考
XUGJのレンサバ放浪記

候補
XREA
CORESERVER
ヘテムル
さくらインターネット

といった所でしょうか。XREAとCORESERVERは自分のサイトで使ったことあります。
ヘテムルもちょっと使ったことがあるので候補に。
あとは知名度と評判でさくらインターネット、プランは当然安いタイプになりますが。

こんな感じで候補を考えていたのですが、弟と話していたら、まずXREAの無料サーバで試して
できてきたら、ドメイン取得やXREAの有料化またはサーバー移転等すれば良いのじゃないか?
という話に落ち着きました。小さく始めて育てていこうと思います。

次回予定
XOOPSインストール

HTML5の新機能Web Databaseを試してみた。

hamacoです。

今日HTML5の新機能であるWeb Databaseを仕事で使えないかなーと調べてみたので、
簡単に使い方をコードで紹介したいと思います。

<script>
	var db = openDatabase("sample", "1.0", "Sample database", 1024 * 1024);

	function createTable() {
		db.transaction(function(tx) {
			tx.executeSql(
				"CREATE TABLE IF NOT EXISTS users( id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(64) NOT NULL);",
				null,
				insertData,
				function() {
					alert("CREATE 失敗");
				}
			);
		});
	}

	function insertData(tx) {
		tx.executeSql(
			"INSERT INTO users(name) VALUES(?);",
			["hamaco"],
			findData,
			function() {
				alert("INSERT 失敗");
			}
		);
	}

	function findData(tx, rs) {
		tx.executeSql(
			"SELECT * from users WHERE id = ?",
			[rs.insertId],
			function(tx, rs) {
				document.body.innerHTML = rs.rows.item(0)["name"];
			},
			function() {
				alert("SELECT 失敗");
			}
		);
	}

	createTable();
</script>

上記コードを実行すると、Safariのデータベースデバッグ用の画面で以下の様にデータが入っているのを確認することができます。


CREATE,INSERT,SELECTの3つを行なっているだけですが、executeSqlメソッドが非同期で動作する為、このように面倒くさいコードになってしまいます。

ただ、現在Web Databaseが動作するのはSafari4しかなく、他のブラウザでは動作しないので結局仕事には使えませんでした。

SSHのログインパスワードを間違えた時にキャンセルする方法

SSHのログインパスワードを入力したり、sudoコマンドにパスワードの入力を求められた時に、途中まで打ってミスタイプした時に気づいた時、どうしてますか?

たいていは、「CTRL+Cを押して、コマンドを中断してやりなおす」か、「BSキーを適度に連打して、再度入力」という方法をとると思います。

が、一旦中断するのは面倒だし、BSキーもどれだけ押せばいいかわからないので、不便です。
こういった場合は、「CTRL+uを押す」と、入力中の内容をすべて削除できます。

間違えたかも。と思った時はあわてずにCTRL+uを押して再度入力すると、あの入力内容が見えない画面も怖くなくなると思います。

リダイレクトとget_headers()の返り値

こんにちわ。 なおとです。

開発では、なにごともやってみて初めて分かるということがあるものです。 今回は、あるコンテンツに対して「HEADリクエストを送って存在確認をする」、というスクリプトを(PHPで)書いた時の話です。

マニュアルにはレスポンスが正常な場合(200 OK)の例が掲載されています。 これが、リダイレクトするコンテンツの場合には、少々様子が異なってきます。

結果を書いてしまうと、「get_headers()はリダイレクトを辿って複数のリクエストを行う」ということを知りました。 私は「HTTP HEADの結果に係わらず、1回だけリクエストして、その結果を返す」という動作を(勝手に)想像していたのですが、違いました。

動作を確認するために以下のような、リダイレクトを数回繰り返すサンプルを用意しました。(redirect.php)

<?php
$req = $res = $_SERVER['REQUEST_URI'];
if (preg_match('/[^\w\:\/\.]/i', $req)) {
    echo 'wrong request.';
} else {
    if (strpos($req, '.php') === (strlen($req) - 4)) {
        $res = $res . '/';
    }
    if (!strpos($req, '1111')) {
        $res = $res . '1';
        header('Location: ' . $res);
    } else {
        echo htmlspecialchars($req, ENT_QUOTES, 'UTF-8');
    }
}

これを、get_headers()を使って結果を見ます。(別のスクリプトです)

<?php
var_dump(get_headers('http://localhost/redirect.php', 1));

その結果が以下になります。
※分かりやすくするために、一部を編集しました

array
  0 => string 'HTTP/1.1 302 Found' (length=18)
  1 => string 'HTTP/1.1 302 Found' (length=18)
  2 => string 'HTTP/1.1 302 Found' (length=18)
  3 => string 'HTTP/1.1 302 Found' (length=18)
  4 => string 'HTTP/1.1 200 OK' (length=15)
  'Date' =>
    array
      0 => string 'Tue, 13 Oct 2009 06:38:51 GMT' (length=29)
      1 => string 'Tue, 13 Oct 2009 06:38:51 GMT' (length=29)
      2 => string 'Tue, 13 Oct 2009 06:38:51 GMT' (length=29)
      3 => string 'Tue, 13 Oct 2009 06:38:51 GMT' (length=29)
      4 => string 'Tue, 13 Oct 2009 06:38:51 GMT' (length=29)
  'Server' =>
    array
      0 => string 'Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.7 with Suhosin-Patch' (length=xxx)
      1 => string 'Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.7 with Suhosin-Patch' (length=xxx)
      2 => string 'Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.7 with Suhosin-Patch' (length=xxx)
      3 => string 'Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.7 with Suhosin-Patch' (length=xxx)
      4 => string 'Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.7 with Suhosin-Patch' (length=xxx)
  'X-Powered-By' =>
    array
      0 => string 'PHP/5.2.4-2ubuntu5.7' (length=20)
      1 => string 'PHP/5.2.4-2ubuntu5.7' (length=20)
      2 => string 'PHP/5.2.4-2ubuntu5.7' (length=20)
      3 => string 'PHP/5.2.4-2ubuntu5.7' (length=20)
      4 => string 'PHP/5.2.4-2ubuntu5.7' (length=20)
  'Location' =>
    array
      0 => string '/redirect.php/1' (length=15)
      1 => string '/redirect.php/11' (length=16)
      2 => string '/redirect.php/111' (length=17)
      3 => string '/redirect.php/1111' (length=18)
  'Content-Length' =>
    array
      0 => string '0' (length=1)
      1 => string '0' (length=1)
      2 => string '0' (length=1)
      3 => string '0' (length=1)
      4 => string '18' (length=2)
  'Connection' =>
    array
      0 => string 'close' (length=5)
      1 => string 'close' (length=5)
      2 => string 'close' (length=5)
      3 => string 'close' (length=5)
      4 => string 'close' (length=5)
  'Content-Type' =>
    array
      0 => string 'text/html' (length=9)
      1 => string 'text/html' (length=9)
      2 => string 'text/html' (length=9)
      3 => string 'text/html' (length=9)
      4 => string 'text/html' (length=9)

get_headers()の第2引数に「1」をセットしなかった場合は、もっと混沌とした結果になっていましたが、省略します。

それと今回は、自分自身にリダイレクトするスクリプトで実験しました。 異なるサーバ/スクリプトに跨ってリダイレクトを辿った場合は、レスポンス・ヘッダーの内容も異なると思われますので、もう少し複雑な結果になります。

これを受けて、「Locationの結果、行き着くコンテンツ」は次のように取得できることがわかります。 ただし、URLの解決(絶対URLに直す処理)は端折っています。 あと実際のコードでは、エラー処理など適宜しています。

<?php
$url = 'http://localhost/redirect.php';
$headers = get_headers($url, 1);
$location = $headers['Location'];
if (is_array($location)) {
    $location = array_pop($location);
}
if (
    (strpos('/', $location) === false)
    and
    (strpos('http', $location) === false)
    ) {
    $location = dirname($url) . '/' . $location;
}

echo "original: {$url} \n redirected: {$location} \n";

以上です。

Evernote for Windows 3.5 beta

satoです。

あまり使いやすくはないとの評判だったEvernoteのWindowsクライアントですが、先月末に3.5のbeta版がリリースされ、今までとはだいぶ使い勝手が変わったとのことで、早速試してみました。

ダウンロードはこちらから行えます。
過去バージョンが入っている場合は、起動時に昔のDBをコピーするかどうか聞かれます。

早速起動してみたところ、
38.png
何かエラーが出てしまいました。
しかしキャンセルすると普通に使えるようになりました。betaなので仕方ないのでしょうか。

39.png
モザイクだらけでわかりにくいですが、今までの画面とは大幅に変わっているのがわかります。
相変わらず日本語での検索ができませんが、文字入力も前ほど重くなく、ようやく実用できるレベルが見えてきた感じです。

Lifehacking.jpの記事によると、来年中に日本語化を行うということで、文字認識や検索も使えるようになると思うので、非常に楽しみです。

ちなみに3.5のbetaはあくまでbetaなので、ご利用は自己責任でお願いします。
今のところ、FirefoxのEvernoteアドオンが正常に動かなくなる等の問題があるようです。
To Top