ひまつぶし雑記帖

初めてのchromebook購入

2022/11/30 [10:09:51] (水) 天気

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側で
http://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
で、設定ファイルのエラーを確認するのが吉。

とりあえず今日時点ここまで、かなあ。
公開してるサイトをコピーして、ローカルで動作確認ができるようにしておきたいところだ。image
ホッカペに湯たんぽに電気毛布まで。寒さ対策の達人。

[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でインストール

とりあえず。

»電子書籍制作代行についてはこちら

Chromebook化したvivobookの使用感

2020/12/28 [21:07:56] (月) 天気

WINDOWS10が動かないので、CloudreadyでChromebook化したvivobookの使用感もろもろを、忘れないようにメモ。

【vivobookのスペックのおさらい】

CPU Celeron N4000 1.10GHz
メモリ 4G
ストレージ 32G(eMMC)
ディスプレイ 11.6インチ
解像度 1366x768
バッテリ 最長15時間

WINDOWS10でも、動作そのものはこのスペックでもそれなりに軽快、さくさく動いてたんだよなあ。アップデートができなくて本当に残念。
てことで、CloudReady、ChromiumOSをインストールしてChromeBOOK化してもまったく問題はない。噂通り、起動まで10秒もかからないし、全体に動きが本当に機敏で軽い。…もっとも、アプリらしいアプリを入れてないから、てのがあるな。

オフィス系や画像系はWINDOWS10のDELL inspiron S13にまかせる。
仕事絡みでいうと、office系もadobe系も必須ではあるけど、使用率は作業全体の中の30%程度かな。
WEBサイトの保守やそれを元にした営業資料の作成なんかは、ブラウザとエディタやツールさえあれば用が足りる。バナー画像の作成や資料をエクセルで作るためだけにWINDOWS10で作業。
電子書籍制作については、元データ確認にワード、表示確認にkinoppyが必要なのでそこはDELL inspironのWINDOWS10環境が必要だけど、実際の制作作業はエディタとperlだけあれば十分。

以下、まだまだよくわかってないんだけど、それっぽくそれなりに。

chromebookにアプリをインストールする、というのはなんか違うらしい。
そもそも。パソコンを起動すると全画面でブラウザのChromeが立ち上がっている。ここを起点にGoogleスプレッドシートやドキュメントを利用したり、ほかのことをするには、chromeの機能拡張を入れて作業環境を整えることになるっぽい。

とりあえず何はなくともエディタは必須なので。
https://chrome.google.com/webstore/detail/text/mmfbcljfglbokpmkimbfghdkjmjhdgbg?hl=ja
chromeウェブストアからTextというエディタをインストール。
image
これはまだインストールしただけ。
そしてたぶん、だけど。
WINDOWSやMacの日本語テキストエディタにあるような機能は求められないんじゃないかな。
エディタといいながら、長文や小説なんかをストレスなく書くことができて、検索や置換、アウトラインプロセッサまで備えた多機能を求めるのは無理っぽい。
そういうのはGoogleドキュメントを使いなさいということか。

WINDOWSでいうところのデスクトップは見当たらない。
壁紙を変更したディスプレイ画面がこれ。ショートカットを置いたりできない、ように見える。ディスプレイ上で右クリックをしても壁紙の変更とシェルフを隠すぐらいしかできない。
image
ディスプレイ下部にWINDOWSでいうところのタスクバーのようなものが配置されている。
シェルフというらしい。これを広げるとショートカットなどを並べて置いておけるデスクトップになる。
image
いま並んでるアイコンは
・ファイル(エクスプローラーやファインダーやね)
・ブラウザのChromium
・Text(エディタ)
・設定
・カメラ
・ウェブストア
・VirtualBOX
・サイトブックマークのショートカット
・Linuxアプリ
の9つ。
わかってないのがあるけど、キモはLinuxアプリ。

設定から「Linux(ベータ版)をONにする」をクリックするだけでOKだ。
設定が終わるとターミナルが立ち上がっていて、Linux(debian)の世界が使えるようになる。
image 
ChromeBOOKはここからが始まり、だ。
ChromeBOOK側ではいわゆるアプリはないが、linuxの世界は膨大な量のフリーウエア、アプリがある。ていうか、unix環境にないものはない。

ターミナルで
sudo apt-get update && sudo apt-get dist-upgrade
とやって、最新の状態にアップデートしたら
sudo apt install XXXXXXXX
などと、必要なものをインストールしていく。

今日時点で入れたものが以下。
・apache2
 定番のWEBサーバー
・make、gcc
 フリーウエアのコンパイルに必須
・java(default-jre default-jdk)
 電子書籍確認に必須
・fcitx-mozc
 linux側の日本語入力に必要
・fonts-ipafont fonts-ipaexfont
 日本語フォント
・mate-terminal
 デフォルトのターミナルより便利
・imagemagick
 画像処理

chromeOSではCtrl+F5でスクリーンショットが撮れる(Shift+Ctrl+F5で指定範囲のスクショも撮れる)。撮った画像はダウンロードフォルダに入るので、それをimagemagickでリサイズやトリミング。と、ここまでの作業はすべてchromeBOOKとそのlinux環境で完結。

これだけでもろもろ揃って、使えるんだからほんとありがたみしかない。

開発環境、とかいうとエラソだけど。
apache2をインストールしてローカルでWEBサーバーを立ち上げると、一気にいろんなことができるようになる。ローカルにあるHTMLをファイルじゃなくてHTTPアクセスして読める、ということは、CGIを使った動的なページも作成、閲覧できるようになるわけで。
CPANからSQLiteをインストールしたら、データベースも使える。
くそエクセルなんぞ使うヒマがあったら、データベースを使ったほうがよっぽど精神衛生に良い。
(MySQLもpostgresqlもあるけど、さすがにでかいから軽量SQLiteの出番)

ローカルでWEBサーバーを立てたので、データベースの登録や削除更新なんかの操作はブラウザでできる。ブラウザのUIはさすがによく練られてるので、使い勝手が良い、エクセルなんかよりも1024倍使いやすいし、動作も軽い。
image
なので、こんな血圧と薬を記録するデーターベースもすぐだ(ポンコツ

ちなみに。ローカルでは「penguin.linux.test」というドメインでアクセスすることになる。
そのapache2の設定ファイル群は
/etc/apache2にあって、以下の3ディレクトリに入っているものが有効化されている。
/etc/apache2/conf-enabled
/etc/apache2/mods-enabled
/etc/apache2/sites-enabled
デフォルトでは
/etc/apache2/sites-enabled/000-default.conf
が有効になっていて、/var/www/htmlがドキュメントルートに指定されいてる。
これはルート権限がないといじれなくて、いちいちsudoしてエディタを立ち上げるのが面倒くさいんで、homeディレクトリの一部をドキュメントルートとして、/var/wwwにシンボリックリンクを貼ることにした(あまり良くないバッドノウハウ)
CGIも使えるようにDirectoryディレクティブを記載したconfファイルを有効化

DocumentRoot /var/www/doncha.net

        <Directory /var/www/doncha.net>
                AddHandler cgi-script .cgi .pl
                Options +ExecCGI
                AllowOverride All
                Order allow,deny
                Allow from all
        </Directory>


しただけではCGIは使えず、ちょっとハマった。
/etc/apache2/mods-enabledにCGIのモジュールを有効化する必要があった。その他にもHeadersなども有効化する必要があり、しばらくは/var/log/apache2/error.logを眺めるハメになった。
freebsdでやってた時のapacheはhttpd.confひとつでほぼ全部指定できたんだけど、debianのapache2は設定ファイルが細かく分かれていたのでちょっと迷子だった。

こういった設定ファイルをいじったり、スクリプトを書くのはlinux側。
エディタはvimを使っている。vimの設定ファイルは諸説あって試行錯誤中。
vimはクセの強いエディタなので、やっぱりこれで日本語の長文を書いたりするのは厳しいな。

長々と書いたけど。
古くて使えなくなったパソコンがあったら、ChromeOSをインストールすれば使えるようになるので、捨てるぐらいなら試してみても損はないと思うという話。

いや、すばらしいっすよ。

[01/04 04:39:25]
あ。aptでzipを入れるのを忘れてた。
電子書籍のepubファイルを作るのにzipは必須…perlでいけるんだけど、コマンドラインのzipはそれ以外にも何かとあると便利なのでインストール。

»電子書籍制作代行についてはこちら

素人によるSQLパズルゲーム

2015/1/31 [12:49:15] (土) 天気

ここにあるのは素人芸なのできちんと調べるなら
「図でイメージするOracle DatabaseのSQL全集」
http://www.oracle.com/technetwork/jp/articles/otnj-sql-image1-308625-ja.html
をオススメ。

以下は、このORACLEのページを元ネタにして雑記帖のカテゴリをいじくった時のメモ。
(具体的にデータベースの構造を晒すのはセキュリティ的に問題があるような気がするので端折った)

「カテゴリを元に雑記帖の記事をリストアップしたい」

・雑記単位で一意のIDがある
・雑記に紐付くカテゴリがゼロ以上複数個ある

雑記ID本文など雑記内容詳細


という雑記帖詳細テーブル

カテゴリIDカテゴリ内容詳細


というカテゴリ詳細テーブル

このふたつを繋ぐために

雑記IDカテゴリID


という雑記とカテゴリを紐付けるテーブルがある。各々のIDから詳細テーブルがわかるので内容を引っ張りだせる。

「電子書籍」というカテゴリがついた雑記を引っ張りだすには、雑記IDで雑記カテゴリを繋ぐ。inner join、内部結合というやつ。

でシンプルにあっさり。


複数のカテゴリから雑記を引っ張りだすのが少し面倒くさい。

その1 和集合
image
A「電子書籍」か、B「kindle」のどちらかのカテゴリのついた雑記を引っ張りだすには

これでカテゴリに「電子書籍」か「kindle」がついた雑記を引っ張りだせるけど、両方ともついた雑記が2回出てくる。

雑記1電子書籍
雑記2kindle
雑記3電子書籍
雑記3kindle


雑記3のケース。
IDが重複していると、同じ雑記を表示することになってしまうので、重複IDをひとつにするために distinct を使う。



その2 積集合
image
A「電子書籍」とB「kindle」、両方のカテゴリがついた雑記を引っ張りだすには intersect を使ってふたつの検索結果であるテーブルの積集合をとることになるらしい。

1行目のselect文で電子書籍IDのついた雑記を引っ張りだし、3行目のselect文でkindleIDのついた雑記を引っ張りだす。
intersect が、ふたつから共通する雑記IDだけを引っ張りだしている。

この引っ張りだした結果を select で括って条件でフィルタしたり順番に並べたりする。



積集合じゃないけど、両方のカテゴリがついた雑記を引っ張りだすもうひとつのやり方。
ひとつの雑記に「電子書籍」「電子書籍」などとカテゴリは重複しない。ということを前提にすると。

というのもありかも知れない。
・カテゴリに「電子書籍」か「kindle」がついた雑記を引っ張りだす
・雑記IDごとにグループ化=集計する
・集計結果が「2」であればカテゴリがふたつともある
最初はこっちで実装してみた。

intersectを使ってtableをふたつ結合するのは処理が重い=遅いんじゃないかと思ったんだけど、計測してみたら全然差がなかった…たかだか(現状)2700程度の数だし。
それなら、カテゴリの重複はない、などと前提条件がつくよりは素直にテーブルを結合させた方が安心安全、かな。


http://t2aki.doncha.net/index.pl?cat=5%2C43
↑カテゴリをコンマで繋いで複数カテゴリのリストアップ。
これは「日野裕太郎」と「doncha.net」の組み合わせ。

日野裕太郎は紙本(商業・同人)があるし、ウチ以外からの電子書籍もあるので細かいコンロールをしたかったんだよなあ。

いろんな場面でカテゴリの組合せが使えるのがスゲーありがたい(自画自賛芸)


perl にしろ SQL にしろ、ネットの情報・紙の解説本が豊富なので、わたしのような素人なら素人なりにレベルに応じて使えるので本当に助かります。

»電子書籍制作代行についてはこちら

読書・蔵書記録のための本のデータ

2015/1/30 [20:36:11] (金) 天気

「何を今さら」で「大昔からあちらこちらで語られてる」ネタなんだけど、本のデータについて自分備忘録。
図書分類は知らなくても、ECで5年やってたことがあるので、商品のデータ構造やその表示について、という側面から。

本が好きな人は、読書・蔵書記録をつけるのも好きであろうと思う。たとえばWEBサービスを利用したり、パソコンでソフトを使ったり、手書きでノートにつけたり。

本の最低限のデータをエクセルにすると、ありがちなのはたぶんこんな感じ。

タイトル著者名
サイボーグブルース平井和正
復活の日小松左京
襲撃のメロディ山田正紀
おかえりください日野裕太郎

タイトルと著者名があれば、それでOKだと思う。

でも、これはあっと言う間に破綻する。
著者が複数の場合があるし、その人数もわからない。

タイトル著者名1著者名2著者名3イラスト
サイボーグブルース平井和正桑田次郎生頼範義
復活の日小松左京
襲撃のメロディ山田正紀
おかえりください日野裕太郎おおぬまひろし

著者欄をある程度人数が入るように作っておくのは無駄だしキリがない。
ここにさらにイラストレーターやカメラマンなどの欄が欲しくなるだろうし、自分なりのカテゴリ欄や感想・メモ欄も欲しくなるのが人情というものだ。そのどれもがいくつの欄が必要になるのかわからない。

1タイトルを1行に納めるのは無理だというのがわかると思う。

なもんで、じゃあ「本ってなぁに」ということから始まるんだけど、別にメタな話ではなくて、具体的な話。

とりあえず「本というのはタイトルにいろいろくっついたデータの集り」ということにしておく。
(本に限った話じゃないとか、タイトル改題とかどうすんのとかは無視)

タイトルサイボーグブルース

これさえあれば、付随するデータはバラで用意しておくといろいろ捗る。

タイトルサイボーグブルースいろいろ平井和正これは何?著者名

とか

タイトルサイボーグブルースいろいろ桑田次郎これは何?著者名

とか

タイトルサイボーグブルースいろいろ生頼範義これは何?イラスト

とか

タイトルサイボーグブルースいろいろSFこれは何?カテゴリ

とか

タイトルサイボーグブルースいろいろハードボイルドこれは何?カテゴリ


「サイボーグブルース」というタイトルを持つデータを集めれば「サイボーグブルース」という本ができあがる。著者の人数の制約もなく、イラストの他に「いろいろ」に出版社や定価なんてのを追加するのもスグ。

今度は逆に「いろいろ」の中から「平井和正」を集めれば、「サイボーグブルース」や「死霊狩り」「狼男だよ」などの「タイトル」をリストアップできる。
さらにそのリストアップされた「タイトル」にくっついている「いろいろ」の「カテゴリ」を集計して「平井和正」の傾向を見ることもできる。

…なんだ、リレーショナルデータベースの話かよ、というのはその通りで、本のデータをゴソゴソいじるのにリレーショナルデータベースはちょお便利。ウチのサイトのデータベースはまだあれこれあるんだけど、基本はこの程度。

ただ、気楽に使えるリレーショナルデータベースというのが検索しても見当らなかった。
わたし自身はWEBで定番のデータベースを使ってるけどちょっとハードルが高いかなぁ。パソコンで使えるものとなると、ACCESSやファイルメーカーらしいんだけどお値段がちっとアレ。

エクセルで表にする時、上記したような形式ではなくてこんな感じにするといいかもしれない。

タイトルいろいろこれは何?
サイボーグブルース平井和正著者
サイボーグブルース桑田次郎著者
サイボーグブルース生頼範義イラスト

ぱっと見、わかりにくいけど「データ」→「フィルタ」をいじるとデータをいろいろな切り口で眺められるので面白いですよ。


…て、SQLの和集合、積集合や内部結合についてメモしようと思ってたのに、なんでこんなこと書いてんだか。SQLパズルについてはまたそのうちメモしよう。

»電子書籍制作代行についてはこちら

web小ネタ:コピー禁止など

2013/3/20 [10:09:04] (水) 天気

kindleやibooksの新刊・既刊情報を掲載、表紙画像をそれなりの大きさで表示しようと思った時に、まんまimgタグで表示させるのはちょっと無造作すぎるなあ、と。自分で描いたイラストならともかく、お願いしたりいただいたりしたイラストだ。

そこで「画像コピー禁止」を検索して見つけた下記の方法で細工。

・画像の上で右クリック禁止伝統技
「onContextMenu="return false"」

・画像を簡単にドラッグ&ドロップできないように。
 表示する画像はcssで背景に指定して、表側のimgタグには透過gifを表示。

この方法を見つけたときは、よく思いつくなあ、なるほどなぁと呆れつつ感心。webなんて表示しているものはどうやったって取得されちゃうんでこの方法もその場しのぎ(例えばhttpでソースを取得しちゃえば画像ファイルのありかはわかる)

また、コピーされたくないテキストは以前に書いた 「個人情報をちょっと防衛」 のように。
・コンテキストメニューで右クリックは禁止
・ajaxを使って呼び出されるスクリプトでリファラなどをチェックして表示するorしないを制御
・表示してもjQueryで 「.bind("copy", function () { return false})」コピー禁止
にしておく。
マウスの右クリックもできず、キーボードショートカットでのコピーもできない状態になる。
右クリックできるように、とJavascriptを切ると当然ながらAjaxが効かないので、表示すらしない。

WEBは性善説を根拠にフリーであるべき(お金・対価がタダという意味ではない)と思うんだけど、残念ながらなかなかそうもいかないようで、ちょっとだけ。

ついでに。

ここんとこ雑記帖が重い=表示が遅いのでイラっとしていた。ここで何度も言うけど「WEBは早さが唯一の絶対正義」そんな状態なのに、各記事にカテゴリをつけるため、データベースにカテゴリ用テーブル、カテゴリと記事のリレーション用テーブルを追加。そりゃまた当然遅くなる。

SQLを改めて見てみたらば、indexをつけてたと思ってたテーブルの(いろんなSQL文の where句で最もよく使う)カラムにindexがついてないのに気づいて慌ててつけた。
結果、それまで体感で表示まで5〜7秒かかっていたのが3〜5秒に短縮された。
それでも遅いんだけど。これ以上の短縮はキャッシュで中間コードを保存するとか、静的ページを生成するとかになる。スクリプトの書き換えや運用も含めて考えなきゃいけないかな。
もしくはajaxのコンテナだらけにする…って、ajaxにすると検索エンジンが拾えないので却下だ。


サイトの細工やチューニングは、考え出すと・やりだすと面白いもんです。

[03/20 18:27:21] 追記。ということで、一部のパーツ単位で生成しておいて、DBからデータを取るのではなく、静的パーツを呼び出すだけにした。ほんの少し早くなった、ような気がする。


[2013/12/30 09:54:31] 追記。
直リンク禁止の定番も。
.htaccessで制御する(Apache)

.htaccess を置いたディレクトリ以下に適用される
・リファラをチェックして、自サイトからのアクセスなら 「is_ok」を設定。
・この指定の優先順位は、1)拒否 2)許可。
・すべてのアクセスを拒否する
・is_ok が環境変数に設定されていれば許可する


