2011年6月7日

CodeIgniter を さくらインターネットで動かすときの対処方法

CodeIgniter を さくらインターネットで動かすと

No input file specified.

になってしまうときの対処方法。

php.ini に下記を書く。
cgi.fix_pathinfo = 1

.htaccess に 下記を書く。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.php/$1 [L]
以上!

2011年4月8日

Androidでマナーモードを取得する。

Androidで音を鳴らす。[SoundPool編]」をしてから気づいたが、この(↓)コードだとマナーモードでも普通に音が鳴ってしまった( ̄▽ ̄;

SoundPool soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0); 
int soundID = soundPool.load(context, R.raw.lalala, 1); 
soundPool.play(soundID, 1.0F, 1.0F, 1, 0, 1.0F); 

・・・ということで、「マナーモードやサイレントモードでないときだけ、音を鳴らす」という処理を自力で書かないといけないらしい。

現在の着信音モードは、AudioManagerから取得できる。具体的には下記。

// AudioManagerオブジェクトを取得
AudioManager audioManager = (AudioManager)getSystemService(AUDIO_SERVICE);
// 着信音モードを取得
int ringerMode = audioManager.getRingerMode(); 

switch (ringerMode) {
case AudioManager.RINGER_MODE_NORMAL: // 通常(音あり)
 SoundPool soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0); 
 int soundID = soundPool.load(context, R.raw.lalala, 1); 
 soundPool.play(soundID, 1.0F, 1.0F, 1, 0, 1.0F); 
 break;
case AudioManager.RINGER_MODE_SILENT: // サイレントモード(音なし)
case AudioManager.RINGER_MODE_VIBRATE: // バイブレートモード(マナーモード?)
default:
 break;
}
※理解しやすいようにその場で音声データをload()しているが、通常はもっと前段階でload()しておく。

Androidで着信音量(音声ボリューム)と連動させて、音を鳴らす。[SoundPool編]

以前に書いた記事 「Androidで音を鳴らす。[SoundPool編]」のままだと、常に大きな音が鳴ってしまい実用的ではない。

SoundPool soundPool = new SoundPool(5, AudioManager.STREAM_MUSIC, 0); 
int soundID = soundPool.load(context, R.raw.lalala, 1); 
soundPool.play(soundID, 1.0F, 1.0F, 1, 0, 1.0F); 

3行目、playメソッドの第2引数(音量[左])・第3引数(音量[右])が1.0のため、常に最大音量となる(範囲:0.0~1.0)のが問題。現在の着信音量を取得し、その音量で再生するのが良いと思う。

AudioManager audioManager = (AudioManager)getSystemService(AUDIO_SERVICE);
int currentVolume = audioManager.getStreamVolume(AudioManager.STREAM_RING); 
int maxVolume  = audioManager.getStreamMaxVolume(AudioManager.STREAM_RING);
float volumeRate = (float)currentVolume / maxVolume;

soundPool.play(soundIDs[i], volumeRate, volumeRate, 0, 0, 1.0F);

現在の音量(currentVolume)と最大音量(maxVolume)を取得して、0.0~1.0に落とし込む感じ。

2011年4月6日

Androidで音を鳴らす。[SoundPool編]

SoundPoolクラスの場合、基本は下記の3処理。

①SoundPoolを new して、
②音声ファイル読み込んで、
③再生する
SoundPool soundPool = new SoundPool(5, AudioManager.STREAM_MUSIC, 0); // ①
int soundID = soundPool.load(context, R.raw.lalala, 1); // ②
soundPool.play(soundID, 1.0F, 1.0F, 1, 0, 1.0F); // ③

【①の補足】
public SoundPool (int maxStreams, int streamType, int srcQuality)
引数:
  • maxStreams … このSoundPoolオブジェクトで同時に扱う音声(Stream)の最大数
  • streamType … 音声(stream)の種類。 AudioManagerクラスに定義されている
  • srcQuality … サンプルレートの質。(現在はまだ未使用。 0 を使えとのこと)
