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

Linuxでテキストを編集するための最低限の知識

はじめに

この投稿ではLinuxでテキストを編集するための最低限の知識をお伝えします。

なぜこのような投稿をするかと言いますと、先日とあるハンズオンセミナーに参加しました。そのセミナーの前提知識としてLinuxでテキスト編集ができることと記載されており、windowsしか触ってこなかった私はとても焦りました。そこで実際にセミナーで必要となった内容を記載して備忘兼共有しておきたいと思います。

テキストファイルを作成したいディレクトリに移動する

最初にカレントディレクトリのファイルやフォルダを確認するために「ls」を入力してEnter押下します。
カレントディレクトリにあるフォルダやファイルが表示されます。

cloudshell:~ (platinum)$ ls
envs  hello-world  python-docs-samples  README-cloudshell.txt

今回は「hello-world」ディレクトリにテキストファイルを作成したいと思うので「cd hello-world」を入力して「hello-world」に移動します。コマンドプロンプトと同じ感覚です。

cloudshell:~ (platinum)$ cd hello-world
cloudshell:~/hello-world (platinum)$

テキストファイルを新規作成する

ファイル名が「test.txt」のテキストファイルを新規作成してみます。
「vi test.txt」を入力すると以下のようなテキストエディタが起動します。

cloudshell:~/hello-world (platinum)$ vi test.txt
~
~
~
~
~
"test.txt" [New File]

そこで文字を入力する前に入力モードに切り替える必要があります。
エスケープ押下後に「i」を押下すると下部に「-- INSERT --」と表示され文字が入力できる状態になります。
その状態で「テストテキスト」と入力してみます。

テストテキスト
~
~
~
~
-- INSERT --

テキストファイルを保存する

エスケープ押下→「:wq」の順で入力すると下の方に「:wq」が表示されます
その状態でEnter押下すると保存されてコマンド入力に戻ります。
エスケープを押すことでいろんなことができるようです。
保存後に再度「vi test.txt」を実行すると保存した内容を編集することができます。

テストテキスト
~
~
~
~
:wq

保存内容を確認する

「cat test.txt」を入力してEnter押下します。
すると以下のようにテキストファイルの内容が表示されるので簡単に内容を確認できます。

cloudshell:~/hello-world (platinum)$ cat test.txt
テストテキスト
cloudshell:~/hello-world (platinum)$

その他の覚えておくと良いこと

  • ファイル名やディレクトリ名を入力するタイミングでタブを押下すると以前に入力していた内容が補完されます。例えば「cat test」でタブを押下すると「cat test.txt」にしてくれます。
  • コマンドプロンプトと同じですが、方向キーの上下で実行したコマンドの履歴を呼び出せます。
  • rmコマンドでファイルを削除できます。今回のファイルを消す場合は「rm test.txt」
  • コマンドプロンプトと同様に「cd ../」で一つ上の階層に移動できます。

最後に

上記のコマンドを覚えておくだけで設定ファイルを変更したり保存したりできるようになるので焦らずにハンズオンセミナーなどに参加できるようになります。

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

[ Mac ] nodeのあれこれ

  • nodebrewで入れたnodeの確認
MacBook-Pro-2: ~/mu$ nodebrew ls
v9.11.2
v12.4.0

current: v9.11.2
  • nodeのバージョンの変更
$ nodebrew use v12.4.0
use v12.4.0
  • バージョンの確認
$ node -v

あれ・・・変わってない。

  • 環境変数の反映 変更した後、これでパスを通さないと反映しないよ!
$ source ~/.bash_profile
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Mac】nodeのあれこれ

  • nodebrewで入れたnodeの確認
MacBook-Pro-2: ~/mu$ nodebrew ls
v9.11.2
v12.4.0

current: v9.11.2
  • nodeのバージョンの変更
$ nodebrew use v12.4.0
use v12.4.0
  • バージョンの確認
$ node -v

あれ・・・変わってない。

  • 環境変数の反映 変更した後、これでパスを通さないと反映しないよ!
$ source ~/.bash_profile
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Mac】Node.js のあれこれ

  • nodebrewで入れたnodeの確認
MacBook-Pro-2: ~/mu$ nodebrew ls
v9.11.2
v12.4.0

current: v9.11.2
  • nodeのバージョンの変更
$ nodebrew use v12.4.0
use v12.4.0
  • バージョンの確認
$ node -v

あれ・・・変わってない。

  • 環境変数の反映 変更した後、これでパスを通さないと反映しないよ!
$ source ~/.bash_profile
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Mac環境でPlatformIO IDEを用いてハードウェアコーディングをする時の環境セットアップについて

ArduinoやM5Stackのコーディングの際に、PlatformIO IDEという開発統合環境を使って開発をしてみました。
スクリーンショット 2019-06-27 16.13.47.png

