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

【Mac】ReactでVR!? React 360を使用して、パノラマ画像を表示させる手順方法。

はじめに

セブ島もくもく会の中で、初学者を対象にしたVR開発入門講義を行いました。
環境構築から、パノラマ画像を表示させるまでの手順をこちらに残しておきます。

やること

タイトル通りです。
ただし、各用語の解説はいたしません。手順のみです。
ご了承ください。

React 360って?

Facebook社製のVR専用アプリケーションフレームワークです。
実はReactの書き方で、VRアプリも開発できます!
https://facebook.github.io/react-360/

開発環境(筆者の環境です。)

  • macOS Mojave 10.14.5
  • Node.js 12.6
  • npm 6.9

Node.jsのインストール方法はこちらから。
https://qiita.com/AwesomeArsAcademia/items/4f685e2f46bab122f6cf

必要なツールはこちらから。

開発環境を整える

react-360-cliをインストール

https://facebook.github.io/react-360/docs/setup.html
公式ドキュメントを参考に、開発環境を構築していきます。

npmを使って、react-360-cli をインストールします。

$ npm install -g react-360-cli

アプリを立ち上げる

下記のコマンドを打つとフォルダが作成されます。

$ react-360 init Hello360
Creating new React 360 project...
Project directory created at Hello360

~省略~

success Saved lockfile.
✨  Done in 21.60s.
Done!
  Now enter the new project directory by running `cd Hello360`
  Run `npm start` to initialize the development server
  From there, browse to http://localhost:8081/index.html
  Open `index.js` to begin editing your app.

$ ls
Hello360

上記の指示通り、Hello360に移動してnpm startを実行します。

$ cd Hello360
$ npm start
http://localhost:8081/index.html
上記のURLにアクセスしてみましょう。ロードに時間がかかると思いますが、しばらくすると下記のような表示が出るかと思います。

Welcome to React 360からHello Worldに変えてみる。(index.js)

エディタを開きます。
index.jsを開くと下記が記載されているかと思います。

index.js
import React from 'react';
import {
  AppRegistry,
  StyleSheet,
  Text,
  View,
} from 'react-360';

export default class Hello360 extends React.Component {
  render() {
    return (
      <View style={styles.panel}>
        <View style={styles.greetingBox}>
          <Text style={styles.greeting}>
            Welcome to React 360
          </Text>
        </View>
      </View>
    );
  }
};

const styles = StyleSheet.create({
  panel: {
    // Fill the entire surface
    width: 1000,
    height: 600,
    backgroundColor: 'rgba(255, 255, 255, 0.4)',
    justifyContent: 'center',
    alignItems: 'center',
  },
  greetingBox: {
    padding: 20,
    backgroundColor: '#000000',
    borderColor: '#639dda',
    borderWidth: 2,
  },
  greeting: {
    fontSize: 30,
  },
});

AppRegistry.registerComponent('Hello360', () => Hello360);

ここで、15行目の
Welcome to React 360Hello Worldに書き換えます。
ファイルを保存して、ブラウザを更新しましょう。
下記のように表示されれば成功です!

パノラマ画像を表示させる。

パノラマ画像のフリー素材ですが、僕は下記のURLからダウンロードしました。
http://panoroman.nao3.net/

ダウンロードしたら、static_assetsのフォルダの配下に移動します。
名前も変更しましょう。
※今回はp1.jpgで進めていきます。

背景の画像を変更する際はclient.jsのファイルを編集します。

client.js
// This file contains the boilerplate to execute your React app.
// If you want to modify your application's content, start in "index.js"

import {ReactInstance} from 'react-360-web';

function init(bundle, parent, options = {}) {
  const r360 = new ReactInstance(bundle, parent, {
    // Add custom options here
    fullScreen: true,
    ...options,
  });

  // Render your app content to the default cylinder surface
  r360.renderToSurface(
    r360.createRoot('Hello360', { /* initial props */ }),
    r360.getDefaultSurface()
  );

  // Load the initial environment
  r360.compositor.setBackground(r360.getAssetURL('360_world.jpg'));
}

window.React360 = {init};

20行目にある

  r360.compositor.setBackground(r360.getAssetURL('360_world.jpg'));
こちらの360_world.jpgを先ほどダウンロードしたファイル名に書き換えます。
今回はp1.jpgに変更します。
保存して、ブラウザを更新しましょう。
下記の表示になれば成功です!
マウスでグリグリ動かしてみましょう。

