お知らせ

現在サイトのリニューアル作業中のため、全体的にページの表示が乱れています。
投稿日:
ソフトウェア::CMS::adiary

skel

  1. 書き替えたいコードの所在をgrepする
  2. skel/の中に該当する行を見つける
  3. skel.local/に該当ファイルをコピーする
  4. 該当行を編集
  5. ブログの管理>ブログを再構築する

plugin

skel書き換えでうまくいかない場合

  1. 書き替えたいコードの所在をgrepする
  2. plugin/配下のmodule.htmlに該当する行を見つける
  3. 該当行を編集
  4. プラグイン設定>リセット>再インストール

参考

  • adiary開発マニュアル
    • 大まかな全体の考えを知るのに役立つが細かい情報はなく、リファレンスとしては微妙
投稿日:
OS::Windows
  1. コントロールパネルから資格情報マネージャーを開く
  2. NASの資格情報を消す
  3. 開いているエクスプローラーを全部閉じる
  4. コマンドプロンプトを起動する
  5. net useと入力してログアウトしたいNASのネットワーク名を控える
    net useを叩いた結果
  6. net use 削除したいNASのネットワーク名 /deleteを入力する
    削除コマンドを叩いた結果
  7. エクスプローラーからNASを開くと再ログインの要求が出る
    1. ログアウトできていないときはF5リロードしたり何度かエクスプローラーを再起動するとたぶん行ける
投稿日:
ソフトウェア::CMS::WordPress

前々からGoogle Search Consoleがエラーでクロールできないと言っていたのだが、最近サイトがダウンしている瞬間に出くわすことが増え、やっと意味が分かった。負荷によってMySQLに繋がらない状態になっているのだ(ブーストすると解除されたので、恐らく何かしら制限かかけられているのだろう)

かつてMovaleTypeからBlognに移った時はテキストDBだったので軽くなり、BlognPlusに移った時にDBがMySQLになったのでサイトが重くなったのは記憶に深いし、WordPressにしてさらに重くなったのも記憶にある。うちはさくらのレンタルサーバーで共用なのでDBが重いのだと思う。

私が遭遇するのは深夜帯が多いが、このサイトはIT企業の業務時間中にアクセスが増える傾向があるので、そういったケースでも落ちている可能性がある(ログを見ていなないので推測だが)

更に昨日WordPressのテーマをアップデートしてからYet Another Related Posts Plugin (YARPP)のカスタムテーマが意味不明なエラーを吐き、動かなくなった。

エラーの内容は以下の通りだが、意味不明である。同じ行で同じ名前の関数が再定義されているとか言われている。

Fatal error: Cannot redeclare get_post_data() (previously declared in /wp-content/themes/sango-theme-child/yarpp-template-thumbnail.php:3) in /wp-content/themes/sango-theme-child/yarpp-template-thumbnail.php on line 3

というわけで、WordPressに見切りをつけるかどうか迷っていた矢先だったので、もうWordPressを捨てようと思った。早々にMarkdown parserを書いてadiaryに乗り換えるか、或いは表示が崩れている今でも乗り換えたほうがいい気がしてきたくらいだ。

週末を目途にadiaryへの移行作業を行おうと思う。幸いなことにWordPressからadiaryにリダイレクトするための.htaccessは2024/01/23の記事分までは作ってあるので、ちょっと足せば使える。

markedをadiaryのMarkdown parserに噛まして何とかするのも試したのだが、さつき構文がHTML化されてadiaryのパーサーが上手く食べてくれず、頑張って再パースする必要がありそうなので諦めた。そもそもMarkedのパーサーも地味にバグっていたり、注釈の出力が結構不便だったり不満はあるので、自分でパーサーを書くのは全然ありだと思った。或いはEditor.mdをadiaryにねじ込んで、どうにかしてさつき構文のパーサーを組み込めれば、それも一つだと思う。(が、こいつはクライアントサイドでHTMLを捏ねるのでadiaryの仕組みと相性が悪い)

何よりパーサーを書こうとしただけでブログ記事はポコポコ湧くし、Perlは面白いしで、いろいろ発見があり、退屈な日常が無駄に忙しくなったので、これは是非ともやっていきたいし、やろうという感じで、一旦WordPressを捨てadiaryに移ろうと思う。しばらく色んな記事で表示が崩れるだろうが、現状でもサイト自体にアクセスできないことがあると考えれば大差のない話だと思うし、どうでもよくなった。

むしろ能動的にサイトをいじれるほうがいいし、ある日突然謎のアップデートでサイトが壊れるとか、そういうのは要らないので、平穏なadiaryに移れれば精神的にも安定できるかもしれない。正直WordPress 5でGutenbergが実装されたときとか、軽く絶望したわけで…。Classic Editorがなかったらやっていけないレベル。

というわけで、十数年ぶりの真っ当なサイト制作、再開していきますか~

投稿日:
言語::Perl

PerlのクラスはPythonみを感じる奥ゆかしい作りになっている。

ファクトリ関数でオブジェクトを生成して、そのオブジェクトの参照を引き回すことで実現してる感じ。

確認環境

Env Ver
Perl 5.34.0

基本

ファイル拡張子は.pmが一般的だと思われる。ファイル名とクラス名がリンクしているためPath/To/UpperCamel.pmが多分いい

ハッシュに突っ込んでいく方式

