STUDY MEMO

学習のメモ書き

< nodebrew > Permission deniedの対処法

エラー発生

nodebrewのインストールの際、以下のエラーが出た。

Permission denied @ dir_s_mkdir - /private/tmp/homebrew20201025-17620-12ps03o permission deniedはアクセス拒否、後ろのdir_s_mkdirはちょっと意味がわからなかったが、 調べたところ、権限がユーザーになってないことが原因とのこと。


対処法

以下のコマンドで権限をユーザーに戻した。

$ sudo chown -R 'ユーザー名' /private/tmp/  

sudoはrootユーザーの権限が必要なコマンドをsudoコマンド経由で実行させることができる、とのことでファイルやディレクトリの所有者を変更するコマンドであるchownと-Rオプションを使用することで、カレントディレクトリ配下のファイルやディレクトリの所有者を変更できるようになる、らしい。

この作業をやったところ、nodebrewのinstallが無事に成功した。

参考:

https://teratail.com/questions/204129

< コマンド > vim

移動

h:左へ移動
j:下へ移動
k:上へ移動
l:右へ移動

5lと打つと、右5つ移動する。

0:行の先頭へ移動(インデント無視)
^:行の先頭
$:行の末尾
+:下の行の先頭へ
-:上の行の先頭
gg:ファイル先頭に戻る
Shift + g:ファイル末尾に進む
Shift + m:カーソルを画面の中心へ
control + f:ページアップ
control + b:ページダウン

単語移動

w:単語の先頭へ移動
b:単語の先頭へ戻る
e:単語の末尾に進む
ge:単語の末尾に戻る

削除

x:1文字消去
dd:一行削除
cc:一行削除してインサートモードになる

コピー&ペースト

p:カーソルの場所にペースト

ファイル操作系コマンド

:w:保存コマンド
:w!:強制保存コマンド
:q:vimを閉じるコマンド
:q!:vimを強制的に閉じるコマンド
:wq:保存してからvimを閉じるコマンド
:wq!:保存してからvimを強制的に閉じる

モード

i:挿入モードへ
o:新しい行を追加し、挿入モードへ
escキー:インサートモード解除

参考資料

【入門】Vimで高速で移動~プラグインなしでの移動まとめ~ - Qiita
Vimコマンド : 便利一覧 - Qiita
まず覚えておきたいVimコマンド - Qiita
よく使う Vim のコマンドまとめ - Qiita
覚えておきたい Vim コマンド 備忘録 - Qiita

< Node.js > ツイートを取得して、aws comprehendで解析する

const needle = require("needle");

const token = process.env.BEARER_TOKEN; // bearer_tokenを環境変数で設定しておく

const endpointUrl = "https://api.twitter.com/2/tweets/search/recent";

