それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

故障したSSDを保証申請して、交換してもらった。

nvme のSSDが死んだので保証申請した。

今回、故障したSSDはこちら XPG SSD M.2 512GB SX8100 シリーズ Type2280 PCIe3.0x4 NVMe 3D NAND DRAMバッファ 5年保証 ASX8100NP-512GT-C

購入後、半年程度で故障したわけです。

ADATA に問い合わせた。

ADATAに問い合わせたところ、販売代理店の経由でしか交換保証は受け付けないとこのこと。

Amazon co jp の保証申請を問い合わせた。

この商品は、「販売: アマゾンジャパン合同会社」から購入した。

前回の故障では、Crucial製品でのマケプレの失敗で保証を申請できずに泣いた。マケプレと気づかずに買ってしまい、並行輸入品だった。マケプレの販売業者と連絡がつかないし、Amazonに泣きついたが、マケプレに連絡がつかなかった。その反省から、アマゾンが販売する商品を買ったのだ。

アマゾンのカスタマーサポートに聞くと、アマゾンジャパンでは、故障などの保証を行わないとのこと。

悪夢再来かとと青顔になった。

が、話を進めると、アマゾン販売のPC関連商品は、アーキサイトの仕入れになっており、保証申請はアーキサイトを経由して行うとのこと。

アーキサイトに連絡を取った。

アーキサイトのホームページから、保証申請について問い合わせた。

翌日で返答があった。

故障した商品とAmazonの領収書を送付すると、保証が受けられるとのこと。良かった。

アーキサイトに送付した

NVMe のSSDと、Amazonレシートを印刷したもの、問い合わせ番号を封入し、郵送にて送付した。

SSD自体は、暗号化デバイス(Bitlocker)で使っているので特に消去する必要も感じなかった。そもそも故障しているので初期化しようがないので。そのまま送付した。暗号化ディスクは安心ですね。SSD故障で消去困難になっても、チップから強制的なデータ読込がされて、データ漏洩の心配がないので、暗号化は本当に安心ですね。

数日で新品が届いた

佐川急便から、交換品が届きました。

良かったです。

アーキサイト様、ありがとうございます。

月曜日に送付して、木曜日には交換品が届いたので本当に仕事が早い。

改めて、パッケージを確認すると、保証など連絡先は「アーキサイト」にとステッカーが貼付してある。なるほど問い合わせる前にパッケージを確認すればよかったのですね。

SSDの保証についての注意

購入元が国内正規代理店の経由の商品であり、領収書が確保でき、メールで自分で問い合わせできる事が必要。

レシート・領収書の保存

購入年月日を証明する資料は残しておく。

マケプレは、負けプレになる可能性がある。

アマゾンで購入したSSDの5年保証は、必ず受けられるとは限らない。販売者に連絡がつかないことがある。アマゾンで購入する場合は販売元に留意する。保証申請で手間取らない販売店から購入する必要がある。

アマゾン購入の前に、販売元を確認する。連絡が取れる販売者から購入する。

一言で言えば、ホームページを持っており住所やサポートが確認できる販売者であること確認する。

予備の入手可能性とバックアップ

SSDの故障は、自分の作業が完全に止まってしまうのでバックアップと予備のSSD/HDDを持っておく必要がある。

データバックアップ大事。あまりに格安を求めて保証もサポートもない丸腰生活はちょっと怖いな。 論文締め切り間際でパソコン故障とか毎年ツイッターで見かける事故ですからね。

いまは、Amazonで即日に別個体のSSDを入手可能なのでそこまでダメージはデカくないけどね。知り合いに聞くとPCの故障はPCショップが近くにないと即死ダメージだったので本当に苦労したらしい。

暗号化は重要

ディスクは暗号化しておきましょう。SSDが動作不能になって、メーカに送付することになっても、データ漏洩のリスクは極めて低いです。安心して送付できます。日頃からディスクは暗号化しておきましょう。

