おれろぐ #z_a_ki3

(・∀・) オイ!

node.jsでHello World!! (mac & Visual Studio Code)

作業ディレクトリを開き、app.jsを新規作成。

const http = require('http');

var server = http.createServer(
    (rq,rs)=>{
        rs.setHeader('Content-Type', 'text/html');
        rs.write('Hello World!!');
        rs.end();
    }
);

server.listen(3000);

f:id:z_a_ki3:20180321174818p:plain

左側のバー(アクティビティーバーというらしい)にある虫アイコンをクリック、
緑色の実行ボタンを押して実行すると、下のデバッグコンソールに実行状態が
表示されます

f:id:z_a_ki3:20180321175103p:plain

ブラウザで http://localhost:3000/ を開くと

f:id:z_a_ki3:20180321175256p:plain

無事に Hello World が表示されました。

めでたしめでたし

node.jsの環境構築(mac)

この手の内容はQiitaに沢山の記事がアップされているので備忘録として…

環境 macOS High Sierra 10.13.3

  • Xcodeのインストール
  • Xcodeコマンドラインツールのインストール
  • Homebrewのインストール
  • nodebrewのインストール
  • Node.jsのインストール

Xcodeのインストール

AppStoreからXcodeをインストール。

Xcodeコマンドラインツールのインストール

$ sudo xcodebuild -license

ライセンス条項が表示されるので agree を入力する。

$ xcodebuild -version
Xcode 9.2
Build version 9C40b

-version スイッチでバージョン確認

Homebrewのインストール

公式HPで案内されているインストールコマンドを実行。

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

うーん、インストール中にこんなの出たからXcodeいらなかったかな?

Downloading Command Line Tools (macOS High Sierra version 10.13) for Xcode
Downloaded Command Line Tools (macOS High Sierra version 10.13) for Xcode
Installing Command Line Tools (macOS High Sierra version 10.13) for Xcode
Done with Command Line Tools (macOS High Sierra version 10.13) for Xcode
Done.

インストール後、Command Line Toolsのバージョンを確認したらエラーが…

$ xcodebuild -version
xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance

はて?

Xcode → Preferences → Locations を見るとCommand Line Toolsが空欄になっていたので、 選択し直し、

f:id:z_a_ki3:20180321101626p:plain

再度、バージョン確認したら無事に出ました。

$ xcodebuild -version
Xcode 9.2
Build version 9C40b

HomebrewでインストールされたCommand Line Toolsがどこに行ったのか…

Homebrewのバージョンはこんな感じで

$ brew -v
Homebrew 1.5.11
Homebrew/homebrew-core (git revision 622c; last commit 2018-03-20)

nodebrewのインストール

$ brew install nodebrew
==> Downloading https://github.com/hokaccha/nodebrew/archive/v1.0.0.tar.gz
==> Downloading from https://codeload.github.com/hokaccha/nodebrew/tar.gz/v1.0.0
######################################################################## 100.0%
==> Caveats
You need to manually run setup_dirs to create directories required by nodebrew:
  /usr/local/opt/nodebrew/bin/nodebrew setup_dirs

Add path:
  export PATH=$HOME/.nodebrew/current/bin:$PATH

To use Homebrew's directories rather than ~/.nodebrew add to your profile:
  export NODEBREW_ROOT=/usr/local/var/nodebrew

Bash completion has been installed to:
  /usr/local/etc/bash_completion.d

zsh completions have been installed to:
  /usr/local/share/zsh/site-functions
==> Summary
🍺  /usr/local/Cellar/nodebrew/1.0.0: 8 files, 38.4KB, built in 3 seconds

バージョン確認 nodebrew -v で、バージョン・Usage・Exampleが表示されたらOK

$ nodebrew -v
nodebrew 1.0.0

