
スタッフブログ
定期的に開催されているXOOPS初心者向けの実践的勉強会「XOOPS初心者勉強会」
その2014年最初の勉強会が1月11日にコワーキングスペース CASE Shinjukuにて開催されました。
その当日に主催の竹原さんから発表があったのが勉強会名称の変更です。
「初心者」の文字をはずして「XOOPS Cube勉強会」と名前が変更になりました。
初心者だけでなく、XOOPS Cubeになれてきた方やベテランさんも集って欲しいという思いがよくわかる名前変更ですね。
実際、この11日の勉強会ではたまたまCASE Shinjukuに来ていて参加してみたという全く初めてXOOPS Cubeのことを知ったという方から、XOOPS Cube開発者の氷川さん、bulletinモジュールを開発したSuinさん、XUGJ.orgのfabiさん等ベテランさんまで幅広く参加されてました。
次回第21回目の勉強会は2月1日に開催されますので、みさなん是非ご参加くださいね。
[第21回] XOOPS Cube勉強会 2/1(土)開催 : ATND
残念ながら私はこの日ブルベを走る予定なので勉強会には参加出来ません〜(^^;
xelfinderで画像をUPしてブログ記事を書こうとしたらアップロードした画像が表示できずに"No input file specified."になって困ってたんですが、coreserverでの有名な問題みたいですね。
No input file specified.と出たら ≫ 運営堂
上記ページにあるとおり、.htaccessに
mod_gzip_on Off
を追加したら画像が表示されるようになりました。
あけましておめでとうございます。昨年末に高尾に引っ越した龍司です。
せっかく周りにハイキングコースがたくさんあるので、トレイルランでもやってみようかなぁと思っていろいろ検索してたら「ヤマレコ」というサイトを発見しました。
ヤマレコ - 登山やハイキング、クライミングなどの記録を共有できる、登山の総合コミュニティサイト
細部まで良くデザインされてて気がつくのが遅れましたが、このサイトもXOOPSで構築されてるんですね。
ちょっと記憶を頼りに他にXOOPSでできた趣味コミュニティサイトをリストアップすると下記のようなサイトもあります。
ランニングサークルWindRun(ウィンドラン) - 風のように走る
趣味活動では活動記録を残したり、ハウツーの情報交換があり、イベントでの交流などがありますが、XOOPSにそれらの活動に対応した拡張モジュールがあるから趣味コミュニティサイトで良く採用されるのでしょうね。
いろんなXOOPSサイトを見ていると「あ、これは今考えてる○○に応用できそうだな」って発見もあって楽しいものですね。
そうそう発見といえば、勉強会で他の方が作られてるサイトを見せてもらうのも良い刺激がえられますね。
1月は1月11日(土)にXOOPS Cube初心者勉強会が新宿で、1月16日に神戸でもくもく会が予定されてるので、時間のある方は参加しては?
NetCommons2のmaple/nccore/db/DbObjectAdodbをみてたら
StartTrans(), FailTrans(), CompleteTrans()なんてメソッドがあって、トランザクションに対応してそうな雰囲気だが、これは罠。
NetCommon2で使ってるのはAdodbのmysqlドライバで、このmysqlドライバが残念ながらトランザクションに対応してない。
なので、Innodb使っててトランザクション処理したいときは自前でexecute('BEGIN')とかするしかないようだ。
NetCommons2はSmartyのdefault_modifiersを利用して自動で全変数にエスケープかかるようになってるが、これが罠。
このdefault_modifiesって表示だけでなく、変数を使うところ全てで適用されるので、下記の様なコードで問題になる。
<{foreach from=$arrayList item=item}>
<{$item}>
<{/foreach}>
from=$arrayList で$arrayListの中身をSmarty::_run_mod_handlerでエスケープかけようします。
_rum_mod_handlerで、配列の中身すべてにdefault_modifiersで指定されたmodifireがかかります。
NetCommons2の場合、escapeです。さらに<{$item}>を表示するときにもdefault_modifiersで指定されたescapeがかかります。
結果、二重にエスケープされるわけです。
これを避けるにはsmarty:nodefaultsを利用してdefault_modifiersが適用されないように、下記の様なコードにします。
<{foreach from=$arrayList|smarty:nodefaults item=item}>
<{$item}>
<{/foreach}>
Smartyのバグ ~default_modifiers~ : アシアルブログも参考にしたんですが、
<{if isset($foo)}>
みたいなときもエスケープかけようとするので、これも下記みたいにしないとダメなようです。
<{if isset($foo|smarty:nodefaults)}>
ブログに書いたつもりが下書きのままパソコン内に記事が眠ってて焦った龍司です。
2013年10月22日にEngineYardさんで開催されたSendGrid Nightに参加してきました。
EnginYardさんでは、定期的に1つのPaaSを掘り下げた勉強会を開催していこうと考えてるそうで、その取り組みが「○○ Night」みたいです。
1回目はサーバ監視サービスの「NewReric」をとりあげた「NewReric Night」を開催、2回目はメール配信サービスの「SendGrid」をとりあげる「SendGrid Night」ってことでした。(今後どんな○○Nightが開催されるか楽しみですね。)
以前EngineYardの安藤さんにSendGridの存在を教えてもらっていて興味をもったんですが、今回の勉強会に参加してみるまで自分がなんでSendGridに興味もったのかをすっかり忘れてました(^^;
それが参加してみてやっと何故興味をもったか思いだすことができました。
何故興味をもったか?
それは「メールの大量配信をちゃんと行うのはすんごいめんどくさいこと」だったからです。
会員制のWebシステム開発を何度もやってると中にはメールを大量配信するケースも出てきます。これをまともに実行できるようにするのがとてもめんどくさかったんですね。
メール配信をちゃんとやろうとすると、なにがめんどくさいか
SendGridNightでも話しがあったのですが、今やメールの9割が迷惑メール。各プロバイダや携帯キャリア、メールソフトそれぞれが迷惑メール対策をあれこれ実施しています。
そのおかげで迷惑メールに触れる機会が減ってるんですが、ちゃんとしたメール配信をしようとすると、この各種の迷惑メール対策でフィルタリングされないように、送信側もあれこれ設定したり、配信ペースを押さえたりと面倒なことがいっぱいでてきます。
さらにサーバのスペックの問題も発生します。メール送信って他のサーバとの通信が発生するのでサーバにけっこう負担かけるんですよね。それにあわせてサーバスペックあげると、メール配信以外の普段ではオーバースペックでハイコストの原因になっちゃうし、スペックさげるとメール配信がいつまでも終わらないなんてことが起こったり、けっこうムキーーーってなったりします。
エラーメールの対処をどうするかってのも頭の痛い問題です…
ほんと、送ったメールがちゃんと届くようにする って結構大変なことだったのを勉強会を通してよーーーーっっっく思いだしましたよ…
で、SendGrid。
SendGridはWebサービス、Webサイトをつくってるときに発生するこういう「めんどくせーーー!!」と叫びたくなるメール配信系をうまいことやってくれるサービスなわけですね。
というわけで基本的なメール配信はもちろん問題なくできるようになってますが、それだけでなくプラスアルファでいろいろ便利そうなサービスになってます。
SendGridが便利そうなポイント
自分でメールサーバをたてる大変さから解放されるのが一番のポイント。
他の便利ポイントとしては
- 送信ログの確認ができる
- 配信されたか拒否されたかちゃんとわかります。
- ParseAPI使うと受信メールをきっかけにWebへメール内容をPOSTなんてこともしてくれる
- SMTP API使うと一度に1000通ぐらい送信とか宛名の置換とかもできるそうです
- 無料で毎月6000通まで送信OKらしいので、メール送信テスト時にコストかからんのもいいです
ってあたりが個人的にはヒットでした。
最近ちょっとWindowsAzureをうまいこと利用できないか試行錯誤してるんですが、WindowsAzureはメール送信できないってことで早速SendGridの無料プランをちょっと使わせてもらいました。
これをきっかけにちょこちょこ利用できたらなぁと思ってます。
XCL2.1からXCL2.2にしたときにXCL2.1付属のPM(PrivateMessage)をやめてMessageモジュールを導入された方も多いかと思います
このMessageモジュールはインストール時にPMのデータを移行する仕組みが備わってたのですが、ちょっとしたバグがあって移行できませんでした。
というわけで、元からあった移行コードにちょっと手をいれて、後からでもpmモジュールのデータをmessageモジュールに移行できるようにしてみました。
こちらからダウンロードできます。
XOOPS_ROOT_PATH直下にアップロードしたら、XOOPS_URL/pm2message.phpにアクセスしてください。
pmにあるメッセージがmessageモジュールに移行されます。
2度3度起動してもいいように、from, to, subject, bodyが全く同じメッセージがすでにmessageモジュールにあったら、そのメッセージは移行しないようになってます。
messageモジュールの自動削除で消えてしまったメッセージがpmに残ってるときにサルベージするのにも使えると思います。
PHPでファイルアップロードサイズの上限値は upload_max_filesizeで設定します。 .htaccessなら下記の様な感じですね。
php_value upload_max_filesize 256M
この数値を変更したときに合わせて見直しておきたい設定項目が2つあります。
memory_limit と post_max_sizeです。
この3つの設定項目の数値はそれぞれ下記のような関係である必要があります。
memory_limit > post_max_size > upload_max_filesize
ここ、気をつけてないと、upload_max_filesizeは増やしたけど他のサイズが小さくてファイルアップロードがうまくいかないということが発生します。
私がはまったパターンでは、post_max_sizeが小さくて大きなファイルをアップロードしようとすると、$_POSTが空っぽになってしまい、いきなり別ページに飛ばされるなんてことがありました(^^; # 最近のフロントコントローラ方式だとまずこうなりますね
xupdateで"SSL certificate problem: unable to get local issuer certificate"となった時の対処法
Ryuji : XOOPS » モジュール 2013/10/3 10:06XOOPS X(ten)では、xupdateというモジュールやテーマのダウンロードとアップデートをしてくれるモジュールがあります。(次期XOOPS Cube Legacyコアにも取り込まれる予定です)
このxupdateでモジュール等をダウンロードしようとしたときに、サーバによっては次のように"SSL certificate problem: unable to get local issuer certificate"というエラーがでてダウンロードに失敗することがあります。
このときは、xupdateの一般設定で「cURL: SSLホスト認証をしない」を「はい」に変更すると正常にダウンロードできるようになります。
さくらのレンタルサーバスタンダードでこの症状に遭遇しましたので、さくらのレンタルサーバご利用の肩は設定変更して試してみてください。
PHP5.4対応の一番の問題として htmlspecialchars関数 の問題があります。この関数はXSS対策に良く用いられる関数なので、Webシステムで利用されないことはまずありえません。
そのhtmlspecialchars関数がPHP5.4以降、文字コードの指定がないとデフォルトで文字コード「UTF-8」だと判断して動作するようになりました。
これが問題になるのはかつてPHPプログラムで文字コード「EUC-JP」をメインに使ってた頃のプログラムです。(UTF-8以外だとダメなのでSJISとかももちろんダメですけどね)
XOOPSもかつてはEUC-JPを使うのが主流でしたので、その頃に構築したサイトはPHP5.4へ移行するとこの問題にぶちあたります。
この問題が発症すると症状として何が起きるかというと文字列の抜け落ちが発生します。XSS対策でサニタイズしている文字列なんかはまるごと抜け落ちるので、たとえば、掲示板とかで枠線とか外観は正常に表示されるのに書き込みメッセージが全く表示されないというような症状になります。
対処法としては、XOOPSなら全般設定で言語を「japanese」から「ja_utf8」へ変更することで回避できます。
他のシステムでも内部エンコードをutf-8にしてあげればほぼ回避できると思います。.htaccessで設定変更できるなら下記の様にします。
php_value mbstring.internal_encoding UTF-8
ちょっとしたプログラムであれば、これだけで問題解決することもあると思います。
# もちろんDBとの接続やファイルの読み書きがある場合は、そのやりとりの文字コード変換をあわせていく必要はありますけどね。