WindowsにNodeJS環境を作る/scoop

NodeJSのインストール。by scoop

scoop の準備

scoop を入れるために、リモートコードを許可する。

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

scoop をインストールする

Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh')

scoopのインストール先

scoop は /User/takuya/scop にインストールをします。

nodejs インストール

scoop で nodejs(LTS) を入れる

nodejs/npm/npx をインストール

scoop install nodejs-lts

実行画面。

実行するとこんな感じ。

Scoop でnodejs を入れると

scoopで入れると PATH設定をやってくれる。これが楽。

インストール時に必要はPATH設定が同時に実行されるため、特に何も考えず、コマンドが使える。

このため、コマンド関連はscoopでインストールが便利

nodejs をインストールした場合のPATH

次のコマンドがPATHに追加されている。

PS C:\Users\takuya> $env:path.split(";")
C:\Users\takuya\scoop\apps\nodejs\current\bin
C:\Users\takuya\scoop\apps\nodejs\current
C:\Users\takuya\scoop\shims

chocolatey より便利な場合が多い

choco だとパッケージが多かったり、最新版が来なかったりするし、管理者ユーザーでかんりするひつようがるが

scoop なら初期設定がユーザ空間で、ユーザーインストールされるので、サクッと使うには便利かもしれない。

WSLと共存はめんどくさい。

ただし、WSLと共通のコマンド(npm/node)を入れてしまうと。PATHが競合して面倒が起きる。

対応するには、PATHの優先順位を逆順にするなどいくつか対応が必要です。

echo $PATH | \
    sed -e 's/:/\n/g'  | \
    awk ' { if ( $1 ~ /mnt/ ) print length(),$0 ; else print length()+1000, $0 } ' | \
    sort -nr  | \
    cut -d ' ' -f 2- | \
    paste -sd ':'

たとえば、/mnt/ が含まれるPATHエントリを優先度下げるとか。WSL側でWindowsに設定された同じコマンド( python, pip / node , npm / php )でPATHの競合が起きないよう、優先順位を配慮した設定が必要になると思われます。

設定例

サクッと書いてみた設定例。

## PATH 変数をソートする
## windowsの空白文字なディレクトリだと誤作動する。
## /mnt/c のPATHはWindowsコマンドなので優先度を下げる。
function sort_path_env {
  path=$*
  # path=${path//:/ }
  path=$( echo $path | sed 's/:/\n/g' | awk '{ if( $1 ~ /mnt/ ) print length(),$0 ; else print length()+1000, $0 } ' | sort -nr  | cut -d ' ' -f 2- | paste -sd ':' )
  echo $path
  return 0
}
export PATH=$(sort_path_env $PATH)

NTTひかり電話をwireguard経由で使って外出から固定電話で電話番号認証をする

NTT ひかり電話VPN経由で使う

10年遅れかよって話なんだけど、いまさらながら、NTTひかり電話スマホで使えるようにした

NTTのホームゲームにルーティングを書く

ルーターに経路を書く

通常はNATで転送し、NTTのHGW宛だけNATせずに直接パケットをAccept(転送)するように書いた。

もっと具体具体的にUDP 4000/5600 やらSIPやら指定してもいいかもしれないけどめんどくさいのでざっくり指定

Wiregaurdを入れた

WireguardでスマホグローバルIPにつないだ。

設定のポイント NATしない。

SIPのNAT転送はできないので、パケットを単純Acceptで別のNICに流すだけ。

iphone --<4G/5G/internet> -- router --  ntt-hgw -sip

わたしは、NTTのホームゲートウェイでPPPoEやv6をやらず、ルータを設置しているのでGWルータにWireguardをいれて、そこへ接続。あとはパケットを許可して経路を変えるだけ。NATはしない。そのためNTTのホームゲートウェイがパケットの帰途先がわからなくなるので、ルータ(192.168.100.2)あてに静的ルートを書いてある。

なんで?今更?

なんでいまさら、と思うかもしれないが、イラッと来たのである。

