再帰でsumを実装してみる

配列に対しての処理パターン増やしたかったのと、 再帰で詰まって放置したことがあったので克服のため、 再帰処理で合計を出すsumを実装してみる

参考資料

「case x::xs =>」でなぜリストがマッチできるのか(infix-operation-patterns)

  • head tailのパターンマッチについてのわかりやすい資料

目的

  • 配列に対して再帰するときのhead tailのパターンマッチについて覚えたい
  • 再帰の書き方を覚えたい
  • 再帰の考え方を学びたい

再帰って?

めっちゃざっくりいうと内部で自分自身を呼ぶメソッド - ルールさえわかれば簡潔に書ける

やってみる

やりたいこととしては、配列を渡してその合計を計算するメソッドの実装
イメージは
List[Int] => Intのメソッドを実装
 1 配列を渡す
 2 head / tailに分解
 3 tail を自分自身のメソッドに渡す (再帰)
 4 2 - 3 を配列が空になるまで再帰
 5 空の状態から再帰を巻き戻して計算していく

実装

object RecursiveSample{
    def run:Unit  = {
        println(recSum(List(1,2,3)))
    }
    def recSum(list:List[Int]):Int = {
        list match {
            case x::xs => x + recSum(xs) 
            case Nil => {
                println(s"Nil")
                0
            }
        }
    }
}

説明

  • case x::xs => これはListが空じゃない場合マッチする、x=head / xs = tailで分割
  • ちなみにList(1)の場合、x = 1 / xs = List() になる、Listに何かしら入ってればマッチする

考え方

headを取り出して、tailを自分自身の関数に渡す => 空になるまで繰り返し、空の初期値から巻き戻して計算するっていうイメージが個人的にしっくりくる

上でいうと下記の考え方 ()内の数値は、再帰処理に渡す値になる

1 / (2,3)に分割、tailを再帰
 => 2 / (3) に分割、tailを再帰
  => 3 / (0) に分割、tailを再帰
   => Nilなので0を返す、巻き戻し、結果の0を1階層上に返す
  => 3 / () = 0 で計算、結果の3を1階層上に返す
 => 2 / (3) = 3 で計算、結果の5を1階層上に返す
=> 1 / (2,3) = 5 で計算、結果の6が返る

うーんなんかわかりづらいけど スタックして巻き戻ってくるイメージが自分的にはわかりやすい メンテしてもっとわかりやすい説明できるようになりたい

今日の学び

  • list match の case x :: xs はhead / tailが存在する場合にあてはまる
  • 値が一つでもあれば当てはまる
  • headを取り出して、tailを処理にかけたい!というときに使える
  • 再帰は、headを取り出してtailを処理にかける => 空になるまで繰り返し => 空の状態から巻き戻すイメージ

何も考えずにブログ再開してみる

ブログ再開を試みる。

約1年前くらいにも同じような感じで始めて3日坊主だったんだよなあ。 まあ、過去は過去ですし!過去の失敗を糧にしてぬるく続けていこうと思う。

モチベーション迷子にならないように、 ブログをなぜ再開しようと思ったのかまとめとくか

目的

アウトプット力を向上したいと思ったから

文章を書く、推敲する、構成を考えるというものを伸ばしたいと思ったのが一番の理由。 日ごろから説明下手、文章力のなさを痛感することが多かったから、 それの対策を打ちたいと思ったのが一番の理由。

何かしら学ぶ姿勢をもって日々過ごしたいと思ったから

毎日なんとなく過ごすことが多々あって、それを減らしたいと思ったのも理由。 文章にすると考えると、 毎日何かしら行動したり、考えることをしなければならないので、 毎日学ぶ姿勢だったり意識になると思った。 これも割とでかい理由。

ということで

上2つが理由でブログ再開したので、ぬるく続けられたらなあと思います。

技術的に学んだことまとめるとか、 英語のリハビリがてらフレームワーク公式サイトを訳して読んでくとかもためになりそう。

適当にやってこうと思います。

はてブロでMarkdown使えることに気づいたので使ってみた ※なるほどね、ポイントだったりキーワードを太字強調する(bタグで囲む) のよさそう、学びだ

 

 

 

NginxとTomcatを連携してみる(1)

とりあえず一旦目標を決めたとこで、NginxとTomcat連携を勧めていく

「(1)今回の目標」

Tomcatインストール

