【Linux】rsyncで半角英数記号(半角スペース含む)のみのファイル名のみを同期する

rsyncは、ファイル同期を行うLinuxコマンド。 主→従へ完全にファイルの権限やタイムスタンプをコピーする。 デフォルトでは全てのファイルが対象(再帰的なコピーは-rオプションが必要)だが、名前にフィルタリングルールを適応することができる。

rsync -rtv --include='[a-zA-Z0-9!-.:-@[-`{-~]' --exclude='[^ ]' src/ dest/

半角スペース入りを対象外にする場合

rsync -rtv --include='[a-zA-Z0-9!-.:-@[-`{-~]' --exclude='*' src/ dest/

-rtvについて

-rtvは割愛。

–include と –excludeについて

取込対象を指定する --include--exclude は上記のようになんちゃって正規表現が使える。 なんちゃってなので、+など本格的なものはできない。

あとは*でワイルドカードで指定ができる。

--include='*'は、「その名前にマッチするファイル名のみを取り込む」指定ではない

正確には「その名前にマッチするファイルは、後の--include--excludeでのマッチ可否を無視してrsync対象とする」のが正しい。

つまり、--include=*--exclude=*ACLよろしくの先勝ち適応のルールだ。

ひっかけ例1:まず『名前が「contents」であるディレクトリを対象にする』それ以外のものは『デフォルトで対象にする』(除外ルールないので結局全部対象)

rsync --include="contents/" src/ dest/

ひっかけ例2:まず『すべてのパターンを除外する』それ以外のものから『a,b,cいずれかを含むファイルのみを対象とする』(結局全部除外するパターン)

rsync --exclude="*" --include="[abc]" src/ dest/

【Linux】bashで文字として評価してしまった環境変数中のクォーテーション・ダブルクオーテーションを再度引用符として評価する

$ echo 'a' 'b'

a b

$ export CMD="echo 'a' 'b'"
$ $CMD

‘a’ ‘b’

‘は文字となってしまっている。そのため、例えば以下の文は記号含む「'want-to-exclude.txt'」に一致するファイル名のみを除外してrsyncするコマンドになる。

$ export CMD="rsync -rtv --delete --exclude='want-to-exclude.txt' src/ dest/
$ CMD >> rsync.log

クォーテーションにしたいとき

  • その1 evalコマンド
$ eval $CMD

double scoreによる脆弱性に注意。

  • その2. そもそもそんなことしない
$ echo $PARAM1 $PARAM2 $PERMANENT_PARAM

SEO対策ことはじめ

最近SEO対策に関する作業をしているが、実は全然知識がなく試しに一冊本を買った。 技術者向けの参考書ではなかったが、いくつか要旨を得られたのでメモする。

SEO対策とは?

  • Search Engine Optimization(検索エンジン最適化)。Googleなどの検索順位を上にあげるようにする施策の事全般。
  • いくつかに分けられる。以下、安易に「SEO」「書籍」で検索して引っかかったエントリーより。 manablog.org

    内部対策のスキル

    外部対策のスキル

    コピーライティングのスキル

    キーワード理解のスキル

エンジニアとして関わりそうなのは前2者。(たぶんWEBディレクターとかアフィリエイターになったら全部有用なんだろう)

  • 内部対策
    • 自サイトのコンテンツ(HTML等)にSEO対策を実施すること
  • 外部対策
    • 外部サイト、サービスにより自サイトのSEO対策を実施すること

ひとまず、買ったのは内部対策についての本。 www.amazon.co.jp

(今のところ、外部対策はどうも流行り廃れが激しく、ちょっと量を当たらないと理解できそうにない印象がある。) (情弱?うるさい。)

内部対策について教科書ひとかじり

業務妨害にならない程度に。

HTMLはW3C勧告に従え

  • 基本。非推奨の使い方は順位を下げやすくするらしい

表示速度は重要

  • 基本。
  • ただでさえ自前のJavaScriptが跳ね回っているのに、外部サービス導入しまくると遅くなるよね

