20220201のMacに関する記事は5件です。

Macにmoshで接続する方法

Mac「で」moshを使いたい人は回れ右。 Mac上でmosh-serverを動かして、そこに接続したい人向け。 環境 サーバ:Mac mini(M1), Monterey クライアント:iPad Pro 11-inch(1st generation), iPadOS 15.2.1, Blink(14.0.6) Catalina以降のアプリケーションファイアウォールがあるOSなら同じ対応と思われる。 設定 Mac側 公式HPの更新がCatalina以前で止まっており使えるか心配だが、Homebrew版がちゃんと更新されているため使える・・・・・・んだけどCatalinaで導入されたアプリケーションファイアウォールが一筋縄でいかない。 brew install mosh システム環境設定 セキュリティとプライバシー ファイアウォール ファイアウォールオプション opt/homebrew/Cellar/mosh/1.3.2_18/bin/mosh-serverの「外部からの接続を許可」 「ダウンロードされた署名付きソフトウェアが・・・」にチェック mosh-serverの場所は各人の環境に合わせること。特に[1.3.2_18]の部分。 さらに次のスクリプトをMac上に作成しておく。これはgithubから持って来たもの。正直、ファイアウォールのon-off以外は機能してないから省略しても問題ないはず。 firewall_switch.sh # i recommend setting up the following alias first alias firepower='sudo /usr/libexec/ApplicationFirewall/socketfilterfw' # temporarily shut firewall off firepower --setglobalstate off # add symlinked location to firewall firepower --add $(which mosh-server) firepower --unblockapp $(which mosh-server) # add homebrew location to firewall firepower --add $(brew --prefix)/Cellar/mosh/1.3.2_2/bin/mosh-server firepower --unblockapp $(brew --prefix)/Cellar/mosh/1.3.2_2/bin/mosh-server # re-enable firewall firepower --setglobalstate on 本来はこれだけで成功することが期待されるけど残念ながら後述の操作が必要。 クライアント側 特になし。 接続方法 mosh-serverが外部と通信できるようにするために一手間かける。 ちなみにファイアウォールを切ってしまえば何の問題もなくmosh-serverと通信できることから、ファイアウォール周りの問題だと分かる。 クライアントからmosh接続を開始する UDPポートへ接続を試みてる間にクライアントの新規タブもしくはMac側のターミナル上で先述のfirewall_switch.shを実行する 一度接続に失敗する 再びmosh接続を試みるとなぜか成功するようになってる! firewall_switch.shに関してはMacのシステム環境設定でファイアウォールをon-offで代用できたかもしれない。やる気がなくてちゃんと検証してない。 一度mosh接続できるようになると、Macを再起動するまではファイアウォールを弄る必要はない。 結論 Macもmoshサーバになる!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Mysql2::Error: Duplicate entry 'xxx' for key 'PRIMARY' エラー解決方法