Usage:
    nodebrew help                         Show this message
    nodebrew install <version>            Download and install <version> (from binary)
    nodebrew compile <version>            Download and install <version> (from source)
    nodebrew install-binary <version>     Alias of `install` (For backword compatibility)
    nodebrew uninstall <version>          Uninstall <version>
    nodebrew use <version>                Use <version>
    nodebrew list                         List installed versions
    nodebrew ls                           Alias for `list`
    nodebrew ls-remote                    List remote versions
    nodebrew ls-all                       List remote and installed versions
    nodebrew alias <key> <value>          Set alias
    nodebrew unalias <key>                Remove alias
    nodebrew clean <version> | all        Remove source file
    nodebrew selfupdate                   Update nodebrew
    nodebrew migrate-package <version>    Install global NPM packages contained in <version> to current version
    nodebrew exec <version> -- <command>  Execute <command> using specified <version>

Example:
    # install
    nodebrew install v8.9.4

    # use a specific version number
    nodebrew use v8.9.4

念のため、アップデード

$ nodebrew selfupdate
Fetching nodebrew...
Updated successfully

Node.jsのインストール

インストール可能なバージョンを全て表示

$ nodebrew ls-all
$ nodebrew ls-all
remote:
v0.0.1    v0.0.2    v0.0.3    v0.0.4    v0.0.5    v0.0.6    

v0.1.0    v0.1.1    v0.1.2    v0.1.3    v0.1.4    v0.1.5    v0.1.6    v0.1.7
v0.1.8    v0.1.9    v0.1.10   v0.1.11   v0.1.12   v0.1.13   v0.1.14   v0.1.15
v0.1.16   v0.1.17   v0.1.18   v0.1.19   v0.1.20   v0.1.21   v0.1.22   v0.1.23
v0.1.24   v0.1.25   v0.1.26   v0.1.27   v0.1.28   v0.1.29   v0.1.30   v0.1.31
v0.1.32   v0.1.33   v0.1.90   v0.1.91   v0.1.92   v0.1.93   v0.1.94   v0.1.95
v0.1.96   v0.1.97   v0.1.98   v0.1.99   v0.1.100  v0.1.101  v0.1.102  v0.1.103
v0.1.104  

v0.2.0    v0.2.1    v0.2.2    v0.2.3    v0.2.4    v0.2.5    v0.2.6    

v0.3.0    v0.3.1    v0.3.2    v0.3.3    v0.3.4    v0.3.5    v0.3.6    v0.3.7
v0.3.8    

v0.4.0    v0.4.1    v0.4.2    v0.4.3    v0.4.4    v0.4.5    v0.4.6    v0.4.7
v0.4.8    v0.4.9    v0.4.10   v0.4.11   v0.4.12   

v0.5.0    v0.5.1    v0.5.2    v0.5.3    v0.5.4    v0.5.5    v0.5.6    v0.5.7
v0.5.8    v0.5.9    v0.5.10   

v0.6.0    v0.6.1    v0.6.2    v0.6.3    v0.6.4    v0.6.5    v0.6.6    v0.6.7
v0.6.8    v0.6.9    v0.6.10   v0.6.11   v0.6.12   v0.6.13   v0.6.14   v0.6.15
v0.6.16   v0.6.17   v0.6.18   v0.6.19   v0.6.20   v0.6.21   

v0.7.0    v0.7.1    v0.7.2    v0.7.3    v0.7.4    v0.7.5    v0.7.6    v0.7.7
v0.7.8    v0.7.9    v0.7.10   v0.7.11   v0.7.12   

v0.8.0    v0.8.1    v0.8.2    v0.8.3    v0.8.4    v0.8.5    v0.8.6    v0.8.7
v0.8.8    v0.8.9    v0.8.10   v0.8.11   v0.8.12   v0.8.13   v0.8.14   v0.8.15
v0.8.16   v0.8.17   v0.8.18   v0.8.19   v0.8.20   v0.8.21   v0.8.22   v0.8.23
v0.8.24   v0.8.25   v0.8.26   v0.8.27   v0.8.28   