# これがクラス名になる。PATH::TO::NAME構文で書く
package Example;

use strict;

# コンストラクタ
# 第一引数にはpackageのフルパスが入り、第二引数以降に通常引数が入る
sub new {
  # 祝福することでインスタンスオブジェクトを生成できる
  my $self = bless({}, shift);
  # フィールドに値を突っ込む。これがプロパティになる。アクセサはない
  $self->{hoge} = shift;
  $self->{piyo} = shift;

  # インスタンスを返す
  return $self;
}

# メソッド
# 第一引数にはインスタンスオブジェクトが入る。アクセサはない
sub get_hoge {
  my $self = shift;
  return $self->{hoge};
}

1;

オブジェクト生成時にアサインする方式

package Example;

use strict;

sub new {
  my ($class, @args) = @_;
  my $self = bless({
    hoge => shift @args,
    piyo => shift @args
  }, $class);

  return $self;
}

sub get_hoge {
  my $self = shift;
  return $self->{hoge};
}

1;

クラスインスタンスの生成

ディレクトリ構成

├─library
│  └─Example.pm
└─main.pl

コード

クラスのコードは前述の内容

use strict;
# useするモジュールのパスを指定するおまじない
# パスにはクラスファイルを格納している根本のパスを指定する
# 標準モジュールは区別されるようで、この行の下にuse IPC::Open2;とか書いても、ちゃんと本来のモジュールが読み込まれる
use lib './library';

use Example;

# コンストラクタ呼び出しは()で囲まないとエラーになる
my $ex = Example->new("aaaa", 123);
print $ex->{hoge}."\n";
print $ex->{piyo}."\n";
print $ex->get_hoge."\n";

継承

基底クラス

package Example;

use strict;

sub new {
  my $self = bless({}, shift);
  $self->{hoge} = shift;
  $self->{piyo} = shift;

  return $self;
}

sub get_hoge {
  my $self = shift;
  return $self->{hoge};
}

1;

子クラス

package ExampleChild;

use strict;
use parent 'Example';

sub new {
  my ($class, @args) = @_;

  my $self = $class->SUPER::new(shift @args, shift @args);
  $self->{fuga} = shift @args;
  return $self;
}

1;

あとがき

仮引数を名前付きで取るかshiftで取るかは微妙に悩む。shiftの方がPerlらしい気もするし、変数名を変更するときの手間を考えると楽ではある。しかしshiftは読みづらいし、名前付き変数を列挙したほうが読みやすい気もする。

今回Perlをある程度書いてみた感じ、Perlはかなり書き方が自由に感じたし、そこはかなり楽しかったが、コーディング規約という面で見ると自由すぎると困る部分もあるし、判り易いほうがいいのでshiftは避けたほうがよさそうだ。

しかし普段JSを書いたりしている中で、クラスとは新しいオブジェクトを返す関数なのでは?と思っていたので、その辺りの解像度が上がったのは良かった。

参考

ぶっちゃけまともにPerlを書くのはこれが初めてなので、クラスとは直接関係ないサイトもある。

perldoc.jpは公式ドキュメントの日本語訳らしい。今も更新されている。

投稿日:
OS::Linux::Ubuntuソフトウェア::その他

確認環境

Env Ver
Ubuntu 22.04.3 LTS

やり方

# sambaの導入
sudo apt install -y samba

# sambaユーザーの作成
export $NEW_USER=hoge
sudo useradd -s /usr/bin/zsh $NEW_USER
sudo passwd $NEW_USER
sudo mkdir /home/$NEW_USER
sudo smbpasswd -a $NEW_USER

# 必要最低限の設定を突っ込んでおく
sudo cp ~/.nanorc /home/$NEW_USER
sudo cp ~/.zshrc /home/$NEW_USER
sudo cp -R ~/.zsh /home/$NEW_USER
sudo chown -R $NEW_USER:$NEW_USER

# 元の設定退避
sudo cp smb.conf smb.conf.default
# 設定追加
cat <<EOF | sudo tee -a /etc/samba/smb.conf
[$NEW_USER]
path = /home/$NEW_USER/
browsable = yes
writable = yes
guest ok = no
read only = no
create mask = 0644
directory mask = 0755

vfs objects = recycle
recycle:repository = /home/$NEW_USER/.recycle
recycle:keeptree = yes
recycle:versions = yes
recycle:touch = no
recycle:maxsize = 0
recycle:exclude_dir = .recycle
EOF

トラブルシュート

同一IPのsambaに異なるユーザーでアクセスできない

例えば\192.168.1.10\hogeにhogeユーザー、\192.168.1.10\piyoにpiyoユーザーでアクセスしようとすると上手くいかない。これはWindowsの資格情報がホスト単位であるためと思われる。hostsにドメインを切るなどし、ホスト部を別個にすると上手くいくようになる。

この場合、hoge.localpiyo.local192.168.1.10に向け、それぞれにhogeユーザーとpiyoユーザーの認証情報を持たせることで両立できる。

因みに\192.168.1.10\hogeにhogeユーザー、\192.168.1.10\piyoにもhogeユーザーでログインすることはできるが、基本的に権限周りで問題が起きると思う。無難なのは何かしらグループを作っておき、そのグループであれば自由に読み書きできるフォルダをsambaの共有フォルダに設定することだろう。