[2014/01/13 12:38:03]追記。
.htaccess でキャッシュコントロール

・cssやJavascript、画像などは1週間キャッシュする
・perlやphpはキャッシュしない

 

»電子書籍制作代行についてはこちら

創作文芸見本誌会場HappyReading

2011/12/17 [17:40:42] (土) 天気

必要だろうと思った機能を最低限つけて、バグをひとつずつ潰して、まず最初の完成形となった。

とりあえずのメモ。

データベースは、mysqlではなくてsqlite。
どうして?lolipopのmysqlは重いので、ページ表示がもっさりしてしまう。レスポンスが早い、というのがwebの絶対正義。
sqliteは複数の同時アクセスに弱いという評判だけど?確かにその通りらしいけど、ウチぐらいのアクセスなら十分。むしろファイルひとつがそのままDBなので、バックアップなどのメンテがらくちん。そっちのメリットのほうが大きい。
mysqlとかpostgresqlのようなRDBが必要になったら、そのときそのままSQLなどは移せる。

データ構成は。
基本的に、一意に決まる本の情報以外の付属情報はすべてタグとして処理。著者やカテゴリなど。でも、イベント情報関係は別テーブルで管理(同人誌の場合、イベント参加情報は重要なので)
詳細ページを閲覧された回数や立ち読みされた回数はまた別管理で。モチベーションのため。