Tomcat起動

・Ningxインストール

・Nginxの設定

・Nginxの起動

 

 

Tomcatインストール

UbuntuTomcatをインストールする

 Ubuntuコマンド - Tomcatと一通りインストール(ver 7をインストールします)

 

sudo apt-get install tomcat7 tomcat7-admin tomcat7-common tomcat7-docs tomcat7-examples tomcat7-user

 

 

 ・Tomcatのオペレーションコマンド

■基本コマンド
起動
sudo service tomcat8 start
停止
sudo service tomcat8 stop
再起動
sudo service tomcat8 restart

 

・Ningxインストール

UbuntuにNginxをインストールする

Nginxコマンド - Tomcatと一通りインストール

 

sudo apt-get install nginx

・Nginxの設定

Nginxの設定はデフォルトは「/etc/nginx/sites-enabled/default」で設定しています。

なのでこのdefaultを編集します

変更前
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;

root /usr/share/nginx/html;
index index.html index.htm;

変更後
server {
listen 81 default_server;
listen [::]:81 default_server ipv6only=on;

root /usr/share/nginx/html;
index index.html index.htm;

location/ {
http://localhost:8080/
}

 

設定ファイルの説明

server = アクセス用のポート

root = アプリケーションルート、デフォルトURLで参照するパス

location = URLパスとそこにアクセスされたときのジャンプ先を定義する。じょうきでは "/"にアクセスしたとき”http://localhost:8080/”へリンクする意味合いになる。

 

・Nginxの起動■基本コマンド
起動
sudo nginx
停止
sudo nginx -s stop
再起動
sudo nginx -s reload
設定編集
sudo gedit /etc/nginx/sites-enabled/default

 

ここまでで

Nginx => Port 81で起動、root urlでport 8080ヘリダイレクト

Tomcat => Port 8080で起動

している

なので、この状態で

http://localhost:81/"

へアクセスするとNginx経由でTomcatへアクセスできる

ほーん

 

ここまででNginx とTomcatが連動OK

 

 

追記

コードブロックとかで見やすいように書き直そ

NginxとTomcatを連携してみる(0)

 

最近かなりNginxという名前を聞くので、

試しにどういう設定をして、どういう動きをするのか実際動かして試して見ようと思う

 

「環境」

・NginxとTomcatを連携

Ubuntu 16.04

 

「Nginx」とは

Webサーバの一種、ロードバランサやリバースプロキシ等の機能を持つサーバ。

調べた限りだと、Apacheの代用として使う風潮みたい。

設計思想の特徴としては、一度に大量のアクセスが来た場合でもハンドルできるような挙動をするらしい。

 

Tomcat」とは

おなじみJavaサーブレットコンテナ

自分の認識としては、Java処理をコンテナ(実行環境)というイメージ

 

「大まかな処理フロー」

クライアント => Webサーバへリクエス
=> Webサーバが内部処理をJavaサーブレットコンテナへリクエスト =>サーブレットが処理 => 結果をクライアントへ返す

 

「やりたいこと」

・Nginxの起動・設定

・NginxからTomcatへ連動

Tomcatでwebアプリケーションを起動

・Nginxのアドレスへアクセス => TomcatのWebアプリケーションへジャンプさせる

 

「学習目標」

・Nginxの起動方法

・Nginxの基本的な設定方法

Tomcatの起動

Tomcatの基本構成の理解

 

とりあえずは上記を目標にやっていく

安易にブログはじめてみました

どうも

都内でしがないWEB系のSEをやってるYAMといいます。

 

最近ふと

「技術やら読書やら、インプットしたはいいけど、アウトプットしないなあ・・・、折角だしブログでやってみるかあ」と思い、

安易にブログ始めてみました。

 

とりあえず当面は、

自分が日々思ったことや学んだことをまとめる適当に書いていきたいと思ってます。

 

●書く予定の記事

・いま興味のある技術で学んだこと。

    (プログラミング言語 : Java / javaScripty / Python / C++)

    (その他 : Tomcat / nginx /  / docker / git / jenkinsとか)

・読書した本の書評

・ふと思ったこと

 

この記事を書くのを通して、

 ・学んだことのアウトプット

 ・文章力とまとめる能力の向上

 ・考えを整理する

 ・情報の共有

あたりをしていこうと思うので、よろしくお願いします!

 

適当に続ける