エラーの概要 Mysql2::Error: Duplicate entry '100018' for key 'PRIMARY'と表示され、レコードを追加することができず、、 エラーメッセージから主キーが重複しているということは理解できたが、該当の主キーとは何なのか、、 そんな中、無事解決できたので備忘録としてまとめておきます。 結論から、AUTO_INCREMENT属性を該当テーブルのidに設定していたため、レコード作成時にMySQLが自動的にid 番号を割り当てていたことによる重複が原因でした。 実装箇所をテストしていた際に、誤って操作したことによるものだと思われます、、反省。 前提 OS:MAC DB:MySQL TablePlusを使用してDBデータを確認しています。 1.AUTO_INCREMENTの値を確認する 取得する該当テーブルを指定してテーブルデータを確認してみました。 TablePlusの操作 左上のSQLをクリック コマンドを入力し、⌘ + Enterで実行 -- 構文 SHOW TABLE STATUS LIKE ('テーブル名'); -- 出力コマンド SHOW TABLE STATUS LIKE ('orders'); => 100017 出力結果からAUTO_INCREMENTの値が100017であることが確認できました。 2.最大値のレコードを取得 今回の場合、PRIMARYキーのidカラムの重複が原因のため、該当カラムの最大値レコード数を取得してみました。 SELECT MAX(id) FROM orders; => 100133 出力結果からテーブルに存在する1番最後のレコードのidが100133であることが確認できました。 本来なら、次に作成されるレコードのidには100134が付与されるのだが、どういうことかidに100018が付与されてしまい、「 重複してるー 」とエラーメッセージが表示されていたんですね、、 3.次回レコード作成時のAUTO_INCREMENTの値を確認 TablePlusで確認することができます。 TablePlusの操作 左上のitemsをクリックし、該当テーブルを選択する。 画面下にあるStructureをクリックする。 表示されたinfoをクリックし、1番下までスクロールすると確認できます。 ENGINE=InnoDB AUTO_INCREMENT=100018 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='xxx'; 確認したところ、100018と表示されており、本来は100134である必要があります。 4.AUTO_INCREMENTの値を変更 最後に、正しい値をALTER文で変更していきます。 ALTER TABLE orders AUTO_INCREMENT = 100134; 出力後 ENGINE=InnoDB AUTO_INCREMENT=100134 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='xxx'; 先ほど TablePlus で確認したAUTO_INCREMENTの値が反映されていることが分かります。 その結果、無事新規レコードを作成することに成功! 最後に 解決できたときの達成感って格別ですよね笑 SHOW TABLE STATUS で 取得できるデータ 【ストレージエンジンがInnoDBの場合】 項目        情報 Name テーブル名 Engine テーブルのストレージエンジン名 Version テーブルの .frm file. のバージョン番号 Row_format レコードの保存形式 Rows レコードの行数 Avg_row_length レコードの平均行長 Data_length クラスタ化されたインデックスに割り当てられるおおよその容量 (バイト単位) Max_data_length 未使用 Index_length クラスタ化されていないインデックスに割り当てられる領域の概算量 (バイト単位) Data_free 割り当てられているが、使用されていないバイト数 Auto_increment 次のAUTO_INCREMENT値 Create_time テーブル作成時刻 Update_time データファイルの最新更新時刻 Check_time 最後にチェックされた時刻 Collation テーブルのデフォルトの照合 Checksum ライブチェックサム値 Create_options パーティションテーブルの partitioned が表示(CREATE TABLE で使用される追加のオプション) Comment テーブルを作成時に使用されたコメント
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Macでシェルをbash⇄zshに切り替える方法

Mac OS Catalinaからデフォルトのシェルがbashからzshに変わりました。 「zshに変更したい」「bashに戻したい」などシェルを切り替えたい時があると思います。 本稿では、Macでシェルを切り替える方法を紹介します。 1.現在使用中のシェルの確認 % echo $SHELL /bin/zsh 2.使用可能なシェル一覧の確認 % cat /etc/shells # List of acceptable shells for chpass(1). # Ftpd will not allow users to connect who are not using # one of these shells. /bin/bash /bin/csh /bin/dash /bin/ksh /bin/sh /bin/tcsh /bin/zsh 3.シェルの変更 % chsh -s /bin/bash Changing shell for username. Password for username: ユーザーのパスワードを入力します。 ターミナル再起動後、シェルが切り替わります。 エラーの場合→【chsh: no changes made】 chsh: no changes madeのエラーが出た場合は以下の手順でシェルを変更します。 「システム環境設定」 ↓ 「ユーザとグループ」 ↓ 左下の鍵アイコンをクリックしてロック解除 ↓ 現在のユーザを右クリックして「詳細オプション」 ↓ 「ログインシェル」を変更 4.設定ファイルの読み込み $ cat .zshrc >> .bashrc $ source ~/.bashrc これで設定ファイルの内容が反映されます。 $ cat .zshrc >> .bashrcはファイルをコピーしてるだけなので、切り替え後のシェルに合わせた内容の書き換えが必要です。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Macでシェルをbashやzshに切り替える方法