ページ表示に使うためのマスターテーブルは特になくて、idではなくて、ユーザー入力によるテキストのタイトル部分をキーにしている、というのが後々禍根を残しそうな予感。でもたぶん、そのおかげでおそらく内部SEO対策となる、はず。urlとページタイトルとコンテンツのh1の関連が強くなるし、そこで使われるキーワードがアンカーテキストとしてページ上部に出現する、いわゆるSEOとしては理想的な構造。

サイトの目的とか。
立ち読みをしてもらう。
面白かったら作者やサークル、カテゴリで芋づる式に次の立ち読みをしてもらう。
動線はそのために作る。それによって結果として内部SEO対策となる。

表示側。
一覧ページと詳細ページだけ。あとは、利用規約など。
サイトのトップページは必要ない?意図を持ってなにかをおすすめするとか企画するようなサイトではない。なので、単純にひらたく、なんらかの一覧ページをトップにすればいい。
ページの目的は立ち読みのテキストを読んでもらうことなので、一覧も詳細もワンクリックで立ち読みが開くように。
サークル名や著者名など本に付属するデータはすべてリンクとする。面白かったら芋づる式に次を読んでもらいたいから。

登録側。
テーブル構造のまんま。必須項目などはjavascriptでUIを作る。必須入力項目が多いので、少しでも便利にしておきたいところだけど、まだまだ検討材料が多い。