ゆうパック」と 「電話番号認証」が原因

みどりの銀行の電話番号認証がゴミ

銀行が電話番号に受電してくる、または電話番号から架電するという、クソみたいな認証を採用している

WEBアプリケーションに電話番号なんていう古代遺産を使われたので、しかも登録している番号が実家の固定電話ときたもんだ。 もう仕方ないので、私も、古代遺跡からSIPのリモート利用という古代アーティファクトを発掘して使うことにした。

電話番号認証とか滅びればいいのに

ゆうパックの再配達フリーダイヤルを使えない

ゆうパック」から不在で着信があったが、掛け直すとコレクトコールである。有料電話番号である。0570である。困った。

固定電話からは、0120のフリーダイヤルが提供されているが、携帯電話から0570(有料)である。

我々がかけ放題にせっかく加入しているのに0570である。ひどい。

だったら、私も固定電話経由で掛けられるようにするまでだ。

このご時世なんだから、電話番号ではなく、LINEリンクやSkype Me(古い)を用意しておいてくれたいいのだ。

なんでVoIPの技術が山ほどあるのに金銭発生させて架電しなくちゃならないのか。

こういうところだぞ総務省

デバッグ

デバッグメモ

488 Not Acceptable Here コーデックに高品質を指定した場合によくおきる
           NTTホームゲートウェイが非対応で怒ってる
SIP/2.0 401 Unauthorized なんかわからんが、いつも出るので気にしない
SIP/2.0 403 Forbidden 禁止 ID/PWと内線番号が一致しないときにでる
SIP/2.0 INVITE sip:090123456789@192.168.100.1 SIP/2.0 架電開始

macで接続中のWifiのSSIDを取得するコマンド

networksetup コマンド

接続中のWifiSSIDを取得する

コマンド

networksetup -getairportnetwork en0

実行例

takuya@~$ networksetup -getairportnetwork en0
Current Wi-Fi Network: Takuya's iPad 6

これで、SSIDを取得することができる。SSIDをテキストでコピペしたいときに便利です。

テキストでコピペするときとは、SSIDを指定して接続する際に他人に教えるとき

SSIDを指定して該当SSIDのときだけVPNを接続するなどです。

SSIDもランダムで複雑化していたり、文字種が指定されていたりします。

手作業で、目視で複写するのは回避すべきですね。

github actions は自動停止される

github actions 無敵じゃなかった

Github Actions で定期的にスクリーニングをやっていたが、先日次のような警告が。

対処法

Actions内部で commit して対応した。

が、ぜったいこのような方法は、対策されてできなくなりますよね。

jobs:
  update_and_push:
    runs-on: ubuntu-latest
    steps:
      - name: checkout
        uses: actions/checkout@v2
      - name : update lists
        shell: bash
        run : |
          date -I > last-update.txt
          date -I >> update.txt
      - name: push updated lists
        uses: stefanzweifel/git-auto-commit-action@v4.2.0
        with:
          commit_message: update-lists

やっぱりクラウドサービスって怖いですよね。いつどこで停止されるかもわからないサービスに依存するのは怖い。

ffmpeg/mplayer で認証が必要な m3u8 を開く(Radiko)

ffmpeg でhttpを開くときHEADERが送信できる

ffmpeg ではHTTPヘッダを送信できる

ffmpeg -i http://example.com/a.m3u8 -headers 'Authentication: XXXXX' 

もちろん ffplay でも同じように

ffplay -i http://example.com/a.m3u8 -headers 'Authentication: XXXXX' 

mplayer 側でも対応している

mplayer でもhttp-header への対応は完了してる。

mplayer -http-header-fields 'X-Radiko-AuthToken: xxxx'

radikoの場合

radikoは旧のAPIがまだ生きている(たぶん、Google Home などの旧ハードウェアを切り捨てないため)

そのため、次のように掛けば再生ができる。

mplayer の場合