Mac OS Catalinaからデフォルトのシェルがbashからzshに変わりました。 「zshに変更したい」「bashに戻したい」などシェルを切り替えたい時があると思います。 本稿では、Macでシェルを切り替える方法を紹介します。 1.現在使用中のシェルの確認 % echo $SHELL /bin/zsh 2.使用可能なシェル一覧の確認 % cat /etc/shells # List of acceptable shells for chpass(1). # Ftpd will not allow users to connect who are not using # one of these shells. /bin/bash /bin/csh /bin/dash /bin/ksh /bin/sh /bin/tcsh /bin/zsh 3.シェルの変更 % chsh -s /bin/bash Changing shell for username. Password for username: ユーザーのパスワードを入力します。 ターミナル再起動後、シェルが切り替わります。 エラーの場合→【chsh: no changes made】 chsh: no changes madeのエラーが出た場合は以下の手順でシェルを変更します。 「システム環境設定」 ↓ 「ユーザとグループ」 ↓ 左下の鍵アイコンをクリックしてロック解除 ↓ 現在のユーザを右クリックして「詳細オプション」 ↓ 「ログインシェル」を変更 4.設定ファイルの読み込み $ cat .zshrc >> .bashrc $ source ~/.bashrc これで設定ファイルの内容が反映されます。 $ cat .zshrc >> .bashrcはファイルをコピーしてるだけなので、切り替え後のシェルに合わせた内容の書き換えが必要です。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Python が削除された macOS 12.3 以降で Python 環境をパッケージングする

