20191127のMacに関する記事は9件です。

Xcode外で追加したXcodeプロジェクト内のファイルをXcodeに認識させる

Xcode外で追加したファイルはXcodeに認識されないことがよくあります。

例えば、

  • Firebaseに必要なGoogleService-Info.plistをFinderで追加した
  • 画像ファイルをFinderで追加した
  • xcconfigを外部エディタで作成した

など・・・。

そのような場合は、Xcode でドラッグ&ドロップして追加することで問題なく認識されます。
このとき、Copy items if neededにはチェックをいてておきましょう。
(その場所に同じファイルがなければコピーして作ってくれます。もしない場合にチェックしていなければ、選択したものを直接参照するようになります)
image.png

たまーにGoogleService-Info.plistをXcodeが認識してなくてFirebaseがエラー※1を吐いちゃってるけど、
なぜエラーがおきてるかわからないという人がよくいたので記事にしてみました。

※1: Could not locate configuration file: ‘GoogleService-Info.plist’.

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

プログラミング初心者がまとめるvi①

$ vi sample.cpp

はじめに

はじめまして。学生バイト・初心者プログラマのT--Tです。

プログラミングのプの字も知らない初心者はまずエディタを起動するところから、ということで
今回はオライリー・ジャパンさんから出版されている『入門vi(第6版)』Vi(Vim)を勉強させてもらいました。
リンクはこちら

学んだ内容を自分の言葉で少しずつまとめていきます。お付き合いください。

入門viの構成

はじめに今回勉強した入門viを紹介しておこうと思います。以下のように段階的な章構成になっています。

  • 1章 テキストエディタvi
  • 2章 基本的な編集作業
  • 3章 素早く素早くジャンプする方法
  • 4章 viの中級コマンド
  • 5章 exエディタ
  • 6章 一括置換
  • 7章 viの高度な使い方
  • 8章 vim ー vi Improved

1章〜2章で基本的なコマンドの説明があり
3章〜4章で不自由を感じなくなるような操作コマンド(ページのスクロールや検索など)が説明され
5章〜8章でviないしvimがいかに強力なエディタであるかを説明されるという構成です。

章ごとの到達度の目安ですが、2章まで学んでようやくエディタとしての機能を果たすようになり、
4〜5章ほどで他のエディタと同じかそれ以上の生産性が生まれ、
それ以降を学んでようやくvim使ってますと周りに言えるかなというレベルになりました。あくまで初心者の個人的感想ですが。

ではviについて簡単にまとめていこうと思います。

viとは

viはUNIXに用意されているいくつかのエディタの中の一つです。
スクリーンエディタといってファイルの一部分を画面上に表示します。
それに対しexなどのラインエディタと呼ばれるエディタはファイルを行単位で読み出し編集します。

(viの場合)

#include "stdio.h"

int main(){
  std::cout << "Hello, world!" << std::endl;
  return 0;
}|
~
~
~
~
~

(exの場合)

Entering Ex mode. 
:1
#include "stdio.h"
:1s/"stdio.h"/<iostream>
#include <iostream>
:|

といってもviやexなどは、他のAtomVSCodeなどのようなエディタと違い、マウスを使ってカーソルを動かしたりCtrl+Pでペーストしたりすることはできません。

ではどうやってファイルを編集するかというと、全てコマンドを用いて編集します。
viを学ぶというのは、言ってしまえばこのコマンドを覚えるということにほぼ等しいと思います。
それぞれのコマンドをうまく覚えるためにモードという概念がよく用いられるのですが、つまるところ全てのコマンドを覚えてさえいればviの能力をフル活用することができます。そのためviを用いて編集するときにはチートシートと呼ばれるコマンド表がよく用いられるのです。

話は逸れますがこのコマンドによる編集というのがこれまたコンピュータを操っている感があって私のような初心者にはたまらなく楽しいのです。

ではそのコマンドの説明に入っていこうと思います。

基本的なコマンド

はじめにviコマンドの基本ルールだけ説明しておきます。

  • コマンドの大文字と小文字は区別します
  • 画面上にコマンドの文字は表示されないものが多いです
  • 基本的にEnterしなくて良いです
  • コマンドは大抵操作の頭文字です

