- 投稿日:2019-11-27T23:57:26+09:00
Xcode外で追加したXcodeプロジェクト内のファイルをXcodeに認識させる
Xcode外で追加したファイルはXcodeに認識されないことがよくあります。
例えば、
- Firebaseに必要なGoogleService-Info.plistをFinderで追加した
- 画像ファイルをFinderで追加した
- xcconfigを外部エディタで作成した
など・・・。
そのような場合は、Xcode でドラッグ&ドロップして追加することで問題なく認識されます。
このとき、Copy items if needed
にはチェックをいてておきましょう。
(その場所に同じファイルがなければコピーして作ってくれます。もしない場合にチェックしていなければ、選択したものを直接参照するようになります)
たまーにGoogleService-Info.plistをXcodeが認識してなくてFirebaseがエラー※1を吐いちゃってるけど、
なぜエラーがおきてるかわからないという人がよくいたので記事にしてみました。※1: Could not locate configuration file: ‘GoogleService-Info.plist’.
- 投稿日:2019-11-27T19:38:28+09:00
プログラミング初心者がまとめる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などは、他のAtomやVSCodeなどのようなエディタと違い、マウスを使ってカーソルを動かしたり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の終了)
となります。
終わりに
初めて技術記事を書いてみたのですがいかがだったでしょうか?
この続きの内容はまた後日書こうと思います。
次はエディタとして必要な機能(コピー&ペーストや効率の良い移動など)になると思います。
最後までお付き合い頂きありがとうございました。
- 投稿日:2019-11-27T19:30:05+09:00
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 行末に移動
- 投稿日:2019-11-27T16:29:34+09:00
[Catalina][Safari] Mac でプロキシの設定を簡単に切り替える
はじめに
Chrome だと拡張機能を利用すれば簡単にプロキシの設定を切り替えられます.
ちなみに私が愛用しているのは Proxy SwitchyOmega です.しかしながら,Safari でプロキシを使うには OS のネットワーク設定を変更しなければなりません.
そのこと自体に変わりはありませんが,比較的簡単に切り替えられる方法を見つけたので載せておきます.やり方
通常,OS の環境設定からプロキシを設定する場合
「システム環境設定」→「ネットワーク」→「詳細…」→「プロキシ」
のように辿っていくと思います.下の画像は,「SOCKSプロキシサーバ」で設定する場合の例です.
ただ,プロキシを使用する度にこうした必要事項を入力するのは面倒ですよね.
そこでおすすめしたいのが「ネットワーク環境」の追加です.
おそらく,みなさんが普段使用しているのは「自動」という名前のネットワーク環境だと思います.
「システム環境設定」→「ネットワーク」→「ネットワーク環境」→「ネットワーク環境を編集」
のように辿っていくと,「+」ボタンからネットワーク環境を追加できるのです.今回は「プロキシ」という名前のネットワーク環境を追加しました.
あとは今まで通り「詳細…」から自分に必要な設定を加えていきましょう.
プロキシを使いたい場合のみ,作成したネットワーク環境に切り替えて「適用」すれば OK です.おまけ
私は SSH ダイナミックポートフォワード する場合にプロキシを使用します.
研究室外からの通信を遮断しているマシンに,SSH 経由でブラウザからアクセスしたいからです.詳しいことは別の方の記事を参考にしてください.
~/.ssh/config
で以下のような記述をしておくと~/.ssh/configHost 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]ありましたね.
ということは,以下のコマンドでdomain
やportnumber
も指定できそうな気配です.$ networksetup -setsocksfirewallproxy wi-fi localhost 1080できました.ネットワーク環境を追加するより,むしろこの方が便利かも…
- 投稿日:2019-11-27T15:25:11+09:00
opencvの新しい機能QRコード検出を使ってみた
実装環境
Mac OS Catalina 10.15.1
opencv 4.1.1
python実験用の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/
- 投稿日:2019-11-27T15:04:33+09:00
「Automator」で右クリックからnkfを実行する
nkfを使ってSJISに文字コードを変換するサンプルです
1.brewにてnkfをインストールする。
ターミナル.brew install nkf2.Automatorを起動
・新規
・クイックアクションを選択(※クイックアクションはMojave以降に追加されました)
・ユーティリティを選ぶ
・シェルスクリプトを実行を右のワークフロースペースにドラッグする
ワークフローが受け取る現在の項目: ファイルまたはフォルダ
検索対象: 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.実行
変換したいファイルを右クリックすると先程名前をつけたクイックアクションが出てくるので選択します。
- 投稿日:2019-11-27T14:56:02+09:00
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" エラー
- 投稿日:2019-11-27T14:08:21+09:00
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しようとすると、以下のようなエラーダイアログが出てきます
これがめちゃくちゃ鬱陶しくて、キャンセルしてもキャンセルしても出現しやがります。
こいつを出てこなくするためには
- このダイアログが出ている状態にする
ros2 run
を実行したターミナル画面を選択し、ctrl+Cを入力する- その後ダイアログに戻り、キャンセルする
あるいは
ros2 run
を実行したターミナルを終了してももちろんOKですこの現象が発生しないようにするためには、よくやるやり方でセキュリティ制約を解除してやれば良いです
りんごマーク
↓
システム環境設定
↓
セキュリティとプライバシー 「一般」タブ
↓
「このまま許可」を押す
(カギの解錠は不要です)これをやった後にもう一度
ros2 run
すると、今度は_rclpy.cpython...を「開く」できるようになるので開きます・・・と他のプログラムも同様に引っかかります
・・・などなど「セキュリティとプライバシー」ウィンドウを開きっぱなしにしておくと、引っかかった奴が逐一出てくるのでぽちぽちと次々許可していきます
・・・としていたのですが無限に出てきて一向に動く気配がないので一斉に許可できないか探しました。ありました
Mac - すべてのアプリケーションの実行を許可 - PC設定のカルマ (多謝)
https://pc-karuma.net/macos-sierra-allow-apps-from-anywhere/ここに書いてあるコマンドを入れると、「全てのアプリケーションを許可」項目が出現します。
これをすると動きました。やったね!
(これでもセキュリティ的にやばくなるの大丈夫なんかな)まとめ
やらないといけないこととして
- xcode関連のツールの再インストール
- セキュリティ関連の許可
かなという感じです
ちなみに、実行できませんダイアログで「ゴミ箱に入れる」をするとあとでだいぶめんどくさいことになります。ご注意ください
- 投稿日:2019-11-27T10:45:49+09:00
【Mac】Gitコマンドが使えるまでの準備
Gitインストール方法
下記のどちらかの方法でインストール可能。
・公式サイトからダウンロード→インストール
・homebrewを使用してインストール公式サイトからダウンロード→インストール
①公式サイトよりダウンロードをクリック。
②インストーラを実行。
③以下のコマンドで、インストールを確認。※バージョンが表示されればOK
$ git --versionhomebrewを使用してインストール
①インストール
$ brew install git②(必要に応じて)Gitアップデート
$ brew upgrade git