現時点(2022/02/01)では,macOS の最新版は macOS Monterey 12.2 ですが,次期 macOS アップデートの 12.3 では,macOS の Python 環境に大きな変化がもたらされることになりました。 ニュース これは,2019年に予告されていた「スクリプト環境の粛正」がいよいよ始まったのでしょう。 Scripting language runtimes such as Python, Ruby, and Perl are included in macOS for compatibility with legacy software. Future versions of macOS won’t include scripting language runtimes by default, and might require you to install additional packages. If your software depends on scripting languages, it’s recommended that you bundle the runtime within the app. (49764202) Use of Python 2.7 isn’t recommended as this version is included in macOS for compatibility with legacy software. Future versions of macOS won’t include Python 2.7. Instead, it’s recommended that you run python3 from within Terminal. (51097165) macOS 12.3 の時点では,Python がやられましたが,Perl と Ruby は今のところは大丈夫な模様です。ですが,この予告によれば,Perl や Ruby も近い将来排除されることになるでしょう。 さて,ここでは macOS のPython 環境のこれまでと,デベロッパ側として可能な今後の対応策について考えてみましょう。 macOS 12.2 時点の Python 環境 Python2 : /usr/bin/python に Python 2.7.18 が標準インストール,PyObjC 同梱 Python3 : /usr/bin/python3 に Python 3.8.9 が標準インストール,PyObjC はなし PyObjC とは,Pythonスクリプトの中で Objective-C のAPIが呼び出せるブリッジです。 macOS 12.3 以降の Python 環境 Python2 : /usr/bin/python 自体が存在しない Python3 : /usr/bin/python3 は存在するが,これはダミーみたいなもので,/usr/bin/clang などと同様,初めて実行したときに Command Line Developer Tools のインストールが要求される。 よって,デベロッパーにおかれましては,システム標準でインストールされている Python 2 or 3 を内部的に呼び出して利用するような設計になっているアプリは,今後は「macOS のデフォルト環境には Python 環境は存在しない」という前提に立つよう改修が必要となります。(開発者個人が使う限りにおいては,macOS に標準インストールされている Python に頼らず,Homebrew や MacPorts といったパッケージ管理システム,あるいは pyenv を用いるなどして,好きなバージョンの Python を自分で勝手にインストールすればよいわけですが,配布を前提とするツールを作る場合,全環境で一律にインストールされていると仮定できるコマンド類しか使用できませんからね。) それに対する解決策は,Python 環境を丸ごとパッケージングして「ポータブルな Python 環境」を用意し,それを自分の .app バンドルの中に取り込んで,それを内部的に呼び出す設計にすることです。必要に応じて,PyObjC も包んでおくとよいでしょう。 補足:PyObjC の例 デフォルトで Python2 + PyObjC が使える macOS 12.2 以下では,次のようにしてPythonスクリプトから Cocoa のAPIを呼び出して,GUIプログラミングやシステムプログラミングをすることがが可能でした。 #!/usr/bin/python # -*- encoding=utf-8 -*- from Cocoa import NSAlert from AppKit import NSAlertFirstButtonReturn alert = NSAlert.alloc().init() alert.setMessageText_(u"確認") alert.setInformativeText_(u"上書きしてよろしいですかよろしいですか?") alert.addButtonWithTitle_(u"OK") alert.addButtonWithTitle_(u"キャンセル") result = alert.runModal() if result == NSAlertFirstButtonReturn: print(u"OK! (^^)") else: print(u"Cancel (>_<)") Python環境をパッケージングする方法 GitHubに上がっている,次の relocatable-python レポジトリを利用します。 $ git clone https://github.com/gregneagle/relocatable-python $ cd relocatable-python macOS 12.2 以前と同様,Python 2.7.18 + PyObjC の環境をパッケージングしたいならば,次のコマンドを実行します。 $ ./make_relocatable_python_framework.py --python-version 2.7.18 --pip-requirements=requirements_python2_recommended.txt これで,Python.framework が生成され,その中に Python 2.7.18 + PyObjC の環境がパッケージングされています。 どうせなら,もっと新しい Python3 の環境に PyObjC の機能を組み入れたパッケージを作るのもありでしょう。その場合,次のように実行します。 $ ./make_relocatable_python_framework.py --python-version 3.8.10 --upgrade-pip --pip-requirements=requirements_python3_recommended.txt 自分の実験した限り,この --python-version オプションで指定してパッケージングに成功した Python バージョンは以下の通りでした。 バージョン 成功/失敗 2.7.15 ? 2.7.16 ? 2.7.17 ? 2.7.18 ? 3.7.4 ? 3.7.5 ? 3.7.6 ? 3.7.7 ? 3.7.8 ? 3.7.9 ? 3.7.10 ❌ 3.7.11 ❌ 3.7.12 ❌ 3.8.0 ? 3.8.1 ? 3.8.2 ? 3.8.3 ? 3.8.4 ? 3.8.5 ? 3.8.6 ? 3.8.7 ? 3.8.8 ? 3.8.9 ? 3.8.10 ? 3.8.11 ❌ 3.8.12 ❌ 3.9.0 ❌ 3.9.1 ❌ 3.9.2 ❌ 3.9.3 ❌ 3.9.4 ❌ 3.9.5 ❌ 3.9.6 ❌ 3.9.7 ❌ 3.9.8 ❌ 3.9.9 ❌ 3.9.10 ❌ 3.10.0 ❌ 3.10.1 ❌ 3.10.2 ❌ パッケージングしたポータブルな Python 環境の使い方 Pythonインタプリタを呼び出すだけなら,生成された Python.framework の中の Python バイナリを呼び出せばOKです。 $ /path/to/Python.framework/Versions/Current/bin/python3 -V Python 3.8.10 PyObjCも使えます。 $ /path/to/Python.framework/Versions/Current/bin/python3 >>>import Foundation >>>url = Foundation.NSURL.alloc().initWithString_("http://localhost") http://localhost >>>(url.scheme(), url.host()) ('http', 'localhost') このフレームワーク内に pip で新たなパッケージを追加することもできます。 $ /path/to/Python.framework/Versions/Current/bin/pip3 install numpy # => Python.framework/Versions/Current/lib/python3.8/site-packages/ 内にインストールされる Perl や Ruby は? Perl や Ruby も将来削除されることに備えて,Python のように簡単にポータブルな環境に包んで封じ込めることができればいいのですが,そういう方法はあるのでしょうか?Windowsにおける tlperl の macOS 版のようなものがあるといいですね。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む