20220108のMacに関する記事は8件です。

Finderの「サーバへ接続」の「よく使うサーバ」リストに一括追加する

Finderの「サーバへ接続」画面において,+ ボタンを押すと,「よく使うサーバ」にサーバのURLを追加できます。 ここに登録したいサーバがたくさんあるとき,コマンドで一括追加したくなります。 かつては, $ /usr/bin/sfltool add-item -n "hoge" com.apple.LSSharedFileList.FavoriteServers "smb://hoge@192.168.0.100" のようなコマンドで「よく使うサーバ」リストに追加ができました。これにより,~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.FavoriteServers.sfl2 にサーバのエントリが追記されたのです。 これをシェルスクリプトにしておけば,よく使うサーバを大量に一括登録できたのですが,なんと,macOS 10.13 以降,sfltool コマンドに add-item というサブコマンドは廃止され,復活の予定はないそうです。 そこで,com.apple.LSSharedFileList.FavoriteServers.sfl2 にエントリを追加するには,結構面倒なプログラミングが必要になりました。Swiftコードで書くとこのようになります(エラー処理はテキトーです)。 import Foundation let error = NSError(domain: "error", code: -1, userInfo: nil) let sflURL = URL(fileURLWithPath: NSHomeDirectory()).appendingPathComponent("Library").appendingPathComponent("Application Support").appendingPathComponent("com.apple.sharedfilelist").appendingPathComponent("com.apple.LSSharedFileList.FavoriteServers.sfl2") func readFavoriteServers() throws -> (items: NSArray, properties: NSDictionary, existingURLs: [URL]) { guard let dict = try? NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(Data(contentsOf: sflURL)) as? NSDictionary, let items = dict["items"] as? NSArray, let properties = dict["properties"] as? NSDictionary else { throw error } // 型情報 // dict: NSDictionary<NSString*,id>* // items: NSArray<NSDictionary<NSString*,id>*>* // properties: NSDictionary<NSString*,id>* let existingURLs: [URL] = items.compactMap { item in var stale: Bool = false guard let item = item as? NSDictionary, let data = item["Bookmark"] as? Data, let url = try? URL(resolvingBookmarkData: data, bookmarkDataIsStale: &stale) else { return nil } return url } return (items: items, properties: properties, existingURLs: existingURLs) } func addFavoriteServer(_ paths: String...) throws { guard let (oldItems, properties, existingURLs) = try? readFavoriteServers() else { throw error } let uniqueURLs = Set(existingURLs) print("Existing items: " + existingURLs.description) let newItems = NSMutableArray(array: oldItems) paths.forEach { path in guard let encodedPath = path.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed), let url = URL(string: encodedPath), let bookmark = try? url.bookmarkData(options: [], includingResourceValuesForKeys: nil, relativeTo: nil) else { return } let entry: [String:Any] = [ "Name": path, "Bookmark": bookmark, "uuid": UUID().uuidString, "visibility": 0, "CustomItemProperties": NSDictionary() ] if uniqueURLs.contains(url) { print("Skip: " + path) } else { newItems.add(entry) print("Add: " + path) } } let newDict: [String:Any] = [ "items": newItems, "properties": properties ] do { try NSKeyedArchiver.archivedData(withRootObject: newDict, requiringSecureCoding: true).write(to: sflURL) } catch let e { throw e } } // main routine do { try addFavoriteServer("smb://192.168.100.1","smb://192.168.100.2","smb://192.168.100.3","smb://192.168.100.4") let (_, _, existingURLs) = try readFavoriteServers() print("New items: " + existingURLs.description) print("Restart your Mac for the changes to take effect!") } catch let e { print(e.localizedDescription) } このコードでは,最後のメインルーチンのところで addFavoriteServer("smb://192.168.100.1","smb://192.168.100.2","smb://192.168.100.3","smb://192.168.100.4") とすることで,サーバのURLを一括追加しています。addFavoriteServer は,引数に与えられたURLたちを,既存のサーバURLと照合して,既存のURLはスキップして,新しいURLのみだけを順に追加していきます。 この変更をFinderのUI上に反映させるためには,macOSの再起動が必要でした。(Finderの再起動だけで済むという話もありましたが,自分の環境ではOS全体を再起動しないと変更が反映されませんでした。)
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MacOsで外部ストレージにAndroid Projectを置いてビルドが通らない時の対処

Macで外部ストレージにAndroidProjectを置きBuildが出来ない時の対処 前置き MacにAndroidStudioをインストールしてBuildが通らない問題起きたので、 忘れないように自身のメモとして残して置きます。 環境 Android Studio arctic fox MacBookPro OS 12.1 外部SSD 事象 Android Studioで外部SSDにAndroid Projectを新規で作成。 その後gradleのビルドが実行するとエラーが発生してビルドが失敗した エラー内容↓ Caused by: org.gradle.internal.service.ServiceCreationException: Could not create service of type OutputFilesRepository using ExecutionGradleServices.createOutputFilesRepository(). 対応 [システム環境設定]> [セキュリティとプライバシー]> [プライバシー]タブを開き、 [フルディスクアクセス]の項目にAndroid Studioを追加。 これでビルドが成功するようになりました。 gradleのヘルプサイトで 外付けHDDに基づくコードでMacOSでこの問題が発生している可能性がある場合、私にとっての解決策は、Javaフルディスクアクセスを許可するようにセキュリティとプライバシーを更新することでした。 [システム環境設定]> [セキュリティとプライバシー]> [プライバシー]タブで、リストから[フルディスクアクセス]を選択し、編集してJavaを追加します。 (*自動翻訳済み) と言うコメントがあり上記のように設定を行いました。 参考・引用元 ・https://discuss.gradle.org/t/could-not-create-service-of-type-outputfilesrepository-using-executiongradleservices-createoutputfilesrepository/32770/4
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Mac】csv(スプレッドシート)で一括ファイル名変更

複数のファイル名をリスト(csv・xlsx・スプレッドシート)で一括で変更したいと思うことが増えたので方法を調べました。 ちなみに使用するPCはMacです。 有用そうなのはこの3つ 1. 「Renamer」(リネームアプリ)を使う 1. 「Automator」を使う 1. 「ターミナル」を使う 1.「Renamer」を使う Renamer mac用の有料アプリ。ざっと調べただけですがcsvでの一括変換に対応してた。 リネームソフトいっぱいあると思うので、調べたら他にもあるかもしれません。 日本語非対応、有料(2638円くらい)、試用期間15日。 開くとこんな感じ。 Find and Replace > Rename from Spreadsheet で、Choose Flie でcsvファイルを選択します。 きちんと読み込めていれば、こんな感じで current name と new が確認できます。 英数字->かな、英数字->英数字、かな->かな 全部多分いける。 記号や半角スペースもいけます!すごい! が、こんな感じの原因不明のエラーが出ることがあって、いろいろ検証してみたんですが結局わからなかったのであきらめました。 元ファイルがみつからないとか、new nameが指定されてないときに出るエラーのはずなんですが原因不明。 でもこれが起きなければ、一番強力な一括変換方法だと思います!有料だけど。 2.「Automator」を使う 【参考】CSVから一括でファイル名を変更するMacアプリを作った Gitに記載あるように英数字、スペース不可です。 英数字やスペースの入ってないファイルならこちらで配布していただいてるアプリが一番簡単だし手順が少ないかも。 かなの含まれるファイル名にしようとするとぐちゃぐちゃになって使えません。 3.「ターミナル」を使う 上記の記事で採用されなかった方法で結局やりました。 【参考】Macでファイル名変更リストを作成して、ターミナルから大量ファイルを一発でリネームする方法! ファイル名にかなが含まれている場合は、ターミナルにめちゃくちゃ抵抗ないならこの方法が一番トラブルなさそう。 …が、それでもいくつかトラブルあったのでこちらにメモしておきます。 ちなみに、スペースが入ってるとうまくいきません。 手順 ① スプレッドシートでリストを作る。 こんなのつくりました。 もし使えそうだったらコピーしてつかってください。 参考:【Mac】Finderでフォルダ内のファイル名一覧を取得する方法 ② コマンドだけをテキストエディタに貼り付ける(VScodeつかいました) ③ シェルスクリプト(.sh)として保存し、名前を変更したいファイルが入ったフォルダの中に入れる ④ ターミナルで上記フォルダに移動し、シェルスクリプトを実行 $ cd [該当フォルダをターミナル上にドロップアウトすると楽] $ sh re-name.sh 詳しい手順は元記事を参照してください! なんか末尾に「?」がはいる 解決方法 改行コードを CRLF から LF に変更する。 ↓ 改行コード「CRLF」になってると一括で名前変えた時に「?」がついちゃうみたい。改行文字で変になるっぽい。(だから一番末行には?がついてない) VScodeだと、「CRLF」って書いてあるところクリックすると変更できます。 【参考】改行コードの種類の「CR」「LF」「CRLF」の意味と違い なんか1つ目のファイル(1行目)だけ変更できない re-name.sh: line 1: mv: command not found こんなエラーがでる。 解決方法 新規で作ってコピペで保存しなおす。 エクセルからコピペしたりcsvから開いたりすると行頭にBOMっていうのが入っちゃうことがあるっぽい。 ↓こういう表示になってるとBOMがついてて失敗する VScodeにはエンコード付きで開き直す機能があるんですが、それだとうまくいかないので新規ファイル作ってコピペしなおしましょう。 で、BOMのついてないUTF-8に保存しなおせば解決! なんだ〜!??!BOM〜〜〜? ライバーやってると、Indesgnで画像をたくさん作ったりする機会が割とあって(ネップリとか人ごとに作ったり)、でもIndesignってスプレッドに名前つけられないので…。修正して書き出すたびに名前をつけ直すのがしんどすぎたので…。 人の名前のついたファイルとか作るときに手打ちだとミスりやすいし、英数表記だと、英語っぽい名前の人の場合綴りがわかんないことが多いのでかなで名前を一括変換したかった!!!できた!!! あとネップリの場合は特に、コンビニで印刷時、一応サムネが小さく表示されると思うけど、ライバーさんの名前も併記されてたほうがわかりやすいと思うので…。 今後はこれで時短していきます!?
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

mac 環境設定メモ

概要 雑なTipsを色々とまとめる奴。個人用 各端末(Terminal)でhistoryを共有する方法 for zsh // .zshrc export HISTFILE=~/.zsh_history setopt share_history setoptは他に色々設定がありそう
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

multipass + docker on Mac

Mac でのDocker環境構築 いよいよ DockerDesktopの猶予期限がくるので、移行しました。 下記どちらでコマンドをうっているのか分かりづらいので セクションタイトルに Macで実行する場合は "on Mac"、 仮想環境のUbuntuで実行する場合は "on Ubuntu"と入れる multipass (ubuntu の仮想起動環境)インストール on Mac https://multipass.run/ 1. 上記からmac用binaryをDownload 2. installer を起動 multipass でubuntu:latest(20.04) 起動 on Mac あとからmemory, disk sizeを変更するのがとても大変なので最初から必要な分指定する。目的としてkubernetesのローカルデバッグをkindを使用して動かすので以下のようにmemory 10G, disk 20G, cpu core 4 程度は最低必要。 % multipass launch --name ryujidev -m 10G -d 20G -c 4 Launched: ryujidev % multipass ls Name State IPv4 Image ryujidev Running 192.168.64.3 Ubuntu 20.04 LTS % multipass info ryujidev Name: ryujidev State: Running IPv4: 192.168.64.3 172.17.0.1 172.18.0.1 Release: Ubuntu 20.04.3 LTS Image hash: 8fbc4e8c6e33 (Ubuntu 20.04 LTS) Load: 0.98 0.89 1.09 Disk usage: 12.3G out of 19.2G Memory usage: 2.3G out of 9.7G Mounts: -- あとから cpu, memoryを変更する方法 最初に指定していたほうがよいのですが、kubernetesでpodを起動しようとして、 podのstatusがpendingのままで進まないということがよくあります。 kubectrl describe pods をするとCPUやメモリが足りていないというのがわかります。 $kubectl describe pods -n istio-system ... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning FailedScheduling 27m (x1 over 28m) default-scheduler 0/1 nodes are available: 1 Insufficient cpu. Warning FailedScheduling 15m (x1 over 16m) default-scheduler 0/1 nodes are available: 1 Insufficient cpu. Warning FailedScheduling 14h (x365 over 20h) default-scheduler 0/1 nodes are available: 1 Insufficient cpu. こんなときはしょうがないので以下の手順でmultipassが割り当てる cpu, memoryを変更できます https://github.com/canonical/multipass/issues/1158#issuecomment-548073024 # stop multipassd sudo launchctl unload /Library/LaunchDaemons/com.canonical.multipassd.plist # edit /var/root/Library/Application Support/multipassd/multipassd-vm-instances.json # you'll need sudo for that # start multipassd again sudo launchctl load /Library/LaunchDaemons/com.canonical.multipassd.plist 以下が編集したあとのmultipassd-vm-instances.jsonの例です { "ryujidev": { "deleted": false, "disk_space": "21474836480", "extra_interfaces": [ ], "mac_addr": "52:54:00:e1:9d:18", "mem_size": "10737418240", "metadata": { }, "mounts": [ ], "num_cores": 4, "ssh_username": "ubuntu", "state": 4 } } 参考:あとからDiskSizeを変更する方法 下記に説明があるので、やってみたのですが 2回ともmultipassでstartし直そうとすると disk imageが壊れてしまったようでした。 深くおっていないですがdisk sizeは変えなくて良いように最初に多めに割り当てておくのが無難です。 ubuntu に local directory をmount, login on Mac mountするかどうかは任意 (base) ~ % multipass mount ~/git ryujidev:/home/ubuntu/git (base) ~ % multipass shell ryujidev Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.4.0-92-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage System information as of Sat Jan 8 09:05:44 JST 2022 System load: 0.13 Usage of /: 28.0% of 4.67GB Memory usage: 2% Swap usage: 0% Processes: 119 Users logged in: 0 IPv4 address for enp0s2: 192.168.64.3 IPv6 address for enp0s2: fd76:3e59:29b1:1bdf:4449:33ff:fe91:8c20 1 update can be applied immediately. To see these additional updates run: apt list --upgradable Last login: Sat Jan 8 09:04:25 2022 from 192.168.64.1 ubuntu@ryujidev:~$ ls git snap docker Install on Ubuntu https://docs.docker.com/engine/install/ubuntu/ 上記を直接参照したほうがよいですが何度も再実行するときのメモ用に下記にコマンドを抜き出しておきます。 sudo apt-get remove docker docker-engine docker.io ubuntu@ryujidev:~/git$ sudo apt-get update sudo apt-get install ca-certificates curl gnupg lsb-release curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io sudo docker run hello-world sudo なしでdocker実行するためのGroup追加 on Ubuntu sudo gpasswd -a $USER docker # logout & login, then enabled. Go package and make install on Ubuntu sudo add-apt-repository ppa:longsleep/golang-backports sudo apt update sudo apt install golang-go sudo apt install make remote debbug on Mac まず下記のように multipass 内で生成されたssh 公開鍵をコピーしておく sudo install -m 600 -o $USER -g $(id -g) /var/root/Library/Application\ Support/multipassd/ssh-keys/id_rsa ~/.ssh/multipass.id_rsa ~/.ssh/config に下記の設定を追記しておく(HostNameはmultipassで起動したubuntuのLocalIPに合わせる) Host ryujidev User ubuntu HostName 192.168.64.3 IdentityFile ~/.ssh/multipass.id_rsa これでmultipass shell だけでなく、 ssh ryujidev でubuntuにアクセスできるようになりました。 あとは下記を参考に vscodeのremote debug で ubuntuに接続し、src code本体は、仮想環境ubuntuにgitで取得して、UIは mac 上の vscodeで編集できます。 https://code.visualstudio.com/docs/remote/ssh#_connect-to-a-remote-host container のポートフォワード(WebServerのデバッグ等) https://code.visualstudio.com/docs/remote/ssh#_forwarding-a-port-creating-ssh-tunnel docker, k8s の動作確認 以下のように上記vscode remote debugで 仮想 ubuntuにつなぎ、vscodeのターミナルで、kind, k8s をたちあげてistioctl で kialiを開いてみます。(istioctlについての参考:https://qiita.com/kozayupapa/items/dfbabe1bd6eb40f4ddf9) 上記で実行するとvscode ポートタブに移動すると port forward設定が自動で追加しれてくれています!(便利!!かゆいところにてがとどいているさすがMicrosoft) MacのBrowserで localhost:20001 にアクセスするとちゃんと開いて確認できました。 これで無事 DockerDesktopを卒業できました。 今後また container CI/CDで利用することになったら再度Dockerファミリにお世話になろうと思います。 しばらくは AzureのContainerRepositoryを利用する予定なのでmultipassで十分かなと思いました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MenubarXがとてもいい

概要 macのメニューバーにwebサイトを常駐させておけるアプリ kibelaを日報代わりに使っているのですが、小さな画面でサクッと開いてサクッと書けるので便利。タブを開き過ぎてどこいったっけなーってことも無いし、よく使うサイトを登録しておけばそもそもタブを開きすぎることもなくなるかも…?
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

macOS Monterey (バージョン12.1) Python3.8.0がinstallできなかったときの対処法

macOS バージョン12にて、下記記事を参考にPython3.8.0をinstallしようとした際にエラーが発生 エラー内容 % pyenv install 3.8.0 //省略 error: implicit declaration of function 'sendfile' is invalid in C99 [-Werror,-Wimplicit-function-declaration] ret = sendfile(in, out, offset, &sbytes, &sf, flags); 試したこと https://github.com/pyenv/pyenv/issues/1643 上記のgithub issuesを読むと、homebrewからこのエラーのパッチが出てるとのことなので、参考にターミナルで以下のコマンドを入力 pyenv 3.8.0のインストール % CFLAGS="-I$(brew --prefix openssl)/include -I$(brew --prefix bzip2)/include -I$(brew --prefix readline)/include -I$(xcrun --show-sdk-path)/usr/include" LDFLAGS="-L$(brew --prefix openssl)/lib -L$(brew --prefix readline)/lib -L$(brew --prefix zlib)/lib -L$(brew --prefix bzip2)/lib" \ pyenv install --patch 3.8.0 < <(curl -sSL https://github.com/python/cpython/commit/8ea6353.patch\?full_index\=1) pyenv 3.8.3のインストール % CFLAGS="-I$(brew --prefix openssl)/include -I$(brew --prefix bzip2)/include -I$(brew --prefix readline)/include -I$(xcrun --show-sdk-path)/usr/include" LDFLAGS="-L$(brew --prefix openssl)/lib -L$(brew --prefix readline)/lib -L$(brew --prefix zlib)/lib -L$(brew --prefix bzip2)/lib" \ pyenv install --patch 3.8.3 < <(curl -sSL https://github.com/python/cpython/commit/8ea6353.patch\?full_index\=1) pyenv version コマンドでpyenvの3.8.0と3.8.3がインストールできているのを確認 pyenv global 3.8.0でバージョン切り替えを行い、ターミナルを再起動 python -Vでバージョン確認 % python -V Python 3.8.0 無事Python3.8.0のinstall成功
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【備忘録】Macでtensorflowの環境構築

前提 備忘録です。 あまり理解していないので自分がやったことを書いています。 詳しくは参考文献を見ていただきたいです。 参考 ここを参考にしました。 環境 ・macOS Monterey : 12.0.1 ・anaconda-navigator 環境構築 1. フォルダを作成 今回は書籍(documents)にフォルダを作った。 conda create -n tensorflow pip python=2.7 (or python=3.3) conda activate tensorflow promptが (tensorflow)$ になればとりあえず良い。 2. jupyterのインストール conda install jupyter 3. tensorflowのインストール pip --no-cache-dir install -I -U tensorflow 4. jupyter notebookの起動 jupyter notebook コメント 備忘録として書いたので、全く解説しておりません。。。(あまり理解できていません。) 新卒エンジニア、学び続けて頑張ります。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む