n-hirokiの開発ブログ

30歳を越えたプログラミング初級者の僕が、プログラムで生計を立てることを目指しているブログです。

考え方を変えてプログラミングを簡単に!

こんにちは!

 

ずっと苦しい時間が続きましたが最近脱出しました!

そんなボクの最近気づいたことです。

 

自分の実力を信じないで!

 

ボクは自分の考え方が原因でプログラミングを難しいものだと思っていました

1番の原因は自分の技術レベルよりも高いものに取り組むべきだ!!というもの。

 

簡単なものをやるのは「かっこ悪い」し「効率が悪い」からやらない方がいいまで思ってました。

 

ですが、ボクの性格上自分の技術レベルを現実よりも高いレベルだと勘違いして取り掛かります。

なので、思ってるよりも高い壁なのです。遥かに!

 

するとすぐに壁にぶつかり止まってしまいます。壁にぶつかることは悪いことじゃないし当たり前なことです。

ですが、その壁が自分の実力と使える時間の限界を遥かに超えているのです。

 

良くも悪くも諦めが悪いのでその壁を越えようと、悪戦苦闘を長期に渡り続けます。

短くて2週間かな。一か月は普通に使います。

 

なんとか壁を越えるのです。

するとその壁に関することをひたすら考えて調べてるだけなので技術力は上らないしモチベーションも下がる一方。

しかも、ひとつ壁を越えてもすぐに次の壁が立ちはだかります。

それの繰り返しでまったくひとつの機能だったりアプリケーションを完成させる見通しが立たないのです。

しかも、壁を越えたからと言って実力はそんなにつかないです。なぜかというと、その分野の基礎ができていないからあまり吸収できないのです。

時には壁から逃げるのも必要だし、挑む壁も選ばないといけないことを学びました。

 

それが、IoTから離れた理由のひとつです。

Socket.IO開発環境の構築

前置き

ドットインストールの「ローカル開発環境」の動画で作成した開発環境ではSocket.IOはうまく動きませんでした。(令和元年時点)
その原因はNode.jsのバージョンが古くてSocket.IOで使用されているNode.jsのコードで使用されているconstがエラーになってしまいました。
Node.jsでは古いバージョンだとconstは使えないのです。

Node.jsのバージョンを新しくしようとしても複数のglibcが足りないとエラーになってしまいうまくいきません。
glibcをインストールしたりしましたが僕には難しくてうまくいきませんでした。
なので、この際vagrantに新しい環境を作成することにしました。


VagrantでのSocket.IOの開発環境を構築する

前提条件
VirtualboxVagrantはインストール済み
centos/7は追加済み
・MyVagrantというディレクトリで作業します。

  $ mkdir centos7
  $ ls -l | grep centos7
  $ cd centos7
  $ vagrant init centos/7
  $ ls -l     #vagrantfileがあるか確認
  $ vagrant up
  $ vagrant ssh
  
  #仮想マシンにログインしました。

  $ cat /etc/redhat-release
  $ sudo yum install git    #gitインストール
  $ git --version    #gitがちゃんとインストールされているか確認
  $ git clone git://github.com/creationix/nvm.git ~/.nvm    #nvm入れる
  $ echo . ~/.nvm/nvm.sh >> ~/.bashrc    #パスを通す
  $ . ~/.bashrc
  $ nvm --version    #nvmがちゃんと入っているか確認
  $ nvm ls-remote    #nodeのインストールできるバージョンを確認
  $ nvm install stable    #安定版をインストール
  $ node -v    #nodeがちゃんと入っているか確認
  $ npm -v    #npmがちゃんと入っているか確認
  $ npm install socket.io    #socket.ioインストール

ここまでで開発環境の構築が完了しました!

次はCyberduckに接続します。

VagrantCyberduckに接続

一度仮想マシンから出ます。

  $ vagrant up
  $ vagrant ssh-config #情報いろいろ
  $vagrant ssh

ここでの内容をメモしておきます。
具体的には、HostName,Port,Userをメモしておきます。