コンテンツはキーワードを意識する

  • さて、これがシステム屋には難しい。なんでも、検索キーワードをコンテンツ中に意識して埋め込むとよいのだそうだ。記事ならともかくそんな面倒なことできるか。

headタグは標準的な形に

  • ちょっとダラって書いたぐらいで減点するらしい。
  • がりがり動くリソースはbundleしないとだめっすか?
  • 規模が大きいほど、そんな頻繁にリファクタもできねーしな。。しかしまあ、心構えとして覚えておこう。

URLがSEOの単位なので、複数のURLで同じものを出すのを防ぐ

  • URL1つで1つのSEO測定単位となる。同じ意味のが複数あると、SEO効果が分散する。
  • 有名なのでいえば動的URL(クエリパラメータがある)、www.host.com/ と www.host.com/index.html などで重複するなど。
  • これ、SPAのrouterとかってどうなるんだろう。最近のGoogleJavaScriptも実行するよ!っていってるから、最初にrenderした結果を見るのかな。

リンクツリーを意識する

  • リンク階層を意識する。
  • リンクの深さが○以上だとたどってくれないかも
  • ページの総数が○○以上だとたどってくれないかも

不幸福のエンジニアリング

私は悲観的な人間だ、ということに数時間前に気づいた。 そこまでの所以は、長い人生語りがあるので省略するとして、何より、これまで志していたエンジニアリングがその価値観に基づいていることに気づいたのだ。

ネット越しに聞く良いエンジニアリングとは「良いサービスを」「快適なUIを」「良質なユーザー体験を」などプラスのイメージを持った言葉で語られる。 どうも私はしっくりこなかったのだが、この日に私はとうとう「ユーザーの不幸をなくすこと」を優先的に考えるエンジニアであることに気づいた。

言葉にすれば「なんだ」と終わってしまうような気がするが、ここはひとつ私が体験したことを交えて不幸福を知るエンジニアリングについて持論を展開してみよう。

都営大江戸線清澄白河駅ホームの壁をご存じだろうか? ユニークなことに、工業製品のスクラップをぺしゃんこにして埋め込まれているのだ。

(参考) yaplog.jp

オシャレといえばそんな気がしてしまうが、数時間前の私はひどく悪いの印象を受けた。 元は恐らく立派だったであろう脚立が、見るも無残な姿に押しつぶされている。 それは効率的で意図があった形で、大小なりコストをかけて形にしたものが、台無しにされている。

「工業スクラップだから」と前もって説明を受ければ先入観が多少あったかもしれないが、何も聞かずの初見で目にした時はかなりショックだった。

これは誰かの意図とならないこと─不幸福を先に連想する私の意見だ。 発想の順序が違うかもしれないが、「これは幸福である」である前提でとらえるならば、このアートはどう見えるだろう?

見た目の重厚さやアートとして成立している、といった表面的な褒め方もあるが、「同じく元の形があった」という先ほどと同じ観点から、色々前向きな意見が出てこないだろうか。

前の形がつぶされている事実から、平面的でありながら立体として元の形が頭に活きる。 元の形があったからこその規則性、美しさが浮き出ている。

先ほどの私の頭からはこの言葉がひとかけらも出なかった。 (出たといえば、これも現代アートなんだな、と表面的な感想ぐらいだった) 本当に、私は悲観的だ。

この例えでの悲観的な捉え方は生産性の全くない話だが、 次の2つの捉え方ではどうだろう。

・今より良い機能を提供するのは、ユーザーにとっての幸福である ・より良い機能を提供できるのに今できないのは、ユーザーにとっての不幸である

命題では同じだ。 しかし、方向性でいえば、前者は発散し、後者は収束する。

エンジニア各位が何となく察する通り、目指す方向が違えば手にかけて形作る指向が生まれる。 幸福のためのエンジニアリングが謳う結果があれば、 不幸福を知るエンジニアリングが求める結果がある。

前置きが長くなってしまった。

