- 投稿日:2019-12-11T23:15:14+09:00
dotfilesの育て方
dotfilesを育てよう!
dotfilesはエンジニア人生と切っても切れない関係です。
そんなdotfilesを理想の形に育てていく方法について紹介したいと思います。
dotfilesとは
.
(ドット)から始まるファイルの総称です。
Unix系OSでは.
から始まるファイルは隠しファイルとして扱われ、ls
コマンド等にはオプションを指定しないと表示されない仕組みになっています1。
古来より、この特徴を利用して、ホームディレクトリ直下に.
から始まる設定ファイルを配置するという文化があります。
例えば、筆者のホームディレクトリでls
を実行した場合、下記のような出力となります。
隠しファイルも表示する-a
オプションを加えて実行した結果は下記のようになります。
.
で始まるファイルが大量に表示されています。
要はこれらがdotfilesです。
Lv.1 Gitで管理しよう
まずは最初の一歩として、dotfilesをGit管理するところから始めましょう。
履歴管理やポータビリティの向上等様々な恩恵があります。(草を生やせたりも)dotfilesというリポジトリを作成し、
.bashrc
等の各種dotfilesをリポジトリ配下にコミットします。
ホームディレクトリにはln
コマンドを用いてシンボリックリンクで配置します。
シンボリックリンクを作成することで、リポジトリ内のファイルで一元管理できるため、更新や最新化が簡単にできるようになります。.bashrcのシンボリックリンク作成の例# リンクの作成 $ cd path/to/dotfiles $ ln -s .bashrc ~/.bashrc # リンクを確認 $ ls -l ~/.bashrc lrwxrwxrwx 1 reireias reireias 59 6月 8 22:30 /home/reireias/.bashrc -> /home/reireias/dev/src/github.com/reireias/dotfiles/.bashrcなお、GitHubでは実に多くのdotfilesリポジトリが公開されています。
https://github.com/topics/dotfilesちなみに、
AWS_ACCESS_KEY_ID
等の認証情報が公開されてしまわないように注意しましょうLv.2 deployを簡単にしよう
シンボリックリンクの作成は、その環境に対して1度しか実施しませんが、対象となるdotfileが増えれば、その作業も効率化したくなるのがエンジニアの性というものです。
簡単なshell scriptで実装することができます。
shell script以外で実装してもよいのですが、クリーンな環境にインストールする際に依存するパッケージが少ないほど楽なので、大抵の環境で利用できるshell scriptがよく採用されています。以下のスクリプトでは、dotfilesリポジトリ直下の
.
ではじまるファイル全てのシンボリックリンクをホームディレクトリに作成します。install.sh#!/bin/bash -e IGNORE_PATTERN="^\.(git|travis)" echo "Create dotfile links." for dotfile in .??*; do [[ $dotfile =~ $IGNORE_PATTERN ]] && continue ln -snfv "$(pwd)/$dotfile" "$HOME/$dotfile" done echo "Success"Lv.3 インストールスクリプトを書こう
dotfileによっては、パッケージやライブラリのインストールが必要となるものもあるでしょう。
例えば、
.tmux.conf
があるので、tmuxをインストールしたいpeco
コマンドを利用する自作関数が.bashrc
に定義してある- vimの特定のプラグインがpythonのライブラリに依存している
等があげられます。
はじめのうちはREADMEに依存パッケージの一覧を記載したりしているでしょう。
やっぱり自動化するのがエンジニアですね。例えばshell scriptであれば下記のようにシンプルにコマンドを列挙していくだけでも、立派なインストールスクリプトになります。
インストールスクリプトの一例#!/bin/bash brew install tmux peco neovim pip install neovimLv.4 インストールスクリプトの冪等性を意識しよう
冪等性を意識したインストールスクリプトにしてみましょう。
何度実行しても同じ結果になるようにすることで、新たにインストールスクリプトで行う処理を追加した場合でも既存の環境に対してインストールスクリプトを実行することが可能です。簡単な例を下記に示します。
# 冪等性なし mv config /etc/hoge/config echo "some setting" >> ~/.hogerc # 冪等性あり cp config /etc/hoge/config if ! grep -q "^some setting$" ~/.hogerc; then echo "some setting" >> ~/.hogerc fiインストールスクリプトが大きくなるほど、冪等性をshell scriptで担保するのは難しくなってくるので、AnsibleやChef等の構成管理ツールを使ってインストールスクリプトを記述するのも良い選択と言えるでしょう。
ただ、shell script以外のツールを利用し始めると、まっさらな環境にインストールする際の手順が多少増えてしまうので、注意が必要です。
Lv.5 CIをまわそう
猫も杓子もCIな世の中です。
dotfilesにおいてもCIを回しましょう。インストールするパッケージやライブラリのバージョンを指定せず、最新版をインストールするようなスクリプトの場合、非互換な更新によりインストールスクリプトが失敗するようになることもあるでしょう。
インストールスクリプトの実行や適切にファイルが配置されたか等を確認するのがよいでしょう。GitHub Actionsでのごくごくシンプルなサンプルコードを記載しておきます。
.github/workflows/main.yml--- name: main on: [push] jobs: main: runs-on: ubuntu-latest # or macOS-latest steps: - uses: actions/checkout@v1 - name: install dotfiles run: bash install.sh - name: test run: # some testsLv.6 ファイルを分割しよう
dotfilesが順調に成長していくと、
.bashrc
(.zshrc
)や.vimrc
なんかはかなり巨大になっていきます。
巨大な1ファイルは条件反射で悪とみなすのがエンジニアの常なので、なんとか分割したいものです。幸い、
.bashrc
や.vimrc
等は別ファイルを読み込む機能を搭載しているので、分割が容易です。例えば以下のように
.bashrc
から別ファイルを読み込むことができます。.bashrcsource ${HOME}/.bash/keybind.sh source ${HOME}/.bash/alias.shLv.7 READMEを整備しよう
dotfilesは人に見られることでも成長します(?)
READMEを整備し、イケてるdotfilesリポジトリに仕立てましょう。個人的には以下が記載されていると、
パクリたく参考にしたくなります。
- 対象のエディタ、shell、ツール
- ターミナルのスクリーンショット
- コンセプト
- 依存するパッケージやライブラリ
番外編 様々な環境に対応しよう
LinuxとMac OSの両方を利用することのある
変態珍しい人は、両方の環境に対応した設定やインストールスクリプトを用意すると幸せになれるのではないでしょうか?
CIもマトリックスビルド等を活用し、LinuxとMac OSの両方の環境で実行するとよいでしょう。ちなみに、筆者は最近、AnsibleでLinuxのaptとMac OSのbrewをwhenによる分岐を利用せずに書く方法がなくて困っています。
さいごに
じゃあ、お前のdotfilesはどうなんだよ?と言われそうなので、いちおう掲載しておきます。
そんなに期待しないでくださいね。
- 投稿日:2019-12-11T22:23:37+09:00
マルチOS対応Docker開発環境の作り方【Mac対応編】
この投稿は Magento Advent Calendar 2019 の11日目です。
皆さんDocker使ってますか?
以前はVirtualbox+Vagrantを使って開発環境を整えていたのですが、動きが遅い重い!
当時個人的に気になっていたDockerに(趣味半分で)乗り換えてみたところ、早い軽いで素晴らしいものでした。私はもっぱらLinux(Ubuntu)をメインで使っているのですが、社内にはMacやWindowsを使っている開発者もいます。
せっかく作ったし他のOSでも使えるようにしよう、まずはMacで試してみよう!と思っていたところ、ある問題に阻まれてしまったのでした。
Docker for Macの欠点
Linuxで使っていたイメージや設定ファイルを移動させ、起動させるところまでは順調でした。
ですが…明らかに動きが遅い……!!!
実はこの問題、Docker for Macでは有名で、以前私もこの問題を解決しようと悪戦苦闘していました。
Docker Meetup Kansai で発表したスライドがあるので、もし興味があればそちらもご覧ください。このときは1/4程度しか改善されないという、早くはなったが実用的ではないという悲しい結果でした。
今回はその続きの話となります。
その後調べたところ、2つ効果があるかも知れない解決策を見つけることが出来ました。
NFS Sharing Volume
実は、dockerにはVolumeにNFSをマウントする機能があります。
ですが、Docker for Macの遅さはmacOSとLinuxコンテナのファイルシステムの違いが原因なので、NFS越しにマウントしたところで早くなるはず無いだろう…と思っていました。ところが、
こちらの記事によるとNFS Volumeを使うことでかなり改善されることが判明しました。
なぜ早くなるのかは謎ですが、効果があるかも知れないなら試すしかありません!Macでnfsdを動かすには、
/etc/nfs.conf
と/etc/exports
を設定しておく必要があります。/etc/nfs.conf# # nfs.conf: the NFS configuration file # nfs.server.mount.require_resv_port = 0/etc/exports/System/Volumes/Data/Users/{USERNAME}/{PASS_TO_PROJECTROOT} localhost -alldirs -mapall={uid}:{gid}
-mapall
オプションで指定したUIDとGIDは、NFSでアクセスした際に指定したユーザーのものとして扱われます。macOS Catalinaをお使いの方には注意点が二点あって、一つは
/Users/{USERNAME}
で始まるパスを指定してもエラーになってしまいます。
詳しくは以下の記事が参考になるかと思います。もう一点は、DocumentsやDownloads、Desktop下を使う場合は明示的に権限を付与(?)しなくてはいけないようです。
以上が設定できれば
sudo nfsd start
で起動するとホスト側の設定は終了です。docker-compose.ymlの方にもNFSを使う設定をします。
docker-compose.ymlversion: "3" services: nfs: image: ubuntu:18.04 volumes: - src:/src:nocopy volumes: src: driver: local driver_opts: type: nfs device: ":/System/Volumes/Data/Users/{USERNAME}/{PASS_TO_PROJECTROOT}" o: addr=host.docker.internal,rw,nolock,hard,nointr,nfsvers=3services下のvolumesに
:nocopy
を忘れず、driver_optsのdeviceにexportsで指定したパスを書くことを忘れずに!
これでNFS Volumeを使ったコンテナが起動できます✌️欠点を挙げるとするならば、プロジェクトごとにdocker-compose.ymlにパスを書く必要があって手間という点です。
Gitで管理していたりすると、誤Pushとかがありそうで怖いですよね…。Docker-sync
もう一つは高速にホストとコンテナ間を同期するためのツール、docker-syncです。
このツールは、ホストとコンテナ間でrsyncやunisonなどを使って高速な同期を実現しているようです。
rsyncの方が高速(?)のようですが同期が双方向ではなく一方通行(ホスト→コンテナ)なのがネックなので、今回はunisonを使ってみます。brew install unison brew install eugenmayer/dockersync/unox gem install docker-sync以上のコマンドでインストールが完了します。
詳しいインストール手順は公式ドキュメントをご覧ください。docker-syncには
docker-sync.yml
が必要になります。docker-sync.ymlversion: "2" syncs: src: src: '/{PASS_TO_PROJECTROOT}' sync_strategy: 'unison' sync_userid: '{UID}'docker-compose.ymlversion: "3" services: nfs: image: ubuntu:18.04 volumes: - src:/src volumes: src: external: truedocker-sync.ymlとdocker-compose.yml間でVolume名を統一しないと正しく起動しないので注意が必要です。
設定ファイルが準備できたら、docker-sync startこのコマンドで起動してあげると、Volumeを作成して同期が開始されるという仕組みになっています。
Docker-syncを起動した状態でdockerコンテナにVolumeをマウントすると、ホスト-コンテナ間が同期されている状態になる、といった具合です。Docker-syncの欠点は別途インストールが必要な点と、このコマンドを打つ手間があるところでしょうか。
起動しっぱなしでも良いのかも知れませんが、使い終わったら終わらせておきたい気もしますよね…?測定
time dd if=/dev/zero of=/benchmark bs=1k count=100000このコマンドで100MBのファイルを作成する時間を計測するベンチマークを取ってみました。
結果は…
- 通常のVolumeが約25秒
- NFS Volumeが約2.5秒
- Docker-syncが約0.35秒
と、Docker-syncの圧倒的勝利となりました!
NFS Volumeもかなりはやいのですが、Docker-syncはほぼネイティブと変わらない速度ですね。まとめ
いかがだったでしょうか?(殴)
NFSでもかなり早くで感動したのですが、Docker-syncはさらに早くてこんなにも違うのかと驚きました。
ここまでMagento Adventcalendarっぽく無い内容でしたが、Magento2はプロジェクトのファイル数がどうしても多くなってしまうので、読み書きのスピードはとても大事になってきます。
今回のこの結果を踏まえて次回、どうマルチOSに対応したdocker-compose.ymlを書くといいのかを書いていこうかと思います。
- 投稿日:2019-12-11T22:02:27+09:00
macOS CatalinaでSwiftLintが"zsh: illegal hardware instruction"というエラーで利用できない場合の対処法
macOS CatalinaでSwiftLintを利用しようとした際にエラーが出て、対処しようとしたもののエラーメッセージが分かりにくくて時間がかかってしまったので、メモしておく
環境
- macOS 10.15.1
- シェル: zsh (デフォルト)
- Xcode 11.3
結論
xcode-select
でXcodeアプリに含まれるデベロッパーツールを選択していなかったことが原因であった詳細
XcodeとSwiftLintをインストールした後でLintコマンドを実行すると、以下のようなエラーが吐かれていた
% swiftlint Fatal error: Loading sourcekitd.framework/Versions/A/sourcekitd failed: file /private/tmp/swiftlint-20191203-72607-1br7cj0/.build/checkouts/SourceKitten/Source/SourceKittenFramework/library_wrapper.swift, line 39 zsh: illegal hardware instruction swiftlint
xcode-select
で利用するデベロッパーツールのディレクトリを確認すると、以下のようになっていた% xcode-select -p /Library/Developer/CommandLineTools
上記にはSwiftの解析ツール等が含まれていないため、SwiftLintがエラーを吐いて停止していた模様
以下のようにXcode.app
の中のデベロッパーツールを選択することで、SwiftLintが正常に実行されるようになった% sudo xcode-select -s /Applications/Xcode_11.3.app/Contents/Developer参考
- 投稿日:2019-12-11T12:16:32+09:00
Medisのインストール時で詰まったこと
はじめに
MacでRedisのGUIクライアントを求めていて、以下の記事の通り対応してみました。
https://qiita.com/rsuzuki/items/ff0891e4ae7e44ab7946PC情報
・ MacBook Pro macOS Mojave バージョン 10.14.6
・ npm バージョン 6.13.1
・ node.js バージョン 13.2.0実行してみて起きたエラー
・ npm startを実行して起きたエラー
> medis@1.0.3 start /Applications/medis > electron . /Applications/medis/node_modules/electron/index.js:14 throw new Error('Electron failed to install correctly, please delete node_modules/electron and try installing again') ^ Error: Electron failed to install correctly, please delete node_modules/electron and try installing again at getElectronPath (/Applications/medis/node_modules/electron/index.js:14:11) at Object.<anonymous> (/Applications/medis/node_modules/electron/index.js:18:18) at Module._compile (internal/modules/cjs/loader.js:1121:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:1160:10) at Module.load (internal/modules/cjs/loader.js:976:32) at Function.Module._load (internal/modules/cjs/loader.js:884:14) at Module.require (internal/modules/cjs/loader.js:1016:19) at require (internal/modules/cjs/helpers.js:69:18) at Object.<anonymous> (/Applications/medis/node_modules/electron/cli.js:3:16) at Module._compile (internal/modules/cjs/loader.js:1121:30) npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! medis@1.0.3 start: `electron .` npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the medis@1.0.3 start script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above. npm ERR! A complete log of this run can be found in: npm ERR! /Users/XXXXX/.npm/_logs/YYYY-MM-DDTXX_XX_XX_XXXZ-debug.logなんかErectron正しくインストールできてへんで。
インストールし直してや。
みたいなことを言われているような。対応したこと
$ node node_modules/electron/install.js結果
Downloading tmp-86876-1-SHASUMS256.txt-4.2.12 [============================================>] 100.0% of 4.79 kB (4.79 kB/s)$ npm start > medis@1.0.3 start /Applications/medis > electron .うまくいったみたい
以上、現場からお伝えしました。参考情報
- 投稿日:2019-12-11T11:29:24+09:00
dein.vim + syntastic + flake8 で vim上でpythonの文法チェックする for Mac
flake8
https://pypi.org/project/flake8/
Pythonの文法チェックツール。
以下の3つのライブラリのラッパーとなる
- PyFlakes
- pycodestyle
- Ned Batchelder’s McCabe script
dein.vim
https://github.com/Shougo/dein.vim
dein.vim は vimプラグインマネージャーsyntastic
https://github.com/vim-syntastic/syntastic
vim における汎用シンタックスチェッカーflake8のインストール
$ pip install flake8 $ flake8 --version 3.7.9 (flake8-docstrings: 1.5.0, pydocstyle: 5.0.1, mccabe: 0.6.1, pycodestyle: 2.5.0, pyflakes: 2.1.1) CPython 3.7.1 on Darwindein.vimとsyntasticのインストール
$ cd /tmp $ curl https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh > installer.sh $ sh ./installer.sh ~/.cache/dein $ vim ~/.vimrcvimのバージョンがの場合、バージョンを1.5に落とす
Note: If you use Vim 7.4, please use dein.vim ver.1.5 instead.
$ vim --version | head -n1 VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jun 28 2019 13:59:14)$ cd /.cache/dein/repos/github.com/Shougo/dein.vim $ git checkout -b 1.5 1.5既存の~/.vimrc 下記を追記
~/.vimrc"---------------------------------------------------------- " Vim/Neovim plugin manager " https://github.com/Shougo/dein.vim "---------------------------------------------------------- "dein Scripts----------------------------- if &compatible set nocompatible " Be iMproved endif " Required: set runtimepath+=~/.cache/dein/repos/github.com/Shougo/dein.vim " Required: if dein#load_state('~/.cache/dein') call dein#begin('~/.cache/dein') " Let dein manage dein " Required: call dein#add('~/.cache/dein/repos/github.com/Shougo/dein.vim') " Add or remove your plugins here like this: "call dein#add('Shougo/neosnippet.vim') "call dein#add('Shougo/neosnippet-snippets') " syntax checking plugin " https://github.com/vim-syntastic/syntastic call dein#add('scrooloose/syntastic') " Required: call dein#end() call dein#save_state() endif " Required: filetype plugin indent on syntax enable " If you want to install not installed plugins on startup. if dein#check_install() call dein#install() endif "End dein Scripts------------------------- "---------------------------------------------------------- " syntastic "---------------------------------------------------------- set statusline+=%#warningmsg# set statusline+=%{SyntasticStatuslineFlag()} set statusline+=%* let g:syntastic_always_populate_loc_list = 1 let g:syntastic_auto_loc_list = 1 let g:syntastic_check_on_open = 1 let g:syntastic_check_on_wq = 0 "---------------------------------------------------------- " flake8 "---------------------------------------------------------- let g:syntastic_python_checkers = ["flake8"]実際に使用してlintしてくれるか確認する。
vim /tmp/test.py
- 投稿日:2019-12-11T10:14:07+09:00
PCの高速化と作業効率化 Tips v1.0 【 Speeding up the PC and improving work efficiency】
Google Photo
- 全ての写真や動画をPOOL(プール)する。
- HDDに残さなくても良いもの。
- 整理や思い出はWebで完結しよう。(現代移行)
Google Drive
- クラウドストレージ 15GB
- USBやDropboxの代わり。
- 複数アカウント作成と起動
Gmail
- 検索フィルタ
- size: 1m サイズ1mbを超えるメール
Google Keep
- 無制限容量のメモ。どんどんアイディアを書き込む。
Google Slide
- スライド埋め込み,自動保存, ファイル(データ)をローカルで所有することが不要
Chromeウェブストア
拡張機能
- uBlock Origin 広告コンテンツフィルタリング
- SearchPreview サムネイルを表示する
- (Full Page Screen Capture ブラウザ1ページスクリーンショットする。場合に応じてON/OFF)
- (Perapera Chinese Popup Dictionary 中国語ピンイン表示。)
テーマ
- 単色のテーマ 黒。たまに切り替えることで気持ちをリセット。
YouTube
検索設定
ページあたりの表示件数 20~30(任意)
ブックマークバー
- ブックマークバー非表示(人による)
- 一つのフォルダにストックする(mixされる)
- 全履歴削除
- URL検索候補の削減
上級者
Chrome高速化 chrome://flags [1]
Desktop
- 壁紙自動収集と切り替え(FreshBackMac or Dynamic Theme)飽き性の方向け
- 何も置かない
- タスクマネージャー or ターミナルでKill
- キャッシュクリーナーを不定期で実施(CCleaner等)
- ファイル全検索ソフトを使用する(Everything(Windows), Easyfind(Mac))
- セキュリティソフトは不要
- Dropbox(もしくはGoogleDrive等)はスタートアップ時に起動
- ファイルの安全保証。後々停止しても良い。
Windows10な私
- 初期不要アプリアンインストール
- 常駐プロセスの停止
- Cortana(コルタナ)停止
- あまり使わないアプリケーションの削除
Macな私
- ダークモード (Mojave~)
- メモの同期がスムーズ(iPhoneとMac)
- Dock、メニュバーを隠す(表示領域の拡大)
- ズーム機能
- Night Shift(ブルーライトカット)
- 通知センターOFF
- PCが遅いと感じたらセーフモード実行 (Shift + 起動)
- Finderの表示結果が反映されなかったら
- cmd
killall Finder
- あまり使わないアプリケーション(app)の削除
- Chromeの立ち上げが遅いとき、起動が早いSafariを開く。
インターネット
- WIFI DNS 8.8.8.8
- 有線接続(通信距離に応じて)
アウトプット
日頃からSNS、ブログ、メモ(Webサービス)、動画等で必要な情報を公開する。
- 日々の物事が定着する
- アクセス解析やマーケティングを学ぶ(時代)
- 自分を残す。
上級
- 深層ウェブ・ダークウェブで更なる情報収集
- ハッカー、真相、例のアレなどの裏情報(No good)。[2]
- VPN・IP、アドレス偽造
- 位置情報の匿名化
- アクセス制限の回避
最後に
他にも最適な方法があったらコメント下さい。出来るだけ不要なソフトは入れずに。
【参考】
[1] 手軽なのに効果絶大『Chrome』を高速化する14の設定(flags)
[2] 【深層web】深層ウェブの歩き方、教えてやるよ【第一回
- 投稿日:2019-12-11T10:14:07+09:00
PCの高速化と作業効率化 Tips 【 Speeding up the PC and improving work efficiency】
Google Photo
- 全ての写真や動画をPOOL(プール)する。
- HDDに残さなくても良いもの。
- 整理や思い出はWebで完結しよう。(現代移行)
Google Drive
- クラウドストレージ 15GB
- USBやDropboxの代わり。
- 複数アカウント作成と起動
- 画像→Google Document OCR
Gmail
- 検索フィルタ
- size: 1m サイズ1mbを超えるメール
Google Keep
- 無制限容量のメモ。どんどんアイディアを書き込む。
Google Slide
- スライド埋め込み,自動保存, ファイル(データ)をローカルで所有することが不要
Chromeウェブストア
拡張機能
- uBlock Origin 広告コンテンツフィルタリング
- SearchPreview サムネイルを表示する
- (Full Page Screen Capture ブラウザ1ページスクリーンショットする。場合に応じてON/OFF)
- (Perapera Chinese Popup Dictionary 中国語ピンイン表示。)
テーマ
- 単色のテーマ 黒。たまに切り替えることで気持ちをリセット。
YouTube
検索設定
ページあたりの表示件数 20~30(任意)
ブックマークバー
- ブックマークバー非表示(人による)
- 一つのフォルダにストックする(mixされる)
- 全履歴削除
- URL検索候補の削減
上級者
Chrome高速化 chrome://flags [1]
Desktop
- 壁紙自動収集と切り替え(FreshBackMac or Dynamic Theme)飽き性の方向け
- 何も置かない
- タスクマネージャー or ターミナルでKill
- キャッシュクリーナーを不定期で実施(CCleaner等)
- ファイル全検索ソフトを使用する(Everything(Windows), Easyfind(Mac))
- セキュリティソフトは不要
- Dropbox(もしくはGoogleDrive等)はスタートアップ時に起動
- ファイルの安全保証。後々停止しても良い。
Windows10な私
- 初期不要アプリアンインストール
- 常駐プロセスの停止
- Cortana(コルタナ)停止
- あまり使わないアプリケーションの削除
Macな私
- ダークモード (Mojave~)
- メモの同期がスムーズ(iPhoneとMac)
- Dock、メニュバーを隠す(表示領域の拡大)
- ズーム機能
- Night Shift(ブルーライトカット)
- 通知センターOFF
- PCが遅いと感じたらセーフモード実行 (Shift + 起動)
- Finderの表示結果が反映されなかったら
- cmd
killall Finder
- あまり使わないアプリケーション(app)の削除
- Chromeの立ち上げが遅いとき、起動が早いSafariを開く。
インターネット
- WIFI DNS 8.8.8.8
- 有線接続(通信距離に応じて)
アウトプット
日頃からSNS、ブログ、メモ(Webサービス)、動画等で必要な情報を公開する。
- 日々の物事が定着する
- アクセス解析やマーケティングを学ぶ(時代)
- 自分を残す。
上級
- 深層ウェブ・ダークウェブで更なる情報収集
- ハッカー、真相、例のアレなどの裏情報(No good)。[2]
- VPN・IP、アドレス偽造
- 位置情報の匿名化
- アクセス制限の回避
最後に
他にも最適な方法があったらコメント下さい。出来るだけ不要なソフトは入れずに。
【参考】
[1] 手軽なのに効果絶大『Chrome』を高速化する14の設定(flags)
[2] 【深層web】深層ウェブの歩き方、教えてやるよ【第一回
- 投稿日:2019-12-11T10:10:08+09:00
【Windows歴12年/Mac歴7年】が厳選する音楽(再生,ダウンロード,変換) PC版ソフト&サイト
長年PCを使ってきて音楽の編集に便利なソフト、サイトをまとめた。(メモ)
PC版動画編はこちら↓
【Windows歴12年/Mac歴7年】が厳選する動画(再生,ダウンロード,変換) PC版ソフト&サイト音楽
音楽再生ソフト
.flac, .m4aをはじめとする多数の音楽ファイル形式に対応
Windows → AIMP3
Mac → VOX音楽(mp3)ダウンロードソフト
Youtube
Windows & Mac → MediaHuman YouTube To MP3 Converter
https://www.mediahuman.com/ja/・プレイリスト丸ごとダウンロード可能、YouTube MP3ダウンローダーの中で最強
・各種設定、タグ、ビットレート、ターボ機能。
・プレイリストのURLで複数ダウンロード可能(いくらでも,1000~)
・アルバムアート取得(YouTubeの動画サムネイル)、タグ編集稀にURL先がエラーが起こる場合は、mp3ダウンロードを利用する
音楽(mp3)ダウンロードサイト
YouTube
ClipConverter.cc: YouTube変換
https://www.clipconverter.cc/jp/
Search Keyword 「cc converter」「cc youtube」・10時間かかる動画も変換可能
使い方に難あり
・YouTube再生中の動画は、Converterでエラーが起こることもある昨今YouTubeからMP3へ変換&ダウンロードにおいては多くのダウンロードサイトが
新しく生まれたり、潰れたりするが、音質にこだわりがなくなった自分にとっては、
基本的にどれを使っても変換プロセスの役割を果たす。niconico動画
offliberty
http://offliberty.io/
音質指定は出来ないが、使える。nicozonは詐欺。
変換
Windows
AIMP:flac → mp3, m4a等
Xrecode: mp3(320kbps)→mp3→mp3(128kbps)Mac
QuickTime
MP4→AAC, MP3を書き出せる
- 投稿日:2019-12-11T02:32:13+09:00
Mac wifiをワンキーでON/OFFする
はじめに
記事を書くに至った経緯
- 「wifi on/offするたびに右上にカーソル持っていく人生辛い」
- 「Launchpadの起動とかトラックパッドでやるし、このキーでwifi切り替えられたらええな」
- 「Automatorでwifi切り替えのショートカットつくれるじゃん!」(別記事)
- 「でも環境設定からだとLaunchpadとかのキーが割り当てられないな。。」
- 「Karabiner-Elements使うと、ワンキーでwifi ON/OFFできる!最高!」
- 「てか、この方法論知れば、ワンキーで任意のスクリプトが実行できるしすごい便利じゃない?」
- 「書かねば」
前提
- python3.6以降
- Karabiner-Elements
pythonはsubprocessを使うのに3.6以降が必要。バージョンが合わなければ、スクリプトを各自用意。
概要
- wifi on/offするコマンドを確認
- Automatorでアプリ化
- Karabiner-Elementsでショートカットを割り当て
wifi on/offするコマンドを確認
以下のコマンドで、wifiの接続状態とON/OFFができる
/usr/sbin/networksetup -getairportpower en0 /usr/sbin/networksetup -setairportpower en0 on /usr/sbin/networksetup -setairportpower en0 offnetworksetupコマンドについてはこの記事が参考になる。一次情報は
man networksetup
。
networksetupコマンドの使い方:ヘルプのみかた余談。このコマンドは、接続先のアクセスポイントも指定できるみたい。
/usr/sbin/networksetup -setairportnetwork en0 <ssid> [password](パスワード直書きするのはいいのかな?実用するなら、読み込み権限を制限したパスワードファイルを作って、それを読み込む方法がいい気がする?)
Automatorでアプリ化
この記事を参考にアプリ化。
今回はwifiのon/offを一つのキーでスイッチさせたいので、スクリプトをpythonで書いた。(shell scriptで文字列処理は苦行でした。)
手順は、
- Automatorを起動して、新規作成でアプリケーションを選択
- 左上から「シェルスクリプトを実行」というアクションを選択
- 以下のコマンドをコピペ
- 右上の実行ボタンでチェック
source=" import subprocess cmd = '/usr/sbin/networksetup -getairportpower en0'.split(' ') ret=subprocess.run(cmd,capture_output=True,encoding='utf-8') en0_state=ret.stdout.splitlines()[0].split(' ')[-1] if en0_state.startswith('On'): cmd = '/usr/sbin/networksetup -setairportpower en0 off'.split(' ') ret=subprocess.run(cmd) else: cmd = '/usr/sbin/networksetup -setairportpower en0 on'.split(' ') ret=subprocess.run(cmd) " /usr/local/bin/python3 -c $source
/usr/local/bin/python3
は、python3のインストール先によって適宜変更してください。pythonのバージョンが合わない方は、subprocessモジュールの使い方や、使わなくてもいい方法を調べてください。実行ボタンで確認できたら、好きな場所に保存しましょう。自分は
/Applications/SwitchWifi.app
に保存。Karabiner-Elementsでショートカットを割り当て
みんなだいすきKarabiner-Elements。キーボード沼ならぬ、キーバインド沼がここにある。
設定の仕方を確認
Karabiner-Elements全体の設定は、JSONファイルで保存されており、実際のファイルは~/.config/karabiner/karabiner.jsonです。
この設定を行う場合、"to"の"shell_command"に実行したいコマンド文字列を設定します
他にもいろんな機能があります。
実際の設定
135行目ぐらいを以下に編集
~/.config/karabiner/karabiner.json{ "from": { "key_code": "f3" }, "to": { "shell_command": "open '/Applications/SwitchWifi.app'" } },これでワンキーでwifiをON/OFFできるようになりました!
さいごに
一つ注意があります。Karabiner-Elementsは任意のコマンドを実行できるので、正直アプリ化は必須ではないです。今回、自分はプログラムがアプリとして独立する方法を選びました。特に理由がなければ、この記事の方法をおすすめします。人によっては、任意の場所にスクリプトを置いて、直接それを実行するように"shell_command"を設定するかもしれません。その方が、アプリの起動を省略できているので動作は早いと思われます。(記事の方法でも十分実用的でした。)
この記事を応用すると、ワンキーで任意のアプリ・スクリプトの実行ができます。なにかいい応用を思いついたら教えてください。記事を引用してくれると嬉しいです。
参考記事