2013年10月30日水曜日
エクセルでイラスト作成
アプリを開発するうえで、時間をかけたくないのがアイコンや広告などの画像作成です。
フリー素材を使う方も多いかもしれません。しかし素材を探したりライセンスを確認したり、それはそれで面倒だったりします。
結局エクセルでお絵かきすることが殆どです。ワードアートやオートシェイプが便利なんです。
企業でもワード、エクセル、パワポなどで広告を作っているとこもありますし、オフィスソフトはどこにでも入れてあるので使う機会は多いと思います。
ただし、最終的にはGMPなどでリサイズと背景色の削除を行います。
Webサイトの作成にもお世話になっています。作業のほとんどが写真の編集ですので。
登録不要で紛失時の遠隔ロックと位置情報の送信ができるアプリ
2013年10月29日火曜日
パソコンの中に蜘蛛が
パソコンをばらしてみたら、中に蜘蛛の巣が。。
蛾でなくてよかった!?
追い出そうとペンでつついたら、蜘蛛は元気に逃げて行きました。
しかしクモはパソコンの中で何を食べてたのだろうか?
写真を撮ってみました。
蛾でなくてよかった!?
追い出そうとペンでつついたら、蜘蛛は元気に逃げて行きました。
しかしクモはパソコンの中で何を食べてたのだろうか?
写真を撮ってみました。
2013年10月24日木曜日
スモールアプリとは
スモールアプリとは、Xperia専用アプリで、ホップアップウインドウでアプリを使えます。
ハードの画面サイズや解像度が上がっていけば、いずれウインドウズ化するのか。
画面を二分割できたらとは思っていましたが、標準のアプリで作るのは無理そうです。
各社色々とアイディアを出していくと面白いですね。
カメラの歪み
人物撮影の際、カメラと鏡で見た目が違って見えるのはカメラレンズの歪みのためです。
自分は綺麗に写らないのに、他人は普通に写るのは、撮影距離や全面背面のカメラの性能による影響です。
特に広角レンズのカメラは歪みが酷くなります。
歪みを解消するには、カメラのズームを使い、撮影距離を伸ばす事です。デジタルズームでも歪みは誤魔化せます。
以下、撮影例
広角レンズではありませんが、歪んで四隅が暗くなっています。
自分は綺麗に写らないのに、他人は普通に写るのは、撮影距離や全面背面のカメラの性能による影響です。
特に広角レンズのカメラは歪みが酷くなります。
歪みを解消するには、カメラのズームを使い、撮影距離を伸ばす事です。デジタルズームでも歪みは誤魔化せます。
以下、撮影例
広角レンズではありませんが、歪んで四隅が暗くなっています。
デジタルズームで解消されます。
iPhoneが日本のスマホOSシェア7割に
Phoneが日本のスマホOSシェア7割以上になったようです。
IPHONE5Sの人気のおかげですね。
指紋認証が付いた以外は無印と変わらないのに。。
無意味な64ビット化で処理重いし。
そういえばIPAD MINIの新型が発表されました。ラティナディスプレイのおかげで値段が倍近くになりました。
IOS開発に乗り換えようかと、MAC MINI + IPAD MINI には期待していたのですが、高い!
旧型の無償アップデートがされるようなので、安く環境を作れれば旧型でもいいか。。
ハズウェルはノート向きですし。
カメラで赤外線通信
カメラを利用したデータ通信アプリを開発中です。
Bluetoothは設定が面倒で好まれないんで。。
アドレス交換くらいならQRコードでも十分ですが、渡せるデータが限られています。
動的なQRコードカラー的なイメージです。
Bluetoothは設定が面倒で好まれないんで。。
アドレス交換くらいならQRコードでも十分ですが、渡せるデータが限られています。
動的なQRコードカラー的なイメージです。
2013年10月20日日曜日
Android版「FlashPlayer」サポート打ち切り
アドビがANDROID向けのフラッシュプレイヤーのサポートを終了しました。
9月にリリースされたものが最終リリースのようです。
今後もフラッシュを使用する場合は、ブラウザの設定のプラグインをオンデマンドに設定しましょう。
オンデマンドにすることで信頼の置けるサイトでのみ手動で有効化することができます。
現在のところANDROID4.0.X以上でも普通にフラッシュを使うことはできます。
ANDROID5以上になるとわかりませんが、フラッシュが使えないと見られない動画サイトは多い。
ニコニコ動画をパソコンと同じように使えて便利でしたが、フラッシュは消えゆくさだめなの事実なのでしかたありません。
アドビの独占体質のせいです。PDFもいずれ消えるかも...
しかし、HTML5は改ざんが容易いからなぁ
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円ほどです。
削除してしまった場合はアプリを再インストールする必要があります。
他にも[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月移行のアップデートで各ベンダーはセキュリティーホールを修復してくれたと思います。
一番上の項目に「BUG 8219321 or 9695860」が見つかった場合は野良アプリのインストールを避けるべきです。
root済みのANDROID4.0.3以上であれば「BUG 8219321 9695860」のセキュリティーホールをアプリ「Master Key dual fix」で修復できる。
ANDROID2.Xを使用している方は野良アプリのインストールを避けてください。
ベンダーがアップデートを行ってくれれば問題はありません。
2013年8月移行のアップデートで各ベンダーはセキュリティーホールを修復してくれたと思います。
2013年10月7日月曜日
アプリの権限を削除するアプリ
アプリの権限を削除するアプリ「Permission Remover」
起動時に自動実行して常駐するアプリがうざいので、権限を削って自動起動しないようにしてみました。
削除するのは[receive_boot_completed]です。
ラインやカカオトークなどのソーシャルアプリが自動起動して常駐するのを防ぎます。
にちゃんねるめいとなども自動実行されますがサービスが常駐しなければ特に害はないかも。
アマゾンストアアプリとか重いし、自動実行して常駐する必要を感じない。
そんなアプリのreceive_boot_completed権限を削除することでスマフォが快適になります。
起動時に自動実行して常駐するアプリがうざいので、権限を削って自動起動しないようにしてみました。
削除するのは[receive_boot_completed]です。
ラインやカカオトークなどのソーシャルアプリが自動起動して常駐するのを防ぎます。
にちゃんねるめいとなども自動実行されますがサービスが常駐しなければ特に害はないかも。
アマゾンストアアプリとか重いし、自動実行して常駐する必要を感じない。
そんなアプリのreceive_boot_completed権限を削除することでスマフォが快適になります。
クロームでアマゾンを開くとエラーが頻発する場合の対処
アマゾンを開くとエラー「このウェブページ表示中にエラーが発生しました。問題を解決するには...」
と表示されることがあります。
これはクロームをインストールしたユーザーと使用するユーザーが異なる場合に発生するエラーです。
以上で回復します。
と表示されることがあります。
これはクロームをインストールしたユーザーと使用するユーザーが異なる場合に発生するエラーです。
- まずGoogle Chrome を終了します。
- つぎにExplorer を開きます。
- アドレスバーに次のように入力します。
- WindowsXPの場合: %USERPROFILE%\Local Settings\Application Data\Google\Chrome\User Data\
- Vista/7/8.1の場合: %LOCALAPPDATA%\Google\Chrome\User Data\
- ディレクトリ の「Default」というフォルダを「Backup default」という名前に変更します。
- クロームを再び開くと新しいDefault フォルダが作成されます。
以上で回復します。
キンドルの電子書籍が安い
キンドルの電子書籍は印刷物の半額以下です。(安売りされないものもある)
森見さんの「ペンギンハイウエイ」が310円で買えました。
ダウンロード形式の販売はエコな上にコスト削減もできてお得です。
ただ、自分としては青空文庫形式のTXT形式のほうが扱いやすい。
小説を読むには4インチ以上のディスプレイと800*600以上の解像度が欲しいところ。
国内で販売されているスマホなら十分です。
漫画を読むなら7インチのHD以上の解像度は欲しい。
タブレットで漫画を読むと目が疲れるといった方にはアプリ「ブルーライトカット漫画ビューア」がお勧め。
反射で目が疲れる場合はノングレアフィルムを張り付けるといいかも。
FHDなら5インチでも読めるかもしれないが、ブルーライトや画面の反射で目が疲れそうです。
2013年10月4日金曜日
windows8が安くなる
windows8.1のパッケージ版の値段が発表されました。
価格は13,800円!
PRO版の値段は約二倍の25,800円です。
プロ版は暗号化やリモート、ドメイン参加ができます。企業で使うならプロ版一択です。
windows7のパッケージ版は2万円以上していましたから、だいぶお安くなりました。
しかし、年始の優待アップグレード版を3,200円で販売されていたのは惜しかったかもしれない。
OSの値下げは予想していましたが、ブログには書いていませんでした。
マイクロソフト的にはXPを一掃してしまいたいでしょうから。
販売価格はさらに下がるはずなので、
パッケージの販売価格が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
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は聴けるので使っていません。
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();
}
}
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
インストール環境
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>
ボタンを押すと書き込み⇒再表示
<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>
登録:
投稿 (Atom)