2013年12月31日火曜日

VMwere上のCentOSでLAMP環境構築

・インストール環境 
Windows XP
Care2 E8400 3GHz
メモリ 2G

VMwere5.0
CentOS6.4
Apache2.4
MySQL
PHP5.5

VMwereのインストールからCentOSインストールまでは特記することはありません。
簡易インストールを使用するとVMwereが全て自動設定認識してくれます。ネットワーク周りもすぐ使えます。

--日本語化
OSのGUIからSYSTEM⇒Keyboade⇒Japanesを選択
yum groupinstall "Japanese Support"
vi /etc/sysconfig/i18n
ja_JPに書き換える
再起動

--Tera Term SSHクライアント
ダウンロード
http://sourceforge.jp/projects/ttssh2/releases/
文字化けする場合はTera Termの設定からフォントを変更

--LAMP環境構築手順
http://itmemo.net-luck.com/linux-centos-apache-install-2/
上記サイトが参考になります。

・エラー発生の場合は

configure: error: pcre-config for libpcre not found. PCRE is required and available
PCREをダウンロードしてインストール

configure: error: You need a C++ compiler for C++ support.
yum install gcc-c++

最後にPHPの動作を確認して終了です。
http://192.168.xxx.xxx/index.php




・iptablesとhttpd.confの書き換えについて※書き換え追加箇所赤文字

--ファイヤウォール設定
vi /etc/sysconfig/iptables
# SSH, HTTP, FTP1, FTP2, MySQL
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80    -j ACCEPT

--アパッチ設定
vi /usr/local/apache2/conf/httpd.conf

<IfModule unixd_module>
#
# If you wish httpd to run as a different user or group, you must run
# httpd as root initially and it will switch.
#
# User/Group: The name (or #number) of the user/group to run httpd as.
# It is usually good practice to create a dedicated user and group for
# running httpd, as with most system services.
#
User apache
Group apache

</IfModule>

#
# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
#
ServerName hide-CentOS:80


<IfModule dir_module>
    DirectoryIndex index.html index.php
</IfModule>

#
# PHP Configuration
#
<FilesMatch "\.ph(p[2-6]?|tml)$">
    SetHandler application/x-httpd-php
</FilesMatch>

<FilesMatch "\.phps$">
    SetHandler application/x-httpd-php-source
</FilesMatch>





2013年12月1日日曜日

液晶ディスプレイの表示遅延

液晶ディスプレイ遅延残像

液晶ディスプレイはCRT(ブラウン管)よりも映像が遅れて表示されます。
旧型の液晶でゲームをすると遅延と残像で酔ってしまいます。。
最新のゲーム用液晶なら遅延はほとんど無いようです。
東芝の液晶テレビなどはゲームモードで遅延対策できておすすめです。

スマホの場合は、

タッチパネルの感度
OSの処理速度
液晶の遅延

三重苦です・・・

2013年11月7日木曜日

隠し設定へのショートカットを作成できるアプリ

隠し設定へリンク
無料アプリ「カスタマイズ写真アイコン」は

隠し設定へのショートカット作成に対応しています。

プロキシUSIMの設定などの

通常は遷移できない画面への遷移が可能です。

アイコンにはダウンロードした画像や、

撮影した写真を設定できます。

インストールされているアプリのアイコンも選択可能です。

ショートカット名を変更することもできます。

※FullHDに対応しました。

各種設定画面など、ほぼすべての画面へのショートカットを作成できます。

アイコンの着せ替えに御使用ください。

2013年10月30日水曜日

エクセルでイラスト作成

えくせるイラスト作成

アプリを開発するうえで、時間をかけたくないのがアイコンや広告などの画像作成です。

フリー素材を使う方も多いかもしれません。しかし素材を探したりライセンスを確認したり、それはそれで面倒だったりします。

結局エクセルでお絵かきすることが殆どです。ワードアートやオートシェイプが便利なんです。

企業でもワード、エクセル、パワポなどで広告を作っているとこもありますし、オフィスソフトはどこにでも入れてあるので使う機会は多いと思います。

ただし、最終的にはGMPなどでリサイズと背景色の削除を行います。

Webサイトの作成にもお世話になっています。作業のほとんどが写真の編集ですので。


登録不要で紛失時の遠隔ロックと位置情報の送信ができるアプリ

登録のいらない遠隔ロックアプリ
無料アプリ「リズムキーロック」は、
スマートフォンの紛失時にリモートロックを行うことができます。

遠隔ロック状態のスマートフォンへショートメッセ-ジを送ると、
位置情報を返信するので紛失場所を特定できます。

パスコードを忘れた際は、強制解除アプリを使用することで
ロックを解除できます。

Googleのアカウントさえあれば、すぐに使用のできる
登録不要の遠隔ロックアプリです。




2013年10月29日火曜日

SUSUKI

芒の3d写真です。
evo3dで撮影したmpoファイルです。
3dディスプレイでご鑑賞ください。
…mpoファイルは投稿できませんでしたので2dで。。

パソコンの中に蜘蛛が

パソコンをばらしてみたら、中に蜘蛛の巣が。。

蛾でなくてよかった!?

追い出そうとペンでつついたら、蜘蛛は元気に逃げて行きました。

しかしクモはパソコンの中で何を食べてたのだろうか?
写真を撮ってみました。

2013年10月24日木曜日

スモールアプリとは



スモールアプリとは、Xperia専用アプリで、ホップアップウインドウでアプリを使えます。
ハードの画面サイズや解像度が上がっていけば、いずれウインドウズ化するのか。

画面を二分割できたらとは思っていましたが、標準のアプリで作るのは無理そうです。
各社色々とアイディアを出していくと面白いですね。

カメラの歪み

人物撮影の際、カメラと鏡で見た目が違って見えるのはカメラレンズの歪みのためです。
自分は綺麗に写らないのに、他人は普通に写るのは、撮影距離や全面背面のカメラの性能による影響です。
特に広角レンズのカメラは歪みが酷くなります。
歪みを解消するには、カメラのズームを使い、撮影距離を伸ばす事です。デジタルズームでも歪みは誤魔化せます。
以下、撮影例

広角レンズではありませんが、歪んで四隅が暗くなっています。
広角レンズ

デジタルズームで解消されます
ズームでゆがみ解消

