Myu
2018年7月14日土曜日
Android Studioを使ってみた
以前に比べ、Androidアプリの開発もだいぶやりやすくなっている。Android StudioというIDEが使いやすい。SDKのバージョンに配慮が必要なようだが、けっこう簡単にスマホにインストールできるようだ。
英文、和訳、英語音声を同時に表示、再生していくアプリを作ってみた。
MainActivity.java
package com.example.hgoto.myapplication; import android.media.AudioManager; import android.media.MediaPlayer; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.content.res.AssetFileDescriptor; import android.widget.Toast; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Formatter; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import android.widget.EditText; import java.util.Timer; import java.util.TimerTask; import android.os.Bundle; import android.os.Handler; import android.app.Activity; import android.view.Menu; import android.widget.TextView; import android.os.Process; public class MainActivity extends AppCompatActivity { private Timer mainTimer; //タイマー用 private MainTimerTask mainTimerTask; //タイマタスククラス private TextView countText; //テキストビュー private Handler mHandler = new Handler(); //UI Threadへのpost用ハンドラ private MediaPlayer mediaPlayer; ArrayList
EList = new ArrayList<>(); ArrayList
JList = new ArrayList<>(); String num = "001"; boolean rflag=false; EditText editText4; public class MainTimerTask extends TimerTask { @Override public void run() { //ここに定周期で実行したい処理を記述します mHandler.post( new Runnable() { public void run() { if (mediaPlayer == null){ //num=editText4.getText().toString(); editText4.setText(num); audioPlay(); if(rflag){ }else{ if(num.equals("560")){ num="001"; }else{ num=String.format("%03d",Integer.parseInt(num)+1); } } } } }); } } @Override protected void onCreate(Bundle savedInstanceState) { // Read { try { FileInputStream fileInputStream; fileInputStream = openFileInput("myfile.txt"); byte[] readBytes = new byte[fileInputStream.available()]; fileInputStream.read(readBytes); num = new String(readBytes); } catch (FileNotFoundException e) { } catch (IOException e) { } } //タイマーインスタンス生成 this.mainTimer = new Timer(); //タスククラスインスタンス生成 this.mainTimerTask = new MainTimerTask(); //タイマースケジュール設定&開始 this.mainTimer.schedule(mainTimerTask, 1000,1000); InputStream is = null; BufferedReader br = null; int ci = 0; try { try { // assetsフォルダ内の sample.txt をオープンする is = this.getAssets().open("sample.txt"); br = new BufferedReader(new InputStreamReader(is)); // 1行ずつ読み込み、改行を付加する String str; while ((str = br.readLine()) != null) { ci++; if (ci % 2 != 0) { EList.add(str); } else { JList.add(str); } } } finally { if (is != null) is.close(); if (br != null) br.close(); } } catch (Exception e) { // エラー発生時の処理 } super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 音楽開始ボタン Button buttonStart = findViewById(R.id.start); editText4 = (EditText) findViewById(R.id.editText4); editText4.setText(num); // リスナーをボタンに登録 buttonStart.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Write { try { FileOutputStream fileOutputStream = openFileOutput("myfile.txt", MODE_PRIVATE); String writeString = num; fileOutputStream.write(writeString.getBytes()); } catch (FileNotFoundException e) { } catch (IOException e) { } } // 音楽再生 // num=editText4.getText().toString(); // audioPlay(); // if(Integer.parseInt(num)-1>0){ // editText4.setText(String.format("%03d",Integer.parseInt(num)-1)); // } finish(); Process.killProcess(Process.myPid()); } }); // 音楽停止ボタン Button buttonStop = findViewById(R.id.stop); // リスナーをボタンに登録 buttonStop.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mediaPlayer != null) { // 音楽停止 // audioStop(); } if(rflag){ rflag=false; }else{ rflag=true; if(num.equals("001")){ num="560"; }else{ num=String.format("%03d",Integer.parseInt(num)-1); } } } }); Button buttonP = findViewById(R.id.button); // リスナーをボタンに登録 buttonP.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(num.equals("560")){ num="001"; }else{ num=String.format("%03d",Integer.parseInt(num)+1); } editText4.setText(num); } }); Button buttonM = findViewById(R.id.button2); // リスナーをボタンに登録 buttonM.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(num.equals("001")){ num="560"; }else{ num=String.format("%03d",Integer.parseInt(num)-1); } editText4.setText(num); } }); } private boolean audioSetup() { boolean fileCheck = false; // rawにファイルがある場合 //mediaPlayer = MediaPlayer.create(this, R.raw.a001); mediaPlayer = MediaPlayer.create(this, getResources().getIdentifier("a" + num, "raw", getPackageName())); // 音量調整を端末のボタンに任せる setVolumeControlStream(AudioManager.STREAM_MUSIC); fileCheck = true; return fileCheck; } private void audioPlay() { if (mediaPlayer == null) { // audio ファイルを読出し if (audioSetup()) { // Toast.makeText(getApplication(), "Rread audio file", Toast.LENGTH_SHORT).show(); EditText editText = (EditText) findViewById(R.id.editText2); editText.setText(EList.get(Integer.parseInt(num) - 1) + '\n' + JList.get(Integer.parseInt(num) - 1)); } else { Toast.makeText(getApplication(), "Error: read audio file", Toast.LENGTH_SHORT).show(); return; } } else { // 繰り返し再生する場合 mediaPlayer.stop(); mediaPlayer.reset(); // リソースの解放 mediaPlayer.release(); } // 再生するan mediaPlayer.start(); // 終了を検知するリスナー mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { Log.d("debug", "end of audio"); audioStop(); } }); } private void audioStop() { // 再生終了 mediaPlayer.stop(); // リセット mediaPlayer.reset(); // リソースの解放 mediaPlayer.release(); mediaPlayer = null; } }
activity_main.xml
2018年6月22日金曜日
rsyncでバックアップ
以前は、WindowsのBunbackupを使いバックアップしていたが、端末PCを専有してしまうので、Linuxサーバー間で、rsyncを使ってみた。
rsyncはsshの公開鍵設定すれば、パスワードいらずで、cronでうまく動作させられる。
たとえば
rsync -avzP /home/user/data user@バックアップ先Ipアドレス:/home/user
のようにすれば、いいようだ。-Pオプションは圧縮通信
上記コマンドをスクリプトとしておき、cronで定時で起動することを検討している。
2018年6月9日土曜日
cron.hourlyについて
Linuxでタイマーでよく使われるコマンドcronについて
https://www.express.nec.co.jp/linux/distributions/knowledge/system/crond.html
/etc/crontab
毎時、毎日、毎月、毎週の自動タスクのメイン設定ファイル
毎時実行される自動タスクであれば
/etc/cron.hourly 中に置いた実行ファイルがすべて、実行されます。
2018年5月8日火曜日
詳解ディープラーニング
Tensorflow・Kerasによる時系列データ処理について詳しい本ということで、興味を持ったので、読んでみた。
偏微分、全微分など基本的な数学の説明が初めのほうに出ている。関連した内容をネットでわかりやすい説明はないか、チェックしながら、読み進めていくといいようだ。
後半のLSTMのあたりから難しくなってくる。P234の(5.41)式の変形がいまいちわからない。
f(t)が忘却ゲートの値とし、ef(t):=∂E/∂f(t) (5.39)
=∂E/∂c(t)⦿∂c(t)/∂f(t) (5.40)
=ec(t)⦿c(t-1) (5.41)
c(t)=i(t)⦿a(t)+f(t)⦿c(t-1) (5.42)
注:⦿は要素積を表す
(5.42)のc(t)をf(t)で微分すれば、確かにc(t-1)になるのだけど、、、
そういう理解でいいのだろうか?
2018年5月6日日曜日
Rails5をWindowsに入れてみた
Railsは、サーバー構築が難しいといわれてます。とくにWindowsは、いまだに、いろいろひっかかるところがあるようです。
https://qiita.com/seizot/items/10c21c329c0006c2c792
を参考にインストールしてみる。上記サイトでは、RubyとDevkitを別々にインストールするように説明していますが、最新のページでは、両方まとめてダウンロードできるようです。
https://rubyinstaller.org/downloads/
からRuby+Devkit 2.4.4-1 (x64) をダウンロードして、インストールしてみました。最新版のRuby+Devkit 2.5.1-1 (x64) は、Rubyのバージョンの不一致のためか、うまくサーバが起動しませんでした。
bundlerとrailsをインストールします。
gem install bundler
(プロキシ経由ならgem install bundler -p http://<Proxyのアドレス>:ポート番号)
gem install rails
(プロキシ経由ならgem install rails -p http://<Proxyのアドレス>:ポート番号)
https://nodejs.org/en/download/
でNode.jsをダウンロードしインストール
rails new sampleでsampleサイトを作成
cd sample
rails s
これで、初期画面がたちあがる
と思ったが、pgの設定がされていないというエラーが表示される。
どうやら、新しいバージョンはsqlite3でなく、postgresqlのようだ。
(herokuがpostgresqlなので、そのほうがなにかとありがたいが)
いったん、
Ctrl+Cで停止する。
そこで GEMFILEを
#gem 'sqlite3'
gem 'pg'
と書き換えて
bundle install
再度、rails sでうまくいった。
2018年5月3日木曜日
イグニッションコイル交換DIY
スイフト10万kmを超え、故障が目立ってきた。昨年は、下回り(ハブベアリング)やエアコンの修理にだいぶお金がかかった。
それに加えて、昨年秋、加速時、カクカクするようになり、アマゾンから格安イグニッションコイルを購入し、修理店で交換してもらう。しかし、半年もしないうちに、また故障する。安物買いの銭失いというパターン。たまたま、前回の交換時、まだ使えそうだと言われた部品をディーラーにもっていって、交換して直った。と思ったが、やはり調子が悪い。
ネットで調べてみると、DIYでも交換できそうだったので、ナットを回すための工具セット(ラチェット)を購入し、自分でやってみた。また、不良部品は抵抗値を比較するといいことが、ネット情報でわかる。実際、故障したコイルは抵抗値が新品より少し大きい値になっていた。今回は、少し高めの部品にしてみた。今のところ、調子はいいようだ。
2018年4月30日月曜日
GPUの使い方?
deep-LearningでGPUを使えないか試してみたが、いまいちよくわからない。
win10で試す
NVIDIAドライバをインストール
CUDA Toolkit 9.0をインストール(9.1ではうまくいかない)
cuDNN v7.0.5 for CUDA 9.0をインストール(CUDAのバージョンに合わせる必要あり)
Visual Studio 2015 の Visual C++ 再頒布可能パッケージをインストール
Anacondaをインストール
と、ここまではとくに問題ないが、このあとの 「tensorflow-gpuをインストール」がうまくいかない。
conda update -n base conda
conda config --set safety_checks disabled
のあと
conda create -n 任意の名前 python=3.5 (3.6だとうまくいかない)
activate 名前
conda install -n 名前 tensorflow-gpu
としてみた
でも、あまり速くなってない。ボードが古いためだった。
CUDA をサポートし、Compute Capability(CC) という数値が3以上必要らしい。
とくに、tensorflowはCCが少ないと認識しないことがわかる。
補足>
conda info -eで 情報確認できます。
conda remove -n 名前 --all で削除できます。
そして==>後日、注文していた新しいGPU(GTX780)が届く。これはCC値に問題はない。
しかし、GPUが動作しない。どうやら、PCIexpress用の補助電源がないとだめならしい。
これまで使ってきた500W電源では、コネクタもなく、容量的にもきついので、新たに600Wの電源(
KRPW-N600W)
を購入。こちらの電源には
ちゃんと補助電源用のコネクタがついていた。
そして==>5/5
anacondaでPython3.6でpip install tensorflow-gpuで動かすがうまくいかない。
Python3.5でやってみたら、問題なく動作する。
計算スピードもかなり速くなっていた。
新しい投稿
前の投稿
ホーム
登録:
投稿 (Atom)