2011/11/28

【雑記】久しぶりに漫画を買いました

1年ほど漫画を買っていなかったのでなにかないかなと思い久しぶりに本屋に行って来ました。

基本的に前評判を見たりして買ったりするのですが今回はなしで言ってみました。

買ったものは「放課後のカリスマ」
偉人のクローンだけが通う学校に唯一の非クローンとして通う主人公の話です。

内容の方はまだ読んでいないので、明日仕事終わって帰ってきてから読んでみようと思います。 終わり

2011/11/26

【PHP】Noticeエラーのみを非表示にする

ということでエラーの表示非表示についてです。

phpでの開発でよくNoticeエラーと出会うと思います。
これは未定義の変数を参照している場合などに表示されます。

リリース時にはどうせphpのエラーを画面に出力しないように設定しますが、
開発時には画面に表示しています。

なのでNoticeも一緒に表示されていますがバリデータエラー時にフォーム値を
再セットするような処理を入れているとNoticeエラーが出まくります。

これはかなりうざいので、Noticeエラーだけを表示しないようにできないものか
と調べてみるとありました。


1行でできますので今後は使っていきたいなと思います。
error_reporting(E_ALL ^ E_NOTICE);
これをphpの上の方で実行するようにすればOKです。 終わり

2011/11/23

【jQuery】jQueryでセレクトボックスのテキストを取得するメモ【JavaScript】

jQueryを使ってセレクトボックスの現在選択されている value値 ではなくテキストを取得する
方法のメモです。

<option>text</option>
上のtextの位置にある値ですね。 やり方はすごく簡単で
jQuery('#target option:selected').text();
または
jQuery('#target').children(':selected').text();
で取得できます。 おわり

【システム開発】PHP5でシングルトンパターンの実装する話【PHP】

今回はデザインパターンの勉強をしようということでまずは
「シングルトンパターン」というものです。

前からちょくちょく調べていたので今回はその先駆けということで

シングルトンパターンとは?
シングルトンパターンパターンとはデザインパターンの一つで GoFによって考案されたデザインパターンです。 内容はと言うとクラスのインスタンスをひとつしか生成しないことを保証するということです。
実装するメリットは?
例えばDBのハンドルを使いまわしたりだとか、僕の会社だと決済モジュールは シングルトンパターンで実装されています。 複数インスタンスを生成するべきではないクラスや何度も使いまわすものを このパターンで実装することによりリソースの削減ができます。 すべてのクラスに実装する必要はありませんが、使いまわすことが多いものだと 実装したほうがいい場合が多いです。
どういう風に実装するのか
下記の項目が基本的なシングルトンパターンを実装するのに必要な項目になります。 1.インスタンスを保持する「private」のクラス変数が定義されている 2.コンストラクタが「private」である。 3.インスタンスを返すメソッドがクラスメソッドとして定義されている。
実装方法についての解説
まず、1ですがシングルトンパターンではクラスの内部にインスタンスを保持します。 保持したインスタンスを使いクラス内関数にアクセスします。 次に、2ですがこれは「new」によってインスタンスを生成できないようにする為です。 シングルトンパターンはインスタンスをひとつに保証するものなのでprivateで宣言します。 最後に3ですが、コンストラクタをprivateで実装するため、クラスインスタンスを 生成する関数が必要になります。 3がこれに当たります。
実装例
下記がシングルトンパターンの実装例になります。 Singleton.php
<?php

class Singleton
{
    private static $instance = null;

    private function __construct()
    {
    }

    public static function getInstance()
    {
        if (is_null(self::$instance))
        {
            self::$instance = new self;
        }

        return self::$instance;
    }

    public function test()
    {
        echo "Singleton";
    }

}

?>
呼び出し方法は以下のものが使えます。
$single = Singleton::getInstance();
$single->test();
Singleton::getInstance()->test();
終わり

2011/11/20

【PHP】Smartyでscript、styleタグを使う場合の注意【Smarty】

ちょっと引っかかったのでメモ
PHPでシステムを作成する際はテンプレートエンジンとして「Smarty」というものを使います。

SmartyとはPHP用に開発されたテンプレートエンジンでロジックとビューを
切り分けるのに重宝します。
ほとんどのPHPのシステム開発で使用されているかと思いますが、Smartyテンプレートには
実は落とし穴のようなものがあります。

殆ど無いかと思いますが、テンプレート内で「{}」を使う場合です。
Smartyでは「{}」を置換タグとして扱います。

上記の理由でテンプレートに直接JavaScriptやCSSを書くとエラーとなります。
ただ、外部ファイルとして読みこめば全て丸く収まるのですが、テンプレート側に
書けないということはありません。

テンプレートに書く場合は「{literal}{/literal}」で囲う必要があります。
下記のように記述します。

<script type="text/javascript">
{literal}

  function test() {
    Alert('test');
  }
{/literal}
</script>
終わり

【雑記】まどマギカフェに行って来ました

今春放送の「魔法少女まどか☆マギカ」のカフェがあるということで行って来ました。