token=XXXXX
channel=MBS
URL='https://radiko.jp/v2/api/ts/playlist.m3u8?station_id={$channel}&l=15&ft=20200419210000&to=20200419211500'
mplayer -http-header-fields 'X-Radiko-AuthToken: {$token}'  $URL

何も考えなくて良くなったのは本当に楽。

mplayerを使うとコンソールからボリュームの上げ下げやスキップができるのでタイムフリーを聞くときに便利

ffplay の場合

token=XXXXX
channel=MBS
URL='http://f-radiko.smartstream.ne.jp/{$channel}/_definst_/simul-stream.stream/playlist.m3u8'
ffplay -i $URL -nodisp -vn -sn   -headers 'X-Radiko-AuthToken: {$token}'"

ffplay のほうがキャッシュの扱いがきれいでバッファリングをうまく制御してくれますね。

token の取得

探せば山ほどあるので割愛。

curl コマンドでリクエスト送るだけ。

http header 送信できる

ffmpeg / mplayer は http ヘッダを直接送信できるので認証をうまく制御できるので各種プレイリストの再生が捗る。

視聴者(ユーザー追加)プライム・ビデオの視聴履歴を分離する

amazon プライム ・ビデオに視聴者を追加する

視聴者を追加すると、視聴履歴を分離できます。FireTVやタブレットを使わせる場合にはこちらを活用したほうが良いでしょう。

キッズ向けの制限を加えることや不用意なコンテンツへの課金・アクセス制御など、ペアレンタルコントロールがある程度使えるようになっています。

家族と共有

また、家族とコンテンツ課金を共有する場合にスマートテレビ(AndroidTV)なども、視聴者機能で分離できます。

プライム家族会員は歴史的経緯からでしょうか、送料無料系しかありません。アマゾンのデバイスが多数発売され月額課金も増えています。このあたりの課金を整理をしてほしいところです。

アマゾンのプライム特典を家族アカウントと共有する

アカウント自体の共有は避けよう

アマゾンにしろ、ネトフリにしろ、家族で1アカウントを共有するのはやめましょう。

リビングのテレビでユーチューブを見るとか、Amazonプライム・ビデオを見るとか、そういうときはアカウントを切り替えて使いましょう。

アカウントの共有は、セキュリティのリスクに繋がります。

どうしても共有する場合は、パスワード管理ソフトを使って、指定した人だけに「パスワードを共有」してください、ログイン状態を共有するのは好ましくないです。

パスワードを共有すると、「ログインのお知らせ」のメールが無意味になります。身に覚えないのログインに注意するのがセキュリティの基本的な対策ですが、パスワードを共有してしまうと他人がログインしていても、自分のログインと同様に扱われます。そのため区別が付きません。

全インターネット閲覧履歴も漏れます。

たとえばユーチューブのアカウントを共有すると、通常のニュース閲覧にいたるまで共有される危険性があります。

アカウントを共有すると、視聴履歴やレコメンドなどでプライバシーが露見するリスクにさらされます。これは誰しも理解できるし、履歴だけでも避けたいと思うでしょう。

さらに、広告にも影響します。広告とは通常WEBサイトを閲覧しているときに表示される広告です。アマゾンプライムの視聴履歴、ユーチューブの視聴履歴だけではなく、インターネット閲覧時全体の広告にも影響してしまいます。ログインしているアカウントでインターネット全体の閲覧履歴が保存されるためです。

ですから、すべての履歴保存機能はオフにするべきです。しかしどこにどれだけ履歴が保存されているか理解するのは難しいです。

ですからそもそも、アカウント共有は避けるべきです。アマゾンであれば「特典の共有」をするべきです。

プライム特典の共有

プライム特典の共有は、どこまで共有されるのかが曖昧です。

ビデオに関しては、アカウントを共通化して、視聴者(利用者)を分けるようになっています。

購入履歴と購入品目に関しては、プライム特典の共有(この記事)で対応するようになっています。