Cyberduckを起動します。
1、新規作成(プロトコルをSFTP)
2、サーバにHostNameを入力(僕の場合は 127.0.0.1
3、ポートにPortを入力(僕の場合は 2222)
4、ユーザー名にUserを入力(大体の場合はvagrant
5、パスワードにユーザー名と同じくUserを入力(大体の場合はvagrant
ここで接続を押してみます!

Cyberduckに接続できない

上記を入力して接続できなかった場合は以下のことを試してください。

1、Cyberduckに上記の内容を入力後、SSH Private key でIdentityFileを指定します。SSH Private keyはCyberduckの画面の下部にあります。
2、隠しフォルダにあるのでCommand + Shift + g でファイル指定
3、/Users/ユーザー名/MyVagrant/centos7/.vagrant/machines/default/virtualbox/private_key を入力
4、private_keyファイルを指定

僕はここで接続できました!




vagrant upの時に出る赤い文字の対処法。。。

vagrantを起動するときのvagrant upをするとこのようなエラーが出るときがあります。

f:id:ZEROFROM:20190731135212p:plain
vagrant up エラー


これは、VirtualBoxのホストとゲストのバージョンが違うために起きるエラーです。
ホストは起動時に自動的にバージョンが更新されるのですが、ゲストはバージョン更新されません。
なので、ホストとゲストのバージョンを一致させてあげればエラーは取り除けます!
下記のコマンドを実行すれば治るみたいです。

  vagrant plugin install vagrant-vbguest


f:id:ZEROFROM:20190731135246p:plain
エラー修正


PATHを通すについてまとめてみる(Mac OS X)

用語を少しまとめる

PATHを通す・・・コマンド検索パスを追加する
コマンド検索パス・・・シェルがコマンド実行ファイルを探しに行くパス


コマンド検索パスの確認方法

  echo $PATH


コマンド実行ファイルの格納場所の確認方法

which コマンド

  which ls

コマンド検索パス優先度

同じ名前のコマンド実行ファイルが複数のコマンド検索パスに存在する場合は優先度がある。「echo $PATH」で出力された左が優先される。

PATHの通し方

~/.bashrc か ~/.bash_profileに以下のコマンドを実行する。

  export PATH=$PATH:追加したいコマンド検索パス
  //sourceコマンドを実行しないとPATHが通らない。
  source ~/.bashrc    //~/.bashrcで実行した場合
  source ~/.bash_profile  //~/.bash_profileで実行した場合

exportコマンド・・・環境変数を表示や設定できるコマンド

環境変数を表示する

設定されている環境変数を表示する

  export -p

環境変数を設定する

$PATHという環境変数を設定する例

  export PATH=/usr/local/bin

  //確認
  echo $PATH

  //環境変数を使う
  //どちらも同じ
  ls /usr/local/bin
  ls $PATH

すでに存在する環境変数を設定すると上書きされる。

環境変数を削除する

unsetコマンドで環境変数を削除できる。

  unset PATH
  echo $PATH  //確認


追加するコマンド検索パスの優先順位を高くする

  export PATH=追加したいコマンド検索パス:$PATH



GLIBC_2.14をインストールする

やること:CentOS6.8のnodeのバージョンを新しくする。

・現在の状況
nvm インストール済み
libstdc++を更新した(前回)

f:id:ZEROFROM:20190721130822p:plain
現状

これをなんとかするために”GLIBC_2.17” ”GLIBC_2.16” ”GLIBC_2.14”をインストールする!

前回の記事
hiroki-prog.hatenablog.com


安全にcentos 6.xから直接glibc 2.14にアップデートすることはできないのでglibcをインストールすることで対応するのがいいみたい。

glibc214をインストールする

  mkdir ~/glibc214
  cd glibc214
  wget http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz
  tar zxvf glibc-2.14.tar.gz
  cd glibc-2.14
  mkdir build && cd build
  ../configure --prefix=/opt/glibc-2.14
  make -j4
  sudo make install


これでできたはず!
ターミナルを再起動して試してみる。

f:id:ZEROFROM:20190727122357p:plain

エラーが変わっていない、、、。
たぶん、PATH通していないからだと思う。


CentOSのlibstdc++を更新する

vagrant sshしたら表示がおかしくなった。

前回いろいろいじったらこんな表示になってしまった。
f:id:ZEROFROM:20190716112419p:plain
vagrant ssh

調べたらどうもCentOSのインストールされているライブラリが古く、ソフトウェアが要求するバージョンと合わないのが原因らしい。
参考にさせていただきました。

www.saintsouth.net

インストールされている libstdc++ に組み込まれているバージョンを確認します。

f:id:ZEROFROM:20190716113015p:plain
libstdc++ に組み込まれているバージョンを確認

sshの時に要求されたバージョンがないのがわかった。

gccのビルド

$ sudo yum install gmp-devel mpfr-devel libmpc-devel
$ sudo yum install glibc-devel.i686

y/nの質問が2回あったので両方ともyを選択。

ソースコードのダウンロード

http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/
上記のURLからソースコードをダウンロードします。

$ mkdir -p ~/src
$ cd ~/src
$ curl -LO http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-4.8.4/gcc-4.8.4.tar.gz
$ tar fxz gcc-4.8.4.tar.gz
$ cd gcc-4.8.4

ビルド

$ ./configure
$ make //すごい時間かかる 僕は1.5時間くらいかかった。

新しいライブラリをインストール

現在のライブラリインストール状況を確認して、目的のライブラリ「libstdc++.so.6.0.19」のみコピーします。

$ ls -l /usr/lib64/libstd*
$ sudo cp ${HOME}/src/gcc-4.8.4/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.19 /usr/lib64

既存のライブラリ (libstdc++.so.6.0.13) から、先ほどコピーした新しいライブラリに切り替えます。  古い方のライブラリはシンボリックリンクを含めて削除せず、いつでも切り戻せるよう移動するだけにします。

$ cd /usr/lib64
$ sudo mv libstdc++.so.6 libstdc++.so.6.bak
$ sudo ln -s libstdc++.so.6.0.19 libstdc++.so.6

$ ls -l /usr/lib64/libstd*

最後に、目的のバージョンの「GLIBCXX_3.4.15」が有効になっているか確認します。

$ strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX

いろいろファイルが作られて、どのディレクトリに今まで作ってきたプログラムが入っているかと言うと、

localhost/home/vagrant内に入っています。
f:id:ZEROFROM:20190718164734p:plainf:id:ZEROFROM:20190718164749p:plain

Socket.IOのエラー『SyntaxError: Use of const in strict mode.』

こんにちは!n-hirokiです!

昨日でたエラーを調べます!



hiroki-prog.hatenablog.com

エラーを探る

・今回のエラー

Socket.IO SyntaxError: Use of const in strict mode.


・エラー先のコード一部

f:id:ZEROFROM:20190715204746p:plain
constエラー

google先生に聞いてみる「Socket.IO SyntaxError: Use of const in strict mode.」

良さそうな情報が見つかった。

  1. JavaScript に const や let が導入されたのは ECMAScript 2015
  2. Node.js でこれがデフォルトで有効になったのは Node.js 4.x 以降
  3. use strict を指定すると ECMAScript 5 の strict mode となり、かえって Syntax Error になってしまう
  4. const let に関しては、 node --harmony app.js といった感じに --harmony オプションを付けることで、当該機能を有効化することもできるよう


node.jsのバージョンを新しくすれば良さそうですね


Vagrantのnode.jsのバージョンを新しくする

つい最近、Vagrantのnode.jsとnpmのバージョンを最新にしようと思ったのですが、まだできていませんでした。
なのでやります!

参考にした記事↓
qiita.com

  1. nvmをインストール
  2. nvm ls-remoteでインストールできるバージョン確認
  3. nvm install stable 最新版をインストール
  4. 結果の最後に 「nvm is not compatible with the npm config "prefix" option: currently set to ""Run `npm config delete prefix` or `nvm use --delete-prefix v12.6.0` to unset it.と表示された
  5. nvm use --delete-prefix v12.6.0実行
  6. node -v バージョン確認
    f:id:ZEROFROM:20190715213631p:plain
    node -v
  7. もう一度「nvm install stable」実行
  8. node -v [v0.10.48]
  9. v12.6.0 is already installed.の一文を発見
  10. 調べたら「nvm ls」でバージョン変更できるらしいf:id:ZEROFROM:20190715215451p:plain
  11. うまくいかないのでuseで変える
  12. nvm use 12.6f:id:ZEROFROM:20190715215626p:plain
  13. うまくいってないだろうけどバージョン確認
    f:id:ZEROFROM:20190715215737p:plain
    node バージョン


うまくいかない、、、。
続きは明日。。。