Home > webプログラム

04月07日 

webプログラム

SWFの幅・高さなどをPHPで読み取る(訂正有り)

ようやく技術ネタですわ~

ということで、アップロードされたSWFファイルの幅や高さ、FPSなどを取得したいことって無いですか?必要に駆られて調べてみました。んで、PHPでの実装例がググっても出てこなかったのでネタにしてみようと思います。
続きを読む »

02月09日 

javascript

javascriptでOOPとjQuery

JavascriptをOOPで、jQueryを組み合わせて使おうとした時にハマった沼からの脱出方法例。

JavaScript:
  1. var hoge = {
  2.     fuga : function() {
  3.         jQuery.ajax( {
  4.             url:'hogehoge.xml',
  5.             success:onSuccess
  6.         });
  7.     },
  8.     onSuccess :function(data) {
  9.         ...
  10.     },
  11.     ...
  12. }

だとバッチリコケる。

そんな時は

JavaScript:
  1. jQuery.scope = function(target, func){ return function() { func.apply(target, arguments); }};
  2. var hoge = {
  3.     fuga : function() {
  4.         var obj = this;
  5.         jQuery.ajax( {
  6.             url:'hogehoge.xml',
  7.             success:jQuery.scope(this, obj.onSuccess)
  8.         });
  9.     },
  10.     onSuccess :function(data) {
  11.         ...
  12.     },
  13.     ...
  14. }

てな感じにすればOK、という場当たり的な対処法。ちょっと「var obj = this;」的なところが駄目っぽさ満載。

参考ページ

02月02日 

javascript

jQueryでonclick

リクリチャットでjQueryの事を喋るなら、このエントリの基礎みたいな感じ。でも今回も喋る人が多そうだから自粛しようかな。

さて。
例えばAJAXでXMLを引っ張ってきて、DOMで要素を追加して、そいつをクリックしたらイベントを駆動させる、というシチュエーションの時。

jQuery.each(data, function(i, dat) {
  jQuery('<a/>')
    .attr('class', 'hoge')
    .attr('href', 'javascript:void(0)')
    .attr('onclick', 'fuga('+dat.id+')')
  )
  .append('to')
)};

は、Firefoxだと動く。Chromeだとonclick属性が入らず動かない。

jQuery.each(data, function(i, dat) {
  jQuery('<a/>')
    .attr('class', 'hoge')
    .attr('href', 'javascript:void(0)')
    .click(function() {fuga(dat.id);})
  )
  .append('to')
)};

は動く。Chromeでも。

でもタブンもうちょっとスマートにするなら、

jQuery.each(data, function(i, dat) {
  jQuery('<a/>')
    .attr('id', 'btn_fuga')
    .attr('class', 'hoge')
    .attr('href', 'javascript:void(0)')
    .attr('rel', dat.id)
  )
  .append('to')
)};
jQuery('#btn_fuga').click(
  fuga(jQuery(this).attr('rel'));
);

てな感じか。検証してない&突っ込みどころ満載かと思いますので、各自で勉強して下さいな。
jQueryマンセー!だけど、微妙な部分があるのもまた事実。

Smartyで文字コードの違うPHPをincludeせなあかん時

子供の好き嫌いは(除アレルギー)、料理が下手か、甘やかせすぎか、親が美味しそうに食べてないか、Loveスパイスが入ってない(キモッ)か、のどれかだと思います。うちは食育を大事にします。

さてさて閑話休題。
既に稼働済みのシステムが内部エンコードはUTF-8で最後にShift_JISに変換して出力する仕組みをSmarty使ってやってた時、後から文字コードがEUCの別PHPを組み込んで下さい、とクライアントから連絡来た時に悩んだ時の記録。

クライアントからは
<? include("path/to/hoge.php"); ?>
を挿入して下さい、という連絡が。