最後に

解説が欲しい方は下記の記事がおすすめです。
https://qiita.com/shiruco/items/3e77babe80a373c71fd5
https://qiita.com/bayarea-techblog/items/46531e0a64ffa1c0d181

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

教育版EV3 C言語プログラミング環境を整える

環境 その1(成功)

  • OS: Microsoft Windows 10 64bit
  • CPU: Intel(R) Core(TM) i7-7700 CPU @ 3.60 GHz
  • 教育版レゴ マインドストームEV3
  • microSDHC 東芝EXCERIA M302 32GB
  • Bluetooth(R) USBマイクロアダプター BUFFALO BSBT4D200
  • TeraTerm

注意点

Bluetooth接続時のデバイス名「Mindstorms EV3」やペアリングコード「0000」は、microSDHCカードの ev3rt\etc\rc.conf.iniを書き換えることで変更できる。

環境 その2 (成功)

参考にしたページ

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

JupyterLabの拡張機能jupyterlab-lspの導入方法(macOS)

自分の環境

・macOS Mojave バージョン10.14.6
・zsh 5.7.1
・pip 19.2.3
・pyenv 1.2.13
・python 3.6.9
・JupyterLab 1.1.2

インストール

JupyterLab

JupyterLab本体は

$pip install jupyterlab 

でインストールしました。

nodebrew

Node.jsをインストールするために、Nodebrewを使用しました。
nodebrewとは、Node.jsのバージョン管理するためのものです。

それではnodebrewのインストール方法です。
(https://github.com/hokaccha/nodebrew)
この公式のインストール方法を参考にしました。

まず、curlnodebrewをインストールします。

$ curl -L git.io/nodebrew | perl - setup

インストール完了後、PATHを通します。

$echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.zshrc

(bashの方は.zshrc.bashrcにしてください)

構成ファイルを再読み込みします。

$source ~/.zshrc
$nodebrew help

で確認します。
バージョンなどの情報が出てきたら、インストール成功です。

Node.js

やっと本題のNode.jsnodebrewを使用し、インストールします。
JupyterLabの拡張機能はnpmを使用してインストールするので、Node.jsが必要です。

$nodebrew install-binary latest 

でインストールします。
インストール終了後、

$nodebrew ls
v12.10.0

でインストールされたバージョンを確認します。(私のバージョンはv12.10.0でした。)
次に、使うバージョンを指定します。

$nodebrew use v12.10.0

Node.jsのバージョンを確認してみましょう。

$node -v
v12.10.0

このようになっているはずです。
完了したら、jupyterLabを起動します。

$jupyter lab


起動後、上のパレットのようなアイコンを選択します。
その中の

を選択します。
選択するとこのようなポップアップが表示されるので[Enable]を選択します。

そうすると、

このようにチェックマークがつきます。さらに

このアイコンが追加されます。拡張機能をインストールする際はこのアイコンを選択して、@username/インストールしたい拡張機能で検索するか、

ターミナル上で

$jupyter labextension install @username/インストールしたい拡張機能

このようなコマンドを打つことでインストールすることができます。

jupyterlab-lsp

本命の拡張機能をインストールします。
https://github.com/krassowski/jupyterlab-lsp )公式サイトを参考にインストールします。
ターミナル上で

$jupyter labextension install @krassowski/jupyterlab-lsp

を実行すればインストールすることができます。
また、jupyterlab上では@krassowski/jupyterlab-lspと検索すればインストールすることができます。お好きな方でインストールしてください。
jupyterLabでインストールする際はRebuildページの再読み込みは忘れず行ってください。
ターミナルでインストールする方もjupyterLabを起動したままの場合はページの再読み込みを行ってください。

次にターミナル上で

$pip install 'python-language-server[all]'

を実行し、インストールします。

次に、任意のディレクトリにservers.ymlを作成します。私はhomeディレクトリに作成しました。

$vi ~/servers.yml

servers.ymlを起動し、中に以下を記述します。

langservers:
  python:
    - pyls
  R:
    - R
    - --slave
    - -e
    - languageserver::run()

:wqで保存が完了したら、作業は終了です。

起動

jupyterlab-lspjupyterlabを起動する前に"毎回"以下のコマンドを実行する必要があります。

$node path_to_jupyterlab_staging/node_modules/jsonrpc-ws-proxy/dist/server.js --port 3000 --languageServers servers.yml

path_path_to_jupyterlab_staging
.pyenvの場合
~/.pyenv/versions/YOUR_VERSION_OR_VENV/share/jupyter/lab/staging/
ローカルインストールの場合
~/.local/lib/python3.6/site-packages/jupyterlab/staging/
となります。
私の場合は

$node ~/.pyenv/versions/3.6.9/share/jupyter/lab/staging/node_modules/jsonrpc-ws-proxy/dist/server.js --port 3000 --languageServers

としました。
このコマンドを実行後、jupyterlabを起動すると動くはずです。

エラーが出る場合

~/.pyenv/versions/YOUR_VERSION_OR_VENV/share/ディレクトリ以下にmanディレクトリしかない場合、

internal/modules/cjs/loader.js:775
    throw err;
    ^

Error: Cannot find module '/Users/USER_NAME/.pyenv/versions/YOUR_VERSION_OR_VENV/share/jupyter/lab/staging/node_modules/jsonrpc-ws-proxy/dist/server.js'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:772:15)
    at Function.Module._load (internal/modules/cjs/loader.js:677:27)
    at Function.Module.runMain (internal/modules/cjs/loader.js:999:10)
    at internal/main/run_main_module.js:17:11 {
  code: 'MODULE_NOT_FOUND',
  requireStack: []
}

