MYmemo

思い立ってやってみるけど、長続きしない。せめて記録しておく。

Termux + Python Flask + sqliteで株取引記録ツールを作ってみた

夏休みの宿題、のつもりで制作スタートしたのですが、気がつけば9月。たぶんプロがやれば1時間かからない作業だと思うんですけど…素人故この有り様。やっと投稿するに至りました。


米国株始めてみた

日本株は随分前から細々とやってました。運用成績は…まぁ、ボチボチ。で、次のステップを考えるなら米国株かな?と。特に深い考えがあった訳ではなく、他に思いつかなかったと言うか、日本株とそれほど必要なノウハウは違わないかなと。強いて言えばこれが理由です。


日本株でちょっと心残りだったことがあります。取引始めてから最初の数年間は取引履歴をまったく記録してなかった。あとで過去を振り返ろうと思った時には遡れなくなってしまってまして、これがちょっと心残り。なので、今から始める米国株は取引レコードをメモっていこう。そう思いました。


一番カンタンなのはExcelで管理すること。Excelって超洗練されたデータ管理ツールですよね。

しかーし、それではつまらない。

ここに無駄な労力をかけよう!そう思ったのが今回の記事の発端です。



開発環境と開発ツールの概要

開発はほぼすべてスマホでやりました。一応子持ちの親です。中々子どもが離れてくれる時間がなくて、パソコン開くのも手間だし、子どもが離れてる合間にスマホでせっせと作業。

  • 使用端末:Pixel6a
  • Termuxでpython, Flaskを使用したWebアプリを制作する
  • Webアプリ上では過去の取引レコードを一覧表示し、キーワードで表示を絞ることができる。表示レコードの合計損益が表示できる。また、レコードを追加できる。
  • レコードはSqlite3を使ってデータベース化する
  • editorはTermuxにインストールしたEmacs
  • CSSにはフレームワークのmilligramを使用
  • レコード検索を簡単にしたいのでjavascriptライブラリのlist.jsを使用



制作成果

トップ画面はこんな感じです。