(2022-07-04確認)

プライムの特典を家族と共有する

アマゾンには、プライムを家族2名と共有する機能があります。家族であれば共有しても構いません。

リンク先を用意

プライムの特典共有のリンクは非常にわかりにくいところに設置してあります。ページ内検索するか、以下のリンクを使ってください

https://www.amazon.co.jp/gp/primecentral#primeCentralInviteeWidgetHeaderArrowHolderDiv

スマホではNG、PC表示を使う。

ちなみに、悲しいことに、スマホサイトにはリンクが用意されていません。

スマホサイトでは特典の共有ができない

アマゾンさんは、プライム特典の共有をできる限り使わせたくないようです。これでは、セキュリティレベルを下げてしまうアカウントパスワードの共有になってしまいます。SMS認証などで複数ログインをできないように小手先のテクニックで対応しているのでしょうか。

PC表示を利用してください。これが大事です。

必要なくても、とりあえず登録

もしかしたら、特典の共有の機能自体が、今後の新規申し込みができ無くなる恐れがあります。早めに申し込んでおきましょう。未利用は、念のために捨て垢で埋めておくのが無難です。

家族がいないとか、いま必要なくても、とりあえずメアドを一つでも登録しておくと無難です。スマホサイトではリンクが消されているので、新規申し込みができなくなるかもしれません。

まとめ

アカウント共有は、視聴履歴やレコメンドのプライバシーの観点から、またパスワードの共有はセキュリティの観点から好ましくないです。

アマゾンプライム・ビデオの場合、視聴者を追加します

リンク先で見つからない場合。 ページ内検索で見つけよう

ssd nvme の温度を調べる

夏場になると不安なのが温度

夏場になると、SSDの温度で不安になるので、温度を調べることにしました

smartctl で見れます

takuya@:~$ sudo smartctl -a /dev/nvme0n1  | grep Temper
Temperature:                        43 Celsius

まだ43だった。なんとかなりそう。

USBハブをマグネットにして、作業デスクをスッキリさせる

USBハブをスッキリさせる

USBハブにあれこれ増設しています。作業用にノートPCとThinkCentre Tinyを使っているので、モニタ裏にPCを設置しているのでUSBのアクセス性が著しく悪いです。

USBハブを用いて使いやすい場所に引き出していますが、それも頻繁に使うわけでもないので、出っ放しだと邪魔になります。

USBハブをマグネット化

マグネットにして貼り付けてしまえば良いわけです。磁力により磁界が発生しデータが云々と思うかもしれませんが、その程度のノイズに左右されないために、0/1の2進数でビット転送をしているわけですし、省電力なので磁界など気にしても仕方がない。

ネオジムマグネットを用意します。

ダイソーやセリアで購入できます。

ボンドで貼り付けます。

量は適当です。ボンドのチューブ先を軽くつけるだけで大丈夫ですね。私の写真のは付けすぎですね。

乾くまで待ちます。

裏返しににしてその辺にくっつかないレベルまで乾燥させました。

利用したボンド

コニシ、ウルトラ多用途クリア

ExcelでOneDriveに保存したくない。(PC保存をデフォルトにする)

Excelでファイルの保存がとても手間

ExcelでCtrl-Sで保存するときが大変手間である。

初心者向けにしてるんだろうが、初心者を甘やかすゆえに、初心者にわかりにくいし、他のWindowsソフトウェアと大きく操作方法が異なることになり不便であろう。

OneDrive が表示される→邪魔じゃん?

これは実質は広告である。

OneDriveをレコメンドから消す

OneDriveは便利では有るが、作業中には邪魔でしか無い。 ファイルを送りたいなら同期機能を使えばいい。OneDrive内部のExceを編集するには、直接Chromeでひらけばいい。これは実質は広告である。削除しよう。どうしてもOneDriveに保存するなら保存ダイアログでOneDriveを選べばいいだけである、

保存先をPC(ローカル)に規定する