iPhoneが日本のスマホOSシェア7割に

日本のスマホ日本のスマホシェアの偏りが酷いことに……
Phoneが日本のスマホOSシェア7割以上になったようです。

IPHONE5Sの人気のおかげですね。

指紋認証が付いた以外は無印と変わらないのに。。

無意味な64ビット化で処理重いし。

そういえばIPAD MINIの新型が発表されました。ラティナディスプレイのおかげで値段が倍近くになりました。

IOS開発に乗り換えようかと、MAC MINI + IPAD MINI には期待していたのですが、高い!

旧型の無償アップデートがされるようなので、安く環境を作れれば旧型でもいいか。。

ハズウェルはノート向きですし。

カメラで赤外線通信

カメラを利用したデータ通信アプリを開発中です。
Bluetoothは設定が面倒で好まれないんで。。
アドレス交換くらいならQRコードでも十分ですが、渡せるデータが限られています。
動的なQRコードカラー的なイメージです。

断線イヤホンを接着

アイホンの純正イヤホンがねじれて断線しました。。
こよりを紡ぐ感じでねじってしまいあっけなく千切れました。
仕方なく接着剤で直しました!
特に音質に影響はありません。

ブルーライトカット小説ビューア

自炊した画像ならなんでもブルーライトカットします。

新聞の連続小説など、撮影して後で読むなどできます。

ダイソーのスマホスタンド

100円のスマホスタンドです。
画面の向きを自由に変えられて、バネで固定可能。
三脚代わりにもなります。

2013年10月20日日曜日

Android版「FlashPlayer」サポート打ち切り

フラッシュ
アドビがANDROID向けのフラッシュプレイヤーのサポートを終了しました。


9月にリリースされたものが最終リリースのようです。

  • Android4.x.(ICS)用「11.1.115.81」
  • Android2.3/3.x用「11.1.111.73」


今後もフラッシュを使用する場合は、ブラウザの設定のプラグインをオンデマンドに設定しましょう。

オンデマンドにすることで信頼の置けるサイトでのみ手動で有効化することができます。

現在のところANDROID4.0.X以上でも普通にフラッシュを使うことはできます。

ANDROID5以上になるとわかりませんが、フラッシュが使えないと見られない動画サイトは多い。

ニコニコ動画をパソコンと同じように使えて便利でしたが、フラッシュは消えゆくさだめなの事実なのでしかたありません。

アドビの独占体質のせいです。PDFもいずれ消えるかも...

しかし、HTML5は改ざんが容易いからなぁ

フォルダ[.android_secure]

SDカード上のフォルダ[.android_secure]は、SDカードへ移したアプリ本体が配置されています。

削除してしまった場合はアプリを再インストールする必要があります。

他にも[lost.dir]など、なじみの無いフォルダがあるかもしれません。

データの秋を増やすために、SDカード上のファイルを消すことがあると思います。

データを消しても本体が起動しなくなるようなことはありませんが、

下手にSDカードの整理をするよりも32Gのメモリを買ったほうが無駄な手間を省けます。

ショップでSDカードを購入するとぼったくられるので、購入するなら量販店もしくはネットをお勧めします。

ショップで32GのSDカードを買うと1万円くらいします。ネットなら2000円ほどです。

2013年10月17日木曜日

帯域制限を受けない動画視聴時間

通信制限画像

スマートフォンは月々に使用できる通信量に限りがあります。

月当たりの通信制限量は5Gから7Gです。

帯域制限を受けない程度に動画を見るには計算が必要です、

YOUTUBEの通常画質(360p)なら毎日約2時間ほど視聴しても問題ありません。

ただし、画質を上げると消費は8倍まで膨れ上がります。

FullHD画質の動画の場合は一日12分ほど見るだけで月7Gを超えてしまいます。

テザリングを使用した場合は特に注意が必要です。


月あたりに視聴可能な時間を一覧にすると

  • 360p Youtubeアプリ 月/3300時間
  • 720p テザリング for YoutubePC 月825時間


2013年10月11日金曜日

BUG 8219321 9695860 脆弱性の修復

アプリ「Bluebox Security Scanner」を使用して端末にセキュリティーホールがあるかを調べてしましょう。

一番上の項目に「BUG 8219321 or 9695860」が見つかった場合は野良アプリのインストールを避けるべきです。

root済みのANDROID4.0.3以上であれば「BUG 8219321 9695860」のセキュリティーホールをアプリ「Master Key dual fix」で修復できる。

ANDROID2.Xを使用している方は野良アプリのインストールを避けてください。

ベンダーがアップデートを行ってくれれば問題はありません。

2013年8月移行のアップデートで各ベンダーはセキュリティーホールを修復してくれたと思います。

Bluebox Security ScannerBUG 8219321BUG  9695860





2013年10月7日月曜日

アプリの権限を削除するアプリ

権限を削除するアプリ
アプリの権限を削除するアプリ「Permission Remover」

起動時に自動実行して常駐するアプリがうざいので、権限を削って自動起動しないようにしてみました。

削除するのは[receive_boot_completed]です。

ラインやカカオトークなどのソーシャルアプリが自動起動して常駐するのを防ぎます。

にちゃんねるめいとなども自動実行されますがサービスが常駐しなければ特に害はないかも。

アマゾンストアアプリとか重いし、自動実行して常駐する必要を感じない。

そんなアプリのreceive_boot_completed権限を削除することでスマフォが快適になります。

クロームでアマゾンを開くとエラーが頻発する場合の対処

エラーが発生しましたアマゾンを開くとエラー「このウェブページ表示中にエラーが発生しました。問題を解決するには...

と表示されることがあります。

これはクロームをインストールしたユーザーと使用するユーザーが異なる場合に発生するエラーです。



  1. まずGoogle Chrome を終了します。
  2. つぎにExplorer を開きます。
  3. アドレスバーに次のように入力します。
  4. WindowsXPの場合: %USERPROFILE%\Local Settings\Application Data\Google\Chrome\User Data\
  5. Vista/7/8.1の場合: %LOCALAPPDATA%\Google\Chrome\User Data\
  6. ディレクトリ の「Default」というフォルダを「Backup default」という名前に変更します。
  7. クロームを再び開くと新しいDefault フォルダが作成されます。