Smartyには{include}というタグがあるので、文字コードが同じであればコレで行けたはず。
しかし今回はUTF-8で作ってあって、最後にfetchしてその出力をShift_JISに変換して最終出力するという荒技をやってたので、上記の方法を使うとUTF-8の中にEUCが入ってきて、それをShift_JISに変換するもんだから、もう何が何やら。DBとの絡みもあって、内部エンコードをEUCに変更するのはアレだし、DBからの変数をいちいちEUCに変更するのはもっとアレ。

ということで、この状況を打開すべく試行錯誤の末に辿り着いたのが以下の方法。

{include_php file="path/to/hoge.php" assign=output}
{$output|mb_encoding:"UTF-8":"EUC-JP"}

{include_php}のassign指定で変数に出力を突っ込み、その変数をSmartyの中で文字コード変換してUTF-8に揃えちゃう。これでテンプレートの中身がUTF-8に統一されるので後はウマー。

ちなみにSmartyのプラグインを作らないといけないので、
<?
function smarty_modifier_mb_encoding($string, $to = "", $from="auto")
{
if ($to == "")
return "";
return mb_convert_encoding($string, $to, $from);
}
?>

として、modifier.mb_encoding.phpというファイル名でプラグインディレクトリに保存します。

タブン別のもっといい解決策もあるかと思うけど、日曜の深夜に泣いた防備録として。

12月08日 

javascript

覚え書き

SexyLightbox2とTinyMCEとjQuery

部屋とYシャツと私。
ドツボと原因究明とシステム作り直し。orz

SexyLightbox2(以下SLB)はajaxでhtmlを引っ張ってきてゴニョゴニョを勝手にやってくれるので、最近SLBどっぷりだしシステムにも組み込んじゃえ、と今作ってるシステムのフォームをajax駆使して表示してみたりしたらセキュリティの問題も(モロCSRF弱くなる)出てきて、対応策考えたり(ワンタイムトークン仕込んだり)で結構面白いことになってるんだけど、バッチリはまりましたよ、罠に。。。

続きを読む »

12月06日 

wp-sexylightbox

本家で取り上げられてました

Sexy Lightbox 2 Wordpress用プラグインですが、どうやら本家のサイトのフォーラムで取り上げられてました。
http://coders.me/foro/topic49.html
スペイン語なんね(誰や?フランス語だなんて言ってたのは)。
gdgdの自動翻訳で読んでみたら、どうもレイアウトが崩れて「閉じる」が表示されねぇのよって話題の中に、「日本人がこんなこと勝手にやってるぜ」みたいな内容だと思うのですが…
好意的なのか、ナニ勝手にやってんのよ?的なのかすら分かりませんw
誰かスペイン語分かる方、見えませんか?

Amo el vino de Jerez(Pedro Ximenez).

私はシェリー酒(ペドロヒメネス:超甘口)が好きです。
と書いてみる(間違ってるかも…)

12月05日 

Papervision3D

Papervision3DでCoverFlowみたいな

前に作ってたCoverFlowを流用して納品物に加えようと思ってたら…PV3Dのバージョンが変わっててパブリッシュが通らない…orz
目的のクラスはどこへ消えたかな?とファイルを眺めてると、そこに現れたるは「ReflectionView」。
ってこれ、そのまんまじゃんw

ということで実装。

超簡単に鏡面反射が実現できます。
import org.papervision3d.core.effects.view.ReflectionView ;

public class Main extends ReflectionView

singleRender();
終了。

CoverFlow自体のルーチンは流用できるので、これにて完成。あー良かった良かった。

で落とし穴…orz

FirefoxとChromeで鬼のちらつきが…しかも鏡面反射の部分が。変な位置にチラチラと表示されるのよね。色々と試してみました。CoverFlowが動いてない時にはレンダリング止めてみたり、いろいろいろいろいろいろいろいろいろいろいろいろいろりおr。
で、ハッケン。
surfaceHeight
で鏡面反射の位置を調整できるんだけど、これに負の値を入れてたのが原因“みたい”。これをデフォルト値で、オブジェクトの位置で最適になるように調整したら、大体OK。
大体、というのが、Firefoxでは発生しなくなったのに、Chromeでは起きてしまうこの事実。

