初めてのchromebook購入
amazonのブラックフライデーという歳末大売り出しにつられて、ASUSのchromrbook (CX1101CMA-GJ0019)を購入。31000円ほど…て、これまたスマホより安いパソコンだ。これに追加でマイクロSDカードやBTマウス。
PCを新規に購入するなら、その最低必須条件は
・画面サイズが10〜11インチ
・CPUがインテル
で、安いに越したことはない、というのも入れると、Chromebookとなった。
必須条件の理由は。
自宅作業がローテーブルという名のちゃぶ台環境なので、デスクトップや大きなサイズのノパソは邪魔になるだけ。
インテルのCPU採用なら、メーカーのサポートが終わってもunix系OSをインストールして復活できる可能性があるから。
画面サイズで絞るとCPUがインテル以外のものばかりで、CPUで絞ると画面サイズが15とか巨大なものばかりが並んでた。
条件クリアしたのが、このASUS chromebook CX1。
画面:11.6インチ
CPU:intel Celeron N4020
メモリ:4G
ストレージ:64G(eMMC)
OS:ChromeOS
今、メインで使ってるのもASUSのvivobookというノートパソコン
「22980円のノートパソコンvivobook購入」
↑購入時のvivobookはWIN10だったけど、今はChromeOS Flexというgoogle謹製フリーのChromeOSで使ってる。
今回購入したCX1はキーボード配置などハードウエア的にも正規正統のchrombook。
これはフリーOSのFlexとは違ってgoogle playが使える。すべて対応してるかどうかはまだわからないけど、こちらの正規版(?)chromebookは、アンドロイドのアプリも使えるらしい。
さっそくlinuxをONにして、15Gほど割り当てて環境設定。
といっても、vivobookで使ってる設定ファイルをこっちに持ってくればほぼOK。
aptやcpanでインストールしたものも同じ。
「CloudReadyのバージョンアップ(94系から96に)」
↑メモっておいたことが珍しく役に立った。
CX1はストレージが64G。32Gのvivobookの倍だし、apache2もインストールしてローカルでWEBサーバーを立ち上げておくことにした。
vivobookでも最初は立ち上げてたんだけど、いろいろインストールするうちにディスク容量がちょっと心配になり、あまり利用する状況もなかったapacheは削除していた。
Chromebookのlinux環境(debian)のapache2はconfファイル(設定ファイル)が役割ごとに分けられてたり、以前もわりとハマったので、改めてメモ。
apache2のインストール
sudo apt install apache2
↑インストールはaptで一発。画面を眺めてるだけ。
インストールしたらまずやるべきこと。
・chromebook側
「設定」→「デベロッパー」→「linux開発環境」
→「ポート転送」
ここで、ポートを追加する。ポート番号は慣例的に「8080」が何かと無難。この設定はlinuxのコンテナを終了させるとOFFになるので立ち上げるたびにONにする必要がある。
・Apache2の設定
ターミナルでlinuxにログインして設定していく。
Apache2の設定ファイルは /etc/apache2/ 以下。
/etc/apache2/ports.conf
をエディタ(vim)で修正する。
Listen 80 → Listen 8080
変更したら、ターミナルでapache2を再起動。
sudo systemctl restart apache2
chromebook側で
https://localhost:8080
↑にアクセスして、デフォルトのスタートページが表示されたら問題なくapache2が動いている、というのを確認できてひと安心。
ここから以下、自分の環境に合わせてもろもろ設定していくことになる。
前提として。
・perlでCGIを使う
・任意のユーザーディレクトリでCGIを使う
・ローカルのサイトはSDカードで運用する
というのがあって、案の定ハマったりした。
・SDカードにシンボリックリンク
SDカードを差したらchromebookの「ファイル」アプリ
「USB Drive」という名前になっていてファイル名の半角空白は事故の元なので「USBDrive」に名前変更。
名前変更したら右クリックして「linuxと共有」する。
ターミナルで ls /mnt/chromeos/removable/USBDrive/
ができてたら、ローカルサイト用のディレクトリを作って、HOMEディレクトリにシンボリックリンクを作成すればOK。
・CGIを使うためのモジュールを設定
sudo a2enmod cgi
↑これでCGIが使えるようになる。
ちなみに。
apache2の設定ファイル群は「*-enabled」「*-available」というディレクトリに入っていて、
「enabled」が読み込まれている設定
「available」が利用できる設定
と分けられている。
利用したい設定をONにするのが
「a2enconf」「a2enmod」「a2ensite」
読み込まれている設定をOFFにするのが
「a2disconf」「a2dismod」「a2dissite」
(やってることはシンボリックリンクの作成/削除)
・apacheの実行ユーザーを変更
デフォルトだとapacheは「www-data」というユーザー、グループで実行する。このままでも問題はないんだけど、任意のユーザーディレクトリでCGIを実行するにはディレクトリやファイルの権限でひっかかって面倒くさい。
/etc/apache2/envvars
↑apache2の設定ファイルで使われる変数を設定しているファイルがある。
この中で実行ユーザー、グループが設定されているので
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
「www-data」を自分のユーザー名に変更すると、自分のHOMEディレクトリ以下でローカルサイトを展開できる(HOMEディレクトリ以下は、www-dataのままだと権限がないので、403エラーとなる)
・VirtualHostで設定
/etc/apache2/sites-enabled/
を見るとデフォルトの 000-default.conf
がONになっている。これを別名(mylocal.confとか)でコピーしてエディタで修正、編集していく。
修正が必須なのは以下の2点「VirtualHost」「DocumentRoot」を書き換える。
VirtualHost *:80 → 8080
DocumentRoot /var/www/html → /home/usrname/dir
8080番ポートに設定、ローカルサイトを展開するディレクトリを自分のHOMEディレクトリに設定。
公開するディレクトリの約束事をmylocal.confに追加記載する。
<Directory /home/usrname/dir/>
Options +ExecCGI -Indexes +FollowSymLinks
AddHandler cgi-script .cgi .pl
AllowOverride None
Require all granted
<IfModule mod_dir.c>
DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
</IfModule>
</Directory>
「+ExecCGI」
このディレクトリでCGIを実行できるようにする
「AddHandler」
cgiファイルの拡張子は「.cgi」と「.pl」
編集が終わった「mylocal.conf」を /etc/apache2/sites-available/
にコピーして、その設定をONに設定、apacheを再起動して完了となる。
sudo cp mylocal.conf /etc/apache2/sites-available/
sudo a2ensite mylocal
sudo systemctl restart apache2
エラーになったら以下の2つで確認。
sudo systemctl status apache2.service
sudo less /var/log/apache2/error.log
…て、ほぼほぼ、configファイルのエラーなので、設定ファイルを作ったら
sudo apache2ctl -t
で、設定ファイルのエラーを確認するのが吉。
とりあえず今日時点ここまで、かなあ。
公開してるサイトをコピーして、ローカルで動作確認ができるようにしておきたいところだ。
ホッカペに湯たんぽに電気毛布まで。寒さ対策の達人。
[11/30 15:22:42] 追記
lolipopと同じように使うためにいくつか必要で。
perl の場所が違う
→/uer/bin/perl を /usr/local/bin/perlにリンク
DocumentRootが違う(当然)
→/home/以下にディレクトリを作って、本体のあるSDカードのディレクトリにリンク
perlで足りないモジュールのインストール
JSON
→cpanでインストール
imagemagick
→cpanだとエラーになるので、apt install perlmagickで取得
DBD::SQLite
→cpanでインストール
とりあえず。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
ブラウザでバーコードをスキャンしてISBNを取得する
2006年公開のWEB本棚「趣味は読書2」のスマホ版にバーコードをスキャンして本を登録できるようにしたのでメモ。
このWEB本棚は、なんだかんだ15年以上続けていて、最初は自宅で組んだパソコンをサーバーにして公開してたんだけど、東日本大震災があって、計画停電とかいつ停電してもおかしくない状況というのがあって、レンタルサーバーに引っ越し、現在にいたる。
WEB本棚「趣味は読書2」 https://doncha.net/
もともと自分で使うことを考えてたので、既読・未読がわかって、簡単なメモやカテゴリをつけられればいいので、機能的には十分足りてる。
ただ、1冊ずつISBNを手入力するのがちょっと面倒くさい。ガサツなわたしはISBNをタイプミスしてエラーになることも少なくないし。
なもんで、後づけで、アマゾンの検索結果を一覧にしてチェックしたものを本棚に登録できるようにして使ってたら、2019年のAPIの利用規定改定でアフィリエイトで売上のないアカウントはAPIを利用できないということになった。当然アフィリエイトの売上などないわたしは、APIを利用した検索結果からの一括登録ができなくなってしまった。
これを作った当初の状態に戻っただけなので、まあしょうがないな、ぐらいな感じ。本を買っては/読んでは、ちまちま本棚に登録していた。
てな昨今だったわけだけど。
イーロン・マスクがTwitterを買って、何かと騒がしいので、以前アカウントを作っていたマストドンに久しぶりにログイン。
ここは本好き、本読みのひとが集まるサーバー(インスタンス)で、流れてくる話も小説がらみが多くて静かに面白い。本の整理、積読なんかの話も流れてくる。
本好きの集まるマストドンはこちら
Bookwor.ms
それに刺激されて、ふたたびだかみたびよたびだか、WEB本棚の見直しをしてみた。
機能的には満足しちゃっていて、データベースの構造もシンプルで必要十分、昔の自分をちょっと褒めてもいいかもだった。
UIを含めたデザインが古臭くて気に入らない。でも、変更するとなると、かなり面倒くてさすがに手をつける気合気力体力がない…IE対応なんかのスタイルシートも混じってて、そのうち考えないとなあ。
スマホ版も見直しかな、とスマホでログインして触ってみて、そういやISBNの入力をバーコードスキャンでやりたいと思ってたんだと。
さっそく検索してみた。
…て、ここまで、自分でもびっくりするぐらい無駄なまえがき、無用なゴタクが長くてすまん。もう爺、老人なもので許してください。
ブラウザからスマホのカメラを使うためのjavascriptライブラリも公開されていた。
Quagga.jsというライブラリで、公式ページはこちら→ QuaggaJS
javascriptも詳しくないし、読み取り精度をあげるためには、HTML5あたりのcanvasも使う必要があるらしい。
あちこち実装されてるかたのサイトを拝見しては、ちょっとずつ試して試して、最終的にこちらのサイトに助けられて、どうにかISBNのバーコードスキャンに成功。
QuaggaJSを使ってブラウザでバーコードスキャン:なんぶ電子
ほんと、こちらのページには感謝しかない。
テストページでいろんなコードを試してまる一日。javascriptだけじゃだめで、canvasも使う必要があるのが大騒ぎで、javascriptが意図通りじゃないのか、それともHTML的な問題なのか切り分けるのに時間がかかった…って、どっちも自分のスキル不足が原因なんだけど。
WEB本棚「趣味は読書2」スマホ版 https://doncha.net/sp/
WEB本棚「趣味は読書2」ついて https://doncha.net/about.pl
WEB本棚「趣味は読書2」で出来ること https://doncha.net/about.pl?c=help
たぶん、小学校の頃、自動車文庫(移動図書館)がなければ、いまの自分はなかった。
ほんと、小説は面白いぞー!
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
AI画像ギャラリー
AIが生成する画像であちこち炎上してる。
・勝手にひとの絵をパクるな
・絵も描けないくせにAI絵師はないだろ
たぶん、この2つに集約される。
「膨大なinputの集積があって、その坩堝からoutputを創る、創造する」
ということでは人間もAIもやってることは同じ。
神さまじゃないんだから、無から何かを創るなんてことはできない。元になるinputがあって始めてoutputだ。
他人である、作家、画家、漫画家の創作から影響を受けないひとはいない。
AIはネット上の画像をサンプルにして学習してるけど、コラージュ、元の画像を切り貼りして出してるわけじゃない。ここは人間も同じなので、AIだからといって、勝手にひとの絵をパクるな、は当たらない。
例外なく、誰しもみな、模倣から始まる。
outputの手段、方法がAIに描かせるのと人間が手作業で描くのとでは、別の話になる。
AIで描いた絵とかいっても、人間はこんな絵が欲しいという指示を出すだけ。自分で手を動かすわけじゃない。プロデューサーとか編集者を自認するならともかく、絵師とかイラストレーターを自認するのはさすがにない。
ここは勘違いしちゃいけないところ。ていうか、そもそも役割が違うだろ。
もちろん、日進月歩どころか秒進分歩の速度・加速度で変化をしていくAIだから明日にはどうなってるかわからないけど、ひととの関わり、役割についてはこんな状態が続くんじゃないかな。
ゴタクはともかく。面白いんだよなあ、AIが出してくる絵。
どこかで見たような、最大公約数的な絵だ、ともいわれていて、そこはなるほどなあ、と。
それは悪いことではなくて、むしろそこが面白いところで、わたしのような凡庸な人間には、どこかで見たような「馴染んだ感じ」が刺さるのかもしれない。
一枚絵を起点に、ストーリー、物語が膨らむ感じがする。とっかかりやすいんだろうな。
てことで、AI画像ギャラリーのページを作ってみた。
AI絵にキャプションやカテゴリをつけることができるだけなんだけど、写経してる感じとでもいうか現実逃避というか、意外にハマる。
スマホからでも更新できるし、電車の中で眺めて遠い目をするのも、老人ならではの、更年期障害鬱傾向でストレスフルな時にはありがたいものとなった(自画自賛)
意味不明な断片の投げつけは気持ち悪いと思われるんだろうなあ。でも、こんなのも含めて「絵」って、精神安定剤になるんだなあ。
セルフ・ヒーリングページだ。
「AIイメージギャラリー」
久しぶりにがっつりスクリプトを書いた。
手を動かしたのが丸一日。データベースの構成とかWEBのUIの設計、セキュリティ対策なんかをもぞもぞ考えてた時間も入れると3日ぐらいか。
金にもならないことに3日もかけてどうすんだ、とか言われるだろうけど、面白いが最優先。
StableDiffusionで絵を作って、追加していこう。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
GBLシーズン12でACE到達
ポケモンGOの対人戦GOバトルリーグ。9月2日からスタートしたシーズン12でACEに到達。レートは2036だった。
最初のスーパーリーグ開催期間の9月12日に初期レート1950が出てからが悶絶だった。
初期レートが出た日に続けてやったら負け越し、その後ハイパーリーグ開催でも負け越しの連続で1800帯に落ちて抜け出せず。ACEに必要なレート2000が遠ざかるばかりだった。
ラグラージやフシギバナといった対人戦でよく使われるポケモンに混じって、ディアルガやカイオーガなどハイパーリーグの対人戦ではあまり見ない伝説のポケモンが出てきたり、その対応もわからないまま、結局ラグやバナに崩壊させられたり。
わたしはわたしで、負け越しが続くと慌ててパーティを変える。
有名なテンプレパーティをだったり、Youtubeで配信されてるパーティを使ってみたり、右往左往朦朧状態。当然、そのパーティの立ち回り方なんかを理解してるわけじゃないんで、やっぱり勝てずじまい。負け越しを重ねて抜け出せない。
結局最後はハイパーリーグで有名なテンプレの毒悪悪のバリエーションで勝ち上がってどうにかレート2000、ACE到達となった。
とはいえ、タイミング的なものもあって、負け越しの連続だった時期は、たぶん上手いひとたちが同じレートあたりにいて勝てず、上手い人たちが勝ち抜けした今だから、という漁夫の利かな。
にしても、毎回思うんだけど、上手いひとが増えてるなあ。
たぶんGBL、GOバトルリーグに参加してるひとはポケモンGOのごく一部だと思っていて、その人たちの練度習熟度が上がってGBLのレベルが底上げされてるんだろな。
還暦老人にはなかなか厳しい環境になってきた。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
無題
以前、この街に来た時、このあたりは賑やかな商店街だった。
役所の出張所の案内板があったので、IDの更新手続きをしておこうと立ち寄った。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
colabで使うstablediffusionの小ネタ
google colabでstablediffusionを試していて気になったところの小ネタ。
…というか python は初めて。
・画像サイズがデフォルトだと512x512のスクエア
大昔ハッセルとかがスクエアフォーマットだった記憶もあり、これはこれで、好きなんだけど、たとえば、stablediffusionで電書の表紙なんかを作りたいとなった場合、スクエアだとよろしくない。縦長の画像が欲しい。
image = pipe(prompt, height=768, width=512)["sample"][0]
当てずっぽうでやってみたら、たまたま意図通りだった。イメージを作る呪文をパイプで渡すところに高さと横幅を指定してやればOK。ただ、512x1024でやってみたら OUT OF MEMORY でエラーになる。大きなサイズを扱いたければ有料のコースがあるよ、とお知らせ。無料で使わせてもらってるからしょうがない。
・画像ファイルを複数作りたい
一発で期待通りの画像が取り出せることはなく、ひとつのプロンプトで何回も取り出して、その中から選択、となる。一回ずつコマンドを叩くのは効率が悪いので、一回叩いて2つ画像を取り出すようにした。
import time
for i in range(2):
ut=int(time.time())
fname = str(ut) + '.png'
image = pipe(prompt, height=768, width=512)["sample"][0]
image.save(fname)
書き出すファイルは、ファイル名をタイムスタンプにして上書きしないように、ちょっと工夫。
range(2)、2回と言わずもっと回数を増やしてもいいんだけど、とりあえず様子見で。
縦長画像
beautiful concept art of KAWAII,
a girl walks on the street.she is seventeen,
steampunk city,AKIHABARA,
rim light,wide angle,sharp focus,
pixiv rankin,highly detailed,arknights,4K
KAWAIIやpixiv、arknightというキーワードはキャラがそれっぽくイマドキになる呪文。
ポートレイトの呪文も試してみた。
beautiful concept art of KAWAII,
portrait of a girl,full body,glossy eyes, blonde,
high contrast,rim light,sharp focus,
pixiv rankin,arknights,highly detailed,4K
blondeではなくblack hairも試したんだけど、噂通り、金髪の方が安定する。なんでや。
[2022/09/19 23:07:40] 追記。
今日時点、colabで使ってるコードをメモしておこう。
from diffusers import StableDiffusionPipeline
import matplotlib.pyplot as plt
import time
import random
import torch
from google.colab import drive
drive.mount('GoogleDriveのパス')
最初の2行はお約束。
import time
→ファイル名にタイムスタンプを使うのに必要
import random
→ランダムseed生成に必要
import touch
→seedをpipeに渡すために必要
import drive
→生成した画像をgoogle driveに保存するために必要
google driveのパスは「/content/gdrive」とか適当に。
上記、いろいろ必要なものをインポートしたら以下のコードが使える。
pmt_fname = str(int(time.time()))
with open('GoogleDriveのパス' + pmt_fname + '.txt', 'w') as f:
f.write(prompt)
for i in range(4):
seed=random.randrange(0,2147483647,1)
#seed=1349413827
gen=torch.Generator("cuda").manual_seed(seed)
#ut=int(time.time())
#fname = str(ut) + '-' + str(seed) + '.png'
fname = pmt_fname + '-' + str(seed) + '.png'
image = pipe(prompt, height=768, width=512, generator=gen,num_inference_steps=200)["sample"][0]
image.save('GoogleDriveのパス' + fname)
とりあえず、ひとつのプロンプトでタテ768pxヨコ512pxの画像を4枚作る。
ステップ数はデフォルトは50。多くするとそれだけ時間がかかるけど、細部まで作り込まれるということで200にしてみた。
ファイルはgoogle driveに保存される。
タイムスタンプ.txtという名前でプロンプトのテキストファイルを保存
ex.)1663466109.txt
プロンプトのタイムスタンプ+ランダムseed.pngという画像ファイルを生成保存
ex.)
1663466109-1096018807.png
1663466109-1253973203.png
出来上がった絵をみて、惜しいなあ、ここもうちょっと色味が地味なのがよかった、とか思った時に元になったプロンプトが残るので修正変更試行錯誤も簡単になる。そして何より、
StableDiffusionは、同じプロンプト、同じseedを渡すと、同じ画像が生成される。
これがキモというミソだろう。
構図はいいのに、なんでこんな格好してるんだ、とか、ここは空に月が欲しかった、てな時はseedを同じにしてプロンプトを少しいじると同じような構図で違う絵が出てくる。欲しい絵に近づけることが可能になる、かな。
検索するとAIがらみ、技術的な話にたどり着いてしまうんだけど、わたしのような素人はこんぐらいの理解で蛮勇するのでちょうどいい。
以下3枚は同じseedで生成
High quality concept art,
landscape of steampunk city with a monk,
riverside street,river babbling,
sunlight pouring down,
forest of skyscrapers,
a monk walks on the path,
rim light,wide angle,
sharp focus,highly detailed,
digital art illustration,
art station trending,playstation5,4
High quality concept art,
landscape of cyberpunk city with a monk,
TOKYO AKIHABARA,
riverside street,river babbling,
sunlight pouring down,
forest of skyscrapers,
a monk walks on the path,
rim light,wide angle,
sharp focus,highly detailed,
digital art illustration,
art station trending,playstation5,4
High quality concept art,
landscape of deep forest with a monk,
riverside and golden pond,
river babbling,
sunlight pouring down,
sunlight filtering through trees
a monk walks on the path,
rim light,wide angle,
sharp focus,highly detailed,
digital art illustration,
art station trending,playstation5,4
1枚めを最初に生成。
2枚め。スチームパンクじゃなくてサイバーパンクの街に、TOKYO、AKIHABARAも追加。
3枚め。街ではなくて森の中にしようと思ってプロンプト文字列の変更が大きかったようで、Seedの魔力もあまり効かなかった。
もうひとつ。
ネットだと画像の解像度は72dpiでも足りるんだけど、紙印刷だとカラーは最低300dpi、モノクロは600dpi必要となる。google colabで使うStableDiffusionの解像度は72dpi。設定で可能になるかもしれないけど、わからないんで、あれこれ検索。
同じくAIの技術を使って画像をリファクタリングする?アップコンバージョンするReal-ESRGANというのがあった。
これのおかげで512x768 72dpi程度で出力される画像を高精細化して300dpi、紙印刷にも耐える画像として使えるようなった。
変換前
変換後
なんか違いのわかりにくいビミョーな例になってるけど、輪郭あたりをみてもらえると一目瞭然。StableDiffusionとReal-ESRGANの組み合わせでまた可能性が広がる。
StableDiffusionでステップ数をあえて低くして作った画像を、Real-ESRGANで高精細化して細部を作り込むというやり方もできる、かも。
Real-ESRGANの公式ページ
https://github.com/xinntao/Real-ESRGAN
これもオススメ、ていうか必需品。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」