これまで、Arduinoの開発を行う時にはArduino IDEを用いていました。お馴染みのこの画面です。
スクリーンショット 2019-06-27 15.12.57.png
Arduino IDEを使っていて特に大きな不満はなかったのですが、チームでコーディングを行う際に、さまざまな利点があるということで、PlatformIO IDEを使って開発をしてみました。PlatformIO IDEの利点を紹介しつつ、Arduino UNOでLチカ(LEDを点灯させる基本的なプログラム)を行うまでの流れを説明したいと思います。

PlatformIO IDEとは?

マイクロソフト社のソースコードエディタであるVisualStudioCode(以下VSCode)や、オープンソースのテキストエディタであるAtomの拡張機能で、ArduinoやM5Stackを始めとするハードウェアプログラミングに適しています。なおこの記事では、ソースコードエディタにVSCodeを使っています。
スクリーンショット 2019-06-27 15.11.07.png
これはArduino IDEと比較して、以下の利点があります。

コーディングが楽になる

自分はこれが特に便利だと思ったのですが、検証か書き込みボタンを押さないとデバッグが行えないArduino IDE環境と異なり、コーディングをしている時に変数や関数の補完、そしてデバッグをしてくれます。
スクリーンショット 2019-06-27 15.17.03.png

ターミナルやシリアルモニタなど、様々な機能を1画面で見られる

Arduino IDEの場合は、シリアルモニタやターミナル画面が別ウインドウでしか表示できませんが、PlatformIO IDEの場合はそれを1画面で見られます。図のように、複数のプロジェクトの画面を開くことも可能です。
Qiita.png

CUIを用いて作業ができる

上の図からも分かるように、VSCode内でターミナルを開けるので、コーディングをチームで行う際に、Git管理をするのが楽になります。また、コマンドラインを用いてArduinoへプログラムの書き込みをしたり、ライブラリのインストールなどを行うことも可能です。

PlatformIOをインストールしてみる

ということで、VSCode、PlatformIOをインストールし、Arduinoにプログラムを書き込んでみましょう!
*この時のPC環境はmacOS Mojave, バージョン10.14.4でした。

VisualStudioCodeをインストールする

始めに、VisualStudioCodeをインストールします。公式ホームページhttps://code.visualstudio.com からDownload for Macをクリックしてダウンロードして下さい。
スクリーンショット 2019-06-27 16.25.26.png

PlatformIO IDEをインストール

VSCodeをインストールしたら、PlatformIO IDEをインストールします。
VSCodeを開き、左側にあるアイコンのうち、赤枠で囲ったEXTENSIONSのアイコンをクリックし、PlatformIOと入力して、インストールを行なって下さい。
アセット 1.png
これで環境のセットアップは完了です。続いて、新しいプロジェクトを作成して、エルチカのプログラムを書いてみましょう。

プロジェクトを作成し、ボードを選択する

アセット 2.png
PlatformIO IDEをインストールすると、VSCodeを起動する際に自動的に、PIO Homeというタブが開かれるようになります。
このタブの中にある、New Projectというボタンをクリックして下さい。
スクリーンショット 2019-06-27 16.53.36.png

続いて、Nameにプロジェクト名を、Board欄から、Arduino UNOなど、自分が使うマイコンボードを選択して下さい。
Finishをクリックすると、プロジェクトが作成されます。

ファイル構造について

プロジェクトが作成されると、このような図が出てくるかと思います。
アセット 4.png
枠線で囲った部分が、作成したLEDBlinkプロジェクト内のファイルになりますが、Arduinoに比べ、やたら沢山のフォルダがありますね・・・
まずは、ArduinoIDEで編集してきた.inoファイルの代わりに、srcフォルダ内にあるmain.cppファイルを編集すればOKと考えて下さい。
ちなみにプロジェクトを再度開く際には、platformio.iniファイルをVSCodeで開くとプロジェクトごと開くことができます。

ここに、Lチカのプログラムを書き込んでみます。今回はArduinoUNOに内蔵されているLEDを点灯させるため、以下のようなプログラムを書きました。
スクリーンショット 2019-06-27 16.57.34.png

スケッチを書き込み

スケッチを書き終えたら、Arduino UNOをMacに接続して、プログラムを書き込みます。
アセット 5.png
画面左下にある右矢印アイコンをクリックすると、書き込みが始まります。USBポートは、選択しなくても自動的にArduinoUNOのポートを認識して書き込んでくれます(これがすごく便利!)。
書き込みが始まるとターミナルが開き、書き込み状況を表示してくれます。
緑色でSUCCESSと表示されれば、書き込みは成功です!
書き込みが成功していれば、下図枠内のArduino内蔵LEDが点灯しているはずです。
アセット 6.png