以上で回復します。

キンドルの電子書籍が安い


キンドルの電子書籍印刷物の半額以下です。(安売りされないものもある)

森見さんの「ペンギンハイウエイ」が310円で買えました。

ダウンロード形式の販売はエコな上にコスト削減もできてお得です。

ただ、自分としては青空文庫形式のTXT形式のほうが扱いやすい。

小説を読むには4インチ以上のディスプレイと800*600以上の解像度が欲しいところ。

国内で販売されているスマホなら十分です。

漫画を読むなら7インチのHD以上の解像度は欲しい。

タブレットで漫画を読むと目が疲れるといった方にはアプリ「ブルーライトカット漫画ビューア」がお勧め。

反射で目が疲れる場合はノングレアフィルムを張り付けるといいかも。

FHDなら5インチでも読めるかもしれないが、ブルーライトや画面の反射で目が疲れそうです。

2013年10月4日金曜日

windows8が安くなる

windows8が安くなるwindows8.1のパッケージ版の値段が発表されました。

価格は13,800円!

PRO版の値段は約二倍の25,800円です。

プロ版は暗号化やリモート、ドメイン参加ができます。企業で使うならプロ版一択です。

windows7のパッケージ版は2万円以上していましたから、だいぶお安くなりました。

しかし、年始の優待アップグレード版を3,200円で販売されていたのは惜しかったかもしれない。

OSの値下げは予想していましたが、ブログには書いていませんでした。

マイクロソフト的にはXPを一掃してしまいたいでしょうから。

販売価格はさらに下がるはずなので、

パッケージの販売価格が1万円程度なら十分安いかも?

2013年10月1日火曜日

参考サイト2013

参考サイト

JAVA CAST http://www.viste.com/Java/Language/language3.html
JAVA FTP http://d.hatena.ne.jp/hidepon_mory/20080920/1221887972
AND ステータスバー折りたたみ http://d.hatena.ne.jp/mos1210/20121130/1354288267
AND 標準トリミング http://goodspeed.hatenablog.com/entry/20120313/1331623333
AND レイヤー 階層 http://d.hatena.ne.jp/baroqueworksdev/20110724/1311512889
AND PKGインストイベント BC http://zaya3.blog.fc2.com/blog-entry-23.html
AND ドラッグドロップ http://kurukurupapa.hatenablog.com/entry/20120422/1335098811
AND 無カメラ設定 https://sites.google.com/site/miyakosis/android/androidadvent2011#6
AND EcripsNDK環境構築 http://note.chiebukuro.yahoo.co.jp/detail/n136598
AND タッチイベント作成 http://xshima2.blog.fc2.com/blog-entry-64.html
AND キーイベント作成 http://yamato-iphone.blogspot.jp/2012/02/blog-post_17.html
AND マウスイベント http://android.ohwada.jp/archives/3321
AND ビルドバージョン確認 http://techbooster.jpn.org/andriod/application/6353/
AND インストールアプリ一覧 http://techbooster.jpn.org/andriod/application/6353/
AND 他アプリのアクティビティ起動 http://wiki.livedoor.jp/moonlight_aska/d/%C2%BE%A4%CE%A5%A2%A5%D7%A5%EA%A4%F2%B5%AF%C6%B0%A4%B9%A4%EB
http://memo755.blog.fc2.com/blog-entry-19.html
AND 緯度経度から住所名 http://d.hatena.ne.jp/oldfish/20081214/1229257066
AND GPS Looper https://code.google.com/p/android-mvc-framework/source/browse/tags/20120730_ver0.3/src/com/android_mvc/framework/gps/GetMyLocationEventTask.java
Google Game Service http://qiita.com/t2low/items/4970641497548941fd8a
Linux アパッチなどの設定ファイル http://centos.server-manual.com/centos5_apache2_php5.html
Linux コマンドの覚え方 http://ubuntuyome.blogspot.jp/2011/02/blog-post_5254.html
PHP 掲示板 サンプル http://www.phpbook.jp/appli/keijiban/index4.html

お勧めPC用USBワンセグチューナーDS-DT310WH

年末にテレビを見るのもいいかもしれないと思い。
PC用ワンセグチューナー「DS-DT310WH」買ってみました。

値段はアマゾンで送料無料で1200円でした。


安物なのでチャンネルの切り替えはちょっと遅いです。
番組表から予約と録画もできます。
通常のアンテナ配線用の変換ケーブルが付属しているので電波が悪い時はアンテナ線をつなげることができます。
FMラジオも聴けますが、いまどきのスマホならFMは聴けるので使っていません。

サンプルコードFAC


// 画面の向きを取得する  縦方向?
protected boolean isPortrait() {
return (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT);
}

// http://webcache.googleusercontent.com/search?q=cache:I_XCJK5THfMJ:kurotofu.sytes.net/kanji/fool/%3Fp%3D694+&cd=1&hl=ja&ct=clnk
public void surfaceChanged0(SurfaceHolder holder, int format, int width,
int height, int wc, int hc) {
camera.stopPreview();

Parameters mParam = camera.getParameters();

// Set orientation
boolean portrait = isPortrait();
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.FROYO) {
// 2.1 and before
if (portrait) {
mParam.set("orientation", "portrait");
} else {
mParam.set("orientation", "landscape");
}
} else {
// 2.2 and later
if (portrait) {
camera.setDisplayOrientation(90);
} else {
camera.setDisplayOrientation(0);
}
}

// Set width & height
int previewWidth = width;
int previewHeight = height;
if (portrait) {
previewWidth = height;
previewHeight = width;
}

List<Size> sizes = mParam.getSupportedPreviewSizes();
try{
List<Size> seinou = mParam.getSupportedPictureSizes();
Size getSize = seinou.get(0);

UserSession objUser = UserSession.getInstance();
//seinou = objUser.getSeinou();
if (objUser.getSeinou().equals("Inferior")) {
getSize=seinou.get((int) (seinou.size()*0.6));
} else if (objUser.getSeinou().equals("Medium")||fCFL) {
getSize=seinou.get((int) (seinou.size()*0.3));
}

mParam.setPictureSize(getSize.width, getSize.height);
}catch(Exception e){
e.printStackTrace();
}
int tmpHeight = 0;
int tmpWidth = 0;
for (Size size : sizes) {
if ((size.width > previewWidth) || (size.height > previewHeight)) {
continue;
}
if (tmpHeight < size.height) {// 収まるサイズを選ぶ
tmpWidth = size.width;
tmpHeight = size.height;
}
}
previewWidth = tmpWidth;
previewHeight = tmpHeight;

