2011年10月27日木曜日

音速について

久々のメモ。

基本に戻って音速の基礎知識を簡単にメモ。

まずは音速とは

「音波が媒質を伝わる速さのこと。」
だそうで。。。

空気中の速度は、温度が0℃で1気圧の場合
「331.5 m/sec」

水中では
「 約 1,500 m/sec」
らしい。

思いのほか速い。。。

それで、温度の変化 1 度ごとに毎秒 0.6 メートルずつ増減するそうで。
これは温度が上がったら増えて、下がったら減るってことみたい。

公式は
c = 331.5 + 0.6 t (m/sec)
(t は摂氏温度)

例として。。。
花火大会に行って、花火が光ってから3秒後に音が聞こえた場合
その日の気温が25℃だとすると。。。

c = 331.5 + ( 0.6 x 25 )

で音速は347.5 m/sec

3秒後に聞こえたから、
347.5 x 3 で
花火までの距離は 1042.5 m

ってことらしい。。。

以外とあっさり出るもんだ。。。

2011年4月30日土曜日

ZIPファイルにパスワードをかける。

ターミナルでやるんだって。。。

めんどくさいっすね。

フリーでかけれるアプリもあるみたいなんだけど、なんか不安定らしいのでメモ。

---------------------
ターミナルを起動

zipcloak + 半角スペース(まだリターンを押しちゃダメ)

パスをかけたいZIPファイルをターミナルにドラッグ&ドロップ

Enter password:パスワードを入力(勝手に出て来る。カーソルが動かないので注意)
Verify password:もう一度パスワードを入力(勝手に出て来る。カーソルが動かないので注意)
---------------------

以上だそうで。。。

パスを設定したZIPファイルをダブルクリックしてみると。。。

「その操作は許可されてません」的なエラーが。。。

なにそれ。。。

色々検索してみるとパス付きのZIPファイルの解凍もターミナルでやるらしい。。。

めんどくさ。。。

ってことで

---------------------
ターミナルを起動

unzip + 半角スペース

パス付きのZIPをターミナルにドラック&ドロップ

ファイル名 password:パスワードを入力(勝手に出て来る。カーソルが動かないので注意)

デフォルトだとユーザー直下に解凍される
---------------------

以上めでたく完了!

いやいや。

めんどくさすぎる。。。

フリーのアプリ探そ。

2011年4月7日木曜日

android : リソースファイルのコピー(ローカルフォルダとsdcardの任意のフォルダにコピーする時の違い)

久々にmemo。


res/rawフォルダに格納されているリソースファイルをローカルフォルダ(/data/data/.../files/)にコピーする場合とsdcardにコピーする場合でちょっとだけ違いがあるみたい。


早く言ってよ。。。
これに気づくのにどんだけ時間かかったか。。。


ローカルにコピーするには
openFileOutput(コピーするファイル名, Context.MODE_PRIVATE);


SDcardにコピーするには
FileOutputStream(コピーするファイルのパス);


なんだそうで。。。


具体的には。。。
-----------------
package com.test.copy;


import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Environment;
import android.widget.Toast;


public class copytest extends Activity {


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);


copyRawFile(this, リソースID(例:R.raw.song01), 保存するファイル名(例:"song01.mp3"));


}
-----------------
ここまでは一緒。


ローカルの場合の続き
-----------------
/**
 * リソースをローカルフォルダにコピー。
 * 
 * @param context
 * @param resourceId
 * @param fileName
 */
private void copyRawFile(Context context, int resourceId, String fileName) {
 InputStream input = null;
 OutputStream output = null;
  try {
   input = context.getResources().openRawResource(resourceId);
   output = context.openFileOutput(fileName, Context.MODE_PRIVATE);
   byte[] buff = new byte[1024*4];
   int size = 0;
   while((size = input.read(buff)) >= 0) {
   output.write(buff, 0, size);
   }
     output.flush();
     output.close();
     input.close();
     output = null;
     input = null;
   }catch(Exception e) {
    try {
        if(output != null) output.close();
        if(input != null) input.close();
        }catch(Exception e2){
        }
    }
  }
}
-----------------


SDcard直下の場合の続き
-----------------
/**
 * リソースをSDcardの直下にコピーする
 *
 * @param context
 * @param resourceId
 * @param fileName
 */