このようなエラーが出ると思います。(というか私が初めて導入した際に出ました。)
出た場合は、ディレクトリを作成する必要があります。
share/ディレクトリ内で

$mkdir jupyter/lab/staging/

このような階層を作ります。(zshならこれで一気に作成できます)
bashを使っている方は

$mkdir -p jupyter/lab/staging/

で一気に作成することができます。
その後staging/ディレクトリまで移動し、

$npm init

を実行します。このコマンドはpackage.jsonファイルを作成するものです。実行した際、

This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (share) 
version: (1.0.0) 
description: 
entry point: (index.js) 
test command: 
git repository: 
keywords: 
author: 
license: (ISC) 
About to write to /Users/USER_NAME/.pyenv/versions/YOUR_VERSION_OR_VENV/share/package.json:

{
  "name": "share",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "directories": {
    "man": "man"
  },
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}


Is this OK? (yes) 

このようなものが出ます。ここでは名前の設定など任意に設定できます。
しかし、めんどくさいので終わるまでenterを押して問題ありません。
作成が終了したら、このコマンドで、Server.jsをインストールします。

$npm install server

終了後、このコマンドでjsonrpc-ws-proxyをインストールします。

$npm i jsonrpc-ws-proxy

これで毎回打つコマンドのエラーは出ないと思います。

以上です。最後になりますが、

Tabを押さずにピリオドを打つだけで自動補完してくれるjupyterlab-lspでpythonプログラミングを楽しみましょう!

参考サイト

https://qiita.com/simonritchie/items/34504f03947bfb4f54f5
https://github.com/krassowski/jupyterlab-lsp
https://github.com/hokaccha/nodebrew
https://github.com/palantir/python-language-server
https://serverjs.io/tutorials/getting-started/
https://www.npmjs.com/package/jsonrpc-ws-proxy
https://jupyterlab.readthedocs.io/en/stable/user/extensions.html

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

MacにSQL Developerをインストールする方法

  • 環境
    • macOS Mojave バージョン10.14.6
    • java version "1.8.0_45"

ダウンロードして起動する

  1. Oeacleのダウンロードページを表示する
  2. からログインする
  3. ライセンスに同意するのラジオボタンをON
  4. からダウンロードする
    1. 今回ダウンロードしたのは[sqldeveloper-19.1.0.094.2042-macosx.app.zip]
  5. zipを解凍して出てきた[SQLDeveloper.app]をアプリケーションディレクトリに格納する
  6. Launchpadから起動する

Oracleデータベースに接続してみる

  1. [+]マークから接続設定のダイアログを開く
  2. 接続内容を入力して[テスト]ボタンを押下
  3. 左下の[ステータス]に「成功」と表示されれば接続できているので[保存]ボタンで接続内容を保存する
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

UbuntuでMacbookのiSightカメラを利用可能にする

YOLOv3とか使ってみてリアルタイムのobject detectionをしようと思ったら、
Macの内蔵のiSightカメラがなんか使えなかったので自分用メモとして残しておく。

環境

  • MacBook Pro (Retina, 15-inch, Mid 2015)
  • Ubuntu 18.04.3 LTS