if (wc == 0) {
mParam.setPreviewSize(previewWidth, previewHeight);
}else{
mParam.setPreviewSize(wc, hc);
}

ViewGroup.LayoutParams layoutParams = this.getLayoutParams();

float scale = 1f;

if (wc == 0) {

if (portrait) {// 縦なら 幅が狭くなる

// scale=(float)height/(float)previewHeight;
scale = (float) width / (float) previewHeight;

layoutParams.height = (int) (previewWidth * scale);
layoutParams.width = (int) (previewHeight * scale);
} else { // 横なら高さが狭くなる

scale = (float) height / (float) previewHeight;
// scale=(float)width/(float)previewWidth;

layoutParams.height = (int) (previewHeight * scale);
layoutParams.width = (int) (previewWidth * scale);
}
} else {
if (portrait) {// 縦なら 幅が狭くなる

// scale=(float)height/(float)previewHeight;
if (hc > width) {
scale = (float) hc / (float) width;
} else {
scale = (float) width / (float) previewHeight;
}
layoutParams.height = (int) (previewWidth * scale);
layoutParams.width = (int) (previewHeight * scale);
} else { // 横なら高さが狭くなる

if (hc > height) {
scale = (float) hc / (float) height;
} else {
scale = (float) height / (float) previewHeight;
}
// scale=(float)width/(float)previewWidth;

layoutParams.height = (int) (previewHeight * scale);
layoutParams.width = (int) (previewWidth * scale);
}
}
this.setLayoutParams(layoutParams);

camera.setParameters(mParam);
camera.startPreview();
}

// ギャラリーに登録
private void hanei(String pass, String name) {

UserSession objUser = UserSession.getInstance();
objUser.passname = pass;

writePicture(pass);
/*
*
* ContentValues values = new ContentValues(); ContentResolver
* contentResolver = cn.getContentResolver();
* values.put(Images.Media.MIME_TYPE, "image/jpeg"); //
* values.put(Images.Media.LATITUDE, cn.loc.getLatitude()); //
* values.put(Images.Media.LONGITUDE, cn.loc.getLongitude());
* values.put(Images.Media.TITLE, name); // タイトル名(ファイル名にしてます)
* values.put("_data", pass); // 画像の保存されたフルパス
* contentResolver.insert(Media.EXTERNAL_CONTENT_URI, values);
*/
}

private String TAG = "recitative erre";

private void writePicture(String fname)// , byte[] data)
{
// 対象ファイルの削除
removeThumb(fname);

// 画像ファイルの保存
/*
* try{
*
* FileOutputStream outfile = new FileOutputStream(fname);
* outfile.write(data); outfile.close();
*
* }catch(Exception e){ Log.e(TAG,e.getStackTrace()[0].getFileName()
* +"("+e.getStackTrace()[0].getLineNumber()+")"
* +e.getStackTrace()[0].getMethodName() +" "+e.toString()); }
*/
// サムネイルの削除対象に登録
makeThumb(fname);
}

/**
* ContentResolverへ画像ファイル(jpeg)を登録し、サムネイル作成対象にします
*
* @param fname
*            登録する画像ファイルのフルパス
*/
private void makeThumb(String fname) {
long now = System.currentTimeMillis();
try {
ContentValues values = new ContentValues();
ContentResolver cr = getContext().getContentResolver();
values.put(Images.Media.MIME_TYPE, "image/jpeg");
values.put("_data", fname);
values.put(Images.Media.DATE_ADDED, now);
values.put(Images.Media.DATE_TAKEN, now);
values.put(Images.Media.DATE_MODIFIED, now);
cr.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
} catch (Exception e) {
Log.e(TAG,
e.getStackTrace()[0].getFileName() + "("
+ e.getStackTrace()[0].getLineNumber() + ")"
+ e.getStackTrace()[0].getMethodName() + " "
+ e.toString());
}
}

/**
* ContentResolverから画像ファイルを削除します
*
* @param fname
*            削除する画像ファイルのフルパス
*/
private void removeThumb(String fname) {
ContentResolver cr = getContext().getContentResolver();
try {
String where = MediaStore.Images.Media.DATA + "=?";
String[] selectionArgs = { fname };
cr.delete(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, where,
selectionArgs);
} catch (Exception e) {
Log.e(TAG,
e.getStackTrace()[0].getFileName() + "("
+ e.getStackTrace()[0].getLineNumber() + ")"
+ e.getStackTrace()[0].getMethodName() + " "
+ e.toString());
}
}

サンプルコードGSM

サンプルコード

https://onedrive.live.com/?cid=6243a854f0391367#cid=6243A854F0391367&id=6243A854F0391367%21124

protected void onHandleIntent(Intent intent) {

  long kidou = getPreLong(teisu);
  
  if(kidou==0L){//0Lなら終了
 return;
  }
  
  
  try{
  manager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
  //manager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,this);
  
  //GPSがオフの場合は終了 
  if(manager.isProviderEnabled(LocationManager.GPS_PROVIDER)==false){
 manager.removeUpdates(this);
 return;
  }
  
  
  final Looper looper = Looper.getMainLooper();
  listener = this;

  new Thread(new Runnable() {
      public void run() {
     
         // LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
     manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,listener,looper);
         // retrieveUserId();
          //sendData(user_id);
      }
  }).start();

  
  //使用していない
  class LooperThread extends Thread {
      public Handler mHandler;

      public void run() {
          Looper.prepare();

          mHandler = new Handler() {
              public void handleMessage(Message msg) {
                  // process incoming messages here
             manager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,listener);
              }
          };

          Looper.loop();
      }
  }


  }catch (Exception e) {
  e.printStackTrace();
  }
 }

Web開発メモ01 Centos6PHP環境構築

レッドハットのクローンOSでサーバー構築めも

インストール環境
Windows XP
Care2 E8400 3GHz
メモリ 2G