private void copyRawFile(Context context, int resourceId, String FileName) {
File copyFile = new File( Environment.getExternalStorageDirectory().getPath()+"/" + FileName );
    InputStream input = null;
    FileOutputStream output = null;
    try {
        input = context.getResources().openRawResource(resourceId);
        output = new FileOutputStream(copyFile);
        byte[] buff = new byte[1024*4];
        int size = 0;
        while((size = input.read(buff)) >= 0) {
         output.write(buff, 0, size);
        }
        output.flush();
        output.close();
        input.close();
        output = null;
        input = null;
        mese();
    }catch(Exception e) {
        try {
            if(output != null) output.close();
            if(input != null) input.close();
        }catch(Exception e2){
        }
    }
}
}
-----------------


だそうです。


なんか意味があるのでしょうが。。。。
気付き難かったなぁ。。。

2011年3月22日火曜日

ターミナルにおける android sdk 内のフォルダ削除

今日は時間が無いので短めに・・・。

開発に煮詰まって色々実験してて、ふとDDMSとかでフォルダ構成を見ていると、
「これまだあったの。。。」的なフォルダがゴロゴロ。。。

削除したいんだけど、中にファイルがあるからrmでは削除できない。。。

中に一杯フォルダも作っちゃったし、気がめいるなぁ。。。

なんて思っていたら

rmの後に-rを加えるだけで良いことが判明!

技術者さんには当たり前の事かもしれませんがアタシにとってはビックニュースでした。

rm -r /フォルダ名

これで完璧!!

2011年3月17日木曜日

android エミュレーター内のアプリケーションの削除

久々のメモ。

最近ふとした事からアンドロイドアプリの開発に取り組んでおりまして。。。

これがなかなかねぇ。。。。

最初はFlasCS5でAIRからの作成をしていたのですが、参考サイトがあまりにも少ないため、
Eclipse + android SDK  でエミュレーターで開発しております。

OSはmac。

実機は高くてね。。。買えないんです。。。

で、作ってみたのは良いものの、これってエミュレーターに載せたアプリはどうやって削除するわけ??って問題がすぐに浮上しまして。

なかなかややこしいのでメモ。

まずはターミナルを使わなきゃいけないのがとっつきにくい!!

バリバリの開発者様なら何て事は無いでしょうが、限りなく素人に近いアタシにはなかなかのもんです。

android sdk にデフォルトで入っているadbってコマンドを使うのだが、このadbってやつをコマンドと呼んで良い物なのかも未だに良くわからない。。。

環境的にはtest.apk を Eclipse経由でエミュレーターにインストールし、android sdk フォルダのなかのtoolsフォルダにadbとRuntime.apkが入っているという前提のメモです。

まずはターミナルでtoolsフォルダに移動

xxx$ cd /Users/xxx/android-sdk-mac_x86/tools/

xxxはmacのユーザー名。cd(多分チェンジディレクトリーの略)コマンドでtoolsフォルダまでのパスを入れると移動できるらしい。。。

▲▲▲▲▲-no-imac-4:tools xxx$

と表示されれば移動完了。

ここからがややこしい。

まず、

▲▲▲▲▲-no-imac-4:tools xxx$ ./adb shell

と入れて中身を表示。

これは中身がわかっていればやらなくても良い事なのだが、どこにアプリのデータがあるのかわからないアタシには必須項目。

▲▲▲▲▲-no-imac-4:tools xxx$ ./adb shell


となるので、
ls

と入れると。。。


# ls
config
cache
sdcard
acct
mnt
d
etc
system
sys
sbin
proc
init.rc
init.goldfish.rc
init
default.prop
data
root
dev
#

と表示されます。

続けて

# cd data
# ls

と入れると。。。


# cd data
# ls
misc
local
app-private
backup
property
app
data
dontpanic
dalvik-cache
system
lost+found
#

と表示され、さらに


# cd data
# ls

と入れると。。。

# cd data
# ls
com.test ← 今回削除したいアプリのパッケージ名
com.android.server.vpn
android.tts
com.android.term
com.android.speechrecorder
com.android.spare_parts
以下省略
#

という風にエミュレーターに入っているパッケージ名がダァ〜っと出てくるので、自分が作ったアプリのパッケージ名を探す。

今回の場合は
com.test

削除したいパッケージ名がある事がわかったので、shellから抜けます。

コマンドは
#exit

といれると、
▲▲▲▲▲-no-imac-4:tools xxx$

に戻れます。

実際の削除は
▲▲▲▲▲-no-imac-4:tools xxx$ ./adb uninstall com.test

と入れて、
▲▲▲▲▲-no-imac-4:tools xxx$ ./adb uninstall com.test
Success

と表示されれば削除完了。

ざっくりまとめると、
インストール:./adb install zzz.apk(アプリケーション名)
アンインストール:./adb uninstall com.zzz(パッケージ名)