前述の通り、私はどうやら不幸福を知るからこそできるエンジニアリングに長けている。 バグやユーザーが不快となる動線への嗅覚、 運用上の障害やプログラムを長期でメンテするうえでの問題点の予知。

これは、一般的に安定したソフトウェア開発で求められるベーシックな能力だが、 先ほどと同じように言い換えてみよう。

ユーザーがより良い体験をするための気づきと発想力、 メンテナンス性をより高める仕組みの提案力。

前者はやはり収束、後者は発散だ。

この手の話を巡って、よく本質は何だろう、と考える。 ネットには、よく幸福を謳うような情報が流れているが、そのほとんどが不幸からも語ることができて違う方向性を持ってしまうとすれば、では本質はどこにあるのか。

共通のインタフェースとする、ある事実のことをいうのだろうか。

だがおそらく、その本質を語る前に本稿で呼ぶ幸福のエンジニアリングと不幸福のエンジニアリングがある。 無形からアーキテクチャを提案するならば、その尚更だ。

20170310雑記(DB2とOracleの比較)

次の現場でDB2からOracleへの乗り換えをしたいという話を聞いて、そういえばOracleはちょっと触ったけどDB2ってよく知らないなーとういことで、色々調べまわる。

Oracleとは

  • Oracle社が提供するDBMS
  • 高い。1CPUあたり、5年で600万ぐらいのライセンス。
  • 内部実装が変態で、ガンガンメモリに情報をのせてロックをあの手この手で回避する。
  • 使い方が他のDBとかけ離れている。入り組んだ用途になると、メンテナンス可用性がだだ下がりに。

DB2とは

  • IBM社が提供するDBMS
  • Oracleに比べるとかなり安いが、それでもン十万/年もする。
  • 競合があると素直にロックして処理を止めたり、素直なインスタンス構成だったりする。
  • Oracleが1インスタンス特化に対して、DB2は機能の集約を避けて、分散DBの可用性を前提に立っているようだ。

比較1:参照一貫性保証

  • すごく長いトランザクションAがあったとする。そのトランザクションが走っている間、他の短かったりするトランザクションが必要なテーブルをいっぱい更新したりすると、SELECTを投げるたびになんか値が変わって、トランザクションAの処理が超面倒くさかったりする。その対策として「トランザクションAが開始したときの状態をとれるように値を保証する」メカニズムを参照一貫性保証と呼ぶ。

  • Oracle

    • 更新前データをメモリの中にとって、必要になったトランザクションにそいつをパスする。
    • 変態。
  • DB2

    • 参照ロック・占有ロックの法則に従い、素直に後から来た参照系をブロックする。
    • 要するに、滅茶苦茶にテーブル設計して参照・更新の密度あげちゃうとOracleに素で負ける。

比較2:インスタンスとDBの関係

比較3:レプリケーション(未完)

  • Oracle

  • DB2

    • PDFみた瞬間「あっ」ってすごく安心した。
    • oshiete.goo.ne.jp
    • Applyプログラムとやらにすべて集約する、Subscribeパターンみたいな感じなのかな?(適当)
    • チューニングできなさそうだけど使い方さえ誤らなければ大丈夫そう。(あと簡単そう)

DB2特有の機能

https://www.ibm.com/developerworks/jp/data/library/dataserver/pdf/session6_introduction.pdf

ワークロード

  • 処理をWORKLOADに分類して、優先度をつける仕組みみたいだ
  • うん・・・器用貧乏だよねぇ。

パーティション機能

  • つまり1インスタンスに複数DBインストールできる、というOracleメタなことをいっているっぽい。
  • クラスタってOracleに至っては複数層もあるがや。(知識として要求してくるところは違うが)
  • 複数に分散しても、リソース取りすぎとかで著しく性能劣化しませんよーと言っている気がする。