--・VMwereダウンロード
https://my.vmware.com/jp/web/vmware/free#desktop_end_user_computing/vmware_player/5_0|PLAYER-503|product_downloads
VirtualBoxとWMwereどちらがいいのか比較したところ。
VirtualBoxはVRAMなどの細かい設定ができる。
VMwereはドラックアンドドロップでファイルを移動できる。
私はWMwere選択しました。使用経験もあるので。
インストール時の注意は特にありません。※最新のVMwere Plusは営利使用有料

・Redhatダウンロード
無料版の開発は終了し現在は有料版のみ提供しています。
Redhatは企業向けの有料版しかありません。評価版も企業向けにしか提供されていません。
フリーメールアドレスなど、個人向けのメールアドレスでは企業向けカウントに登録できませんでした。


えでぃしょんについて
Red Hat Desktop(デスクトップ用途向け)、WS (ワークステーション用途向け)、ES (エントリークラスのサーバ向け)、AS (比較的大規模なサーバ向け

--・アパッチ

公式のミラーダウンロードはリンクは殆ど機能していなかった・・・
Not Found
The requested URL /net/apache//httpd/httpd-2.4.6.tar.gz was not found on this server.

Tera Term SSH接続
ソフトのダウンロード
http://sourceforge.jp/projects/ttssh2/releases/
参考
http://freesoft.tvbok.com/freesoft/virtual/vmware_centos4.html
文字化け
http://www.j-oosk.com/teraterm/configuration/563/




--・PHP
http://us1.php.net/downloads.php
""内は変数の値を表示
===型の比較
配列の添え字は数字や文字をキーにできる

・フィールドにはクラス変数とインスタンス変数の2種類がある
クラス変数
private static $クラス変数 = 0;
インスタンスを生成しなくても、使用できる変数で、クラス全体で共有される。
self::$クラス変数名
で呼び出すことができる。

インスタンス変数
private $インスタンス変数;
生成したインスタンス毎に使用する変数。
$this->$インスタンス変数
で呼び出すことができる。




--vmwere エラー
エラー
ディスク"XXXX.vmdk"を開くことができない、または一部のスナップショットがこのディスクに従属しています。
理由: ファイルをロックできませんでした。

対応策
**.vmdk.lck
**.vmem.lck
**.Edition.vmx.lck

上記フォルダを削除




--アパッチインストール
APRエラー
configure: error: APR not found.  Please read the documentation
http://nakoruru.jp/?p=747

 *ServerName設定

# vi /usr/local/apache2/conf/httpd.conf
設定詳細
http://digibot.jp/tips/linux/003.html

--フォルダ検索
find / -name "apache*" -type d

--リナックスの全体像
--HTMLとJSの構造

--JS
JS:URLにパラメータを付けて渡す
2012.02.29
リンクURLにパラメータを付け、
リンク先のページで処理させるというのをやったのでメモです。

■index.html
---------------------------------------------------------------------------------------
<a href="page.html?sample1=yes&sample2=100">リンクです</a>
---------------------------------------------------------------------------------------

上記のようなリンクを設置。
URLの後に"?"でパラメータを繋ぎます。
複数ある場合はさらに"&"で繋ぎます。


■page.html
---------------------------------------------------------------------------------------
<script type="text/javascript">

var urlPrm = new Object;
var urlSearch = location.search.substring(1).split('&');
for(i=0;urlSearch[i];i++) {
 var kv = urlSearch[i].split('=');
 urlPrm[kv[0]]=kv[1];
}

alert(urlPrm.sample1);
alert(urlPrm.sample2);

</script>
---------------------------------------------------------------------------------------

飛び先のページに書くJSは上記のようになります。
最後のアラートで表示される文字はそれぞれ"yes","100"となります。

外部のJSの関数を呼ぶ
http://www.pori2.net/js/kihon/16.html



--RPM 米Red Hat社が開発したアプリケーション・パッケージの管理方式
--yum Yellowdog Updater Modified (Yum)はLinuxのRPM互換パッケージ管理システム
--SPEC RPMを作成するための作業手順やRPMの情報などを記述したファイル.このファイルを用いてRPMを作成する
--tar(ター、tape archives)は、ファイルフォーマットの一種であり、Tape ARchive formatの略である。
--GNU(/gnuミ / グヌー、/gnjuミ / グニュー)は、UNIX互換のソフトウェア環境を全てフリーソフトウェアで実装することを目標とするプロジェクト、およびそのソフトウェア全体を指す。


pwd 現在の改装
tar xzvf package.tar.gz 回答するXXX.tar.gz
./configure ⇒make makeファイルの作成とコンパイル
sudo yum remove httpd アパッチのアンインストール
/usr/local/apache2/bin/apachectl start アパッチの起動とパス
find / -name "apache*" -type d
# vi /usr/local/apache2/conf/httpd.conf

参考
--LAMP 俺の開発研究所
VMへOSインストール
http://itmemo.net-luck.com/vmware-player-centos-64bit-install/
あぱっち
 http://itmemo.net-luck.com/linux-centos-apache-install-2/
PHP
http://itmemo.net-luck.com/linux-centos-php-install/
そのたCENTOS
http://itmemo.net-luck.com/category/centos/

--設定ファイル
http://centos.server-manual.com/centos5_apache2_php5.html

--大まかな流れ
http://btt.hatenablog.com/entry/2013/02/06/120049

PHP掲示板アプリのサンプル

ページを表示する(テキストとWEBビュー)
ボタンを押すと書き込み⇒再表示



    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
    </uses-permission>
     <uses-permission android:name="android.permission.INTERNET" />


//activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="500px"
        android:layout_height="300px"
        android:layout_alignRight="@+id/button1"
        android:layout_marginTop="24dp"
        android:orientation="vertical" >

        <WebView
            android:id="@+id/webView1"
            android:layout_width="match_parent"
            android:layout_height="224dp" />
    </LinearLayout>

    <EditText
        android:id="@+id/editText2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/button1"
        android:layout_alignBottom="@+id/button1"
        android:layout_alignParentLeft="true"
        android:layout_toLeftOf="@+id/button1"
        android:ems="10" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_marginBottom="17dp"
        android:layout_marginRight="14dp"
        android:text="書き込み" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/button1"
        android:layout_alignLeft="@+id/linearLayout1"
        android:layout_alignRight="@+id/button1"
        android:layout_below="@+id/linearLayout1"
        android:ems="10"
        android:inputType="textMultiLine" >

        <requestFocus />
    </EditText>

</RelativeLayout>

//MainActivity

package com.example.testhttp;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import com.example.testhttp.R.id;

import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.EditText;




public class MainActivity extends Activity implements OnClickListener{
private EditText ed1,ed2;
private Button  bt;
private WebView wv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

ed1 = (EditText)findViewById(id.editText1);
ed2 = (EditText)findViewById(id.editText2);
bt= (Button)findViewById(id.button1);
wv = (WebView)findViewById(id.webView1);


bt.setOnClickListener(this);

exec_post(false);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

@Override
public void onClick(View v) {

exec_post(true);
}




   String ret = "";

   // URL
   URI url = null;
   try {
     url = new URI( "http://passepied.miraiserver.com/index.php" );
     Log.d("posttest", "URLはOK");
   } catch (URISyntaxException e) {
     e.printStackTrace();
     ret = e.toString();
   }

   HttpPost request = new HttpPost( url );
   List<NameValuePair> post_params = new ArrayList<NameValuePair>();
   if(fl){
   post_params.add(new BasicNameValuePair("post_2", ed2.getText().toString()));
   }
   try {

     request.setEntity(new UrlEncodedFormEntity(post_params, "UTF-8"));
   } catch (UnsupportedEncodingException e1) {
     e1.printStackTrace();
   }


   DefaultHttpClient httpClient = new DefaultHttpClient();
   try {

     ret = httpClient.execute(request, new ResponseHandler<String>() {

       @Override
       public String handleResponse(HttpResponse response) throws IOException
       {
         Log.d(
           "posttest",  "code:" + response.getStatusLine().getStatusCode()
         );


         switch (response.getStatusLine().getStatusCode()) {
         case HttpStatus.SC_OK:

           return EntityUtils.toString(response.getEntity(), "UTF-8");

         case HttpStatus.SC_NOT_FOUND:
           return null;

         default:
           return null;
         }

       }
     
     });

   } catch (IOException e) {
     Log.d("posttest", "sippai:" + e.toString());
   } finally {
     httpClient.getConnectionManager().shutdown();
   }

   ed1.setText( ret );
 
   wv.loadDataWithBaseURL("about:blank",ret, "text/html", "UTF-8",null);
 
 }


}