v0.9.0    v0.9.1    v0.9.2    v0.9.3    v0.9.4    v0.9.5    v0.9.6    v0.9.7
v0.9.8    v0.9.9    v0.9.10   v0.9.11   v0.9.12   

v0.10.0   v0.10.1   v0.10.2   v0.10.3   v0.10.4   v0.10.5   v0.10.6   v0.10.7
v0.10.8   v0.10.9   v0.10.10  v0.10.11  v0.10.12  v0.10.13  v0.10.14  v0.10.15
v0.10.16  v0.10.17  v0.10.18  v0.10.19  v0.10.20  v0.10.21  v0.10.22  v0.10.23
v0.10.24  v0.10.25  v0.10.26  v0.10.27  v0.10.28  v0.10.29  v0.10.30  v0.10.31
v0.10.32  v0.10.33  v0.10.34  v0.10.35  v0.10.36  v0.10.37  v0.10.38  v0.10.39
v0.10.40  v0.10.41  v0.10.42  v0.10.43  v0.10.44  v0.10.45  v0.10.46  v0.10.47
v0.10.48  

v0.11.0   v0.11.1   v0.11.2   v0.11.3   v0.11.4   v0.11.5   v0.11.6   v0.11.7
v0.11.8   v0.11.9   v0.11.10  v0.11.11  v0.11.12  v0.11.13  v0.11.14  v0.11.15
v0.11.16  

v0.12.0   v0.12.1   v0.12.2   v0.12.3   v0.12.4   v0.12.5   v0.12.6   v0.12.7
v0.12.8   v0.12.9   v0.12.10  v0.12.11  v0.12.12  v0.12.13  v0.12.14  v0.12.15
v0.12.16  v0.12.17  v0.12.18  

v4.0.0    v4.1.0    v4.1.1    v4.1.2    v4.2.0    v4.2.1    v4.2.2    v4.2.3
v4.2.4    v4.2.5    v4.2.6    v4.3.0    v4.3.1    v4.3.2    v4.4.0    v4.4.1
v4.4.2    v4.4.3    v4.4.4    v4.4.5    v4.4.6    v4.4.7    v4.5.0    v4.6.0
v4.6.1    v4.6.2    v4.7.0    v4.7.1    v4.7.2    v4.7.3    v4.8.0    v4.8.1
v4.8.2    v4.8.3    v4.8.4    v4.8.5    v4.8.6    v4.8.7    

v5.0.0    v5.1.0    v5.1.1    v5.2.0    v5.3.0    v5.4.0    v5.4.1    v5.5.0
v5.6.0    v5.7.0    v5.7.1    v5.8.0    v5.9.0    v5.9.1    v5.10.0   v5.10.1
v5.11.0   v5.11.1   v5.12.0   

v6.0.0    v6.1.0    v6.2.0    v6.2.1    v6.2.2    v6.3.0    v6.3.1    v6.4.0
v6.5.0    v6.6.0    v6.7.0    v6.8.0    v6.8.1    v6.9.0    v6.9.1    v6.9.2
v6.9.3    v6.9.4    v6.9.5    v6.10.0   v6.10.1   v6.10.2   v6.10.3   v6.11.0
v6.11.1   v6.11.2   v6.11.3   v6.11.4   v6.11.5   v6.12.0   v6.12.1   v6.12.2
v6.12.3   v6.13.0   v6.13.1   

v7.0.0    v7.1.0    v7.2.0    v7.2.1    v7.3.0    v7.4.0    v7.5.0    v7.6.0
v7.7.0    v7.7.1    v7.7.2    v7.7.3    v7.7.4    v7.8.0    v7.9.0    v7.10.0
v7.10.1   

v8.0.0    v8.1.0    v8.1.1    v8.1.2    v8.1.3    v8.1.4    v8.2.0    v8.2.1
v8.3.0    v8.4.0    v8.5.0    v8.6.0    v8.7.0    v8.8.0    v8.8.1    v8.9.0
v8.9.1    v8.9.2    v8.9.3    v8.9.4    v8.10.0   