だそうです。

ちなみにwindowsのdosプロンプトでは ./adb の ./ はいらないみたい。

ややこしい。。。


2011年2月28日月曜日

phpMyAdminにおけるauto_incrementの初期化


タイトルみたいな大げさな話じゃないんですが。。。

auto_increment を扱ってるテーブルでテストをしまくっていると、いざ本番って時に auto_increment がとても半端な番号から始まったりします。

そんなとき。。。

そのテーブルの「操作」から「テーブルオプション」へ行き、auto_increment を「1(好きな番号)」と入力して「実行」ボタンを押すと、また1(入力した番号)から始まるみたい。

なるほど。

気づけばホントたいしたことないな。。。

2011年2月25日金曜日

ファイルアップロードの容量設定

phpでファイルアップロードをする際に、php.iniで

upload_max_filesize = 20M


とかにすると、それが最大アップロードサイズだと思っていたが。。。


全然アップされない。。。


なんだろなぁとウダウダ調べていたら、どうやら php.ini 内で容量を設定できる項目が3つあるらしい。


それが


memory_limit
post_max_size
upload_max_filesize


の3つ。


でどうやら大きさに順番があるらしく、


memory_limit > post_max_size > upload_max_filesize


の大きさに設定してやらないとダメらしい。


早く言ってよ。。。


これに何時間費やしたことか。。。


早速設定してみる事に。


まず
memory_limit は名前的にあまりいじる気がしないのでそのまんま。


初期設定で post_max_size が結構小さめに設定されてるみたいで、俺も


post_max_size < upload_max_filesize


ってな感じになっていまして。。。


post_max_size > upload_max_filesize


ってな感じに設定し直したらあっさり解決。


ホント早く言ってって。。。

2011年1月16日日曜日

外部音声ファイルサイズ .length の盲点

ちょっとした事から、簡易mp3プレーヤーをflashで作る事になり。。。

仕様的には2つの聴き比べように2つのプレイボタンとストップボタンとシークバー。
なんて事はないよく見るプレーヤーですが。。。

シークバー作るのって意外とめんどくさい。。。

再生位置の表示に欠かせない公式的なものが

handle_mc.x = SoundChannel.position / Sound.length * bar_mc.width;

クセ者は.length

ライブラリーに読み込んで、リンゲージの設定をした音源なら問題ないが、外部からの読み込み音源だと.loadで読み込んで、

var sd:Sound;
var sc:SoundChannel
var size:int
var range:int = bar_mc.width;
addEventLestener(Event.COMPLETE,load_comp);
function load_comp(Event):void{
size.length;
}

等してlength値を取得する必要があるみたい。。。

ちなみにfunctionで取得しないと値は0なので、シークバーのhandle_mcは動かない。

なので公式にあてはめると

handle_mc.x = sc.position / size * range;

って感じ。。。

気付けば当たり前の事だけど、早く言ってよ。。。

2011年1月12日水曜日

内税(消費税)の計算方法

なんでいきなり内税の話・・・。

いやいや結構重要ですよ。

折角覚えたからメモ。

公式
税込み価格 × (5/105) = 内税額

だそうです。

なぜ105とか出て来るの??

みたいな話ですよねぇ。

なんでも5/105はわかりやすく言うと、105個分の5個という事なので、

税込み価格を105個に割ったものを×5すればでるそうで。。。

ってことは

1050(税込み価格) ÷ 105 = 10
10 × 5 = 50(内税)
1050 - 50 = 1000(税抜価格)

なるほど。

わかってみればなんて事はないですな。

ちなみに
10000 ÷ 105 × 5 = 476.190476......
10000 -  476.190476...... = 9523.80952.....

なるほど。

できることなら避けて通りたいですな。

2011年1月6日木曜日

動画変換、音声抽出のメモ

個人的に色々な音声サンプルで実験等を行いたい時に、必ず衝突するのがDVDからのリッピング問題とリッピングデータからの音声抽出作業。

ホント映像関係は苦労するなぁ。。。

通常簡単にできたらダメなものだもんね。

って言うかできたらダメなものだもんね。

簡単に流れをメモ。

いっつもどうやったか忘れてしまうので。。。

ちなみに環境はmac OSX10.5 です。

1:まずは自分のライブ映像等をDVDデッキで見れるように作ったDVDを用意。
2:mactheripper等でvideo_tsフォルダを抽出。
3:AnyVideoConverterってやつにvideo_tsフォルダ内のvobファイルをドラック&ドロップしてaviファイルに変換。
4:logicにaviを取り込み、音声抽出。