やったこと

基本的には以下のコマンドをコンソールに打ち込んだだけ
とりあえず管理者権限へ切り替える

$ sudo su

gitのclone

$ git clone https://github.com/patjak/bcwc_pcie.git

cdする

$ cd bcwc_pcie/firmware

makeしてインストール

$ sudo make
$ sudo make install

上の階層でもう1回makeしてインストール

$ cd ..
$ sudo make
$ sudo make install

あとはカーネルモジュールのロードとか

$ sudo depmod
$ sudo modprobe -r bdc_pci
$ sudo modprobe facetimehd

これでLinuxからでもiSightカメラが利用可能になった。
v4l-utilsをインストールして確認してみる。

$ v4l2-ctl --list-devices
Apple Facetime HD (PCI:0000:04:00.0):
    /dev/video0
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Macアプリ初心者:Realmの導入(CocoaPods利用)

今回はMacアプリでDBを使いたくてRealmについて調べてみました。
以前に作成したプロジェクトに組み込んでみます。

完成イメージ

環境

  • macOS Mojave:10.14.6
  • Xcode:10.3
  • CocoaPods:1.7.5

Realm インストール

Podfile の作成

$ pod init
$ ls
NSTableViewSample NSTableViewSample.xcodeproj Podfile

Realm インストール

Podfile に pod 'RealmSwift' を追加

$ vi Podfile
# Uncomment the next line to define a global platform for your project
# platform :osx, '10.14'

target 'NSTableViewSample' do
  # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
  use_frameworks!

  # Pods for NSTableViewSample
  pod 'RealmSwift'

end

Realm インストール

$ pod install
Analyzing dependencies
Downloading dependencies
Installing Realm (3.17.3)
Installing RealmSwift (3.17.3)
Generating Pods project
Integrating client project
Sending stats
Pod installation complete! There is 1 dependency from the Podfile and 2 total pods installed.

[!] Automatically assigning platform `osx` with version `10.14` on target `NSTableViewSample` because no platform was specified. Please specify a platform for this target in your Podfile. See `https://guides.cocoapods.org/syntax/podfile.html#platform`.

Realm を使う

pod install で作成された workspace を開く

$ open NSTableViewSample.xcworkspace

株式情報保存用のクラス(StockInfo)を作成

Object クラスを継承して作成します。

StockInfo.swift
import Cocoa
import RealmSwift

class StockInfo: Object {
    @objc dynamic var name = ""
    @objc dynamic var price = -1
    @objc dynamic var status = StockStatus.flat.rawValue
    @objc dynamic var createdAt = Date()
}

extension StockInfo {
    /// 状態をEnum形式で返却
    var stockStatus: StockStatus {
        get {
            return StockStatus(rawValue: self.status) ?? StockStatus.flat
        }
        set {
            self.status = newValue.rawValue
        }
    }

    /// StockInfo オブジェクトを作成
    class func create(realm: Realm, name: String, price: Int, status: StockStatus) -> StockInfo {
        let stockInfo = realm.create(StockInfo.self)
        stockInfo.name = name
        stockInfo.price = price
        stockInfo.stockStatus = status

        return stockInfo
    }

    /// 企業名で部分一致検索(空の場合は全件取得)
    class func objects(searchValue: String = "") -> Results<StockInfo> {
        var result = try! Realm().objects(StockInfo.self)
        let searchValue = searchValue.trimmingCharacters(in: .whitespaces)
        if searchValue != "" {
            result = result.filter("name CONTAINS %@", searchValue)
        }

        return result.sorted(byKeyPath: "createdAt")
    }

    /// デバッグ用
    class func debugInitData() {
        let realm = try! Realm()
        try! realm.write {
            // データクリア
            realm.deleteAll()

            // サンプルデータ作成
            let _ = StockInfo.create(realm: realm, name: "○○株式会社", price: 1000, status: .up)
            let _ = StockInfo.create(realm: realm, name: "○×水産", price: 12345, status: .down)
            let _ = StockInfo.create(realm: realm, name: "株式会社□○", price: 345, status: .flat)
            let _ = StockInfo.create(realm: realm, name: "×△ホールディングス", price: 321, status: .up)
            let _ = StockInfo.create(realm: realm, name: "ABC BANK", price: 20, status: .down)
            let _ = StockInfo.create(realm: realm, name: "▼○重工", price: 98000, status: .up)

            // サンプル用に1,000 件データを作成
            for i in 1...1_000 {
                let status = StockStatus.init(rawValue: Int.random(in: 0..<3))!
                let price = Int.random(in: -1..<10_000_000)
                let _ = StockInfo.create(realm: realm, name: "○△×株式会社 \(i)", price: price, status: status)
            }
        }
    }

}