保存先は、通常の保存ダイアログで選ぶほうがキーボード操作もしやすく、矢印キーやALT+矢印キーで移動しやすい。

Officeサイン・インの状態を無視する。

せっかく設定しても、WEB側の設定が優先されては元も子もない。オフにしておく

保存ダイアログが表示される。

人によっては、Excelなどで従来どおりWindows共通の保存ダイアログが出てこないものだと勘違いしてる人がいらっしゃるが、ちゃんとあります。

Ctrl-Sで、名前をつけて保存にする

Ctrl-Sを押したとき「名前をつけて保存」(Windows共通の保存メニュー)が出てくるようにする。

以下の設定をすると、Ctrl-Sでファイル保存ダイアログになります。 エクセルの操作性はかなり改善される。無駄がなくなる。

ファイル保存ダイアログを常に表示する。

Backstage(メニューから)名前をつけて保存を呼び出す。

上記の設定をしてない場合に「保存ダイアログ」を呼び出したいとき、Excelではとても奥の方に配置っされている。

「保存→名前をつけて保存→PC→その他のオプション」と4ステップで保存する。とてもめんどくさい

さきほどの設定をONにすれば Ctr-S でいつでも通常の保存ダイアログになります。

Excelを通してPCに少し詳しくなろう

マイクロソフトは初心者を甘やかす。初心者を迷わないよう、いろいろな選択肢とその画面を目のつかないところに押し殺す。これは機会損失です。機会提供の視点から見て、これは初心者に優しくない。初心者にたくさんのオプションがあることを知らせ、自分が何を選んでいるのかも知らせてほしい。知らないまま使うというのも考えものでしょう。こういうことをやり、初心者を甘やかし、初心者を初心者のママで生活できるようにしてしまう。マイクロソフトは初心者をすぐ甘やかす。この結果が各種のマルウェア氾濫となり現れている。初心者を初心者のまま囲い込むからemotetのような初心者を釣るマルウェアに引っかかってしまうのだ。

クラウドを利用させて良いのか

クラウド・ストレージを利用させて良いのか、させないのか。これはPCの管理者(企業・個人)が各人の意思で決めることである。マイクロソフトが押し付けて良いものではない。保存先をOneDriveにしてそれ以外は見えないような選択肢にするのは流石に横暴ではないか。セキュリティ・ポリシーは各々が真剣に考えるべきでしょう。

企業ではGoogle Workspaceだったり他のクラウドストレージに使っていることも有るでしょう、押し売りによりユーザー周知の手間が増えます。マイクロソフトの行為は優越的地位の濫用に相当と判断しても過言ではないと思います。

このような初心を囲い込む押し付けには断固反対するべきです。

企業でPCを管理する立場にある人は、全体ポリシーでEXCELの共通設定として、通常のWindowsの保存ダイアログが出るように、設定流し込んでおきましょう。

OS提供企業が自社のソフトウェアを優先表示し、デフォルト動作に見せる広告行為は法規制も検討すべき段階にあると思います。

類似の広告行為としては、iOSiCloud photo や WindowsのOneDriveやOneNoteレコメンドや、AndroidGoogle Map、iOSSafari Keychainなどが挙げられます。とくにiOSの Keychains/iCloud photoは他OSや他アプリからアクセスが不可能で囲い込みです。注意しましょう。

jpg から pdf を作るときは img2pdf を使う

jpg から pdf を作るときは、img2pdf が無難

img2pdf は添付ファイルとして画像を処理してくれるみたいで、ファイルが変更されない。

magick の場合

imagemagick の conver でPDFを作ると。

convert 000.jpg magick.pdf
pdfimages -j  magick.pdf m

取り出した画像は少し変化している。

takuya@sample$ md5sum m-000.jpg 000.jpg
cb183e325b265d0cd985ae6bcf8a7f45  m-000.jpg
eeb3981fd491ad2dde29416db2144727  000.jpg