async function getRequest() {
  const params = {
    query: "from:アカウント名 -is:retweet -is:reply",
    "tweet.fields": "text",
    max_results: 取得数,  // max 100
  };

  const res = await needle("get", endpointUrl, params, {
    headers: {
      "User-Agent": "v2RecentSearchJS",
      authorization: `Bearer ${token}`,
    },
  });

  if (res.body) {
    let tweetText = res.body.data; //jsonのdataプロパティを取得
    // オブジェクトのtext部分を配列に変換
    let ar = [];
    for (let i = 0; i < tweetText.length; i++) {
      ar.push(tweetText[i].text.replace(/\r?\n/g, "").replace(/#.*$/, ""));
    }  
    return ar;
  } else {
    throw new Error("Unsuccessful request");
  }
}
//replace(/\r?\n/g, ""):改行の\nを削除
//replace(/#.*$/, ""):正規表現で#以降を削除


getRequest().then((response) => {  // .thenでpromiseをcatch
  let AWS = require("aws-sdk");

  AWS.config.update({
    region: "us-east-1",
    credentials: {
      accessKeyId: "",  //キーを入力
      secretAccessKey: "",  //キーを入力
    },
  });


  const comprehend = new AWS.Comprehend();

  let array = response;

  let params = {
    TextList: array,
    LanguageCode: "ja",
  };

  comprehend.batchDetectSentiment(params, (err, data) => {
    if (err) {
      console.log(err, err.stack);
    } // an error occurred
    else {
      for (let i = 0; i < data.ResultList.length; i++) {
        console.log(data.ResultList[i].SentimentScore.Negative);  //negativeの数値だけ取得していることを確認
      }
    } // successful response
  });
});

参考文献

needle - npm

Node.jsのHTTPクライアントまとめ2020 - Qiita

axios vs got vs needle vs request | npm trends

< CSS > marginとpaddingとborderについて

margin, padding, borderについて、ふと混乱したのでメモとして記載。

概要

https://i.gyazo.com/50cb38d42030c060030d3278d5f95624.png

設定について

paddingやmarginについては、topやleftなどを使用しなくてもそれぞれ一気に設定できる。

paddingを例にすると以下の通り。
適用する場所を以下に示している。

padding: 上下 左右;

padding: 上 左右 下;

padding: 上 右 下 左;

<VSC> htmlの自動補完が効かなくなった時の対処法

ある時、htmlファイルの保存時自動整形が効かなくなっていることに気づいた。
いろんな拡張機能を追加していたので多分それが原因かなと思ったため、
default formatterの設定をprettierに指定してみたところ、解消した。

Image from Gyazo

<MAC関連> Emacsキーバインド一覧

Emacsキーバインドとは、キーボードショートカットによるカーソル移動のこと。

移動

control + f : カーソルを右

control + b : カーソルを左

control + p : カーソルを上

control + n : カーソルを下

control + a : 行頭/段落先頭に移動

control + e : 行末/段落末に移動

削除

control + d : カーソル右側の文字を削除

control + h : カーソル左側の文字を削除

control + k : カーソル右側の文字から行末/段落末まで削除

option + delete : カーソル左側の1単語とその後ろのスペース・句読点を削除

それ以外

control + y : control + kで削除した文字を貼り付け

control + o : カーソルの後ろに一行挿入

control + t : カーソルの左側と右側の文字を入れ替える

control + l : カーソルを表示領域の中央にする

control + v : 次のページ(Page downと同じ)

参考

テキスト入力が死ぬほどはかどるMacショートカットキー15個 | FINDJOB! Startup

< notion > ページ内の目次の作成

目次の設定

Notionのpage内で

/toc と入力し、Table of contentsを選択。

https://i.gyazo.com/3c6883a2a7306503d4726c4f5dc7feee.png

選択すると、見出しで目次が生成されて、クリックするとページジャンプができるようになる。

https://i.gyazo.com/884826adf7f5e3574dd81ef0fb936b0b.png

引用

www.notion.so

< homebrew> treeのインストール

treeコマンドは、階層構造を確認することのできるコマンド。

導入には、homebrewを使用した。

brew install tree

使用するときは、

tree ディレクトリ名

参考文献

https://qiita.com/fujimo096/items/c890816dd395b76beae4

https://formulae.brew.sh/formula/tree

<AWS> AWS運用でアカウント取得した後やったほうがいいことリスト

・rootアカウントの保護のためのMFA化(多要素認証)
・管理用のIAMユーザ作成
・IAMパスワードポリシーの適用
・セキュリティステータスの確認
・請求情報の設定
AWSアカウントの設定
・通知設定
・操作履歴を残すよう設定(CloudTrailを有効化) ・IAMユーザへの切り替えとリージョン設定

参考、引用

AWS運用でアカウント取得したら、すぐやること | AWS運用最適化サービス cloud link (クラウドリンク)

AWSアカウントを取得したら速攻でやっておくべき初期設定まとめ - Qiita

adobeのインストールエラー対処

creative cloudが使えなくなったので、再インストールしようとしたが、以下のエラーが表示された。

Image from Gyazo

考察

702エラーは権限の不足が原因ということらしい。
エラー対処の方法はディスクユーティリティでアクセス権を修復するように書いてあるが、
Sierra 以降の macOS でアクセス権の修復を手動で行う方法 (フリーソフト OnyX を使う方法) - Macにスイッチしました
でも記載されているように最近のMacOSにはfirstaidで自動で修復されるようになったようで、
公式で記載されているエラー解消ができなかった。
firstaidしてもダメ、再起動してもダメ。

同様のエラーがあったというのをtwitterで見かけたが、adobeに相談してもAppleに相談するように、とのこと。
twitterの主はそれを信じず、自己解決したそう。
そこへ解決法が記載されていたのでそれを使用してみたところ、解決できた。

問題はアクセス権限が不足しているということ。
private/tmpはファイルの一時保管場所とのことで、インストール時にpermission deniedが出る時はここのアクセス制限がおかしくなっている時、らしい。

hituzi-ando.hatenablog.com

MacOSのアップデートの際にrootでオーバライドされてしまうようになってしまったという記事を見たことがあるのでそれが原因かもしれない。

対処法

$ sudo chmod 1777 /private/tmp

sudo:rootユーザー権限が必要なコマンドを実行。
※同じような用途のコマンドに「su」があるが、実行時rootのパスワードが必要となる。
chmod:ファイルやディレクトリのアクセス権(パーミッション)を変更
1777:すべてのユーザがファイルおよびディレクトリを作成書き込みを行えるようになり、しかし、作成したファイルやディレクトリを削除出来るのは所有者だけとうパーミッション

参考

【 sudo 】コマンド――スーパーユーザー(rootユーザー)の権限でコマンドを実行する:Linux基本コマンドTips(68) - @IT

今さら聞きづらい「ファイルパーミッション」について (フェンリル | デベロッパーズブログ)

chmod? chown? よくわからんって人のための、ファイル権限系まとめ - Qiita

【Linux初心者向け】スティッキービットとは?と設定方法

< Node.js > twitter API v2のツイート取得

環境設定

You will need to have Node.js installed to run this code. All Node.js examples use needle as the HTTP client, which needs to be npm installed. For OAuth with user context requests, you'll need to install the got and oauth-1.0a packages.

npm install needle  
npm install got  
npm install oauth-1.0a  

参考:GitHub - twitterdev/Twitter-API-v2-sample-code: Sample code for the Twitter API early access endpoints (Python, Java, Ruby, and Node.js).

コード

const needle = require('needle');

// The code below sets the bearer token from your environment variables
// To set environment variables on macOS or Linux, run the export command below from the terminal:
// export BEARER_TOKEN='YOUR-TOKEN'
const token = process.env.BEARER_TOKEN

const endpointUrl = "https://api.twitter.com/2/tweets/search/recent";

async function getRequest() {
  // Edit query parameters below
  // specify a search query, and any additional fields that are required
  // by default, only the Tweet ID and text fields are returned
  const params = {
    'query': 'from:アカウント名 -is:retweet -is:reply', //リツイートとリプライを除く
    // 'tweet.fields': 'author_id'
  }

  const res = await needle('get', endpointUrl, params, {
    headers: {
      "User-Agent": "v2RecentSearchJS",
      "authorization": `Bearer ${token}`
    }
  })

  if (res.body) {
    return res.body;
  } else {
    throw new Error('Unsuccessful request');
  }
}

(async () => {

  try {
    // Make request
    const response = await getRequest();
    console.dir(response, {
      depth: null
    });

  } catch (e) {
    console.log(e);
    process.exit(-1);
  }
  process.exit();
})();

参考

GET /2/tweets/search/recent | Twitter Developer

Twitter-API-v2-sample-code/recent_search.js at master · twitterdev/Twitter-API-v2-sample-code · GitHub

< コマンド > ターミナル

環境変数についてのコマンド

環境変数を追加

$ export 環境変数名=パス

環境変数の内容を確認する

$ export -p

環境変数を削除

$ unset 環境変数名

環境変数の設置

$ export 環境変数名="内容"

環境変数の一覧

$ env

特定の環境変数を検索する場合、

$ env | grep 環境変数

$ echo $環境変数

で表示できる。


操作関連

finderを開く

$ open .

ディレクトリ関連

今どこのディレクトリにいるか調べる

$ pwd

隠しファイルやフォルダを表示

$ ls -a


ruby関連

Rubyのバージョン確認

$ ruby -v

参考文献

エンジニアのチラシの裏: [Mac] 環境変数の確認、設定、削除

<JavaScript> for文、while文

for文

let fruits = ["banana", "apple", "lemon"];
for (let i = 0; i < fruits.length; i++) {
  console.log(fruits[i]);
}

実行結果

$ node test.js
banana
apple
lemon

while文

無限ループ

while (true) {
  console.log("hello");
}

条件を満たしたら終了

while (true) {
  var num = Math.random();
  console.log("hello");
  if (num > 0.98) //0.98より大きい数字が出たらbreak
    break;
}

<JavaScript> 関数

構文

function 関数名(引数){
  処理
};

関数名(引数);で、{}内の処理が呼び出される。

引数有りの場合

function num(a) {
  console.log(a);
}
num(1);

実行結果

$ node test.js
1

引数なしの場合

function num() {
  console.log(1);
}
num();

実行結果

$ node test.js
1

引数が複数の場合

function sum(a, b) {
  console.log(a + b);
}
sum(1, 2);

実行結果

$ node test.js
3

関数の返り値を変数に代入

関数の中で処理した結果を取得したい場合は返り値を指定することが可能。 その場合はreturnで返り値を指定する。
return以降に記載した処理は実行されない。

function sum(c, d) {
  return (c + d);
}

let result = sum(1, 2);
console.log(result);

実行結果

$ node test.js
3

参考

JavaScript初心者がNode.jsでTwitterのBotを作って遊べるようになるための本 | 中野 仁 | 工学 | Kindleストア | Amazon