v9.0.0    v9.1.0    v9.2.0    v9.2.1    v9.3.0    v9.4.0    v9.5.0    v9.6.0
v9.6.1    v9.7.0    v9.7.1    v9.8.0    

io@v1.0.0 io@v1.0.1 io@v1.0.2 io@v1.0.3 io@v1.0.4 io@v1.1.0 io@v1.2.0 io@v1.3.0
io@v1.4.1 io@v1.4.2 io@v1.4.3 io@v1.5.0 io@v1.5.1 io@v1.6.0 io@v1.6.1 io@v1.6.2
io@v1.6.3 io@v1.6.4 io@v1.7.1 io@v1.8.1 io@v1.8.2 io@v1.8.3 io@v1.8.4 

io@v2.0.0 io@v2.0.1 io@v2.0.2 io@v2.1.0 io@v2.2.0 io@v2.2.1 io@v2.3.0 io@v2.3.1
io@v2.3.2 io@v2.3.3 io@v2.3.4 io@v2.4.0 io@v2.5.0 

io@v3.0.0 io@v3.1.0 io@v3.2.0 io@v3.3.0 io@v3.3.1 

local:
No such file or directory at /usr/local/bin/nodebrew line 575.

安定板をインストール

$ nodebrew install-binary stable
Fetching: https://nodejs.org/dist/v8.10.0/node-v8.10.0-darwin-x64.tar.gz
Warning: Failed to create the file 
Warning: /Users/takanori/.nodebrew/src/v8.10.0/node-v8.10.0-darwin-x64.tar.gz: 
Warning: No such file or directory
                                                                           0.0%
curl: (23) Failed writing body (0 != 1017)
download failed: https://nodejs.org/dist/v8.10.0/node-v8.10.0-darwin-x64.tar.gz

怒られた…調べて見るとディレクトリがないことが原因らしい

$ mkdir -p ~/.nodebrew/src

再度、実行するとインストール成功

$ nodebrew install-binary stable
Fetching: https://nodejs.org/dist/v8.10.0/node-v8.10.0-darwin-x64.tar.gz
######################################################################## 100.0%
Installed successfully

$ nodebrew ls
v8.10.0

current: none

インストールしたバージョンを指定して、使えるようにする。

$ nodebrew use v8.10.0
use v8.10.0

$ node -v
-bash: node: command not found

はてー、あ、環境変数にnodebrew関連のものを追加するのを忘れた

$ vi ~/.bash_profile

以下を追加

# nodebrew
export PATH=$HOME/.nodebrew/current/bin:$PATH

設定を読み込ませて、node -vnpm -vでバージョンが表示されたら終わり!

$ source ~/.bash_profile

$ node -v
v8.10.0

$ npm -v
5.6.0

お疲れ様でした。

心機一転

デジャヴ? 前回もだいぶ期間が空いて再スタートの記事を投稿してました

この間、ユーザー企業に転職して社内SEとして働いてました Javaは使わず、VB6とDBのC/Sシステムという

グループウェア導入して、通知用のアプリとしてJavaを 使ったくらいでしたね🤔

さて、またまた家庭の事情で転職を余儀なくされた私ですが、 今お話しさせていただいているところはnode.jsやら、 Pythonなどなど使ってない言語だったので、 それらを学習していくことになりました👍

とりあえずPythonからこの辺をやろうかなと

paizaラーニング https://paiza.jp/works/python3/primer

Progate https://prog-8.com/languages/python

udemy プログラミング初心者でも安心、Python/Django入門講座 https://www.udemy.com/pythondjango-a/

買った書籍

みんなのPython 第4版

みんなのPython 第4版

…node.js ですが、こんなところを押さえてます

Node.js超入門

Node.js超入門