もう思い当たる節がないんですケド…

ハズレーorz

やっぱり直ってなくて、CameraをFreeにしたのが気にいらんのか?とか別に探ってみたり、ヤケを起こしてReflectionView使うのを止めようかとよぎったり。。。
が、ハッケンしましたよ、お兄さん。
camera.useCulling = true;
でなぜ直るのかイマイチあれですが、CoverFlow的な動きがReflectionViewの癪に障ったのかもしれません(んな訳あるか!)。
まーそんなこんなでReflectionViewを使って描画対象がドッチラケな方向で分身の術を繰り広げる場合、上記の方法を試してみるのも解決の一手かも(All OKなんて口が裂けても言えないorz)。

え?IE?最初っからちらついてないの。ナニコレ?

SQLエディタ・ER図作成ツール

SQL Mk-2
国産、というとで。

普段は小規模DBしか組まないのでER図も必要ない位で、頭の中でDB構築完結させてしまってるのだけど、珍しく中規模くらいになってくると説明にも使えるようにDBDesigner4とか使ってます。印刷とかも出しやすいし。

ということで、国産の使い勝手は如何に?

自家製パノラマプレイヤー「BloomPano」着々と進化中。

機能追加や細かい修正を重ねておりますよ。自家製パノラマプレイヤー「BloomPano」。
誰ですか?ネーミングセンスがカスって言ったのは!

以前からのToDo。

  • ズーム機能の調整
  • フルスクリーンへのトグル機能
  • 操作パネルプラグイン作成
  • 紙資料の作成w

フルスクリーンへのトグル機能はすぐに付けられるわ、と横着w

誰ですか?ピクトのセンスがn(ry

ついでにホットスポットの位置決めを楽に出来るパネルを作ってみたり、操作パネルにはホットスポットの表示・非表示機能など付加してみました。ホットスポットの非表示なんですが、Tweenerでscaleを1→0で変化させてるのですが、0になった途端にホットスポットが持っていたマウスイベントの感知領域がステージ全面に広がってしまう意味不明の症状が…(ホットスポットが消えた途端にステージのどこにマウスを持って行ってもホットスポットのマウスイベントが発生してしまう)
で、どうやっても解決策が分からないので、ビューポートのマウス検知をオフに。
viewport.interactive = false ;
これで解決ですが、どうも釈然としない感じです。

後は詳細情報ウィンドウの機能をもうちょっとブラッシュアップしたら大体OKな気がします。

いや~AS3面白い!

で、今日ググってたらAS3で3次元レンダリングエンジン(レイトレーシングとか)を作ってる強者が居てましたよ。処理速度は厳しいけど、クオリティはめちゃ高!
夢は広がりますね~

自家製パノラマプレイヤー with PV3D「Bloom Pano」

ようやっとできました。細かい調整とか追加したい機能は山積みですが…とりあえず基本機能は…

かな~り「PanoSalado」を参考にさせて頂きました。ツールチップや情報ウィンドウ、操作パネルなどはプラグインとして後付け可能な形式に。その時々でデザインの変更が可能な訳ですな。

今回はいっぱいActionscript3の勉強になりました。文法的な事から技術的な事まで。慣れてしまうとAS2には戻れない感じ。AS3のプログラミング楽しいっす。

サンプル画像の撮影は近所の「春日神社」で。お昼時間に行ったのですが、ベンチでご飯を食べてるおっちゃんやずーっと一人でブツブツとつぶやいているお婆さん。。。怖かった。。。こっち見てるし(汗)水平が取れていないので気持ち悪いですが、通常の1枚撮りとHDR加工した物を切り替えられるようにしてあります。HDRの方はあまり違和感の無いように調整したので、ぱっと見、違いが分かりにくいかもしれません。。。

今後のToDo:
1.ズーム機能の調整
2.フルスクリーンへのトグル機能
3.操作パネルプラグイン作成
4.紙資料の作成w

さ~頑張ろう!

« 前の記事 | 次の記事 »