//Index.php
<html>
<head><title>PHP TEST</title></head>
<body>

<p></p>



<?php

if($_SERVER["REQUEST_METHOD"] == "POST"){
    writeData();
}

readData();

function readData(){
    $keijban_file = 'keijiban.txt';

    $fp = fopen($keijban_file, 'rb');

    if ($fp){
        if (flock($fp, LOCK_SH)){
            while (!feof($fp)) {
                $buffer = fgets($fp);
                print($buffer);
            }

            flock($fp, LOCK_UN);
        }else{
            print('haita');
        }
    }

    fclose($fp);
}

function writeData(){

    $contents = $_POST['post_2'];
    $contents = nl2br($contents);

    $data = "<hr>\r\n";
    $data = $data."<p>".$contents."</p>\r\n";

    $keijban_file = 'keijiban.txt';

    $fp = fopen($keijban_file, 'ab');

    if ($fp){
        if (flock($fp, LOCK_EX)){
            if (fwrite($fp,  $data) === FALSE){
                print('kakikomi');
            }

            flock($fp, LOCK_UN);
        }else{
            print('rokku');
        }
    }

    fclose($fp);
}

?>
</body>
</html>

2013年9月19日木曜日

au WiMaxの速度低下


au WiMax

今年の夏あたりからWIMAXの回線速度が低下しているような気がします。

Servic End2017年の停波に向けて縮小中なのでしょうか?

通信制限の無いキャリアのスマホがあればいいのに。。

現状ではパケット制限がない携帯電話会社の高速通信はWIMAXだけです。

WIMAXは少数派ということで通信制限を設けられずにいました。

WIMAXを使用できるスマホももう発売されることはありません。

無制限に通信可能な端末が増えることを防止しているのかもしれません。

インフラのキャパシティには限度がありますので。。

これからWIMAX2などがスマホに搭載されると思います。

ギガビット通信も可能でしょう。

しかし、通信量に制限があるのでは、どんな高速通信も無意味だと思います。


2013年9月17日火曜日

お勧めクラウドストレージサービス

グーグルドライブの利用規約が危険と騒がれていた事がありました。

しかしそれは、ストレージデータの共有機能を行うために必要な規約だっただけです。

>グーグルが公開する権利、著作権の共有

自分以外にファイルを渡すにはグーグルがそのファイルを公開しなければいけない。

すなわち、公開する権利をグーグルに付与しなければいけない。

ただそれだけのことです。

無料のサービスが有料化される可能性や、保管期限を忘れる場合などを考えると。

グーグルのアカウント一つで15ギガも利用できる、グーグルドライブで良い気がします。

ほかにも無料で容量無制限のサービスもありますが、サービスがいつまで続くか疑問です。

Xperia A シャッター音を消す

Xperia NANA無料アプリ「カメラサイレンサー

Xperia Aでの動作報告を頂きました。

Gサイレンサー装着することでシャッター音を小さくできます。

マイナーなアプリもエクスぺリアシリーズの動作が増えれば人気がでるかも?

最新動作報告一覧

  • Xperia acro HD G 
  • Xperia Z ? 
  • Xperia A L 
  • ARROWS Z ISW11F EX 
  • ARROWS Z ISW13F 
  • ARROWS Kiss F-03D EX 
  • ARROWS X F-02E G 
  • ARROWS A SoftBank 101F G 
  • ARROWS NX EX 無音
  • ARROWS Tab F-05E EX 無音
  • HTC J ISW13HT EX 無音
  • HTC Desire HD Z 無音
  • Galaxy S III Android4.04 EX 
  • G'z One IS11CA 
  • DIGNO S KYL21 G 
  • crane-pub X
  • DIGNO ISW11K EX 
  • Kyocera Hydro C5170 ?
  • LG Optimus Elite EX 

機種によっては端末が再起動してしまうことがあります。

作業途中のデータは保存してから御使用ください。

まだまだ改善が必要かもしれません。