メニュー
今回は「巴マミのソウルジェムドリンク」と「キュゥべえカレー」を注文しました。 注文した際に店員さんが「マミさん一つ」と言っていたのでちょっと感動しました。
巴マミのソウルジェムドリンク
キュゥべえカレー
「巴マミのソウルジェムドリンク」はホワイトウォーター+オレンジの何かだと思います。 「キュゥべえカレー」の味は普通のカレーでした。
マミさんのマスケット銃
ほむほむの銃と手榴弾
お菓子の魔女 見切れてますが…
お菓子の魔女の足元の台座
これはひどいですね、すごく笑いましたが
ついでに噛まれておきました
最後にトイレに行った時に振り返るとあったので
トイレが見られてる気がしてかなり気まずかったです また機会があれば行ってみたいですね 終わり

2011/11/18

2011/11/17

【PHP】Using $this when not in object context の原因

ということで今日はタイトルのエラー内容についてメモっておきます。

PHP Fatal error: Using $this when not in object context example.php on line 12
PHP5からオブジェクトの扱いが厳密になったのでクラス定義内からメソッドを呼び出す際に 「$this」を使用するとFatal Errorになってしまいます。 これが原因です。 以下解決方法です。 1). メソッドを「static」で宣言している場合は「static」をはずす。 2). スコープで呼び出すのではなく、インスタンスを生成してメソッドを呼び出す。 大体上記の解決方法を確認すれば、解決できるかと思います。 終わり

2011/11/15

【PHP】cURLを使う

ということで今回はphpの関数である「cURL関数」を使った
サンプルをメモっておきます。

まず、「cURL」とはClient URL Libraryのことです。
多くのプロトコルで異なるサーバと通信できるライブラリとのことです。
便利ですね。

<?php

// cURL初期化
$ch = curl_init();

// 対象URL
curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/');
// 戻り値を文字列で取得
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// 結果を取得
$res = curl_exec($ch);

// 結果を出力
var_dump($res);

// cURL終了
curl_close($ch);
2つ目の「curl_setopt」で「CURLOPT_RETURNTRANSFER」をtrueに設定しました。 これを設定することにより、結果を文字列で取得することができます。 終わり

2011/11/09

【Flex】FlvPlayer作成 part2.5【補足】

ということで今回は前回に作ったFlvPlayerのちょこっと修正と補足をしたいと思います。

さて、前回は動画の再生時間とシークバーの実装について書きましたが
今回仕様上の不具合が発見されたのでその修正を行いたいと思います。

不具合の内容としては、シークバーのスライダーをドラッグした状態で
スライド動作を行うと動画の再生がおかしくなります。

この現象は、前回の記事の「Main.mxml」の箇所で、
スライダーのコンポーネントの「liveDragging」に「true」を指定していたため
起こっていました。

なぜ起こるのかというと、「liveDragging」に「true」を指定することにより、
ドラッグ中はchangeイベントが常に発行される状態になっているので、
シークする関数がその間ずっと呼ばれていたためになります。

ですので、実際はしばらくすると動画は正常に再生されるようになるのですが、それはさすがに
放置しておけないので「liveDragging」を指定なしに変更しました。

これでドラッグ中のスライド動作で上記の不具合は起こらないようになりました。


終わり

2011/11/08

【Flex】FlvPlayer作成 part2

FlvPlayer作成Part2ということで今回はシークバーをつけてみようと思います。

今回は前回と同様コンポーネントを配置し別にイベントを作成しました。

以下、ソースです。

起動時にinit()を使ってシークバーにイベントを付加します。
シークバーは動画の再生時間と同期させ、シークバーが変更されたら
動画の再生時間を変更する処理を行います。

script.as
// 必要なものをインポート
import mx.events.VideoEvent;
import mx.events.SliderEvent;

// 初期化
public function init():void
{ 
  // シークバーにイベントを追加
  this.time.addEventListener(SliderEvent.CHANGE, changePlayHeadTime);
}

// シークバーによる再生時間の変更イベント
public function changePlayHeadTime(event:SliderEvent):void
{
  this.player.playheadTime = event.value;
}
main.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
 layout="absolute" width="400" 
 height="400" creationComplete="init()">

    <mx:Script source="script.as" />
 
    <mx:Panel id="panel" x="10" y="10" width="380" height="380" layout="absolute" >
  <mx:VideoDisplay 
   x="20" y="10" 
   source="sample.flv"
   width="320" height="240" 
   id="player" autoPlay="false" 
   autoRewind="false"/>
  <mx:HSlider 
   id="time" 
   x="20" y="250" 
   width="320" height="15" 
   minimum="0"
   maximum="{player.totalTime}"
   value="{player.playheadTime}"
   liveDragging="true"
   showTrackHighlight="true"
   allowTrackClick="true"/>
  <mx:Button id="play" x="158" y="276" label="再生" click="player.play()" />
  <mx:Button id="pause" x="214" y="276" label="一時停止" click="player.pause()" />
  <mx:Button id="stop" x="292" y="276" label="停止" click="player.stop()" />
 </mx:Panel>
 
