mac osのスクリーンショットの形式を変えるコマンドを作る(zshの補完も)

mac osスクリーンショットは、 defaults write com.apple.screencapture type のあとに使う形式をいれることで、作成する形式を変換することができます。

なので下のようなシェルスクリプトをzshrcの中に書いておきます。

screenshot-type () {
    if [ $# -ne 1 ]
    then
        echo "require bmp,gif,jpg,pdf,png,tiff"
        return 1
    else
        defaults write com.apple.screencapture type $1
    fi
}

これは、入力がbmp, gif, jpg, pdf, png, tiffであることを仮定し、入力をスクリーンショットが出力する形式として設定します。

とはいえ、常にjpgやpdfを想定している通り打つのはできないので、補完も書いておきます。

#compdef screenshot-type
function _screenshot-type {
    _values 'type' 'jpg' 'png' 'pdf' 'bmp' 'gif' 'tiff'
}

これを _screenshot-type などの名前で $fpathが通っている場所においておきます。

そうすると、zshscreensho-type と入力してtabを打つと、形式が保管されて便利です

ディレクトリ移動と爆速にするzshの設定

みなさん cdしていますか? 私はしています。

ところで普段からzshを使ってcdをすると、補完とかを使ってそこそこ快適にできますが、それでも「普段使うあのディレクトリにパット移動したい…」 などのケースが出てくると思います。

大体この際に対応は、zshにpecoとfast_cdあたりを組み合わせて行う運用ですが、 この場合は fast_cdが覚えているディレクトリ数が少ないため 頑張って移動しようとしても、候補のディレクトリが4つとかいう悲しい状態になります。

ということで、zshを書いていきましょう。 まずは、移動したディレクトリを覚える設定を書きます

export dirfile="$HOME/.dirfile"

function cd {
    builtin cd "$@"
    echo $PWD >>| $dirfile
}       

zshのcdのhookを使えという声もありますが、まずは無難にcdしたら $dirfile に設定しているファイルに、ディレクトリパスを追記していきます。

ちなみに、このファイルを活用すると、コマンド一発で直前のディレクトリに移動するものを書けます。

function hd {
    cd $(cat $dirfile | tail -1)
}

こうしておくと、複数端末を開いてエイヤする際にかなり便利です。

ちなみに $dirfile にゴミがたまってきたら、次のコマンドでuniqにします

function dirfileuniq {
    local new_dirfile=$(cat $dirfile | sort -rn | uniq)
    echo $new_dirfile >| $dirfile
}

はい。そしてディレクトリの移動ですが、どこかの記事で見たpecoの活用術の設定を活用します。

function peco-dir-jmp
{
    which peco z > /dev/null
    if [ $? -ne 0 ]; then
        echo "Please install peco and z"
        return (1)
    fi
    local res=$(cat $dirfile | sort -rn | uniq | peco)
    if [ -n "$res" ]; then
        BUFFER+="cd $res"
        zle accept-line
        else
            return 1
        fi
 }
zle -N peco-dir-jmp
bindkey '^[pz' peco-dir-jmp

こうしておくと、 Ctrl-pzでよしなにディレクトリ移動が可能となります。 便利でしたね。現場からは以上です

zshの環境変数の最近の設定

今まではshでも使えるexportを使っていて

export PATH="$HOME/hoge/bin:$HOME"

なよくあるPATHを通す書き方で書いていましたが、最近はもっぱらzshの構文を利用して

path=("$HOME/hoge/bin" $path)

みたいに書く方法を使っています。 fpathの場合は

fpath=($HOME/hige/bin/
             $HOME/.zsh/bin/
              $fpath)

みたいに数行に渡って書いています。 特にexportと性能がどうこうはないのですが、なんとなく変数設定している感じが出るので、最近はこれで書いています。

brewのgnuplotのオプション指定ができなくなったので対処する

TL;DR

$ brew tap ie-developers/ie
$ brew install ie-developers/ie/gnuplot  --with-cairo  --with-aquaterm

問題点

  • gnuplotbrew(mac osのパッケージ管理ツール)のアップデート時に、オプションを指定が消え去った

  • aquatermとpdf出力を行いたいので、オプションがある時代の設定ファイルをcask である ie-developerに配置しました

解決

昔のオプション指定時代のrubyコードをgitのログから復旧し、バージョンだけ変更する

インストール方法

  • brew tap ie-developers/ie を実行し、 ie-developerをbrewの拡張に加えます
  • brew install ie-developers/ie/gnuplot --with-cairo --with-aquaterm を実行してください (--with-cairoを設定すると、terminalにpdfcairoが追加されpdfで出力できるようになります)

アンインストール

  • brew uninstall ie-developers/ie/gnuplot で削除可能

PyCon Kyushu in Okinawa 2019に「レガシーPython散策」で登壇します

こんにちは id:anatofuzです。

というわけで5月18日のPyConKyushuで登壇することになりました!!

他の登壇者の方はバリバリのPythonistaな方ばかりで、PerlMongerとしては「すまん…」という感じですが、テーマが「HUB」なんで、大丈夫だと思っています!

kyushu.pycon.jp

内容は次の用な感じです

みなさんが普段使用しているPythonのバージョンはいくつですか? Python3.7.3? それとも、まさかPython2系...!?Python3やPython2とバージョンが上がっているということは、つまりPython1が最初は存在していたということです。Python1の処理系のコードがもし存在していたら、ちょっと中身を見てみたくないでしょうか。そして現在のPython3のソースコードの内容も、ちょっと気になりますよね。このトークではPython1やその周辺のレガシーPythonの処理系のコードと、現在のPython3自体のCで書かれたソースコードを眺めながら、Python処理系の雰囲気を探ります。

YAPC::Tokyoに引き続き、レガシーコード散策となっています。

C言語レベルで、Python1.0付近の中で、一体どの様な構造体が、構文解析が走っているかを時間のある限り見ていく雰囲気となっています。

現在のPython3のコードもちらっと出す予定ですので、現在の処理系に興味がある方もぜひお越しください!!

ちなみに内容ですが、相変わらず

  • 無駄な知識が欲しい方
  • 明日役に立たない知識が欲しい方
  • スクリプト言語処理系に興味がある方

などに該当する方が来ていただけると楽しいかと思います!

というわけで当日は僕と握手!!

MacBook故障しました

去年の4月に買い替えたやつです.なんとなく気配はあったのですが.

起動すると「OSのアップデートにネットワーク環境が必要なので,wifiのパスワードを入力してください」などと. ちゃんと入力しても,アップデートが途中でとまってしまい,「ShutDown」か「Retry」の二択に. この両方を押しても,処理の途中で「問題が発生した為に,コンピュータを再起動しました」と表示された後に, 今の画面に戻ってしまうというループに陥りました.

wifiが問題では? と思い,有線接続を行ったにもかかわらず,相変わらず同じ表示.

そういえば昨日Mojaveのアップデートパッチインストールしたな〜Mojaveのせいか!? などと思いながら,アップデートする前のバージョンに戻せば復旧するだろうと, TimeMachineで復旧を試みました.

すると, TimeMachineでの復旧の途中でクラッシュし, 「問題が発生した為にコンピュータを再起動...」の表示が. なんか進入禁止みたいなマーク出てるし.

流石に危ないのでAppleにチャットで聞いていると, 「SSDの初期化を行えばいい」なるほど. ということで APPLE SSDの初期化を行おうとすると, 初めて10秒くらいで画面が暗くなり, 「問題が〜」の表示. 進入禁止みたいな表示が出たあとに, 言語選択画面に戻ると言うループに.

いくつかのリセットも試みたものの, SSDの初期化もできず, この状態でTimeMachineからの復旧を試みても, install先のSSDが認識されていない為何もできないという状況でした.

と言うことで昨日の12時に新都心のキタムラに. Mac担当のおじさんいわく「メモリが死んでる」との事です.

メモリが死んでるならメモリだけの交換になりそうですが,最近の機種はオンボードでメモリやSSDwifiネットワークアダプタが一体型になっているらしく, 基盤総交換になりそうです.

見積もり的には最悪3万くらい, 見込みとしては無料で治るらしいです.まぁ3万なら安いね.

ついでに「ホコリが買って1年ものとは思えない, 3年分くらい」と言われました.丁寧に扱わないと…

10日くらいで帰ってくるらしいので, しばらくは以前使用していたMacBookです. 幸いコードや直近で使う仕様は, Mercurial/gitで管理, cloudに保存しているのでデータは取り出して作業しています. しかしJSの13incキーボードなので若干打ち辛いですね(買い替えたものは15のUSキーでした). まぁ慣れだとは思いますが….