ひまつぶし雑記帖

ホームページを作った

2024/10/15 [22:17:47] (火) 天気

タイトルまんま。ホームページを作った!
ブログだのSNSだの、インターネットで承認欲求とか小銭稼ぎとか、面倒くさいというかしんどい。いや、五月蝿い。

デザインもオサレでゴージャス、それでなおかつ、きちんと情報が整理されたシンプルな構成で、動線設計なんかもユーザーフレンドリーで、とか、そういうのももういい。
アクセスがたくさんあって、いいねされたり言及されたり、そんなのももうどうでもいい。

ということになった(自分協議の結果)
で、アクセスログも取らない、シェアボタンも設置しない、情報も乱雑で、デザインなんかテキトー、たぶん誰にも見られないものを作って自己満足してしまおうと。

それって今どきのブログやSNS、「WEBサイト」じゃなくって、80年代の「ホームページ」
初めてbiglobeでホームページを作った時のことを思い出しながら、改めて「ホームページ」を作った。
当時はそれこそわけもわからず、何になるのかもわからず、とりあえず参考書を見ながらエディタでHTMLを書いてFTPでアップロード。ブラウザで自分の作ったものが表示されるだけで嬉しかった。いやマジでめっちゃ嬉しくて、ディスプレイを見ながらにやにやしてた。

今どきのインターネッツだとそれだけじゃダメで、拡散してたくさん見てもらってこそ、とか。ぶっちゃけ、それに踊らされて躍起になったこともあった。仕事でSEOなんてのを担当してたこともあったしなぁ。

ホームページのタイトルは「On Golden Pond」
これはヘンリー・フォンダ、ジェーン・フォンダ親子共演の映画『黄昏』の原題。
デイブ・グルーシンの音楽と、めちゃくちゃ綺麗な絵が印象的で大好きな映画。biglobeに作った初めての「ホームページ」のタイトルに使わせてもらった。
今回もそのタイトルにした。

回帰、というか。
還暦を過ぎて、もういい加減、かなり歳を食ったことを自覚実感したなあ、ということかもしれない。
image

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

サブルーチンの確認

2024/10/7 [09:36:50] (月) 天気

perlで自作したおひとり様ActivityPubサーバーはその後も増築改築をちまちま続けていて、例によってその場での思いつき、やっつけ仕事の現物合わせ仕様で、わけわかめ状態となっている。

Activityを約束事どおりに対応するモジュール(pmファイル)で、いったい何をしてるのか。
もうすでに忘れてる自分がいるので、サブルーチンの洗い出し用にテキトーなスクリプトをでっちあげた。という覚え書きが今回のエントリ。

