消せないAndroidアプリをadbを使って強制アンインストール
前提
adbコマンドを実行できることが前提です。
また、開発者モードをOnにして、USBデバッグモードでPCに接続してください。
スマホに接続する
adb shell
を実行して、スマホに接続します。
削除したいアプリのpackage名を調べる
am monitor
を実行する。
am monitor
は、起動するアプリをリアルタイムで把握するコマンドです。
HWPOT-H
はスマホの機種によって変わると思います。
HWPOT-H:/ $ am monitor Monitoring activity manager... available commands: (q)uit: finish monitoring
am monitor
を実行した後、アンインストールしたいアプリを起動することで、下のようになります。
HWPOT-H:/ $ am monitor Monitoring activity manager... available commands: (q)uit: finish monitoring ** Activity starting: com.android.calculator2
今回は、最初から入っている計算アプリを消そうとしています。
この、com.android.calculator2
というpackage名をどこかに記録しておいてください。
そして、q
を押してからエンターをおすことで、am monitor
を終了し、次のコマンドを入力できるようになります。
アプリをアンインストールする
pm uninstall com.android.calculator2
を実行します。(com.android.calculator2
は削除したいアプリのpackage名に置き換えてください)
そうすると、そのアプリをアンインストールすることができます。
備考
DELETE_FAILED_INTERNAL_ERROR1
が発生する場合
pm uninstall -k --user 0 package名
をpm uninstall package名
の代わりに使用する。
機械学習についてのなぐり書き
AIについて僕が持っていることについてまとめます。
言語・ライブラリ
言語
Pythonが非常に有名かつ主流
ライブラリ
- TensorFlow
- Google製
- PyTorchと同じくらい使われている
- PyTorch
- Facebook製
- TensorFlowと同じくらい使われている
- Keras
- TensorFlow、CNTK、Theanoのラッパー
- Kerasの本家と、TensorFlowにカスタマイズしたKerasがある
- TensorFlow使うなら、TensorFlowのKerasを使うと良い
実行環境
Colaboratory
自前のGPU/TPU用意するより、Colaboratoryのほうが便利
本業で機械学習やる場合はまた別
有料版のColaboratory Proもある
GPU・TPU
TPUは小数の計算の精度を犠牲にして速くしている
迷ったらTPU使えば良い
TPUの凄さは、記事にもなっている。
機械学習の手法
(狭義の)機械学習
機械学習の手法を挙げます。
LightGBM
LightGBM 徹底入門 – LightGBMの使い方や仕組み、XGBoostとの違いについてがわかりやすい。
非常によく使われていて、しかも奥が深い。
分析問題に対しては、後述する深層学習よりも精度が上になることが多い。
XGBoost
LightGBMより前に開発されたLightGBMと同じようなもの。 初心者に限って言うなら、XGBoostを使うならLightGBMを使ったほうが良さそう。
sklearnのモデル選択方法
状況に合ったモデルを選ぶための図 割と参考になる
classification
- 教師あり学習・分類
- 予め、このデータはAというように分類されている
- 例:写真を入力したら猫か犬か判定するAI
regression
- 教師あり学習・数値予測
- 例:その日の店の売上
clustering
- 教師なし学習・分類
- データが与えられ、そのデータを分類する
- K-means法とかが有名
- dimensionality reduction
- 次元削減
- データの特徴を、より少ないバイト数で表現できるようにする
- 深層学習の中間層を用いて次元削減するという話を聞いたこともある
深層学習(ディープラーニング)
画像認識など、分析以外のタスクが得意
分析問題を解くときも、アンサンブルとして使うことが多い
深層学習で使う関数たち
詳しくは、絵やグラフつきのサイトがわかりやすい。
- 最適化関数
- 学習の進め方を決める関数
- Adam, RMSpropなど
- 活性化関数
- 一つ前の層からきた値を、出力するために使う関数
- sigmoid, tanh, relu, softmaxなど
- softmaxは分類のときに出力層に使うことが多い
- Kerasの公式ドキュメントにいろいろな活性化関数がある
- 損失関数
- 目標とする出力との違いを数値化する関数
- この関数の値をもっとも小さく(または大きく)するように学習が進む
- 学習の方向は最適化関数が決める
- 基本的な使い分けはこのサイトがわかりやすい
- 評価関数
- 深層学習では、1度だけではなく、何度も何度も学習を繰り返す
- 1回の学習ごとに今のスコアを表示する
- 評価関数は学習自体には何の影響もない
- 人間が、学習中もスコアを確認できるようにしているだけ
- 損失関数は計算したスコアを学習に利用するが、評価関数は計算したスコアを学習に使わない
- つまり、評価関数と損失関数はほぼ同じもの
- accuracy, f値などがある
- accuracyは複数ラベルの分類には使えない
深層学習でのパラメーター
- batch size
- 1回の学習(1 epoch)では、データすべてを一度に使うのではなく、複数回に分けて使う
- 大量の画像データを一度にメモリに乗せるのは大変
- batch sizeで32を指定すると、32枚の写真ごとに計算する
- 【Deep Learning】 Batch sizeをどうやって決めるかについてまとめるがわかりやすい
- 1回の学習(1 epoch)では、データすべてを一度に使うのではなく、複数回に分けて使う
- ニューロン数(ノード数)・隠れ層数
- Drop Out
- 過学習を防ぐために使う
- 0.25~0.5ぐらいがよい
GAN(敵対的生成ネットワーク)
Aさんは、Bさんを騙せるようにがんばります
Bさんは、Aさんに騙されないようにがんばります
お互いに切磋琢磨しあって、結果的にAさんの生成した画像は本物と見分けがつかないレベルになります
詳しい説明は下の参考サイトに譲ります。
参考サイト:今さら聞けないGAN(1)基本構造の理解
その他
アンサンブル
複数のモデルを使って最終的な出力を出すこと。
例えば、LightGBMとディープラーニングなど
Optuna
ハイパーパラメータチューニングを自動で行ってくれます
かなり便利です
学習手段
本
- Kaggleで勝つ!
- とりあえず読む
- 詳解 ディープラーニング
- Tensorflow1.0のときのものなのであまり...
- 内容は詳しいし、わかりやすい
- Androidアプリ開発の教科書
- 基本的なやり方がよく分かる
- Androidアプリを作り始める人にはオススメ
- 実践的にアプリを作ろうとすると足りない
- Cクイックリファレンス
- 辞書的な使い方で役に立つ
- メジャーアップデートが来るとかいう噂を聞く
- C言語総合講座15講
- 理論編しか読んでいないが、下のprogramming place plusで足りない知識が身についた
- プログラミングコンテストチャレンジブック
- プログラミングの宝箱 アルゴリズムとデータ構造
- 上のプログラミングコンテストチャレンジブックの重要な部分だけピックアップしている感じ
- わかりやすかった
- アルゴリズムデザイン・アルゴリズムイントロダクション
- アルゴリズムの辞書
- 初めて読んだとき、両方とも数学の知識がないと手も足も出なかった(当時中3)
- それ以来読んだことはない
- 理科系の作文技術
- 論文だけでなく、文章を書く上で非常に役に立つ
- 絶対読むべき
- 数学文章作法
- 数学ガールの人が著者らしい
- こちらも理科系の作文技術と同じくらい読んだほうが良い
サイト
全体
- Qiita
- 困ったらここに行けばいい
- Teratail
- エンジニア版のyahoo知恵袋
- Progate
- プログラミング初心者が学ぶのには良いと思う
- 既に他の言語をマスターしていて、新しく言語を学ぶには冗長すぎる
Android
公式リファレンス
- 正確で手厚いが、情報量が多いので慣れるまでは解説サイトを見たほうが良い
-
- メジャーな機能についてはだいたい解説されている
- サンプルコードもほとんど動く
Python
- 検索するとだいたい出てくる
- 特定のサイトを使うことはあまりない
C/C++
Kaggle
コミュニティ
- kaggle-ja@slack
- kaggleのコミュニティで、初心者が簡単に質問できる
ConohaでVPSサーバーを借りてApache2でウェブサーバーを構築!
VPSサーバーを借りて、ウェブサーバーを構築する手順について説明します!
前提
この記事は現在進行系で開発中です。
単語説明
VPS
サーバーを借りるのには、いくつか種類があります。
名称 | 料金 | 管理者権限 | 主な使用用途 |
---|---|---|---|
共用サーバー | 安い | X | ブログ |
VPS | 普通 | O | プログラミング・サービス提供 |
専用サーバー | 高い | O | 本格的なサービス提供 |
共用サーバー
- 1つのサーバーを複数人で共有する
- 管理者権限なし
- ソフトを新しくソフトをインストールできない
- ブログを公開する、ファイルを保存するといった用途がメイン
- 処理時間の長いプログラムを実行すると止められる
- 同じサーバーの他の人の使用状況によって、自分の使えるリソースが変わる
- 例えば、他の人が10万PVのブログを運営していたら、自分のサーバーの処理が遅くなる
VPSサーバー
- 1つのサーバーの中に仮想的に複数のサーバーを作成する
- (割り当てられた仮想サーバーの)理者権限あり
- ソフトのインストールが可能
- メモリが予め割り当てられている
- 性能が他の人の使用状況に左右されにくい
専用サーバー
- サーバー丸々借りる
- サーバー全体の管理者権限を持つ
- 好きなように何もかもいじることができる
- 性能は常に保証される
今回は、VPSサーバーを使用します。
アカウント登録
conohaのVPS公式サイトから、アカウント登録をします。SMS認証が必要です。
ssh通信するまで
VPS追加画面
下のように設定します。
パソコンのメモリは16GBとかありますが、サーバーは1GBでも機械学習とかしない限り大丈夫です。
リージョン(サーバーの場所) | 東京 |
---|---|
メモリ | 1GB |
OS | Ubuntu |
メモること
- 逆引きホスト名(またはIPアドレス)
- (サーバー追加したときに登録した)rootパスワード
とりあえずsshして初期設定
設定する内容は、以下の通り。
- 通常のログイン用のユーザーを作成する
- rootユーザーでログインできないようにする
通常のログイン用のユーザーを作成する
ssh root@上でメモした逆引きホスト名 // ユーザーの追加 sudo adduser 好きなユーザー名(今回はtlaloc) // パスワードなどを聞かれるので入力 // ユーザーに管理者権限を付与 sudo gpasswd --add ユーザー名(今回はtlaloc) sudo
windowsから簡単にsshできるようにする
sshで公開鍵を作っていない人は、ssh-keygen
でググってください。
Windowsの設定をする
Windows側の.ssh/config
に以下のように記載
Host conoha HostName 上でメモしたホスト名 User 上で作成したユーザー(今回はtlaloc) Port 22 (後で変更しますが、最初は22です) IdentityFile ~/.ssh/id_rsa(自分のid_rsaの場所に置き換えてください)
サーバー側の設定をする
Windowsで以下のコマンドを実行する。パスワードを聞かれるので、上でメモしたパスワードを入力します。
[注意点]
.ssh/id_rsa.pub
は、id_rsa.pub
への相対pathを指定してください。conoha
は、.ssh/config
のHost
で設定した名前です。- パスワードを聞かれるので入力してください
scp .ssh/id_rsa.pub conoha:~/.ssh/authorized_keys
これは、Windowsのid_rsa.pub
というファイルを、サーバーの~/.ssh/authorized_keys
にコピーする操作です。
試してみる
ssh conoha
パスワードを聞かれることなくログインできたら成功です。
初期設定
セキュリティ関連
最低限することは、 * rootログインの拒否 * パスワード認証の無効化 * 使わないポートを閉じる
rootでログインできないようにする。
sudo vi /etc/ssh/sshd_config
yesをnoに変更
// 変更前: PermitRootLogin yes PermitRootLogin no
これ以降(少なくともこの記事の範囲では)rootのパスワードを使用することはありません。 これより下でパスワードというときは、adduserで追加したユーザーのパスワードを指します
注: 何らかの原因で、作成したユーザーでログインができなくなったとき、conohaのコンソールからログインするときに使用するかもしれません。なので、rootのパスワードはどこかに保存しておいたほうが良いでしょう。
パスワード認証を許可しないようにする
sudo vi /etc/ssh/sshd_config
PasswordAuthentication no
// 変更前: #PasswordAuthentication yes
使わないポートを閉じる
// ufw の起動 systemctl start ufw // ufwの有効化 sudo ufw enable // sshに使うportのみ許可 // 空いている49152番から65535番の中から選ぶ // この番号はどこかにメモっておいたほうが良い sudo ufw allow 49157 // 追加した番号が許可されているか確認する sudo ufw status // 出力結果 To Action From -- ------ ---- 49157 ALLOW Anywhere 49157 (v6) ALLOW Anywhere (v6) // 許可したport以外からは拒否する sudo ufw default deny // sshを受け入れる番号を変更する sudo vi /etc/ssh/sshd_config Port 49157 // 変更前: #Port 22
この状態で、先程の自分のPCの.ssh/config
の中のポート番号を必ず新しいものに変更してください。
変更の反映
// sshを管理するソフトの再起動 service ssh restart
入れるかテスト
ssh conoha
して入れるかどうか確かめてみましょう。
成功するまでは、すでに接続しているsshは切断しないようにしてください。
pyenv
複数のバージョンのpythonを使えるようにします。
pyenvを使わない場合、(例えば)3.6.9のバージョンのpythonしか使えません
git clone https://github.com/pyenv/pyenv.git ~/.pyenv echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bash_profile source ~/.bash_profile sudo groupadd developer sudo gpasswd --add tlaloc developer sudo visudo // 以下を書き込む Defaults exempt_group="developer" sudo apt update -y sudo apt upgrade -y // Pythonのインストールに必要なライブラリー sudo apt install -y gcc make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev -y
virtualenv
pyenvでは、複数バージョンのpythonを使えるようにしました。
virtualenvでは、フォルダごとにpythonにインストールしたライブラリを保存することが可能です。
git clone https://github.com/pyenv/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile source ~/.bash_profile
Pythonのインストール&使用
このサイトを参考にしてください。
neovim
neovimのインストール
3.8.3は好きなバージョンに変更することが可能です。
pyenv install 3.8.3 pyenv virtualenv 3.8.3 neovim3 pyenv activate neovim3 pip3 install pynvim -y sudo add-apt-repository ppa:neovim-ppa/stable sudo apt update -y sudo apt upgrade -y sudo apt install neovim -y
deinのインストール
curl https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh > installer.sh sh ./installer.sh ~/.cache/dein rm installer.sh
サーバーとして使えるように
現在執筆中
apache2のインストール
phpのインストール
PHP 7.4 を Ubuntu 18 / 19 などにインストールする方法 PHPのリリース日とサポート期限
https
Ubuntu 18.04でApacheの自己署名SSL証明書を作成する方法
【apache】conohaのUbuntu18.04にLet's EncryptでSSL設定するまで
その他
ssh-keygen -t rsa -b 4096 -C ""
でsshキーを作成(""内はメールアドレス
その他便利な設定
ファイルの検索で大文字小文字を検索しない
~/.inputrc
に以下を記述
set completion-ignore-case on
コマンド一挙コピペ用
現在作成中
参考サイト
SambaでUbuntuのフォルダをWindowsから操作!(共有フォルダ)
Sambaを使ってUbuntuのフォルダにWindowsからアクセスできるようにします。 UbuntuのフォルダとWindowsのフォルダが同期して、どちらからでも簡単にフォルダをコピーできるようにします。
環境
Windows 10 Ubuntu 18.04 2020/02/28時点
やること
UbuntuのフォルダをWindowsに共有するやりかたを解説します。
Ubuntu側
Sambaのインストール
Ubuntuにsshでログインしてください。 直接、Ubuntuの端末でコマンドを打ち込んでも大丈夫です。
sudo apt update sudo apt upgrade sudo apt install samba
共有フォルダを作成
# 好きな場所にフォルダを作る mkdir /home/secureshare sudo chmod 777 /home/secureshare
Sambaの設定
sudo 好きなエディタ(nvimなど) /etc/samba/smb.conf
で、設定ファイルを開き、下のように変更する。
[global] min protocol = SMB2 max protocol = SMB2 client max protocol = NT1 // コメントアウトされているので、コメントインしますj interfaces = 127.0.0.0/8 Windows(共有される方)のIPアドレス/24 // 最終行に書き加えます [Share] browseable = yes writeable = yes path = /home/share create mode = 0770 directory mode = 0770 guest ok = no // secureshareというグループにのみファイル操作を許可します valid users = @secureshare
sambaにログイン用のユーザーを登録します
sudo useradd sambalogin sudo pdbedit -a sambalogin
と入力し、passwordを設定します(ubuntuのアカウントのパスワードとは違うほうが良いです)
成功すると、下のような画面が出てきます(右側にアカウント情報が書かれていますが、あえてカットしています)
そして、secureshareというグループにsambaloginというユーザーを追加します。
sudo groupadd secureshare sudo usermod -G secureshare sambalogin
sambaの設定を読み込むため、再起動します。
sudo systemctl restart smbd sudo systemctl enable smbd
最後に、sambaにファイアウォールの許可を与えます。 これにハマって2時間ぐらい溶かしました。
sudo ufw allow samba
Windows側
ネットワークドライブを割り当てるをクリックします
あとは、pdbedit
で設定したパスワードを入力するだけです。
おそらく、ユーザー名も入力しないといけない場合、どこかが間違っています