株価情報の状態を表すEnum(StockStatus)を作成

StockStatus.swift
import Cocoa

enum StockStatus: Int {
    case flat = 0
    case up
    case down

    /// 状態ごとのImageオブジェクト
    var image: NSImage {
        get {
            switch self {
            case .flat:
                return NSImage(named: NSImage.Name("flat"))!
            case .up:
                return NSImage(named: NSImage.Name("up"))!
            case .down:
                return NSImage(named: NSImage.Name("down"))!
            }
        }
    }

    /// 状態ごとのカラーオブジェクト
    var color: NSColor {
        get {
            switch self {
            case .flat:
                return .gray
            case .up:
                return .green
            case .down:
                return .red
            }
        }
    }
}

StockInfo クラスを利用して株価情報を表示

細かい説明は省きますが、リファクタリングして多少見やすくなっているはずです。

ViewController.swift
import Cocoa

class ViewController: NSViewController {

    // MARK: - IBOutlet
    @IBOutlet private weak var tableView: NSTableView! {
        didSet {
            self.tableView.dataSource = self
            self.tableView.delegate = self

            self.tableView.headerView = nil
            self.tableView.rowHeight = 88
        }
    }
    @IBOutlet private weak var countTextField: NSTextField!


    // MARK: - private variables
    private var stockValues = StockInfo.objects()


    // MARK: - override func
    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        // デバッグ用にデータ作成
        StockInfo.debugInitData()
        // 株価情報をViewに反映
        self.updateStockValuesCount()
    }

    override var representedObject: Any? {
        didSet {
            // Update the view, if already loaded.
        }
    }


    // MARK: - private func

    private func updateStockValuesCount() {
        let formatter = NumberFormatter()
        formatter.numberStyle = .decimal
        let commaString = formatter.string(from: NSNumber(value: self.stockValues.count))!
        self.countTextField.stringValue = "\(commaString)件"
    }


    // MARK: - actions

    @IBAction func actionSearchField(_ sender: NSSearchField) {
        self.stockValues = StockInfo.objects(searchValue: sender.stringValue)
        self.tableView.reloadData()
        self.updateStockValuesCount()
    }

}

extension ViewController: NSTableViewDataSource, NSTableViewDelegate {

    // MARK: - NSTableViewDataSource
    func numberOfRows(in tableView: NSTableView) -> Int {
        return self.stockValues.count
    }


    // MARK: - NSTableViewDelegate
    func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
        let result = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "MyView"), owner: self) as! CustomNSTableCellView

        // Set the stringValue of the cell's text field to the nameArray value at row
        let stock = self.stockValues[row]
        result.image = stock.stockStatus.image
        result.name = stock.name
        result.color = stock.stockStatus.color
        result.price = stock.price

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

DiskMaker XでmacOS MojaveのインストールUSBを簡単に作成

DiskMaker XでQiita内を検索したら1記事、しかも途中にちょこっと載っているだけだったので書いた。

手順

  1. AppStoreから macOS Mojave をダウンロード
  2. DiskMaker Xを起動。
    1. 基本、次へ次へと押すだけ。
  3. USBメモリを差し込み、選択
  4. 待つ
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【ターミナル改造⑥】様々な機能や要素を取り入れた、高機能で便利な新規シェルの「nushell」を試用

  • 白黒ターミナルを利用する生活が多くなってきた無機質生活に、少々彩りを加えるために奔走する記事第六弾。
  • 改造前後のターミナル差分が、「表面変化九割」という事実資料を打ち付けられてもなお、彩りツールの調査に勤しむ。
  • 今回は、「劇的な見やすさ・高機能」が評判のシェル「Nu Shell」を試用することにしよう。

概要

  • Rust製の、高機能で便利な新規シェル。
  • bashやPowershell等から影響を受け、外観や機能性を追求している。
  • 公式Github
  • 公式マニュアル

特徴

構造データ表示

  • これまでのブロック型表示ではなく、テーブル化された構造データで、出力される。
  • そのため内容を、従来のテーブル操作のように簡単に「並べ替え・フィルター操作」等が可能。