#!/usr/bin/perl
use strict;
use utf8;
use Encode;
my $f = shift(@ARGV);
if(! -e $f ){
    printf qq{Not Found pm %s\n}, $f;
    exit;
}
open(IN, $f) || die;
my $name; my @buf=; close(IN);
foreach (@buf){
    if( m!^sub (.+) *\{! ){
        $name->{$1}++;
    }
}
printf qq{sum : %s\n}, scalar( keys %{$name} );
foreach my $sub (sort keys %{$name}){
    my $pm = join('', @buf);
    my $cnt = $pm =~ s!$sub!!g; 
    printf qq{%s :\n}, $sub;
    my @called; my $zzz;
    if( $cnt > 1 ){
        my $subname;
        foreach (@buf){
            if(m!^sub (.+) *\{!){
                $subname = $1;
                next;
            }
            if( m!\$self\-\>$sub! && !$zzz->{$subname}++ ){
                push(@called, $subname);
            }
        }
    }
    printf qq{\t%s\n}, join("\t", sort @called);
}


・サブルーチンの総数
・サブルーチンの名前
・サブルーチンを呼び出しているサブルーチン
ぐらい見えれば、そこそこ役に立つかなあ、と。

文字列検索でひっかけてるだけで、signなんかはサブルーチン呼び出しじゃない部分にもヒットする。本当は動かしながらcaller()でチェックするのが確実…だけど、ざっくり見るだけのためにあちこちにcaller()を仕込むのはうっとーしいんで却下。

使い捨てのつもりで書いたスクリプトだけど、思ったよりちゃんと見えるようにしてくれたので自画自賛&エントリとして書き起こし


10/4、ポケモンGOの対人戦GBLでACEに到達。
初期レートが1984で、ACE到達時のレートは2007。GBLで遊んでいて、ずっと継続してACEにたどり着いてたんだけど、前期初めてACEに到達できず、今期もやべえかなあ、と思ってたので、ほっとひと息。
image
まる6年続いているゲームで、まだ全然飽きないのがすげーす。

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

ファイル同期のためのrsyncで使うオプション

2024/9/18 [23:46:22] (水) 天気

仕事で使っているchromebook2台でスクリプトファイル類を同期しておきたい。
そのためにメイン機から更新のあった(タイムスタンプが新しい)ものだけをコピーしたい。

てな時にlinuxだとrsyncが便利。
scpやsftpもあるけどscpもsftpもタイムスタンプを比較できないっぽいので、今回のような場合はrsync一択。
unix系ツールの例に漏れず、rsyncもオプションが豊富ですぐにわけわからなくなってるんで、自分の使う範囲のオプションをメモ。

rsync --include="*.pl" --include="*.pm" --exclude="*" -auv -e "ssh -p 10022" [ローカルディレクトリ] ユーザー名@192.168.0.NN:[リモートディレクトリ]


--incluce="*.pl"
--incluce="*.pm"
同期したい対象ファイルは拡張子が「pl」か「pm」
--exclude="*"
includeしたもの以外は同期対象外
↑これがわかりにくくて、includeとexcludeの順番がだいじ。
まず、対象を指定して、最後にそれ以外全部除外という命令になっている、らしい。

-a
以下全部をまとめて指定
・ディレクトリを再帰的に処理する
・シンボリックリンクをシンボリックリンクのままコピーする
・パーミッションを保持する
・タイムスタンプを保持する
・所有グループをそのまま保持する
・所有者をそのまま保持する(自分以外の所有者を保持するにはroot権限が必要)
・デバイスファイルや特殊ファイルを保持する(「--devices --specials」相当

-u
・更新のあったものだけをコピーする

-v
・転送状況を表示する

-e "ssh -p 10022"
・sshで接続する。ポート番号指定つき

わたしの場合は、以上で意図通りに同期される。実際にrsyncを走らせる前に
-n --dry-run
↑このふたつは、どちらもrsyncを走らせるけど、実際はコピーをしない。コマンドが意図したものになっているか確認するために使うオプション。

--delete
↑コピー元になくて、コピー先だけあるファイルを削除するオプション。deleteから始まるオプションはあぶないのでよっぽどのことがない限り使わない。

rsyncコマンドはコピー元、リモートのコピー先、両方に必要。
(リモートにインストールしてなくて、コマンドが見つかりませんとハマったのは内緒)

ローカルにあるディレクトリごと、USBメモリなんかに同期させるだけなら

from=/mnt/chromeos/removable/USBDrive/_works
to=/mnt/chromeos/removable/_TMP/_works
if [ -d $from ] && [ -d $to ]; then
   rsync -anu --delete --log-file=$to/rsync2usb-works.log $from/ $to/
fi


バックアップというより、持ち出して作業する一時的な扱いなので、こういうのは「--delete」をつけて、ローカルにないファイル・ディレクトリはUSBから削除してくれるので便利…でも、くれぐれも「delete」は要注意

[09/19 00:26:35]追記
ディレクトリ指定に注意が必要だった。
ローカルdir1/ リモートdir1
「/」がついてると、ローカルdir1に配置されているファイルがリモートdir1のファイルと同期される。
ローカルdir1 リモートdir1
「/」がついてないと、「リモートdir1/ローカルdir1」とローカルdir1がディレクトリごとリモートdir1の下にコピーされる。

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

chromebookでssh

2024/9/16 [09:47:02] (月) 天気

chromebook同士でファイル共有する方法としてニアバイシェアというのがあるけど、なんか思ってたのと違う。なので、sshで繋いでファイルのやりとりを直接やってしまおう、のメモ。

chromebookを2台使っていて、メインとサブという役割分担。
メインで使っていて作業した内容をサブ機にsshで転送・バックアップしておきたい。

まずはchromebookの設定。メイン機のLinux環境からサブ機のLinux環境に繋ぐためにポート転送を設定する。道路を繋ぐための作業、みたいなもの。

サブ機側のポート転送を設定。
「ChromeOSについて→Linux開発環境→ポート転送」

ポート番号はすでに使われている番号以外ならなんでもOK
sudo less /etc/service
↑これで確認できる。とりあえず10001〜10080のあたりが空いてるので「10022」とした
image
ポート転送を設定することで
1)サブ機のローカルIPアドレス192.168.0.NNにSSHでポート番号を指定してアクセスする
2)サブ機側がポート転送してくれて、サブ機のLinux環境にログインできる

サブ機のLinux環境でsshdサービスを立ち上げる
(サブ機をsshdサーバーにする)

sshdサービスがどうなってるのか確認。
sudo systemctl status sshd.service
この時点では「Active: inactive (dead)」という表示が出ている。ssdは立ち上がっていないので、sshdを立ち上げるために以下の作業。
(sudo、root権限で/etc/以下のファイルを編集することになるので、念のためバックアップを取っておくのが安心安全)

「/etc/ssh/sshd_not_to_be_run」というファイルがあるとsshdが立ち上がらないらしいので削除
sudo rm /etc/ssh/sshd_not_to_be_run

「/etc/ssh/sshd_config」というのがsshdの設定ファイル。

Port 10022
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
PermitRootLogin no
UsePAM no
AcceptEnv LANG LC_*


chromebookのポート転送で指定したポート番号を記載。それ以外は呪文でOK(ルートでアクセス許可するかとか)で、上記以外はデフォルトのままでOK.

設定ファイルを編集したらsshdサービスを立ち上げる
sudo systemctl restart sshd.service
立ち上がってるか確認
sudo systemctl status sshd.service
「Active: active (running)」という表示が見えたら無事sshdのサービスは立ち上がっている。

サブ機のLinux環境のHOMEディレクトリに「.ssh」というディレクトリを作成。
chmod 700 .ssh
として、権限をオーナー限定にしておく。

メイン機でsshの秘密鍵と公開鍵を作る
ホームディレクトリで
ssh-keygen
途中パスフレーズ聞かれて、入力すると「id_rsa」(秘密鍵)「id_rsa.pub」(公開鍵)がHOMEディレクトリの「.ssh」ディレクトリに作られる。公開鍵以外の権限はオーナー限定(0600)

メイン機で作った公開鍵をサブ機のHOMEディレクトリの.sshディレクトリにコピー
scp -P 10022 id_rsa.pub ユーザー名@192.168.0.NN:~/.ssh/.
メイン機で作った公開鍵をサブ機にコピーしたら、サブ機で作業

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys


サブ機の.sshディレクトリの「authorized_keys」というファイルに公開鍵を登録(追記コピーしてるだけ)

以上でsshは繋がる。
ssh -p 10022 -i id_rsa.pub ユーザ名@192.168.0.NN
とか
ssh -p 10022 -l ユーザー名 192.168.0.NN
メイン機からサブ機にログインしてごそごそいじったり

scp -P 10022 -r work ユーザ名@192.168.0.NN:work
などとメイン機からサブ機にファイルコピーしたり

sftp ユーザー名@192.168.0.NN:DIR
とか、sftpでログインしてアップしたいディレクトリに移動してから
put -r DIR/
などとメイン機からサブ機にディレクトリごとアップしたり、

ファイル操作がらくちんになった。
とはいえ、コマンドラインなので、上書き事故には気をつけないといけない、よなあ。

ちなみに注意するところがあって。
linux開発環境も、ポート転送も手動。chromebookを立ち上げたり、再起動したら
・Linux開発環境を立ち上げる
・ポート転送をONにする
…というのもあって、どうせ確認するわけだし、IPアドレスも自動割り当てのままにした。

以下のサイトを参考にさせていただきました(多謝
【Chromebook】SSHサーバの設定
ChromebookのLinuxコンテナにSSHでログインする

最近のネタ切れの時の弁当は2色、3色弁当。
image
なんかこういう手抜きの方が美味しかったりするから、ちょっと悔しい。

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

ActivityPubの投稿公開範囲

2024/9/4 [08:03:28] (水) 天気

あれ、どうするんだっけ?と忘れがちでしょっちゅう検索してしまう投稿の公開範囲をメモしておこう(間違ってるかもしれない…気がついたら修正)

ActivityPubで、Fediverseに投げ込んだNoteの公開範囲を選べる。

・全公開
 誰でも見ることができる。
 投稿が流れるタイムライン
 →連合、ローカル、ホーム
・未収載
 誰でも見ることができる。
 投稿が流れるタイムライン
 →ホーム
・フォロワー限定
 フォロワーだけが見ることができる
 投稿が流れるタイムライン
 →ホーム
・ダイレクト(DM)
 指定したお相手だけが見ることができる
 タイムラインには流れない
※「ホーム」というのは、自分・フォロワーの「ホームタイムライン」

「未収載」と「フォロワー限定」がわかりにくいのでメモ

・未収載は
フォロワーのホームに投稿が流れる。自分をフォローしていないユーザーが、フォロワーのホームに流れている自分の投稿を見ることができる。
・フォロワー限定は
フォロワーのホームに投稿が流れる。自分をフォローしていないユーザーが、フォロワーのホームを見ても、自分の投稿は見えない。

投稿の公開範囲と宛先の組み合わせ
(Activityの指定)

公開/宛先tocc
全公開Publicfollowers
未収載followersPublic
フォロワー限定followersなし
ダイレクトお相手のinbox指定なし



ActivityPubの約束事として公開範囲については上記で全部。
このほかに、もっと細かく公開範囲を指定できるサーバーもあって。

「Fedibrid」https://fedibird.com
「公開/未収載/フォロワー限定/相互フォロー限定(対応サーバーのみ)/サークル/DM/自分限定」
↑こちらは、今日時点で投稿の公開範囲は7種類から選べる。

公開範囲は意識しておきたいところだけど、うっかりやらかしてしまうので、自戒を込めてのエントリ。

ウチのおひとり様ActivityPubサーバーは。

設定ファイルのpublic_levelで公開か未収載を選択する。
・現在のデフォルトは公開
 「to」がPublic、「cc」がわたしのfollowers
・Mentionとダイレクトは「to」がお相手のinbox
・Mentionの「cc」はわたしのfollowers
・ダイレクトの「cc」はなし


image
神田明神の妖怪展。有名なガシャドクロを始め、規模こそ小さかったけど、面白かった。
常設展もかなり面白かった。オススメ。

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

小ネタ:pdftotextで文字データを抽出

2024/8/28 [15:40:57] (水) 天気

元データがPDFで、圏点(傍点)やダッシュをPDFから検出する必要にせまられた。
目視確認などありえないんで、テキストデータとして取り出して検索しよう、というのが今回のエントリ…というかエントリにするまでもない内容なんだけど、たぶんそのうち忘れるんで、メモ。

PDFから文字情報だけをひっぱりだすのに定番の「pdftotext」というツールを使う。
perlだけでもできそうなんだけど(PDF::API2あたり)ちょっと時間も押してるんで、外部ツールを間に挟むことにした。

まずは肝腎のpdftotextのインストール。これがpoppler-utilsというパッケージだなんて検索しないとわからなかった(pdftotextというパッケージがあるもんだと思ってた)

以下のコマンドラインでインストール

sudo apt-get install poppler-utils

unix系のツールの例に漏れず、これもいろんなオプションが用意されてるけど、今回必要なのは文字情報だけ。レイアウトデザイン情報やなんかは不要。
rawオプションをつけて利用する。
image
たとえば「kappa.pdf」の文字情報を抜き出すのは

pdftotext -raw kappa.pdf

こうすると「kappa.txt」に文字情報を吐き出す。ただ、これだとひと文字ずつだあーっと出力されるので、ここからがテキストデータを扱わせたら最強のperlの出番。image 
pdftotextの出力には改ページがつくので、そこで改行すれば「それっぽい段落」ごとに見えるひとに優しいテキストファイルとなる。

open(P, '-|', 'pdftotext -raw kappa.pdf - ' ) || die;
binmode STDOUT => ":utf8";
open(OUT, '>' , 'kappa.txt') || die;
binmode OUT => ":utf8";
while(

){
    my $line = Encode::decode('utf8', $_);
    $line =~ s!\r?\n!!;
    $line =~ s!\x{C}!\n!;
    print OUT $line;
}
close(OUT);
close(P);


特筆すべきようなスクリプトじゃないんだけど。
perlは外部コマンドの「標準出力」をパイプで受け取って加工整形できる。

open(P, '-|', 'pdftotext -raw kappa.pdf - ' ) 

openの
・第2引数で、標準出力を受け取りますよ、という指定
・第3引数はpdftotextの結果を標準出力に出すからね、という指定
これだけでそれっぽい段落にわけたテキストファイルを作ってくれる。

そうしたら、あとは出力されたテキストファイルからダッシュや圏点(傍点)っぽいものをperlで検知するだけ。imageこれはワードで作ったPDFで「、」が圏点となっている。inDesignで作られたデータだと「0」(ゴマ)「4」(ドット)となる。

直接触ってもいいんだけど、一度テキストファイルに吐き出したほうがなにかわからないことが起こった時に便利なので、こういう仕様、段取り。

このスクリプトのおかげで抜け漏れは捕捉できるんでずいぶんラクになった。

以前、目視確認とか無駄なだけだし、んなもんツール作ってやればいいじゃん、とか言ったら、そしたら仕事がなくなる、目視確認手作業修正は必須だ、と言われて心底、呆れた。
カネをもらった上で、人間の作業=ミスが入り込む原因になる工程を入れるって、いろいろ悪質すぎる。
ITといってもピンキリで、こんなのが入り込んでるから要注意。
そもそも、その程度の仕事なんて、なくなっても問題ないし、特に困らない。

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

profile

profile

 
doncha.net
contact:
»運営者
@t2aki@tokoroten.doncha.net

ため池

[2025/01/13 15:31]
ダイソー中華包丁をとりあえず所定の位置に…て、デカいなw
藤次郎のペティナイフ、貝印の三徳包丁と比べると、嘘みたいにデカい。これ、レギュラー入りしてもらわないと困るぞ
...

[2025/01/13 13:45]
ダイソーの500円中華包丁を買ってみた。
デフォルトの切れ味はあまり期待しないほうがいいらしい。実際に使ってみて、トマトを潰したり、長ネギが繋がるようだと研ぐか。
厚みも重さもあるんで、鶏胸の皮を肉ごとブツっと切 ...

[2025/01/13 13:00]
今日は13891歩
鉄塔はとりあえず撮っておくでしょ
#ウォーキング

@t2aki@tokoroten.doncha.net

検索
<<2025/1>>
   1234
567891011
12131415161718
19202122232425
262728293031

リンク

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

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

TOTAL:3010

2025 (3)
1 (3)
2024 (30)
1 (2)
2 (2)
3 (1)
5 (1)
7 (2)
8 (2)
9 (3)
10 (4)
11 (8)
12 (5)
2023 (53)
1 (1)
2 (5)
3 (1)
4 (1)
5 (3)
6 (9)
7 (9)
8 (6)
9 (5)
10 (3)
11 (2)
12 (8)
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)