同人誌に限った話ではなくて。デザフェスなんかを見て感じることで。
世間とか時代とかに、もし閉塞感があるとすれば、これからは組織に頼らない個人こそが勝負できるんじゃないかと思う。

 

»電子書籍制作代行についてはこちら

profile

profile

 
doncha.net
名前:
飯田哲章
mail:
t2aki@mrh.biglobe.ne.jp
twitter:
t2akii

WEBサービス制作/電子書籍制作

検索
<<2023/2>>
   1234
567891011
12131415161718
19202122232425
262728

リンク

WINDOWS版サウンドノベル
おかえりください PC WINDOWS版サウンドノベル
『おかえりください』体験版

[9 Page] »
1 2 3 4 5 6 7 8 9 10

TOTAL:2926

2023 (2)
1 (1)
2 (1)
2022 (16)
1 (1)
3 (2)
6 (2)
7 (1)
8 (4)
9 (2)
10 (1)
11 (2)
12 (1)
2021 (12)
1 (3)
2 (1)
6 (1)
8 (2)
9 (1)
10 (1)
11 (2)
12 (1)
2020 (18)
1 (2)
2 (6)
4 (1)
6 (1)
7 (2)
8 (2)
12 (4)
2019 (17)
1 (3)
2 (4)
3 (2)
4 (2)
5 (1)
6 (1)
8 (1)
10 (1)
12 (2)
2018 (21)
1 (3)
2 (2)
3 (2)
4 (1)
5 (1)
6 (6)
8 (1)
9 (1)
10 (2)
12 (2)
2017 (32)
1 (2)
2 (1)
4 (2)
5 (1)
6 (6)
7 (3)
8 (5)
9 (3)
10 (2)
11 (2)
12 (5)
2016 (41)
1 (5)
2 (5)
3 (2)
4 (3)
5 (4)
6 (6)
7 (2)
8 (2)
9 (3)
10 (1)
11 (4)
12 (4)
2015 (99)
1 (11)
2 (12)
3 (9)
4 (6)
5 (8)
6 (8)
7 (3)
8 (5)
9 (16)
10 (6)
11 (1)
12 (14)
2014 (112)
1 (16)
2 (5)
3 (6)
4 (12)
5 (16)
6 (19)
7 (9)
8 (6)
9 (4)
10 (8)
11 (6)
12 (5)
2013 (145)
1 (24)
2 (15)
3 (18)
4 (23)
5 (14)
6 (11)
7 (7)
8 (11)
9 (5)
10 (4)
11 (6)
12 (7)
2012 (103)
1 (1)
2 (1)
3 (4)
4 (3)
5 (7)
6 (26)
7 (17)
8 (5)
9 (8)
10 (10)
11 (11)
12 (10)
2011 (54)
1 (4)
3 (7)
4 (4)
5 (14)
6 (6)
7 (3)
8 (3)
9 (1)
10 (4)
11 (2)
12 (6)
2010 (70)
1 (12)
2 (7)
3 (6)
4 (6)
5 (3)
6 (10)
7 (6)
8 (4)
9 (3)
10 (4)
11 (3)
12 (6)
2009 (144)
1 (15)
2 (12)
3 (12)
4 (6)
5 (15)
6 (6)
7 (10)
8 (9)
9 (17)
10 (12)
11 (14)
12 (16)
2008 (148)
1 (10)
2 (6)
3 (10)
4 (11)
5 (13)
6 (10)
7 (13)
8 (19)
9 (18)
10 (12)
11 (13)
12 (13)
2007 (106)
1 (7)
2 (5)
3 (3)
4 (7)
5 (5)
6 (9)
7 (8)
8 (13)
9 (18)
10 (11)
11 (8)
12 (12)
2006 (158)
1 (28)
2 (28)
3 (25)
4 (7)
5 (9)
6 (7)
7 (12)
8 (13)
9 (10)
10 (7)
11 (6)
12 (6)
2005 (350)
1 (31)
2 (26)
3 (26)
4 (27)
5 (29)
6 (30)
7 (32)
8 (30)
9 (30)
10 (32)
11 (29)
12 (28)
2004 (292)
1 (24)
2 (24)
3 (29)
4 (27)
5 (28)
6 (25)
7 (26)
8 (24)
9 (12)
10 (19)
11 (26)
12 (28)
2003 (318)
1 (22)
2 (25)
3 (21)
4 (28)
5 (28)
6 (28)
7 (28)
8 (29)
9 (26)
10 (29)
11 (28)
12 (26)
2002 (317)
1 (29)
2 (26)
3 (26)
4 (25)
5 (28)
6 (30)
7 (27)
8 (21)
9 (25)
10 (27)
11 (28)
12 (25)
2001 (277)
1 (17)
2 (21)
3 (23)
4 (20)
5 (31)
6 (18)
7 (26)
8 (25)
9 (29)
10 (19)
11 (24)
12 (24)
2000 (53)
6 (9)
7 (4)
8 (2)
9 (3)
10 (1)
11 (15)
12 (19)
1999 (3)
7 (1)
10 (2)
1998 (18)
9 (9)
10 (7)
11 (2)