ではまずはviの起動・終了やファイルの入力・保存に関する基本コマンドです。

viの起動
viがお使いのコンピュータにインストール済みならば、ターミナルやコマンドプロンプトで編集したいファイルのあるディレクトリまで移動した後以下のコマンドでviによる編集を開始できます。(このコマンドはEnterしてください)

vi filename

するとviが起動してvi特有の画面に切り替わります。

#include <iostream>
using namespace std;

int main(){
  hogehoge

~
~
~
~
"filename" 6L, 66C

カーソルはファイルの先頭にあると思います。
後で詳しく説明しますが、カーソルの移動もコマンドを用いて行うので矢印キーを押してもカーソルは移動しません(一部の環境を除く)。

基本的なコマンドだけ先に説明しておくと
移動コマンドは右 l 上 k 下 j 左 h です。
コマンド一回につき一文字分移動します。

テキストの入力
ではテキストを入力しましょう。

コマンドiを入力した後テキストを入力してみてください。
コマンドiを入力した後はdeleteキーやEnterキーも他のエディタと同じように機能します。

入力が完了したらEscキーで入力終了です。

このコマンドi入力後からEscキー入力までの間はテキストの入力を自由に行うことができるためインサートモード(入力モード)と呼びます。

それに対し、コマンドi入力前やEscキー入力後のコマンド入力待ちの状態をコマンドモードと呼びます。
基本的にコマンドはこのコマンドモードで入力します。

先に説明した移動コマンドは、このコマンドモードでしか使えないので
(もしインサートモードでも使えるとしたらviではhjklが入力できなくなってしまいます)
カーソルの移動をしたいときはEscキーでコマンドモードに抜けてから移動しましょう。

変更内容の保存・viの終了
Escキーでインサートモードを抜けただけの状態では、実はファイルの変更内容はまだ保存されていません。
バッファを呼ばれる一時的な領域に内容がキープされているだけなので、変更をファイルに反映したければこのバッファの内容をファイルに保存しなくてはなりません。

保存するコマンドは:wです。こちらはEnterしなくてはなりません。

以後Enterする必要があるコマンドは(Enter)と後ろにつけます。

#include <iostream>
using namespace std;

int main(){
  cout <<"Hello, world!" << endl;
  return 0;
}
~
~
~
~
:w

(Enter後)

#include <iostream>
using namespace std;

int main(){
  cout <<"Hello, world!" << endl;
  return 0;
}
~
~
~
~
"filename" 7L, 102C written

このようにwrittenと表示されたら上書き完了です。ちなみに横に表示されているLとCは総行数と総文字数です。
便利。

バッファの内容を破棄したい場合は:e!(Enter)と入力してください。コマンドeは本来別の効果をもつコマンドなのですが、!をつけて強制コマンドにすることでバッファの内容破棄に使えます。

保存が終了したらviを終了しましょう。コマンド:q(Enter)です。
バッファの保存や破棄をしていない状態で:qを入力するとエラーが出るので保存し忘れを防ぎます。ありがたい。

ちなみにこのコマンド:qに!をつけたコマンド:q!(Enter)を入力すると、バッファの内容の破棄とviの終了を同時に行うことができます。
同様にバッファの内容の保存とviの終了を同時に行うコマンドがあり、それがZZです。こちらはEnter不要です。

ここら辺でまとめ

長くなってしまったのでここら辺で一区切りとしようと思います。
最後に今回出てきたコマンドをまとめておくと

  • vi filename (vi起動)
  • l k j h (カーソル移動)
  • i (インサートモード開始)
  • Esc (インサートモード終了)
  • :w (バッファの保存)
  • :e! (バッファの破棄)
  • :q (viの終了)
  • :q! (バッファの破棄・viの終了)
  • ZZ (バッファの保存・viの終了)

となります。

終わりに

初めて技術記事を書いてみたのですがいかがだったでしょうか?
この続きの内容はまた後日書こうと思います。
次はエディタとして必要な機能(コピー&ペーストや効率の良い移動など)になると思います。
最後までお付き合い頂きありがとうございました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Macショートカットキー

※自分用にまとめ中

スリープ

キー操作 目的
Ctrl + Shift + 電源ボタン ディスプレイのみスリープ
Cmd + Opt + 電源ボタン スリープ
Ctrl + Cmd + Q スクリーンロック

再起動

キー操作 目的
Cmd + 電源ボタン 再起動
Cmd + Ctrl + 電源ボタン 強制再起動

ログアウト

キー操作 目的
Cmd + Shift + Q ログアウト(確認あり)
Cmd + Opt + Shift + Q ログアウト(確認なし)

強制終了

キー操作 目的
Cmd + Opt + Shift + Esc(長押し) 最前面のアプリケーションを強制終了
Ctrl + Opt + Dockアイコンをクリック 強制終了のコンテキストメニューを表示

ウィンドウの操作

キー操作 目的
Cmd + W ウィンドウを閉じる
Cmd + M ウィンドウを Dock にしまう
Cmd + Ctrl + F ウィンドウの最大化・元に戻す
Cmd + H アクティブウィンドウを隠す
Ctrl + F3 Dock上のアプリケーションを起動
Cmd + Tab (+ Shift で逆順) アプリケーションの切替え
Cmd + Q アプリケーションの終了

Finder の操作

キー操作 目的
Cmd + ↓ 子フォルダ移動/選択アイテムを開く/アプリケーションを開く
Cmd + ↑ 親フォルダ移動
Cmd + I 選択したアイテムの情報を見る
Cmd + O ファイル/フォルダを開く

スクリーンショット

キー操作 目的
Cmd + Shift + 4 スクリーンショット

カーソル移動

ホームポジションに手を置いたままカーソル移動が可能。

キー操作 目的
Ctrl + F カーソルを右へ
Ctrl + B カーソルを左へ
Ctrl + P カーソルを上へ
Ctrl + N カーソルを下へ
Ctrl + A 行頭に移動
Ctrl + E 行末に移動
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[Catalina][Safari] Mac でプロキシの設定を簡単に切り替える

はじめに

Chrome だと拡張機能を利用すれば簡単にプロキシの設定を切り替えられます.
ちなみに私が愛用しているのは Proxy SwitchyOmega です.

しかしながら,Safari でプロキシを使うには OS のネットワーク設定を変更しなければなりません.
そのこと自体に変わりはありませんが,比較的簡単に切り替えられる方法を見つけたので載せておきます.

やり方

通常,OS の環境設定からプロキシを設定する場合
「システム環境設定」→「ネットワーク」→「詳細…」→「プロキシ」
のように辿っていくと思います.

下の画像は,「SOCKSプロキシサーバ」で設定する場合の例です.

スクリーンショット 2019-11-27 15.29.28.png

ただ,プロキシを使用する度にこうした必要事項を入力するのは面倒ですよね.

そこでおすすめしたいのが「ネットワーク環境」の追加です.
おそらく,みなさんが普段使用しているのは「自動」という名前のネットワーク環境だと思います.
「システム環境設定」→「ネットワーク」→「ネットワーク環境」→「ネットワーク環境を編集」
のように辿っていくと,「+」ボタンからネットワーク環境を追加できるのです.

スクリーンショット 2019-11-27 15.28.15.png

今回は「プロキシ」という名前のネットワーク環境を追加しました.

あとは今まで通り「詳細…」から自分に必要な設定を加えていきましょう.
プロキシを使いたい場合のみ,作成したネットワーク環境に切り替えて「適用」すれば OK です.

おまけ

私は SSH ダイナミックポートフォワード する場合にプロキシを使用します.
研究室外からの通信を遮断しているマシンに,SSH 経由でブラウザからアクセスしたいからです.

詳しいことは別の方の記事を参考にしてください.

~/.ssh/config で以下のような記述をしておくと

~/.ssh/config
Host fwd-hoge
    HostName <IPアドレス or ホスト名>
    User <ユーザ名>
    IdentityFile ~/.ssh/id_rsa
    DynamicForward 1080

簡単なコマンドでダイナミックポートフォワードが可能です.

$ ssh fwd-hoge

その後は,上に載せた画像のように 1080 番ポートでプロキシ設定すれば大丈夫です.
もちろん <IPアドレス or ホスト名><ユーザ名> で SSH できることが大前提となっています.

おわりに

ネットワーク環境の追加はプロキシに限定した話ではありません.
いつも使用するネットワーク設定があり,それを頻繁に切り替えたい場合に有効だと思います.

追記

専用のスクリプトを書いて切り替える方法もあるようですね.

ついでに,この記事で使用されている networksetup コマンドの man を見てみました.

NETWORKSETUP(8)           BSD System Manager's Manual          NETWORKSETUP(8)

NAME
     networksetup -- configuration tool for network settings in System Preferences.

SYNOPSIS
     networksetup [-listnetworkserviceorder] [-listallnetworkservices] [-listallhardwareports] [-detectnewhardware]
                  [-getmacaddress hardwareport] [-getcomputername] [-setcomputername computername]
                  ...(中略)...
                  [-setsocksfirewallproxy networkservice domain portnumber authenticated username password]
                  [-setsocksfirewallproxystate networkservice on | off] [-getproxybypassdomains networkservice]

ありましたね.
ということは,以下のコマンドで domainportnumber も指定できそうな気配です.

$ networksetup -setsocksfirewallproxy wi-fi localhost 1080

できました.ネットワーク環境を追加するより,むしろこの方が便利かも…

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

opencvの新しい機能QRコード検出を使ってみた

実装環境

Mac OS Catalina 10.15.1
opencv 4.1.1
python

実験用のQRコード作り

どうせなら実験用のコードも自作しようということでQRコードの作り方もまとめてみます

作れればいい人

とはいえQRコード検出がメインテーマなのでQRコードなんかさっさと作ってしまいたいという人もいると思うのでそんな人は

QRコード作成

ここのサイトで無料でQRコード作成できます
ファイル形式も指定してダウンロードできるのでさくっと作っちゃいましょう

どうせならpythonで全部作りたい

僕的にはpythonでQRコードも作ってみたかったのでそちらの方もやり方をまとめてみようと思います

pythonの外部ライブラリでqrcodeというものがあるらしく今回はそれを使っていきます

pip install qrcode

いつも通りpipでインストール可能です

今回は簡単なQRコードが作れればいいのでしたのコードを実行すればいけました

import qrcode

img=qrcode.make("hirotoyyy.com")
img.save('QR')

説明するまでもないですが、一様説明しておくと

qrcode.make()の引数にQRコードを読み込んだときに表示するものを与えます

(特に表示したいものがなかったので、自分が運営してるブログのURLにしました笑 )

save()で引数に与えた名前でファイルを保存します

QRコード検出

いよいよ QRコード検出です

import cv2

img = cv2.imread('QR')
qr = cv2.QRCodeDetector()
data, points, straight_qrcode = qr.detectAndDecode(img)

print('データ:', data)
print("バージョン:", ((straight_qrcode.shape[0] - 21) / 4) + 1)

QRコードの認識についてはQRCodeDetector()が勝手にやってくれます

参考にしたサイト

QRコードをpythonで作るには
https://note.nkmk.me/python-pillow-qrcode/

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

「Automator」で右クリックからnkfを実行する

nkfを使ってSJISに文字コードを変換するサンプルです

1.brewにてnkfをインストールする。

ターミナル.
brew install nkf

2.Automatorを起動

・新規
・クイックアクションを選択(※クイックアクションはMojave以降に追加されました)
・ユーティリティを選ぶ
・シェルスクリプトを実行を右のワークフロースペースにドラッグする
スクリーンショット 2019-11-27 14.40.17.png

ワークフローが受け取る現在の項目: ファイルまたはフォルダ
検索対象: Finder.app

シェル: /bin/bash
入力の引き渡し方法: 引数として
コマンドを記述する

for f in "$@"
do
    FNAME="${f%.*}"
    EXT="${f##*.}"
    OUTFILE=${FNAME}_sjis.${EXT}
    /usr/local/bin/nkf -s "$f" > "${OUTFILE}"
done

ショートカットから下記のようなコードを実行しています
nkf -s hogehoge.csv > hogehoge_sjis.csv

・実行ボタンを押して正常に完了する事を確認します。
・保存で名前をつけます(右クリックで表示される)

3.実行

変換したいファイルを右クリックすると先程名前をつけたクイックアクションが出てくるので選択します。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Mac環境でRails内で別プロセスが立ち上がる処理をすると落ちてしまうとき

概要

Railsでtask runnerを実行しようとすると以下のエラーが起こり、途中で処理が止まってしまいました。

$ bundle exec rails runner -e development [タスク]
objc[13178]: +[__NSPlaceholderDictionary initialize] may have been in progress in another thread when fork() was called.
objc[13178]: +[__NSPlaceholderDictionary initialize] may have been in progress in another thread when fork() was called. We cannot safely call it or ignore it in the fork() child process. Crashing instead. Set a breakpoint on objc_initializeAfterForkError to debug.

解決法

$ echo 'export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES' >> ~/.bash_profile
$ exec $SHELL -l
$ bin/spring stop
$ bundle exec rails runner -e development [タスク]

参照

macOS High Sierra で "__NSPlaceholderDictionary initialize" エラー

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

macOS CatalinaにあげたらROS2 Dashingがすぐには動かなかった話

結論

動きました

概要

macのOSをcatalinaにアップデートしたらROS2動かすまでにいろいろめんどくさかったのでメモ

環境

  • mac OS 10.15.1 Catalina
  • ROS2 Dashing
  • bash

colcon buildが通らない

以下のようなエラーが出てcolcon buildが失敗します

admin$ colcon build --packages-select image_tools
Starting >>> image_tools
--- stderr: image_tools                         
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
---
Failed   <<< image_tools    [ Exited with code 1 ]

調べるとgitなど他のツールでも同様の症状が出るようです(そっちは試してなかった)
以下の記事にある解決策で解決可能です(多謝)

macOS CatalinaにしたらGitコマンドが動かなくなった

ros2 runがセキュリティ云々で実行できない

ros2 runしようとすると、以下のようなエラーダイアログが出てきます
スクリーンショット 2019-11-27 13.34.15.png

これがめちゃくちゃ鬱陶しくて、キャンセルしてもキャンセルしても出現しやがります。

こいつを出てこなくするためには

  1. このダイアログが出ている状態にする
  2. ros2 runを実行したターミナル画面を選択し、ctrl+Cを入力する
  3. その後ダイアログに戻り、キャンセルする

あるいはros2 runを実行したターミナルを終了してももちろんOKです

この現象が発生しないようにするためには、よくやるやり方でセキュリティ制約を解除してやれば良いです

りんごマーク

システム環境設定

セキュリティとプライバシー 「一般」タブ

スクリーンショット 2019-11-27 13.45.35.png
「このまま許可」を押す
(カギの解錠は不要です)

これをやった後にもう一度ros2 runすると、今度は_rclpy.cpython...を「開く」できるようになるので開きます

・・・と他のプログラムも同様に引っかかります
スクリーンショット 2019-11-27 13.47.26.png
・・・などなど

「セキュリティとプライバシー」ウィンドウを開きっぱなしにしておくと、引っかかった奴が逐一出てくるのでぽちぽちと次々許可していきます
・・・としていたのですが無限に出てきて一向に動く気配がないので一斉に許可できないか探しました。

ありました

Mac - すべてのアプリケーションの実行を許可 - PC設定のカルマ  (多謝)
https://pc-karuma.net/macos-sierra-allow-apps-from-anywhere/

ここに書いてあるコマンドを入れると、「全てのアプリケーションを許可」項目が出現します。
スクリーンショット 2019-11-27 14.01.54.png

これをすると動きました。やったね!
(これでもセキュリティ的にやばくなるの大丈夫なんかな)

まとめ

やらないといけないこととして

  • xcode関連のツールの再インストール
  • セキュリティ関連の許可

かなという感じです

ちなみに、実行できませんダイアログで「ゴミ箱に入れる」をするとあとでだいぶめんどくさいことになります。ご注意ください

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Mac】Gitコマンドが使えるまでの準備

Gitインストール方法

下記のどちらかの方法でインストール可能。
・公式サイトからダウンロード→インストール
・homebrewを使用してインストール

公式サイトからダウンロード→インストール

公式サイトよりダウンロードをクリック。

②インストーラを実行。

③以下のコマンドで、インストールを確認。※バージョンが表示されればOK

$ git --version

homebrewを使用してインストール

①インストール

$ brew install git

②(必要に応じて)Gitアップデート

$ brew upgrade git
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む