その他豆知識

Arduino IDEで使ってきたinoファイルを引き継いで使いたい

プロジェクトを使ってみて分かる通り、PlatformIO IDEでは、Arduino IDEで使用してきた.inoファイルではなく、.iniファイルやmain.cppファイルから構成されます。そのため、今までArduino IDEで使ってきたファイルをPlatformIO IDEで使うために必要な手順を説明したいと思います。

始めに、PIOHome画面を開き、Import Arduino Projectボタンをクリックします。
スクリーンショット 2019-06-27 17.14.46.png
そして、ボードの種類を選択し、開きたい.inoファイルのフォルダを指定してから、Importボタンをクリックします。
ここで、Use libraries installed by Arduino IDEをクリックするようにして下さい。Arduino IDEでインストールしていたライブラリを、PlatformIO内で再インストールすることなく使用することができるようになります。
スクリーンショット 2019-06-27 17.16.05.png
これで、プロジェクトが作成されました。inoファイルは、srcフォルダ内に配置されます。
あとはmain.cppファイルの時と同様、ファイルを編集して書き込みを行うだけです。

必要なライブラリを追加でインストールしたい

追加でライブラリをインストールしたい場合には、一度PIOHomeを開き、Librariesタブを開きます。ここからキーワードを入力して、必要なライブラリをインストールできます。
スクリーンショット 2019-06-27 17.21.30.png
同様に、Boardsタブからはボードの追加を、Devicesタブからは認識されているデバイスの確認ができます。この辺りはほとんど、Arduino IDEでの操作と同じですね。

なお、ライブラリのインストールなどは、コマンドラインで行うこともできます。こちらのサイト https://qiita.com/hotchpotch/items/4777979835cf04453e2e などを参照して下さい。

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

Macショートカットメモ

macのショートカット(適宜更新予定です。)

コマンド 用途
fn + bakspace deleteキー
command + bakspace ファイル削除
command + fn + ← home画面へ遷移(ブラウザの)
command + ↑ テキスト編集時のhomeキー
command + ↓ テキスト編集時のendキー、ファイルを開く
command + ← テキスト編集時の行頭
command + → テキスト編集時の行末
command + ctrl + Q 画面ロック
command + option + v コピー元を削除して貼り付け=カット&ペースト
command + shift + 4 ドラッグ範囲をスクショ
ctrl + - vscodeでメソッドジャンプした後、ジャンプ元へ戻るコマンド
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

TouchBarからSlackにメッセージを送る

TouchBarからSlackにメーッセージを送る方法です。

事の発端

新しくアルバイトとして入社した企業の配属チームの勤怠ルール

出社、休憩開始、休憩終わり、退社時に特定のチャンネルにそれぞれに対応する絵文字を送信する。

割とめんどくさい・・・ ちなみにこれ以外にも勤怠システムとタイムカードの3重門。

前回

ワンクリックで登録できるようにアプリを作ろう!
となってElectronとVueで動くアプリを作りました。
 ↓
僕の前回の雑な記事
それをいい感じに詳しくしてくれたやつ

今回

アプリでも結構めんどくさくね?となった時にcという記事を見つけました。

どうやらTouchBarをいい感じにカスタマイズできるようなのですが、シェルスクリプトやApplescript等、各コマンドを割り当てることも出来るみたいです。

前回も利用しましたが、SlackはCurlでメッセージを送信できます!
ということは、TouchBarを押すだけでSlackにメッセージが送信できる物が作れるということです。

手順

今回は記事がDisられないように丁寧に解説します。

BTT(Better Touch Tool)の導入

TouchBarのカスタマイズに必要なBTTというツールをインストールします。
こちらにアクセスして、DOWNLOAD TRIALS 45DAYSボタンでダウンロードしましょう。

書いてあるとおり45日体験が無料ですが、それ以降は有料です。良かったら購入しましょう。

ダウンロードが完了したらZIPを展開、中身の.appファイルをMacのアプリケーションフォルダに移動します。
これでインストール完了なので早速BTTを起動しましょう。

インストール等についてはとても詳しく解説されている記事がありますのでご参考までに
BetterTouchTool(BTT)の使い方と設定まとめ!神アプリを使いこなそう! | Aprico

Slackの設定(APIキーの取得)

これから取得するAPIキーは流出するとあなたのSlackWorkspaceにあなた名義でどのチャンネルにでもメッセージを送れてしまうので取扱には最新の注意をはらいましょう。

こちら(Slack API 推奨Tokenについて)の手順どおりに進め、xoxp-XXXXXXXXのような長いTokenを生成して、メモっておきます。

上記記事の2.スコープ設定という所でスコープを設定していると思いますが、今回は「Send messages as user」を選択します。(後からでも変えられます)