milligram (CSSフレームワーク

美的センスには自身がないのでCSSフレームワークの力を借りました。
軽く動作させられて、あんまり実装が難しくなさそうでシンプルなデザインをと思って選んだのはmilligramです。 milligram.io


本当は、Skeletonってのを使いたかったのですが、私の力量の問題で上手くレイアウトできず断念しました。 getskeleton.com



list.js(javascriptライブラリ)

listjs.com

※ごめんなさい、他は後日更新します。



雑感(アプリ制作)

繰り返しますが、そのテの人なら秒でできる作業だと思われます。というのも最終形を見返してみると、全然大した行数ではない。見通しが立ってたらホント秒だと思います。

何に時間がかかったか?

多分list.jsとjavascriptの実装だと思います。こいつの特性を理解するのにものすごく時間がかかってしまいました。pythonみたいに実行した時にエラーが出たらいいんですけど、なんで上手く行ってないかに気がつくのにものすごい時間を費やした。

これを自前でやる意味があるのか?

無いですね〜。勉強か趣味でないのであれば…



雑感(米国株)

少額でとりあえず6銘柄くらい買ってみました。結果全部マイナス。いやぁ、銘柄知らなすぎるし、値動きが日本株の感覚と違うくて…。これやったら日本株に専念したほうがよっぽどいいか?

Arm ChromebookでFlutterを動かせる?

Yes, I can. (古る!)

ちょっと難儀しましたが、動かせましたのでご報告。以前記事にしたようにAndroid studioは動かなかったので、FlutterでLinuxアプリまでなら作成可能か試してみました。

導入環境

毎度の事、私のChromebookはコレ一台のみ

[rakuten:b-surprise2:10098177:detail]

項目 内容
メーカー acer
機種 Spin 311
CPU MediaTek M8183C 2.0GHz
メモリ 4GB
ストレージ eMMC 32GB

アーキテクチャはarm。

これまで色々いじくり回した挙げ句、整理整頓してこなかったLinux環境は、お陰様で容量カツカツ。一度全部消してみました。

ここから再度Linux環境を立ち上げました。本当にゼロからスタートします。


VScodeをインストール

若干手こずってしまったのがココ。公式サイトからインストーラーをダウンロードしてダブルクリックするだけで事足りるハズ…

確か前はここからダウンロードしたはず。「.deb」をクリニックし、ダウンロードし、いざダブルクリックしてみると「この環境にはインストールできない」旨のメッセージが…

は?なんで?前はなんの支障もなかったような?

理由は単純で、何故かamdアーキテクチャ用のインストーラーが自動選定されてダウンロードされるっぽい(私のChromebookがイケてないんだろう)です。

なので、キチンとarm64用をダウンロードすれば支障無くインストールできました。




Flutter環境構築

私のChromebookではAndroidstudioが上手く動かないことは実証済なので、Androidアプリ開発は諦めてLinuxアプリ開発ができること、を目指しました。

基本的には以下のサイトの手順通りです。

docs.flutter.dev

まずはFlutterを動かすためのコンパイラ等をインストールします。

Install the core development tools needed for Flutter. This downloads the compiler toolchain needed to compile apps for ChromeOS.

sudo apt install clang cmake ninja-build pkg-config libgtk-3-dev

つぎはFlutter本体をGitHubから持ってきます。

Download Flutter from the Flutter repo on GitHub with the following command in your home directory.

git clone https://github.com/flutter/flutter.git -b stable

で、パスの設定

Add the flutter tool to your path.

echo PATH="$PATH:`pwd`/flutter/bin" >> ~/.profile
source ~/.profile

You are now ready to run Flutter commands. Run the following command to see if there are any dependencies you need to install to complete the setup (for verbose output, add the -v flag)

つぎはこのコマンドを実行。

flutter doctor

This command checks your environment and displays a report to the terminal window. The Dart SDK is bundled with Flutter; it is not necessary to install Dart separately. Check the output carefully for other software you might need to install or further tasks to perform (shown in bold text).

ここからはChromeOS特有の事象。普通のLinuxならここまでで完了するらしいが、ChromeOSでは、Linux環境がコンテナ内にあるということと、ブラウザであるChromeがOSに一体化してしまっている(?多分表現がおかしい)ので、このままだと上手く行かない。らしい。

On ChromeOS, you do development work in a Linux container. However, the Chrome browser itself is part of the parent ChromeOS operating system, and Flutter doesn’t have a means to call it with the required parameters. Track this issue at Issue 121462: Improve the web debugging experience on Chromebooks. Instead, the best approach is to manually install a second copy of Chrome in the Linux container. You can do that with the following steps:

よって以下を実行することが解決策だ、と参考サイトに記載されている。

wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo apt install ./google-chrome-stable_current_amd64.deb

しかし、ここで詰んでしまいます。VScodeインストールのときと同じく、私のChromebookarmアーキテクチャであるのに対して、上記でやろうとしているのはamdアーキテクチャ用のインストーラーを導入することで、当然上手く行かない。

厄介なことにarm用のdebファイルは見つけられなかった。

じゃあどうする?公式サイトにはこれ以上何も書いてない。

あとできることは…Androidstudio導入をやろうとしたとき、一瞬成功したかと思ったアレを試してみる。

$ sudo dpkg --add-architecture amd64
$ sudo apt update

すると…。

VScodeからアプリ立ち上げに成功!

いやぁ~、何度も同じこと繰り返してますが、armでChromebookが一番手頃だったから購入しましたけど、開発環境の選択肢としては全くオススメできないですね。何をするにしても途中で必ず躓いて、中々本題に入れない。

私みたいな初心者は黙ってIntel入れとけってことですかね。

以上です。

Windowsでオススメ仕事効率化ツール

また久しぶりの更新です。しかも、いつもと全然違う話題で恐縮です。

今回は私用ではなく勤め先のPCの話。ITとは無関係な会社に勤めている私は、リースで会社からPCを貸与してもらってます。もちろんWindows

リース期間は3年で、入れ替えの時期がやって来ました。入れ替えは自分でやります。

旧PCでは色々フリーソフトを試しました(結果、その残骸だらけ)。使えるもの、そうでないものピンキリでしたが、その中で継続して使いたいソフトは?これをメモしたのが本記事です。

他、オススメのものありましたら、是非教えてください。



Lineup

  • Taskbar Number
  • Fenrir FS
  • Simple Note
  • Obsidian
  • Everything
  • Sidekick
  • PDF exchange
  • Syncthing



Taskbar Number

ramensoftware.com

まさに一芸ソフト! 詳細は以下のサイトで超わかりやすく解説されてます。

7+ Taskbar Numberer を使って、タスクバーからのアプリ起動をラクにする – ラボラジアン

私もWindows + 数字キーというキーボードショートカットキをよく使います。

数字は、ピン留めされたアプリケーションアイコンが「タスクバー上で左から何番目にあるか?

10個以上のアプリをタスクバーにピン留めして使ってましたが、このアプリの存在に気がつくまでは左から数えてしまこともありました。

もはや、マウスでクリックしたほうが早い?と思ったらこのアプリにたどり着きました。

ピン留めしたアプリアイコン上に数字を表示する。たったそれだけのアプリ。ショートカットキーを多様される方はお試しあれ。



Fenrir FS

www.fenrir-inc.com

2年程前から使い始めました。それまではファイルをフォルダで仕分けて管理してましたが、これがどんどん乱雑になっていく一方で収集がつかなくて、なんとかしたいなと思っていたところ、これに出会いました。

フォルダ管理はいろんな方法試しました。

  • テーマ別やプロジェクト別で管理
  • 処理した時期(日付)で管理
  • ナンバリング管理

どれもうまくいきませんでした。なぜか?

色々勧めていくと、当初はキレイにフォルダ体系を構築していたとしても、その体系や枠組みに当てはまらず上手く分類できなかったり、横断的な内容が出てきたりしますよね?

多少枠組みが外れたくらいなら、分類を増やしたりして対応できますが。それが重なると枝分かれがどんどん増える。更に組織形態が変わったりしたら、フォルダ体系は複雑怪奇。

Explorerの検索機能も全然イケてないですよね...。結果探したいファイルにたどり着けない、という事象が連発するようになりました。

そんなとき出会ったのがコレです!

これはすべてのファイルを単一フォルダで管理するソフトです。思い切って、フォルダ分けはしない!という方法。その代わりタグ付けでファイル分類をするのですが、タグは複数つけられるので1つのファイルを別々の切り口で管理できる。

逆に、弱点は階層分け(フォルダ分け)できないこと。どうしてもフォルダを作りたい場合はショートカットを作ってFenrirFSの管理フォルダに入れておく、という手段があります。

コイツはWindowsしか対応してません。Linuxで似たようなヤツ無いでしょうか??



Simple Note

超快速クラウドメモ。過去何度か記事で取り上げているソフトです。

mymemo8.hatenablog.com

名前の通り、難しい機能は一切無いが、クラウドで複数端末を同期させる事ができます。EvernoteやNotionをはじめとするクラウドメモに比べて機能面で勝る内容は皆無に等しいです。

特筆すべき内容は以上!

しかし、この同期スピードは他のサービスを圧倒します。あと、何故か勤め先のPCでも同期できる(他のクラウドメモはセキュリティとか色々成約が...)。

PCでパパっと打ち込んだものが、ほぼタイムラグ無くスマホで見れます。メモの検索も軽快。アイディア、ちょっとした備忘録とかを手間かけずに残せるのでとても重宝してます。



Obsidian

mymemo8.hatenablog.com

SimpleNoteはシンプル過ぎてできないことも多いです。

まず、長文を残しておくには向いてません。ページ内リンクが貼れないので、短文に分割するとかしないと、部分的に後から見返したりしようとすると難があります。

Markdown以外に特筆する機能がないので、ノウハウ的な内容を体系的にに残していくツールとしても不向きです。

これを補えるものを色々検討しました。特に注目したのがJoplinとOblidianです。当初Joplinの方がイイかな〜?と思ってたのですが、今はObsidianの方を推したいと思います。

機能面では、双方豊富な機能が備わっていて、大体同じようなことができるので優劣の判断が難しかったのですが、決め手はデータの保存形態です。

JoplinはメモデータをすべてJoplin固有の単一データ(ひとまとめ)にして管理します。

対してObsidianは1メモにつき1ファイル(.md形式)で管理します。

この違いは良し悪しあると思います。Joplin方式のメリットはデータひとまとめを「まるごと」共有したり、移管する場合は容易です。

端末間の同期に関しては、双方クラウドサービス部分は有償なので、私のような貧乏人は、別の手段を模索するわけなのですが、例えばDropboxのようなストレージサービスを使った同期もJoplinの方が容易です。(Obsidianは色々制約があって、ムズいです)。

Obsidianの方がデータの持ち方の効率が悪い?とも言えますが、メモ単位でファイル管理できるところに私はメリットを見出しました。前述のFenrirFSとの親和性出せるのです!

Obsidianで作成したメモにFenrirFSでタグ付けしておけば、タグ検索したら関連のパワポとかも芋づる式に探し出せる。

Obsidianの弱点は端末間同期が難しいところですが、これは個人的には後述するSyncthingを使って解決できました。

私の中のObsidian or Joplin問題は一段落付いた形です。



Everything

これまた一芸ソフトですな。

forest.watch.impress.co.jp

Windowsのファイル検索機能って本当にイケてないですよね。なのでこれを使ってます。

インストール直後の一発目の検索するまでが結構時間かかりますが、それ以降はものすごいスピードでファイル検索してくれます。

FenrirFSを導入する前のデータは魔境と化したフォルダ体系内のどこかに居て、階層掘っても掘り当てられない状態になってしまいました。

仕方が無いのでエクスプローラの検索バーで検索をすると、PCがう~ん、と長考した挙げ句、肝心なファイルがヒットしない(絶対どっかにある筈なのに!)なんてことありませんか?だからこのようなソフトが存在するんですよね。

余談ですが、Outlook内のメールも同じように検索にヒットしません。これを解決する手段をまだ見いだせてません。誰か教えてください。



Sidekick

これまでブラウザはChrome一択だったのですが、快速ブラウザとして紹介されていたのでインストールしてみました。確かに早い!イマイチまだ使いこなせていないのですが、新PCにもとりあえずインストールです。

www.meetsidekick.com



PDF Xchange Editor

forest.watch.impress.co.jp

フリーのPDFソフトだとコレしか思いつきません。旧viewerのときから使ってます。フリーなのにアドビ純正並に色々できてしまうので無茶苦茶重宝してます。

不満点は...重いこと。軽快動作する他のソフトが有れば検討したいです。



Syncthing

syncthing.net

ネットワークを介してフォルダを同期をさせるOSSです。以下の記事を見つけてインストールしてみました。 SyncthingをWindowsにインストールして使うまでの手順 | virtualiment

いわゆるクラウドサービスではなく、端末対端末で直接同期できます。

ちょいと操作が難ですがクラウドにデータがあるとなんとなく不安な私には、なんとなくしっくり来る仕組みです。

WindowsLinuxに対応している他、Android対応のアプリもあります。コイツのお陰でObsidianのデータをWindowsPCとAndroid端末(Pixel6a)間で同期させることができるようになったので、Obsidian本格活用が見えてきました!

以上、ご参考まで。

TermuxでSQLiteを使ってみる

termuxで何ができるのかな、といじくり回していたときのメモをブログに転記して見た感じです。手間をかけてなくて申し訳ございません。

mymemo8.hatenablog.com


過去MySQLぐらいしか触ったことなかったので、SQLについては初学と言っても良い状態。

じゃあMySQL試せばいいじゃん、と言う向きもありますが、前々から気になっていたので浮気してみました。




SQLiteとは??

RDBMS(relational database management system)の一種だ、とWikipediaで出てくるハズ。RDBMSで私が唯一触ったことがある前述MySQLだとかPostgreSQL、商用のOracle database(勤め先はこれを使っていたハズ)やSQL Server(Microsoft)なんかがある。SQLiteはそれらと一線を画するらしい。

Wikiをそのまま引用すると...

サーバとしてではなくアプリケーションに組み込んで利用されるデータベースである。 一般的なRDBMSと違い、APIは単純にライブラリを呼び出すだけであり、データの保存に単一のファイルのみを使用することが特徴である。

とのこと。ちなみに、私はFenrirFSのファンで今でも使っているのですが、このソフトもSQLiteが組み込まれているよう。(私のようなズボラ人間にとてもオススメのファイル管理ソフトです。)

www.fenrir-inc.com


組込配布できるくらい軽量かつシンプルなところが最大の特徴、であるがゆえに大規模なデータ運用には向かない、という振切った個性あるRDBMSと言えるかと思います。




支障無く普通に使える

勉強がてら軽く動かして見たところ、Termux特有の環境だからこう上手く行かない、みたいな状況にはなりませんでした。

多分、普通に使えるハズ。

なので、これ以上特に考察とか無いので、以下は勉強に操作してみたログ以上の事は何も書いてませんが悪しからず。




Termuxへのインストール

termuxへのインストールはpkgでできる。

$ pkg install sqlite3



対話モードで起動する場合はsqlite3コマンドを実行するだけ。新規DB作成と、作成済DB起動は同じコマンド。ちなみに、拡張子は.dbじゃなくても良い。参考サイトでは.sqlite3を使っているが、拡張子が無くてもちゃんと動作する。後で何のファイルが分からなくなるリスクを考えると.dbが無難だと思う。

$ sqlite3 ○○.db  


尚、コマンド入力に失敗した場合はCtrl + dで強制終了。もしくは;を入力すると解除される。




Tableを作ってみる

言わずもがな、DBはテーブルそのものではない。MicrosoftExcelに例えると、DBがExcelファイルに相当し、テーブルがExcelファイルに収録された個々のシートのイメージかと。

ここでは、Arsenalの選手に関するTableを作ってみます。

$ create table arsenal(id, name);  
$ insert into arsenal values(1, 'Ben White');


結果、以下のようなTableが出来上がる。

id name
1 Ben White

実際にTableが生成できているかどうかについては.tablesを実行して確認できる。

$ .tables
arsenal


arsenalテーブル内にレコードが生成されているかどうかについては以下を実行すれば良い。arsenalのところを対象テーブル名に置き換えて実行。

$ select * from arsenal;


実行結果でヘッダーが表示されない場合は.headersを切り替える。onは表示でoffが非表示。

$ .headers on


ちなみに、文字列をinsertする際、文字列をシングルクオーテーションで囲う必要がある。Markdownを頻繁につかってるので思わずバッククオートで囲ってしまうと、もちろんエラーになる。しかもエラーメッセージが一見何を言ってるかわからんから、ちょっとハマってしまった。なんのことはない。

Parse error: no such column: Ben White


余談ですが、一瞬エラーの原因がデータの型の問題かと思いました。コレを確かめるには以下を実行すればデータ型が何か判別できる。

$ select name, typeof(name) from arsenal;  
name|typeof(name)
Ben White|text




値の変更はupdate

例えば前述のテーブルでBen Whiteのidを彼の(2023年時点の)背番号「4」に変えたいとする。今回特に何も考えずにテーブルを作ったが、このような場合、各レコードの値を一意に識別できるID「ROWID」が勝手に生成されている。ROWIDはレコード生成順に1番から作られているハズ。確かめるためには以下を実行すると良い。

$ select ROWID, * from arsenal;
ROWID id name
1 1 Ben White


なるほど、これなら「id」を背番号に変えても問題無い。Ben Whiteのidは4に変更しよう。

$ update arsenal set date=4 where rowid=1;
ROWID id name
1 4 Ben White




カラムの追加・削除はAlter

選手の国籍を入れるカラムを追加してみたい。基本構文はALTER TABLE テーブル名 ADD COLUMN カラム名 データ型;

$ alter table arsenal add column Nat. text;
$ update arsenal set Nat.=’ENG’ where rowid=1;
id name Nat.
4 Ben White ENG


ちなみにupdateする際にwhereで条件指定しているが、これをしないと全てのレコードが上書きされてしまうので要注意

カラムを削除したい場合は以下の通り、dropする。

$ alter table arsenal drop column Nat.;



ここまで来ると、こんなこと思わないでしょうか?カラム名「ID」を「背番号」にしたいな~なんて。そして気が付きます。実はカラム名は変更出来ない…。ついでに言うとカラムは順次変更も出来ない。追加はできるが末尾にのみ追加できるだけ、と融通が効かない。どうしてもそうしたい場合、テーブル自体を作り直すか、一旦カラムを消して再度追加するか。

他のSQL、例えばMysqlなどはカラム名の変更も可能なので、これはSQLiteのイケてないところかも。




データの取得はSelect

基本構文は以下の通り
select 対象カラム from テーブル where 抽出条件

select文を試すためにテーブルを拡張します。もはや趣味の世界。

id name Nat. pos.
4 Ben White ENG DF
1 Ramsdale ENG GK
12 Saliba FRA DF

テーブル全体を取得する方法は前述の通り

$ select * from arsenal;


もちろん、指定カラムのみの取得も可能。

$ select name, Nat. from arsenal;  
name Nat.
Ben White ENG
Ramsdale ENG
Saliba FRA


さらに抽出条件を指定する。ナショナルがイングランドのみで取得するなら以下。

$ select name, Nat. from arsenal where Nat.='ENG';  
name Nat.
Ben White ENG
Ramsdale ENG




参考文献・メモ

このサイトが私の教科書です。凄いまとまってる。 SQLite入門 | Let'sプログラミング

備忘録 command|note :---|:--- .databases|接続中データベース情報表示 .help|コマンド一覧 .headers|on offでheader表示切替 .exit / .quit|SQLiteの終了 .tables|データベース内のテーブル名表示

初めて買った電子書籍とTermuxでネットワークの勉強しようとして躓いた話

趣味は読書!のハズなのですが、サボり気味です。



広い本屋なら一日過ごせますが、

そんな贅沢な時間の使い方がなかなかねぇ〜。

だいぶ前に買った本も、一回も読まずに埃被ってる有様。



そんな中、この度、久々に本を買いました!

それがコチラ

Linuxで動かしながら学ぶTCP/IPネットワーク入門

かなり前から、買いたい本リストに挙げてた中の一つなののですが、
こういう類の本は、値段張る上に分厚いし大きいから持ち運ぶに難あり。
「積んでおくだけ」にってしまうに決まってる。

しかし最近気づいたのです。

電子書籍として購入したら75%OFF!?


遅っ!?って話ですよね。

もう電子書籍が市民権を得て久しいハズ。

紙より安いってのも当たり前なのでしょう。

いや、安いんだろうな、というイメージは持ってはいました。

そもそも、本は、なんとなくペーパー書籍であるべきだ、
みたいな考えもあって、真剣に検討しなかったのもあります。

それが、最近になって考えが変わってきました。


スキマ時間はそれなりにある。
その時何してるか?決まってるじゃないですが、スマホいじってるんですよ!

スマホで書籍読めたら、もっと有意義な時間の使い方ができるんじゃね? 電子書籍ならデカいカバン背負ってる必要ないし。
カバンにブチ込んだ書籍が痛む心配もナシ。
しかも、こんなアプリもあるじゃないか?

mymemo8.hatenablog.com

今買おうとしている本は、「手をうごかしながら」読む
つまり、本と一緒にパソコンも必要。
スキマ時間のためにこの2つを持ち歩くのは割に合わない。


でもTermux+電子書籍ならスマホ1台で完結してしまう。

そして、この驚きの値段。

25%値引き、ではないのです。

75%値引き!!ですよ。


と長い前置きになりましたが、人生初の電子書籍を手元に、
Termuxでネットワークの勉強をしてみようと思いました。


Termuxにできないこと

躓きはすぐにやってきました。10章まであるうちの第2章で早くも...

初歩の初歩であるip address showを実行したらエラーになってしまう。

$ Cannnot bind netlink socet: Permission denied  

IPアドレス確認するのに権限許可エラーとは、何事??

試しにifconfigを打ってみたら、普通に結果が帰ってきた。

なーぜーだー。。

そもそもTermuxは管理者権限不要だったハズでは?
現にaptsudoつけなくても実行できちゃうじゃないか。

と、調べて見たところ、すぐにその答えが見つかりました。
Termuxの公式QAによると、以下の通り。

wiki.termux.com

Why does htop or netstat not work on my device

In order to stop leaking sensitive information via side channels, Android has blocked access to certain interfaces in /proc. This is done for your privacy. Specifically:
/proc/net/*
/proc/loadavg
/proc/stat
/proc/uptime
/proc/version
/proc/vmstat
And few others.
Restrictions vary between Android OS versions. Thus Android 7 is less restrictive than 8/9/10+. You can use root to bypass them. Do not open issues in our repositories on this or complain how Google is evil. We do not support such opinion or other Android-specific conspiracy.

最後の一文が面白いですね。情報漏洩の観点から、通信インターフェースへのアクセスは制限されているらしい。ってことはネットワーク系のコマンドはほぼ使えないってことか。(ifconfigは使えるが...)

ちなみにこんなのも見つけました。

github.com

Solution?!!と問われた回答がシンプルでいいですね。

Rooted device. There no other solutions for Android SELinux hardening.

ダメか。やっぱこういう類の勉強は、きちんとした環境下で勉強しないとムダなコストが発生するってことだ。ある意味勉強になったわ。




とはいえ、電子書籍はアリだと思う

当初思い描いた通り、にはなりませんでしたが、電子書籍の良さが分かったのは収穫です。

パソコン操作しながら本を読みながら、って結構作業やりづらいですよね?

前述のように、パソコン関連の書籍はだいたいデカいし分厚い。

片手でキーボード叩きながら、本が閉じてしまわないように書籍を押さえながら...アレ、どこまで読んだっけ?みたいな。

対して電子書籍なら、画面二分割横並び、って芸当も可能。

もちろん、ページ移動の自由自在さ、これは書籍が断然有利。カタログなんかは紙の方がいいな。
でもひたすら読み進めるもの。小説とか漫画、これは電子書籍がいいかもしれませんね。




余談:ifconfigとip address

今回久々にネットワークコマンドを叩く機会を得ましたが、ip address showifconfigの違いを初めて知りました(これは書籍に載っていない)。そもそもifconfigしか知らなかった。これは持ってた知識が古かったからでしょうか。ifconfigを含むnet-toolsは過去のLinuxディストリビューションにおいて標準採用されていたネットワークツール郡だったが、現在net-toolsが非推奨となり、代わりにiproute2が推奨となった。これに含まれるのがip address showという関係のようです。

そんなもん当たり前やん!

すみません、全然時代に追いつけていなかった。



書籍の評価は?

こういう類の書籍って、あたりハズレの差が激しいと思います。勿論、読み手のレベルとか性格に左右されるところも大いにあるかと思いますが、私にはとてもピッタリでした。手を動かしながらできるから頭に入って来やすいです。Termuxが上手く動いてくれていれば尚良しでしたが、そううまく行かないのが相場。

ChromebookにNextcloudをインストール(docker経由)

Chromebookを自宅のストレージサーバー化したいな、と思い色々検索してるとNextcloudに辿り着きました。
nextcloud.com

Nextcloudで特に私が惹かれたところは、スマホアプリの提供も無償でやっているところ。Pixcel 6aで撮影した写真データをポンポン放り込めるのでは?と期待しました。

しかし我がChromebookIntel入ってなくてarm。多分普通にはインストールできない。なので、dockerを入れてみました。

mymemo8.hatenablog.com




導入環境

毎度の事、私のChromebookはコレ一台のみ

項目 内容
メーカー acer
機種 Spin 311
CPU MediaTek M8183C 2.0GHz
メモリ 4GB
ストレージ eMMC 32GB

アーキテクチャはarm。ストレージ32GBのマシーンをストレージサーバーに、なんて笑止!だと思いますが、とりあえずお試ししてみて、うまくいったら違うマシーンの新調も視野に…予算があればですが。




イメージ導入とコンテナ立上

dockerさえ導入できていれば、Nextcloudを入れること自体は簡単で、以下を実行するだけ。
$ sudo docker pull nextcloud


イメージが導入できたかどうかは以下を実行して確認できます。
$ sudo docker image ls

ちなみに、私の場合は以下のようになりました。サイズは1GB近い。SSDが32GBしかない我がPCでこれを運用するのは不適ですが、まあお試しということで。

REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
nextcloud     latest    xxxxxxxxxxxx   1 day ago     945MB
hello-world   latest    xxxxxxxxxxxx   12 months ago   9.14kB



つづいて、コンテナを作ります。nextcloudのイメージにはWebサーバーも含まれているので、ポートを指定するとブラウザーでログイン画面を見に行くことができます。
$ sudo docker run -d -p 8080:80 nextcloud

※公式ドキュメントも確認ください --> Docker

ちなみに、私はこのdocker runがコンテナを起動するコマンドだと勘違いして、hellow-worldコンテナをムダに一杯作ってしまいました。


コンテナ一覧は以下を実行すれば表示されます。オプションの-aは起動していないものも含めて全部、ということなので、省略すれば、稼働中のもののみ表示されます。
$ sudo docker ps -a

CONTAINER ID   IMAGE         COMMAND                  CREATED       STATUS                       PORTS                                   NAMES
abcd12345678   nextcloud     "/entrypoint.sh apac…"   1 days ago    Exited (255) 5 minutes ago   0.0.0.0:8080->80/tcp, :::8080->80/tcp   silly_feistel
efgh90000000   hello-world   "/hello"                 10 days ago   Exited (0) 10 days ago                                               determined_kare


作成されたコンテナを起動するコマンドはdocker startのあとにコンテナの「ID」か「NAME」を指定します。例えば、上記のようにdocker ps -aで結果が表示されるのであれば
sudo docker start abcd12345678
とするか、
sudo docker start silly_feistel
で起動するはずです。

起動できていれば、ブラウザのアドレスバーにhttp://localhost:8080/を入力すればnextcloudへのログイン画面が表示されるはず。(すごい、何もしなくても日本語になってる ...) 。
ちなみに上の画像は、初期で表示される画像ではありません。本当は最初に管理アカウント作成画面が出るはずです。上の画像は、初期設定を済ませたあとに、改めてlocalhostを見に行ったときに出る画面です。




Androidアプリから見に行けるようにするには?

ここからは、あくまローカルネットワーク内でのお話をします。この状態では外部からはnextcloudを見に行くことはできません。そうするためには2つのことが不足してます。勿論アプリをインストールした上での話ですが、

  1. ChromebookLinux環境でポート転送設定
  2. nextcloudコンテナ内の設定

これが完了して、初めてスマホからアクセスできます。


1. ポート転送設定

Chromebookは初期設定ではローカルサーバーの外部公開はされないようになってます。これを開放するには、

設定→詳細設定→Linux→ポート転送を設定します。





2. nextcloudコンテナ内の設定

Nextcloudの初期設定も、ホストコンピュータからのアクセスのみに制限されてます。信頼できるドメインの調整が必要で、まずNextcloudのコンテナ内にbashで入ります。

$ sudo docker exec -u33 -it <docer id> bash


多分ここからは実行環境でだいぶ違うと思うのですが、私の場合、コンテナに入ったところにoccがあったので、以下を実行すれば、現状の信頼できるドメインが表示されます。

./occ config:system:get trusted_domains



我が家のローカルネットは192.168.0.でIPアドレスが払い出されていて、Chromebookには192.168.0.26が割当たっています。コイツを信頼できるドメインに追加します。

./occ config:system:set trusted_domains 1 --value=192.168.0.26:8080



以上!

後は、アプリをインストールし、192.168.0.26:8080を見に行けば、私はアクセスできました。

さて、コイツがどこまで使い物になるのか?これから検証してみます。

Chromebookにdockerをインストールする

導入環境

毎度の事、私のChromebookはコレ一台のみ

項目 内容
メーカー acer
機種 Spin 311
CPU MediaTek M8183C 2.0GHz
メモリ 4GB
ストレージ eMMC 32GB

アーキテクチャはarm。



この上なく親切な公式サイト

何事にも躓く私ですが、今回はすんなりインストールできました。公式サイトはこちら。

Install Docker Engine

公式サイトのすごいところは、インストール環境ごとパターン訳して解説ページを用意しているところです。Windowsmacはもちろん、Linuxに至っては下記画像に上がっている文だけのページが用意されています。


ChromebookLinux環境はDebianなのですが、「Debianにインストールする場合」について書かれているページももちろん用意されています。

docs.docker.com

間違いなく、公式サイトが親切だから躓かなかったのだと思います。



公式サイトに従うと...

何よりもまずUpdateしておく
sudo apt update

1. 関係あるパッケージを先行してインストール

公式HPによるとca-certificatescurlgnupglsb-releaseをインストールする必要があります。が、私の場合はlsb-release以外はインストール済みでした。

sudo apt install ca-certificates  
sudo apt install curl  
sudo apt install gnupg 
sudo apt install lsb-release


2. DockerのGPG keyを追加する

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg



3. リポジトリのセットアップ

ながーいから誤打しそう。

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null  


4. Dockerのインストール

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin  

以上!インストール完了してるかどうかはsudo docker run hello-worldを実行して確認できます。次のように表示されるはずです。

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (arm64v8)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.  




コマンド備忘録

Command Note
docker version バージョンを確認
docker ps コンテナ情報一覧表示(動作中のみ)
docker ps -a コンテナ情報一覧表示(停止中含め)
docker images 保持しているDockerイメージ一覧
docker pull <イメージ名> イメージを取得(docker hubにあるもの)
docker run <イメージ名> イメージをもとにコンテナを起動
docker start すでに存在するコンテナを起動