画質を落とさない。最高画質で撮影できる唯一の無音カメラです。

なお、シャッター音を消すプログラムは、当社アプリ「音声リモコンカメラ」の機能の一部です。

物音に反応させて撮影する場合を考慮して作られたものです。

当社各アプリもよろしくお願いします。






iPhone5sは64bitへ

あいほん5SからCPUが64ビットになりました。

しかし、別に64ビットにしたから今すぐ何がよくなるわけでもありません。

5年後10年後を見越してのアーキテクチャの切り替えなのでしょう。

現在のところIOSを64ビット化してもメリットはありません。

32ビットプログラムを互換処理している分、むしろデメリットが多い

Androidと違ってアプリがネイティブな分、アーキテクチャの切り替えが大変なんでしょうね。

Androidはダルビックをコンパイルし直すだけでいいのかも。

あいほん5Sでハードの性能を上げたのは、互換プログラムへの考慮かもしれません。

それよりメディアと互換の低い、縦長のディスプレイを何とかしてほしかった。


2013年9月15日日曜日

動画編集フリーソフト

動画の編集には無料の「VideoPad」がおすすめです。

アスペクト比の変換以外は大抵のことができます。

画面の一部の切り抜き(タイムラインではない)もできます。

エフェクトも充実しています。
スパイ
フリーソフトですが不正な動きなどは見られません。

スパイウエアやウイルスは含まれていません。

2013年9月12日木曜日

期待のx86CPU Atom Z3700

Atom Z3700画像



Intelがタブレット向けクアッドコアCUP[Atom Z3700]を発表しました。

性能はデュアルコア製品の二倍以上です。

そしてHDグラフィックス搭載

旧製品と同じ性能にクロックダウンした場合の消費電力は五分の一。

アトムシリーズはx86互換でARM並みの省電力で期待していました。

しかし、実際のクロックあたりの性能は旧世代のセレロンにも劣る有様でした。

性能が二倍になれば幾分追いつくはず。

これでタブレットPCでx86遺産を使える日が来るかもしれない。

ウインドウズ8のタブレットPCがセレロンノートPC並みになる日もちかい。

2013年9月7日土曜日

ドコモがアイフォンを発売

docomo no iphone


毎回ながら新型アイフォン発売時にはデマが流れます。

docomoからアイフォンを発売することはありません。

予想が外れてドコモからアイフォンが発売になりました。。

これも噂ですが、アイフォンを販売するには販売するスマートフォンの半分をアイフォンにしなければいけないようです。他にも広告の義務などかなり厳しい条件があるようです。

SIMフリー版やSIMロック解除版を使う手もありますが、キャリア周りのアプリが使えなくなります。

素直にauやソフバンでiPhone5sを買うことをお勧めします。

iPhone6の発売日は3月下旬くらいと予想します。

たぶんiPhone6のスペックはiPhone5sと変わらないんでしょうね。

性能はデュアルコアにメモリ1ギガ程度と予想。
もしかしたら液晶がHD以上に改善されるかもしれません。

・・・・・・

それよりWIN板のアイチューン重すぎて何とかしてほしい。

2013年9月5日木曜日

gooメール有料化 フリーメールアドレス終了

フリーメールのgooメールが無料サービスを終了するようです。

gooメールは2014年3月10日をもって有料化されます。

最近はスマホアプリ対応など、頑張っていたようですがこの為だったのか。。

しかしまあ、、つまでも無料でサービスを受けられるわけではないですよね。

無料ストレージサービスなどもいつ有料化されても不思議ではありません。

無料サービス≒お試し期間

だと思って使うほうがよさそうです。

ちなみに有料版は月200円です。
ブログ付きで290円。

セキュリティ料と思えば、Yahooなどのフリーメールより安全で良いかも?

フリーメール終了
GmailやHotmailで十分か

2013年9月3日火曜日

4k動画を撮影できるスマホ

エイサーから4K動画撮影カメラを搭載したスマホ"Liquid S2"が発表されました。

4Kカメラ付きスマホは"今後の予想2013"で予想した通りです。

4Kテレビの普及はまだまだですが、ソニーが頑張っています。

国産のスマホも4Kカメラが付く日も近いかも?

今後に期待です。


2013年8月29日木曜日

Google Play ポリシーの強化詳細

ポリシー画像
グーグルプレイのポリシーが強化されました。

このポリシーは既存のアプリ全てに適応されます。

特に強化される点は、

性表現を含むコンテンツ
知的財産権
個人情報の送信

が挙げられます。

性表現を含むコンテンツについては、文章的な表現や自動ポルノなど、違法性や象徴権、著作権など知的財産権も含んでいるコンテンツが多いため、一発アカント削除になるでしょう。

知的財産権については、2チャンネルのコピペや違法動画へのリンクも対象になるでしょう。
>知的財産権の侵害を助長、誘導したりしないでください。

個人情報の送信は、何かと問題になっています。下手をすると結構な数のアプリが公開停止になるでしょう。

絵画グーグル関係のアカウントは一つ停止されると回復できません。利用できなくなるわけではありませんが、何かを公開するなどが不可能になってしまいます。

アプリを公開している方々は、グーグルの動きを見つつ線引をしてください。




2013年8月18日日曜日

スマホゲーム開発の注意点

ゲーム開発コスト

スマホのゲーム開発の注意点はUIかもしれない。
スマホにソフトウエアコントローラを実装してみましたがいまいちです。
文字入力のフリック入力やスワイプ入力のような新しい入力方法が現れるかも。
とはいえ物理入力装置がないだけでゲームジャンルが限られてしまいます。
磁気センサーなど各センサーを利用して、任天堂のような開拓が必要かもしれません。

2013年8月17日土曜日

BMP拡大回転反転などの画像処理クラス

色々と使える画像処理クラスを公開。

呼び出しサンプル
BitmapManerger bm =new BitmapManerger(getApplicationContext());

Bitmap bmp =bm.yomitori("512.png", 50);

//Bitmap bmp2= bm.syukusyou(bmp, 1f, 0.5f);
Bitmap bmp2 =bm.kaiten(bmp, 90);

bmp= bm.iro(bmp,0xffff0000);


//bmp=bm.hanten(bmp2);

Bitmap bmp3 =bm.gousei(bm.hairetu(bmp, bmp2));