返り値:
  • 成功なら、SoundPoolオブジェクト
  • 失敗なら、null


【②の補足】
音声ファイルは、res/raw/lalala.ogg に設置したという想定。ResourceIDは R.raw.lalala になる。ここから想像できると思うが、同フォルダに lalala.wavlalala.mp3 を設置しても区別がつかない。

ちなみに、音声ファイルを安定再生するためには oggファイルが良いとのこと。

public int load (Context context, int resId, int priority)
引数:
  • context … コンテキスト
  • resId … 音声ファイルのリソースID
  • priority … 優先度サンプルレートの質。(現在はまだ未使用。将来互換性のため 1 を使え)
返り値:
  • sound ID (再生時に使用)


【③の補足】
public final int play (int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)

引数:
  • soundID … load()メソッドで返される soundID
  • leftVolume … 音量[左] (範囲:0.0~1.0)
  • rightVolume … 音量[右] (範囲:0.0~1.0)
  • priority … ストリーム優先度 (0 = 優先度最低)
  • loop … ループの回数 (0 = ループ無し、-1 = 無限ループ)
  • rate … 再生レート (1.0 = 標準の再生, 範囲:0.5~2.0)
返値:
  • 成功なら、streamID(≠0)
  • 失敗なら、0


【参考にしたサイト】

2011年3月18日

Mapを生成しながら同時に key と value を putする方法

key と value (キーと値)を持つ Map を生成するとき、よく見るコードは、先に Map を生成し、あとから put するもの。

Map<string, string>map = new HashMap<string, string>();
map.put("name", "のび太");
map.put("sex",  "男性");


匿名クラスインスタンスイニシャライザーを利用すると下記のようにも書ける。
Map<string, string>map = new HashMap<string, string>(){{
        put("name", "のび太");
        put("sex",  "男性");
}};

これだけじゃ、ありがたみも少なめだが、Map内Map、List内Mapみたいなときはかなり見やすく書ける。PerlやPHP、JavaScript等ではごくごく普通にできることだが、Javaだと書き方がわからなかったのでメモ!

参考サイト:Mapの初期化 - traih.log

2011年3月16日

Windowsのコマンドプロンプト(DOS窓)の文字コード変更

→ UTF-8 にする
chcp 65001

→ ShjftJIS にする
chcp 932

→ EUC-JP
chcp 20932

→文字コードを確認するとき
chcp


chcp は、 change code page の略。 code page は、上の例で出てきた 65001 とか 932 等の文字コードを表す数値のこと・・・らしい。

2011年3月8日

Blogger Syntax Highlighter 入れたのでテスト

自分で書いたコードをのちのち載せるつもりなので、見やすさは超重要ッ!

そんなこんなで 下記サイトを参考に Blogger Syntax Highlighter を導入。
コードをハイライトする「Blogger Syntax Highlighter」ウィジェット

Javaの場合】
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, world!");
    }
}

PHPの場合】
<?php
    $contents = file_get_contents('http://www.yahoo.co.jp/');
    $contents = str_replace('yahoo', 'oohay');
    echo $contents;
?>
さすがに file_get_contents や str_replace をハイライトしてくれないか~( ̄▽ ̄;ヨクバリ

JavaScriptの場合】
<script type="text/javascript">
<!--
    document.write("Hello, ");
    document.write("world!");
// -->
</script>

全体的にはいい感じ! コード書いたら、ここに載せたくなってきたッ!!

2011年2月21日

JAVAのバージョンの数え方

気持ち悪い&忘れそうなので、メモ。


  • JDK 1.0
  • JDK 1.1
  • J2SE 1.2
  • J2SE 1.3
  • J2SE 1.4
  • J2SE 5.0
  • Java SE 6
  • Java SE 7

普通に 1.0~1.7って数えたらいいのに~( ̄▽ ̄;