ざっとこんな流れ。

logicがmovとaviしかサポートしないので、こんな面倒な流れに。。。

ちょっと前まで活躍していた、handbrakeはどうやらaviのサポートを廃止したみたい。

2011年1月4日火曜日

Flashのリンク設定

いっっっつも忘れてしまうので、いい加減メモ。

-----------------------------------
btn_link.buttonMode = true; //いつもボタンをmcで作るのでボタンモード設定

btn_link.addEventListener(MouseEvent.CLICK, click_btn_link);


function click_btn_link(evt:MouseEvent):void {
     navigateToURL(new URLRequest("URL名"));
}
-----------------------------------

これでバッチリ。

htmlで数秒後に他のURLにジャンプさせる方法

どうやら2つやり方があるらしい。


1.htmlの<meta>タグによるやり方
<html>
<head>
<meta http-equiv="refresh" content="秒数; ジャンプさせるURL">
<title></title>
</head>
<body>
</body>
</html>


といたってシンプル。


2.javascriptによるやり方
<html>
<head>
<title></title>


<script language="JavaScript">
<!--
mnt = 秒数;
url = "ジャンプさせるURL";
function jumpPage() {
  location.href = url;
}
setTimeout("jumpPage()",mnt*1000)
-->
</script>


</head>
<body>
</body>
</html>



とちょっと複雑。


って事を踏まえて<meta>タグの方でやってみたら、macのsafariでは問題なくできるのにwindowsのIEではxpでも7でもダメ。。。


javascriptの方は両ブラウザとも問題なくジャンプできました。


なるほど。



簡単なのにはそれなりにワケがあるのね。

FlashにおけるMouse命令のメモ

新年早々のブログが何とも地味。。。

まぁ技術者なんてこんなもんですよ。

って事でいつも忘れてしまうMouse命令のメモ。

メモってもいっつもどっかに行っちゃうのでここなら安全でしょ。

---------------------------------------

click
CLICK : String = "click"
ユーザーがポインティングデバイスの主ボタンを、同じInteractiveObjectの上で押して放したときに配信されます。

doubleClick
DOUBLE_CLICK : String = "doubleClick"
ユーザーがポインティングデバイスの主ボタンを、同じInteractiveObjectの上で素早く続けて2回押して放したときに配信されます。そのオブジェクトのdoubleClickEnabledプロパティは、trueに設定されている必要があります。

mouseDown
MOUSE_DOWN : String = "mouseDown"
ユーザーがポインティングデバイスの主ボタンを、Flash Playerウィンドウ内のInteractiveObjectインスタンスの上で押したときに配信されます。

mouseMove
MOUSE_MOVE : String = "mouseMove"
ユーザーがポインティングデバイスを、InteractiveObjectの上で動かしているときに配信されます。

mouseOut
MOUSE_OUT : String = "mouseOut"
ユーザーがポインティングデバイスを、InteractiveObjectインスタンスの上から外に動かしたときに配信されます。

mouseOver
MOUSE_OVER : String = "mouseOver"
 ユーザーがポインティングデバイスを、Flash Playerウィンドウ内のInteractiveObjectインスタンスの上に動かしたときに配信されます。

mouseUp
MOUSE_UP : String = "mouseUp"
ユーザーがポインティングデバイスの主ボタンを、Flash Playerウィンドウ内のInteractiveObjectインスタンスの上で放したときに配信されます。

mouseWheel
MOUSE_WHEEL : String = "mouseWheel"
ユーザーがポインティングデバイスのマウスホイールを、Flash Playerウィンドウ内のInteractiveObjectインスタンスの上で回したときに配信されます。

rollOut
ROLL_OUT : String = "rollOut"
ユーザーがポインティングデバイスを、InteractiveObjectインスタンスの上から外に動かしたときに配信されます。

rollOver
ROLL_OVER : String = "rollOver"
ユーザーがポインティングデバイスを、InteractiveObjectインスタンスの上に動かしたときに配信されます。
---------------------------------------

どこに掲載されていたのかすら忘れちゃったけど。。。

たぶんadobeのリファレンスかな??

後は

ボタン名.addEventListener(MouseEvent.やりたいMouse命令, Function名);
function Function名(evt:MouseEvent):void { やりたい処理 }

で動くようになるはず。

HTML5.0の出現によって今後のFlashの居場所がなかなか不透明になって来ましたが、プログラム言語を1つ覚えたと思えば、なんだかのめり込んで良かった気がします。