実践Node.js プログラミング (Programmer's SELECTION)

実践Node.js プログラミング (Programmer's SELECTION)

ちまちまブログ書けたらいいなぁー

ブランク明けでサーブレット・JSPを学び直す

前回の投稿から1年以上のブランクが空いてしまいました(⌒-⌒; )

実は家の諸事情だったり、腰椎間板ヘルニアだったり扁桃腺切除だったりと 色々ありまして全くITのIの字もない生活を送っていました。

ちょっとブランクが空きすぎたのと、実戦に活かせるようにサーバサイドの Javaについて初歩から再学習していきたいと思います。

まずは肩慣らしにスッキリわかるサーブレット&JSP入門をささっと流し読み。

スッキリわかる サーブレット&JSP入門 (スッキリシリーズ)

スッキリわかる サーブレット&JSP入門 (スッキリシリーズ)

ちなみにスッキリシリーズのJava入門は評判がいいので購入してみましたが、 サーブレット&JSP入門も概略を掴むのにいい感じでした。

スッキリわかる Java入門 実践編 第2版 (スッキリシリーズ)

スッキリわかる Java入門 実践編 第2版 (スッキリシリーズ)

開発会社の新人君がWebアプリの開発に挑戦するというストーリーになっていて 他の入門書で挫折した人でも読みやすいかなーという感想ですね。

ただ、基本的にServlet3.0以降のアノテーションベースの設定が基本だったり、 細かい部分までは触れていないので以降は以下の書籍で勉強していきたいと思います。

基礎からのサーブレット/JSP 第3版 (基礎からのシリーズ)

基礎からのサーブレット/JSP 第3版 (基礎からのシリーズ)

独習Javaサーバサイド編 第2版

独習Javaサーバサイド編 第2版

3ヶ月くらいかけて最終的にはSpringフレームワークまで学習していきたいと思います。 もう書籍は購入済みです。

本当はJavaEEも勉強したいところですが…まずはサーブレット&JSPですねー。

Swiftを学ぶ #1

Javaの基礎しか分かってない私がiOSアプリに手を出そうとしてSwiftを学習するログです。
教科書は詳解Swiftです。

詳解 Swift

詳解 Swift

変数

変数には値型、参照型がある。

型名 内容
整数型 Int サイズは実行環境のワード長に依存※
整数型 UInt 符号なし、サイズは実行環境のワード長に依存※
実数型 Float 32bit
実数型 Double 64bit
論理型 Bool リテラルはtrue/false
文字 Character Unicode1文字
文字 UnicodeScalar 文字コード
文字列 String 文字列(変更可能)

※Int/UIntでメモリサイズを意識する場合

型名 サイズ 範囲
Int8 8bit -128 ~ 127
Int16 16bit -32,768 ~ 32,767
Int32 32bit -2,147,483,648 ~ 2,147,483,647
Int64 64bit -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
UInt8 8bit 0 ~ 255
UInt16 16bit 0 ~ 65,535
UInt32 32bit 0 ~ 4,294,967,295
UInt64 64bit 0 ~ 18,446,744,073,709,551,615

Javaと違う点

符号なしのUInt、文字コードのUnicodeScalar、Stringが変更可能である

変数、定数の定義

変数

var [識別子] :[型名]
//その他のスニペット
var age : Int = 18 //型を指定、値で初期化
var age = 18 //初期化値で型を推論(ageは整数型Int)

型を明示せずに整数値を初期値として代入すると推論される型はIntになる。

Javaと違う点

Javaにはvarに相当するスニペットはない。

定数

let [識別子] :[型名]

複数行まとめて記載する場合はセミコロン(;)で区切る。

var myAge = 18; let yukarinAge = 17 // 田村ゆかりは永遠の17才

変数(または定数)をまとめて記載する場合はカンマ(,)で区切る。

var hoge = 1, foo = 2, var = 3

Javaと違う点

Javaはfinalで宣言する。

今日はここまで。

MacでJAVA_HOMEを設定した。

以下、備忘録。

MacApple JDK 6 と OracleJDK1.8 が共存してる環境。
この記事を参考に .bash_profile に設定。

qiita.com

export JAVA_HOME=`/usr/libexec/java_home`
# Java SE 1.8を指定したい場合は -v オプションを指定する。
# export JAVA_HOME=`/usr/libexec/java_home -v 1.8`

java_homeコマンドはこちらを参考に

etc9.hatenablog.com

以上

Gitを学ぶ 〜後編〜

zaki3.hateblo.jp

前回に引き続き、クスールさんのGit勉強会後編です。

今日は、複数人リポジトリを触るので実践に近い感じです。

コンフリクトに対応する

共有ディレクトリをクローンする。

$ git clone [URL]

コンフリクトを起こすために一旦、ローカルリポジトリにコミットする。

$ git add [ファイル名]

リモートリポジトリの同じファイルを講師の方が編集、コミット、プッシュする。
※これでコンフリクトが発生する。

ローカルリポジトリをプッシュする。

$ git push

するとリジェクトが発生します。

To http://.../....git
 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'http://.../....git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

ローカルのリポジトリをリモートの最新で更新する。

$ git pull

更新した際、コンフリクトが発生した場合、以下のように挿入される。

<<<<<<< HEAD
自分の変更箇所
=======
既にPUSHされている変更箇所
>>>>>>> [コミットID]

これを適宜、修正してコミットしてプッシュすればOK!

ブランチ

現在のブランチを見る

$ git branch

新規のブランチを作る

$ git branch [ブランチ名]

git branch で確認する

$ git branch
* master
  [ブランチ名]

作ったブランチに切り替える

$ git checkout [ブランチ名]

こんな感じに表示される

Switched to branch '[ブランチ名]'
$ git branch
  master
* [ブランチ名]

リモートブランチにプッシュする場合は

$ git push origin [リモートでのブランチ名]

リモートリポジトリから変更を取得するが、マージしない。

$ git fetch

※pullはfetch+mergeのようなもの(同じではない)

マージする。

$ git checkout [マージ先]
$ git merge [マージ元]

マージする時は作業ブランチにmasterブランチの変更を取り込んで、
確認してからマージするのがオススメ!

(ローカル)ブランチを削除

$ git branch -d [ブランチ名]

(リモート)ブランチを削除

git push --delete origin [リモートブランチ名]

Tips

コミットの修正(プッシュ前)

直前のコミットコメントを修正する

$ git commit --amend

※デフォルトのエディタが開くので修正、上書きすればOK

直前のコミット漏れがあった場合に追加する

$ git commit --amend [ファイル名]

コミットを打ち消す

$ git revert [コミットID]

色々なかった事にする!!

reflogで作業履歴を確認する。

$ git reflog
f015603 HEAD@{0}: revert: Revert "追加した!"
e866524 HEAD@{1}: commit: 追加した!
88cd3af HEAD@{2}: commit (amend): 修正完了
4e75819 HEAD@{3}: commit (amend): 修正完了
9cfcd32 HEAD@{4}: reset: moving to HEAD^
70b81c8 HEAD@{5}: commit: mend
9cfcd32 HEAD@{6}: commit: 修正かんりょう

resetでhardオプションを指定して過去に戻る

git reset --hard HEAD@{2}

対象外のファイルを指定

ルートディレクトリに .gitignore ファイルを作成して、指定する。

# hoge.txt ファイルを対象外にする場合
hoge.txt
# hoge ディレクトリを対象外にする場合
/hoge

ちなみに各言語などで標準的な.gitignoreはgithubで公開されてます。

github.com

先生の秘伝のタレ

https://gist.github.com
プライベートになってるので興味のある方は参加してみて下さい( ´ ▽ ` )ノ

Gitは必要不可欠だし、もう少し理解を深めたら、会社で勉強会開催してみようかな。

Gitポケットリファレンス

Gitポケットリファレンス

[PR]クスールさんの勉強会

cshool.connpass.com

cshool.connpass.com

cshool.connpass.com

cshool.connpass.com

cshool.connpass.com