BTTの設定

この記事ではCurlでSlackにメッセージを送信するところだけをやりますので、その他のカスタマイズはお前らのTouchBarはダサいを見て下さい。

設定を開いて、タッチバーのタブを開きます。
Image from Gyazo

明らかに追加できそうなボタンがあるので押します。
Image from Gyazo
すると右側にSelect Triggerと出てくるので、ひとまずグループを選択して、名前をつけます。
Image from Gyazo
作成したグループをダブルクリックするとグループが開くので、今度は追加で「タッチバーボタン」を追加しましょう。
Image from Gyazo

するとボタンが追加されるので、ボタンタイトルや色、大きさをいい感じに変更します。

次にこのボタンに機能を割り当てます。
Image from Gyazo
真ん中の主張激しめの+ボタンを押します。
Image from Gyazo

いろいろ選択肢が出てくるのですが、今回はCurlを使いたいので「端末コマンドの実行」を選びます。(同期非同期はメッセージの送信だけならどちらでも良いです。)

Image from Gyazo

コマンドを入力できるところが出ましたので、ココに以下のコマンドを入れます。

curl -XPOST -d "token=<さっき取得したxoxp-的なトークン>" -d "channel=#メッセージを送信したいチャンネル名" -d "text=送りたいメッセージ" -d "as_user=true" "https://slack.com/api/chat.postMessage"

as_user=trueを設定することで「自分として」メッセージを投稿できます。

もちろん色々なカスタマイズが出来るのでSlackAPIの公式を見ていろいろとカスタマイズして下さい。

Image from Gyazo

これで保存すれば、Slackにメッセージを送信できるTouchBarボタンの完成です。

出来たもの

何個かボタンを作って色をいい感じに変えたもの
Image from Gyazo

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

Python3 でFelicaのIDmを読み取って記録する

概要

sony RC-S380を購入したので遊んでみました。

環境

  • MAC
  • Python3
  • RC-S380

参考 

この記事のsimple sampleを使わせていただきます。

Raspberry PiでFelicaのIDmを表示する

Ctrl-cで終了できるようにする

ループ内に以下の記述をしました。

import signal
signal.signal(signal.SIGINT,signal.SIG_DFL)

外部のファイルからリストを読み書きする

この記事を参考にしてIDmのリストを外部ファイルに保存するようにしました。

pythonでlistをファイルに保存し、読み込む方法(numpyも同様!

仕様

  • 新しいカードをタッチしたらidm_list.txtに書き込む
  • すでにタッチしたことのあるカードなら"すでに登録されています"
  • 登録したカードの数がMAX_ID_NUMに達したら"リストがいっぱいです"

書いたコード

import binascii
import nfc
import signal

class MyCardReader(object):

    def on_connect(self, tag):
        print ("読み取り中")
        self.idm = binascii.hexlify(tag.idm)
        return True

    def read_idm(self):
        clf = nfc.ContactlessFrontend('usb')
        try:
            clf.connect(rdwr = {'on-connect': self.on_connect})
        finally:
            clf.close()


class ListManagement:
    MAX_ID_NUM = 2
    def write_list(self,list):
        f = open('idm_list.txt', 'w')
        for x in list:
            f.write(str(x) + "\n")
        f.close()

    def read_list(self,list):
        f = open('idm_list.txt', 'r')
        for x in f:
            list.append(x.rstrip("\n"))
        f.close()

    def edit_list(self,list,new_idm):
        if new_idm in list:
            print ("すでに登録されています")
        elif len(list) >= self.MAX_ID_NUM:
            print ("リストがいっぱいです")
        else:
            print(str(new_idm) + "を追加します")
            list.append(new_idm)
            self.write_list(list)


if __name__ == '__main__':
    cr = MyCardReader()
    lm = ListManagement()
    idm_list = []
    lm.read_list(idm_list)

    while True:
        print ("カードをタッチしてください")
        cr.read_idm()
        print ("カードのID: ",end='')
        new_idm = cr.idm
        print (new_idm)
        lm.edit_list(idm_list,new_idm)
        # Ctrl-Cで終了するまで待機し続ける
        signal.signal(signal.SIGINT,signal.SIG_DFL)

実行結果

カードのIDは適当に変えて書いています。

カードをタッチしてください
読み取り中
カードのID: b'01010910231b3e0f'
b'01010910231b3e0f'を追加します
カードをタッチしてください
読み取り中
カードのID: b'012e4529359755b7'
b'012e4529359755b7'を追加します
カードをタッチしてください
読み取り中
カードのID: b'012e3d198b4d6f8a'
listがいっぱいです
カードをタッチしてください

これから 

一定時間が経過して同じカードをタッチしたら削除するようにしたい

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