iv.setImageBitmap(bmp3);

import java.io.IOException;
import java.io.InputStream;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Rect;

public class BitmapManerger {

Context cn;

public BitmapManerger(Context c) {
cn = c;
}

// 配列ゼロ板をキャンパスサイズにする。添え字が大きいほど上位レイヤー
public Bitmap gousei(Bitmap[] bmp) {
// ARGB_8888,RGB_565 ARGB_4444 RGB_565
Bitmap rbmp = Bitmap.createBitmap(bmp[0].getWidth(),
bmp[0].getHeight(), Bitmap.Config.ARGB_4444);//アルファチャンネルが必要
Canvas canvas = new Canvas(rbmp);



for (int i = 0; i < bmp.length; i++) {
canvas.drawBitmap(bmp[i], 0, 0, (Paint) null);
}

return rbmp;
}

public Bitmap yomitori(String pass,int size) {

InputStream is = null;

Bitmap bmp = null;

BitmapFactory.Options imageOptions = new BitmapFactory.Options();
imageOptions.inJustDecodeBounds = true;
BitmapFactory.decodeStream(is, null, imageOptions);

float imageScaleWidth = (float)imageOptions.outWidth / size;

BitmapFactory.Options imageOptions2 = new BitmapFactory.Options();
imageOptions2.inSampleSize=(int) imageScaleWidth;
//Bitmap.Config.ARGB_4444
imageOptions2.inPreferredConfig=Bitmap.Config.ARGB_4444;
try {

// assets フォルダ読み取り
is = cn.getResources().getAssets().open(pass);
//
bmp= BitmapFactory.decodeStream(is, null, imageOptions2);

//bmp[i] = BitmapFactory.decodeStream(is);


} catch (IOException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}

return bmp;
}
// 画像のパス配列をビットマップ配列に
public Bitmap[] yomitori(String[] pass,int size) {

InputStream is = null;

Bitmap[] bmp = new Bitmap[pass.length];

BitmapFactory.Options imageOptions = new BitmapFactory.Options();
imageOptions.inJustDecodeBounds = true;
BitmapFactory.decodeStream(is, null, imageOptions);

float imageScaleWidth = (float)imageOptions.outWidth / size;

BitmapFactory.Options imageOptions2 = new BitmapFactory.Options();
imageOptions2.inSampleSize=(int) imageScaleWidth;
imageOptions2.inPreferredConfig=Bitmap.Config.ARGB_4444;

try {

for (int i = 0; i < pass.length; i++) {
// assets フォルダ読み取り
is = cn.getResources().getAssets().open(pass[i]);
//
bmp[i] = BitmapFactory.decodeStream(is, null, imageOptions2);

//bmp[i] = BitmapFactory.decodeStream(is);
}

} catch (IOException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}

return bmp;
}

/ 縦横比率を変えずに高さ縮小
public Bitmap syukusyou(Bitmap bmp, float ww, float hh) {

Bitmap rbmp;

Bitmap cbmp = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(),
Bitmap.Config.ARGB_4444);
Canvas canvas = new Canvas(cbmp);

Matrix matrix = new Matrix();

matrix.postScale(ww, hh);

// リサイズ画像
rbmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(),
matrix, true);

int poji = cbmp.getHeight() - rbmp.getHeight();
canvas.drawBitmap(rbmp, 0, poji, (Paint) null);

return cbmp;
}
//ok 
public Bitmap hanten(Bitmap bmp) {

Matrix matrix = new Matrix();

// 上下反転
// matrix.preScale(1, -1);
// 左右反転
matrix.preScale(-1, 1);
Bitmap rbmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(),
bmp.getHeight(), matrix, false);

return rbmp;
}

// 画像を回転 (画像、回転) 時計回り 90で右回転
public Bitmap kaiten(Bitmap bmp, int inint) {

Matrix mat = new Matrix();
mat.postRotate(inint);

Bitmap rbmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(),
bmp.getHeight(), mat, true);
return rbmp;
}

// 色を変更する
public Bitmap iro(Bitmap bmpImage, int inint) {

if (bmpImage == null) {
return null;
}

int w = bmpImage.getWidth();
int h = bmpImage.getHeight();
int initpixels[] = new int[(bmpImage.getWidth() * bmpImage.getHeight())];
bmpImage.getPixels(initpixels, 0, bmpImage.getWidth(), 0, 0,
bmpImage.getWidth(), bmpImage.getHeight());

// bmpImage.recycle();

for (int xx = 0; xx < (w * h) - 1; xx++) {

// 0xFFFFFF00
initpixels[xx] = (initpixels[xx] & inint);

}

Bitmap rBmp = Bitmap.createBitmap(initpixels, w, h,
Bitmap.Config.ARGB_4444);// (initpixels, 0, width, 0, 0, width,
// height);

initpixels = null;

return rBmp;

}

// 任意のタイミングでメモリ解放を
public void kaihou(Bitmap[] bmp) {
for (int i = 0; i < bmp.length; i++) {
bmp[0].recycle();
}
}
複数のBMPを配列へ
public Bitmap[] hairetu(Bitmap bmp1,Bitmap bmp2){
Bitmap[] bmp = new Bitmap[2];
bmp[0]=bmp1;
bmp[1]=bmp2;
return bmp;
}
public Bitmap[] hairetu(Bitmap bmp1,Bitmap bmp2,Bitmap bmp3){
Bitmap[] bmp = new Bitmap[3];
bmp[0]=bmp1;
bmp[1]=bmp2;
bmp[2]=bmp3;
return bmp;
}
public Bitmap[] hairetu(Bitmap bmp1,Bitmap bmp2,Bitmap bmp3,Bitmap bmp4){
Bitmap[] bmp = new Bitmap[4];
bmp[0]=bmp1;
bmp[1]=bmp2;
bmp[2]=bmp3;
bmp[3]=bmp4;
return bmp;
}
public Bitmap[] hairetu(Bitmap bmp1,Bitmap bmp2,Bitmap bmp3,Bitmap bmp4,Bitmap bmp5){
Bitmap[] bmp = new Bitmap[5];
bmp[0]=bmp1;
bmp[1]=bmp2;
bmp[2]=bmp3;
bmp[3]=bmp4;
bmp[4]=bmp5;
return bmp;
}

}