自動構造化

  • jsonファイルやcsvファイル等のデータ型ファイルを、コマンド一発でテーブル構造表示で確認することができる。
  • そのため、ファイルを直接編集することなく、「より見やすい可視化・必要な値だけのフィルタ抽出」等が可能。

コマンド互換

  • nushellで独自に扱える豊富なコマンドに加えて、これまで利用していたコマンドも利用できる。
  • そのため、覚えることが少なく、より高機能なコマンド操作が可能。

結果

  • 下記のように、構造データとして扱うため、ファイル内容がテーブル型で見やすく表示される。
  • また、jsonやcsv等のファイルを、独自の内部コマンドで、直接編集することなく「構造化・フィルタ操作」等が可能。
  • また、独自コマンドだけではなく、「^」をつけてのコマンド入力で、これまで利用してきたコマンドも扱える。

作業環境

  • Mac OS X 10.13.4

インストール

リリースページからのインストール

  • ※今回は試用のため、コマンドでのインストールではなく、この方法を利用。
  1. まずこちらのページにアクセスして、自分の環境(Mac,Windows)に合わせたファイルをダウンロード。

2. ダウンロード後、任意のフォルダに展開・解凍して、中身が下記であることを確認する。

3. 確認後、フォルダ内の「nu」を起動して、シェル画面が起動すれば完了。

コマンドからのインストール

  • ※今回は試用のため、コマンドでのインストールでは行わず、上記のリリースページからの導入
  • 各環境(Mac,Windows,Linux)でのコマンドでのインストールはこちらを参考。
    • ※どちらもRust環境やコンパイラの導入等が必要。

操作

基本操作例

  • nushellでの操作の基本コマンド例としては主に下記。
    • ※例は、nushell起動済みでの操作。
    • ※cdやmv等の標準コマンドは、「^cd」のように入力せずに、そのまま使用可能。
コマンド 内容
ls 作業(カレント)ディレクトリのファイル・フォルダ情報確認
ls | pick 項目 指定項目でのファイル・フォルダ情報確認
例: ls | pick name size created
ls | reject 項目 指定項目を除外したファイル・フォルダ情報確認
例: ls | reject type size
ps 動作プロセス確認
ps | where 条件 指定条件に合致した動作プロセス確認
ps | where cpu > 5
ps | sort-by 項目 | first 表示数 指定項目で並べ替え、指定表示数で動作プロセス確認
例: ps | sort-by cpu | first 3
open 対応形式ファイル 対応したデータ形式ファイルを、構造データへ自動整形して表示
現状の対応ファイルは、「json,yaml,toml,xml,csv,ini」
例: open package.json
date 現在日時確認
enter パス名 指定パスを開始位置にした新規シェルの作成
シェルの切り替えは「p,n」で行う
enter /作業フォルダ名
shells 作成シェル一覧
help ヘルプ情報表示
version バージョン情報表示

操作画像例

  • 上記のようなファイルやデータ操作等の実際の画像例としては、下記。
  • 上記のようなシェル作成や切り替え等の操作の実際の画像例としては、下記。

まとめ

  • 今回は新規シェルの試用ということで、未知数で計り知れないツールに、巡り会えて利用していることを、錯乱状態になりながら記事を書く。
  • 「より良い可視化・高機能」なツールのはびこりが進む真っ只中に、技術者になった新米な私は、余計な自画自賛。
  • この未知数ツールと賢人開発者への礼拝と、今後の行く末を見届ける決断をしてから、次回調査をすることにしよう。

参考

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

Macのターミナルでスーパーユーザーでログインする時だけ、日本語が???になり、かな入力が拒否される問題の解決策

問題の現象

Macのターミナル起動時のユーザーの状態では、かなモードで日本語入力ができます。ところが、suコマンドでrootとしてログインした途端、日本語のファイル名は????になり、かなモードが入力拒否される状態になりました。

症状の詳細

起動時のユーザーではかな入力が可能、日本語も表示される

ターミナル起動時のユーザーでは問題なくかなモードでの入力が可能でした。
localeコマンドでも以下の通り、UTF-8になっています。

$ locale

LANG="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_CTYPE="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_ALL=

ところが、スーパーユーザーだとかな入力は拒否され、日本語は?????と表示される…

rootでlocaleコマンドを入力すると、以下のようにCになっています。

# locale

LANG=
LC_COLLATE="C"
LC_CTYPE="C"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=