pureXML

  • XMLに特化したデータ型があるらしい。
  • インタフェース境界を越えてプログラム中に取り込んだデータモデルが何故取込前の形に・・・と拒絶間を覚えるもコンセプトは分かる。
  • が、明らかに人が変わりばんこに代わる長期運用に向かない。textにぶっこむのでは不満なのか?
  • あと、検索系とか何かのメタを保存するみたいな用途が考えられるものの、商用DBを用いるようなケースでは、スケーラビリティを考えると別途検索エンジンを使うべきじゃないのか・・・など色々突っ込みどころがある。

20170310雑記(DB2とOracleの比較)

次の現場でDB2からOracleへの乗り換えをしたいという話を聞いて、そういえばOracleはちょっと触ったけどDB2ってよく知らないなーとういことで、色々調べまわる。

Oracleとは

  • Oracle社が提供するDBMS
  • 高い。1CPUあたり、5年で600万ぐらいのライセンス。
  • 内部実装が変態で、ガンガンメモリに情報をのせてロックをあの手この手で回避する。
  • 使い方が他のDBとかけ離れている。入り組んだ用途になると、メンテナンス可用性がだだ下がりに。

DB2とは

  • IBM社が提供するDBMS
  • Oracleに比べるとかなり安いが、それでもン十万/年もする。
  • 競合があると素直にロックして処理を止めたり、素直なインスタンス構成だったりする。
  • Oracleが1インスタンス特化に対して、DB2は機能の集約を避けて、分散DBの可用性を前提に立っているようだ。

比較1:参照一貫性保証

  • すごく長いトランザクションAがあったとする。そのトランザクションが走っている間、他の短かったりするトランザクションが必要なテーブルをいっぱい更新したりすると、SELECTを投げるたびになんか値が変わって、トランザクションAの処理が超面倒くさかったりする。その対策として「トランザクションAが開始したときの状態をとれるように値を保証する」メカニズムを参照一貫性保証と呼ぶ。

  • Oracle

    • 更新前データをメモリの中にとって、必要になったトランザクションにそいつをパスする。
    • 変態。
  • DB2

    • 参照ロック・占有ロックの法則に従い、素直に後から来た参照系をブロックする。
    • 要するに、滅茶苦茶にテーブル設計して参照・更新の密度あげちゃうとOracleに素で負ける。

比較2:インスタンスとDBの関係

比較3:レプリケーション(未完)

  • Oracle

  • DB2

    • PDFみた瞬間「あっ」ってすごく安心した。
    • oshiete.goo.ne.jp
    • Applyプログラムとやらにすべて集約する、Subscribeパターンみたいな感じなのかな?(適当)
    • チューニングできなさそうだけど使い方さえ誤らなければ大丈夫そう。(あと簡単そう)

DB2特有の機能

https://www.ibm.com/developerworks/jp/data/library/dataserver/pdf/session6_introduction.pdf

ワークロード

  • 処理をWORKLOADに分類して、優先度をつける仕組みみたいだ
  • うん・・・器用貧乏だよねぇ。

パーティション機能

  • つまり1インスタンスに複数DBインストールできる、というOracleメタなことをいっているっぽい。
  • クラスタってOracleに至っては複数層もあるがや。(知識として要求してくるところは違うが)
  • 複数に分散しても、リソース取りすぎとかで著しく性能劣化しませんよーと言っている気がする。

pureXML

  • XMLに特化したデータ型があるらしい。
  • インタフェース境界を越えてプログラム中に取り込んだデータモデルが何故取込前の形に・・・と拒絶間を覚えるもコンセプトは分かる。
  • が、明らかに人が変わりばんこに代わる長期運用に向かない。textにぶっこむのでは不満なのか?
  • あと、検索系とか何かのメタを保存するみたいな用途が考えられるものの、商用DBを用いるようなケースでは、スケーラビリティを考えると別途検索エンジンを使うべきじゃないのか・・・など色々突っ込みどころがある。

20170302雑記

inode

Linuxの伝統的なファイルシステム ext2ext3の仕組みで、ファイル情報のメタを「inode」と呼ぶ。

kazmax.zpp.jp

確認方法

ls -li
stat <filename>