</mx:Application>
んー、シークはされてるんだけどなんか動きが変だな 他の動画サイトと動きが違う・・・ このへんどうにかしたいなぁ とりあえず、それは次回ということで 終わり

2011/11/07

【MySQL】コマンドラインからUPDATE、INSERTするときの注意

今日会社でDB作成中にハマったのでメモ

普段はPhpMyAdminからデータを入れたりするのですが、
今回の案件が膨大なデータ量だったのでコマンドラインから
SQL文を実行する事になったときにハマりました。


はい、文字コードです。

INSERTをする際に文字コードを指定しないといけなかったみたいで
すべて文字化けしたままDBに挿入されていました…

その際の解決方法をメモしておきます。

下記を指定するだけでした。
SET NAMES 'utf8';
これは、今回のやり取りでどの文字コードを使うという指定をするものです。 ですので、これを指定したあとにSQL文を実行すると指定した文字コードでデータが 挿入されます。 これで無事データの挿入が出来ました。 次から気をつけよう。 【追記】 SET NAMESにはSQLインジェクションの脆弱性があるようで コマンドライン上から使用するのは大丈夫なようですが、アプリケーションから 利用する場合は注意が必要ということらしいです。 終わり

2011/11/05

【Flex】FlvPlayer作成 part1

FlexでFlvPlayerを作ることになりました。

要件としてはニコニコ動画の動画プレイヤー的なものを作る予定です。

今回はFlvPlayerの基板として下記の要件のものを作りました。

・再生
・停止
・一時停止

今回はこの要件を満たすものを作りました。

Flexはコンポーネントが多数ありますので、この位のものなら
ASを組む必要はないです。

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="400" height="400" >

  <mx:Panel id="panel" x="10" y="10" width="380" height="380" layout="absolute" >
    <mx:VideoDisplay x="20" y="10" width="320" height="240" id="player" autoPlay="false" autoRewind="false" source="sample.flv"/>
    <mx:Button id="play" x="158" y="276" label="再生" click="player.play()" />
    <mx:Button id="pause" x="214" y="276" label="一時停止" click="player.pause()" />
    <mx:Button id="stop" x="292" y="276" label="停止" click="player.stop()" />
  </mx:Panel>

</mx:Application>
上記で再生するだけなら出来ます。 次回からシークバーを動画に同期させるようにしたいと思います。 終わり

【MySQL】MySQLは大文字と小文字を区別しない

という訳でMySQLは大文字と小文字を区別しません。
今回システムを作っていて初めて気づきました。

その件について解決方法と言うか対策を調べたのでメモしておきます。

まず、今のところ大文字と小文字を区別しないのは下記の2つです。

・char
・varchar

それ以外にあるかどうかはまだ確認していません。

その解決方法ですが、大文字と小文字を区別したいカラムに「BINARY属性」を指定します。

これによって大文字小文字を区別できるようになります。


終わり

2011/11/02

【Flex】FlashDevelopでプラグイン導入

ということで近々FlexというかFlashの環境が必要になってきたのでFlashDevelopを
導入しました。

Flexのデザインビューを使おうと思ったんですがデフォルトでは使えないようです。
検索するとプラグインが必要みたいなのでその際の覚書を書いてみます。

まず下記URLのダウンロードよりFlex Design Viewerをダウンロードします。
http://www.flashdevelop.org/wikidocs/index.php?title=3rd_Party_Plugins


解凍すると

・Data
・Plugins

というディレクトリが出てきますので、Pluginsの中にある「FlexDesignView.dll」という
ファイルを
「C:\Program Files (x86)\FlashDevelop\Plugins」
に移動します。
※こちらのディレクトリパスは当方の環境ですのでPCごとに変わると思います。

プラグインが配置できたら次は「Data」を配置します。
配置する場所は、環境によると思いますが僕の場合は

「C:\Users\ユーザ名\AppData\Local\FlashDevelop\Data」

にDataの中身をコピーします。

これでFlexDesignViewerが使えるようになったかと思います。


終わり

【Linux】Crontabについてまとめ

今回Crontabを設定することになったのでメモしておきます。

まず、Crontabの実行とオプションですが下記になります。
crontab [ -u ユーザ名 ] { -l | -r | -e }
crontabにジョブをセットする際には下記のように指定します。
crontab -e
このコマンドを実行するとデフォルトで設定されている?エディターでcrontabの 設定ファイルを開きます。 引数は全部で6つあります。 形式は下記のようなものです。
* * * * * 実行するファイル
前から順番に
分 時 日 月 曜日 実行ファイル
の順になります。 さて、ここまでまとめて試験に入ろうということで試験を行いました。 いざ1分後に設定してテスト!! あれ?動かない 5分後にセットして再テスト!! 動いた、あれ? ちょっと不思議だったので調べてみると答えがありました。 crontabは設定の1分後にcrontabの設定ファイルを読みなおし、その1分後から ジョブを実行するらしいです。 ですので、ジョブを設定してテストする際は2分以上先の時間をセットする必要があるそうです。 次から気をつけましょう。 終わり