この状態でlsコマンドで確認すると日本語のファイ名が???で表示されました。

?????????.png

解決への手順

① ターミナルの環境設定の詳細の確認

Control+Vで非ASCⅡ入力をエスケープはチェックが外れていること。
テキストエンコーディングがUTF-8になっていること。

② .bash_profileを作成(日本語を表示させる)

.bash_profileとは、bashログインシェル時に1回は実行されるファイルです。
こちらに、日本語を表示させるための記述をしておきます。
作成場所は、rootの$HOME直下です。
最初からない場合が多く、viで.bash_profileを作成し、以下を追記します。

作成場所は、rootの$HOME直下です。
最初からない場合は、viで.bash_profileを作成し、以下を追記します。

cdコマンドでHOMEへ移動します。
# cd $HOME

viコマンドで.bash_profileを作成します。
# vi .bash_profile

次のように記述します。

.bash_profile
export LC_ALL=ja_JP.UTF-8
export LANG=ja_JP.UTF-8

その次に、sourceコマンドで実行させます。
# source ~/.bash_profile

localeコマンドで確認すると、変更されていることが確認できます。
# locale

LANG="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_CTYPE="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_ALL="ja_JP.UTF-8"

この直後から、ファイル名は日本語で表示されるようになります。

ところが、問題が2つ残りました。
1つ目は、かなモードでは入力拒否される問題。
2つ目は、.bash_profileが起動時に実行されない問題。
なので、スーパーユーザーをログアウトし、ログインし直すと…日本語が????と表示され、sourceコマンドを毎度使用しなくてはなりませんでした。

③ .profileを作成(日本語を表示させる)

.bash_profileが読み込まれない問題がある方は、.profileに②と同様の記述をすると日本語表示の問題は解決します。

Appleのデベロッパーに以下の説明があります。
https://developer.apple.com/library/archive/documentation/OpenSource/Conceptual/ShellScripting/BeforeYouBegin/BeforeYouBegin.html#//apple_ref/doc/uid/TP40004268-CH1-SW15
(Google翻訳より引用)

Bourneシェル(bash、zshなど):
環境変数を永続的に設定してエイリアスを追加するには、適切なalias 、変数の割り当て、およびexportコマンドを次のファイルに追加できます。
~/.profile —すべてのログインシェルに対して自動的に実行されます。
~/.bash_profile — .profileに似ていますが、 bashログインシェルでのみ実行されます。
~/.bashrcおよび~/.zshrcすべての非ログインbashまたはzshシェル~/.bashrc自動的に実行されます(コマンドラインでbashまたはzshを明示的に入力するか、 #!/bin/bashまたは#!/bin/zshで始まるスクリプトを実行した場合) #!/bin/zsh )。

つまり、exportコマンドを追加できることが保証されており且つ.profileの方がすべてのログインシェルに対して自動的に実行されるということは、.bash_profileよりもどのログイン方法でも確実に読み込まれると解釈できます。

作成場所は、rootの$HOME直下です。
元からない場合は、viで.profileを作成し、以下を記述します。

.profile
export LC_ALL=ja_JP.UTF-8
export LANG=ja_JP.UTF-8

次に、スーパーユーザーをログアウトして再ログインして、localeコマンドで確認するとUTF-8になっており、日本語が表示されるようになりました。
念のため、②で作成した.bash_profileの中の記述は削除しておきました。(ファイルだけ残してあります。)

日本語表示に関しては解決したとは言え、bash_profileが読み込まれないことは動作としておかしいので、気持ちが悪いですね。

④ .inputrcを作成(日本語入力を出来るようにする)

コマンドラインで日本語を表示、使用したい時のreadlineの設定になります。
こちらをすることで、かなモードでの入力拒否がされなくなります。

作成場所は同じく、rootの$HOME直下です。
viコマンドで.inputrcを作成します。
# vi .inputrc

次のように記述します。

.inputrc
set convert-meta off
set input-meta on
set output-meta on

そして、bindコマンドで読み込みます。
オプション -f の意味は、「指定したinputrc書式のファイルからキーバインドなどの設定を読み込む(有効にする)」です。

# bind -f .inputrc

すると、日本語入力ができるようになりました!

課題残る…

bashログインシェル時に1回は実行されるはずの.bash_profileが実行されない問題が残ってしまいました。
どなたか、解決策をご存知の方がいらっしゃったら、ご教授頂けると幸いです。

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