EXIFだけかと思ったら、画像全体を再エンコしてるっぽいので、オリジナルを含めたいときは不適切。

img2pdf の場合

pip でインストールする img2pdf コマンドを使った場合

img2pdf 000.jpg i2p.pdf
pdfimages -j  i2p.pdf i2p

ファイルが入れた通りに取り出せる。

takuya@sample$ md5sum 000.jpg i2p-000.jpg m-000.jpg
eeb3981fd491ad2dde29416db2144727  000.jpg
eeb3981fd491ad2dde29416db2144727  i2p-000.jpg
cb183e325b265d0cd985ae6bcf8a7f45  m-000.jpg

理由を詳しく考えるとめっちゃめんどくさいんで考えるのをやめた。 たぶん添付ファイルとして添付するときに、画像の色プロファイルをPDF標準に合わせて変換してるんだと思う。

参考資料

https://stackoverflow.com/questions/51909733/why-does-a-jpeg-embedded-into-a-pdf-render-slightly-differently-than-the-origina

python pip で libxml がエラーになった

対処

次の方法で強引に解決した。

export C_INCLUDE_PATH=\
/Applications/Xcode.app\
/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs\
/MacOSX.sdk/usr/include/libxml2:$C_INCLUDE_PATH

pipenv  run pip install lxml

理由は、あれだ。macOSのバージョンがうまく解決できないので、pyenv で作ったpythonが古い。

libxml とかコアなので、エラーになるとすごく焦る

とりあえず、インストールしちゃえば libxml 依存するパッケージ。例えばimg2pdf など

pipenv run img2pdf -h

などとちゃんと動く

p7zip の7z コマンドがSTDIN/STDOUTを部分的にしかサポートしてなかった。

STDIN/STDOUTで使いにくい7z コマンド

7z コマンドが最強だと思ってました。 7z はアップデートも頻繁にされているし、利用者も多い枯れているツールだと思いこんでました。

STDIN から読み込み

tar.gz を展開するときは次のようになりますよね。

cat sample.tgz |gunzip | 7z -si -ttar l 
cat sample.tgz |gunzip | 7z -si -ttar x 001.jpg -so > out.jpg

同じように 7z / zip が扱えるかというと。

STDIN でパイプすると出来ない

## zip / 7z
cat sample.zip | 7z -si -tzip  
cat sample.7z| 7z -si -t7z 

エラーになる。

ERROR:  : opening : E_NOTIMPL : Not implemented 

STDIN でリダイレクトすると出来ない。

7z -si l < sample.7z
7z -si l < sample.zip

stdin 使えない

tar 以外では、STDINが使えません。まじかよって感じです。だったら -t tar の形式指定オプションはなんのためにあるんだよって感じ。

p7zip 使いにくい・・・

公式マニュアルを読んでみると、STDINで想定してるのはtar だけっぽいぞ。

7z コマンドって微妙に使いにくいですね。

brew の p7zip はエラーになる。

Macで起きうる現象

mac で特定の形式を7z すると、めっちゃめんどくさくなるよ。

takuya@mac$ /usr/local/Cellar/p7zip/17.04/bin/7z x 'sample.rar' -so '001.jpg'
ERROR: Unsupported Method : 001.jpg

起きうる問題

問題は2つ

  • 特定の文字コードを解消できない
  • 特定のファイル形式がエラーになる。

文字コードのエラー

文字コードの指定が全くうまく動かない。cp932 の指定どころか、LANG指定がうまく動かず、全部UTF16で取り出されちゃう

ファイル形式のエラー

再現方法 ( brew 版 7z と rar など)

brew install p7zip
/usr/local/Cellar/p7zip/17.04/bin/7z x 'sample.rar' 

起こりうるエラー

ERROR: Unsupported Method : 001.txt

回避策

https://www.7-zip.org/download.html から 7zz のmac対応版を持ってくる。

他にもいろいろと、7z で問題が出るので、できる限り、homebrew の p7zip は避けたほうが無難っぽい