Railsをローカルでproduction指定で立ち上げたときのエラー

エラー内容

本番環境で動かす前にローカルでproductionを指定して動かしたら以下のエラーが出た。

HTTP parse error, malformed request: #<Puma::HttpParserError: Invalid HTTP format, parsing fails. Are you trying to open an SSL connection to a non-SSL Puma?>

原因

原因はSSLでアクセスする必要があるのにhttpでアクセスしているからだ。

解決策

config/environments/production.rbのforce_sslをfalseにすれば良い。

config.force_ssl = true

他の解決策

ローカル環境でもsslでアクセスした方が良いかもしれない。やる方法はいくつかあるが今回は採用しない。

VPSでdockerを使ったRailsサーバーを立てる

strong engineer

OSのバージョンはUbuntu 22.04.3。Nginxのインストール方法はこちら

必要なソフトのインストール

Dockerのインストール

こちらのサイトをそのまま実行すれば良い。

$ sudo apt update
$ sudo apt install apt-transport-https ca-certificates curl software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt update
$ apt-cache policy docker-ce
$ sudo apt install docker-ce
$ sudo systemctl status docker

GitHubからソースコードをインストールする

$ cd /var/www
$ git clone https://${GIT_USER}:${GIT_TOKEN}@github.com/${GIT_REPOSITORY}

Railsを起動する

$ docker compose -f docker-compose.production.yml build
$ docker compose -f docker-compose.production.yml up -d

参考サイト

ConoHaのVPSで独自サーバーをたてる | Hello Nginxまで

strong engineer

VPSを使って自分のWebサイトを作る方法を紹介します。VPSを使えば静的サイトも動的サイトも作ることができます。今回はConoHaのVPSを使います。月額460円から始められます。

ConoHaのVPSを契約する

今回は2GBのプランを12ヶ月で契約します。

ConoHaの会員登録を行いプランを確認します。今回はUbuntuの2GBを選択します。

お客様情報と支払い方法を入力すると契約ができます。

サーバーの設定

セキュリティグループの設定を行います。今回はWebサーバーとして使うのとSSHでの接続を行うので、IPv4v6-WebとIPv4v6-SSHを追加します。

SSHで接続する

コンソールからrootユーザーで最初に設定したパスワードを使ってログインできます。

ターミナルからもssh root@your_IPでログインできます。

Nginxを起動する

$ sudo apt update
$ sudo apt install nginx
$ sudo ufw allow 'Nginx Full'
$ sudo ufw allow 'Nginx HTTP'
$ sudo ufw allow 'Nginx HTTPS'

ipアドレスにブラウザからアクセスすればWelcome to nginxが表示されます。

参考サイト

終わりに

ConoHaの管理画面は動作が少し重く感じました。管理画面を使うことはあまりないですが、どうにか改善してほしいです。

迷わなければ30分もかからずに終わると思います。

リアルタイムでキーボード入力を表示する: KeyCastrの使い方

パソコンの使い方を説明するためにキーボードの入力を画面に表示してみる。

インストール

GitHubのKeyCastr を参考にそのまま実行する。

brew install --cask keycastr

設定

Security & Privacyから許可をすると入力時に画面に出力される。

KeyCastrのアプリを開いて文字の大きさなどを設定できる。

ドラッグ&ドロップでどこに表示するかを変更できる。

WebサイトのURLとタイトルをコピペしてブログに貼り付ける方法

urlCopy

ブログを書くときにWebページのリンクを挿入することはよくある。ページのタイトルをテキストで入力してURLをリンクとしてコピペするのは少し手間なので、一発でページタイトルとURLをコピペする。

動画

YouTubeにも解説動画をあげています。動画の方が見やすい方はこちらをご覧ください。

やり方

Chromeの拡張機能であるCreate Linkを追加する

Create Linkのページ: https://chromewebstore.google.com/detail/create-link/gcmghdmnkfdbncmnmlkkglmnnhagajbm?hl=ja

フォーマットを決める

今回はHTML形式のフォーマットをしているす。

<a href="%url%">%htmlEscapedText%</a>

他にもmarkdown形式など自由に設定できる。

ショートカットを割り当てる

chrome://extensions/shortcutsからショートカットの設定ができる。他で使わない覚えやすいショートカットならなんでも良い。

5分で名刺を作成して印刷する方法

strong engineer

フリーランスになったことをきっかけに名刺を作った。Canvaでデザインを作ってラクスルで印刷すると簡単にあっという間にできる。100枚741円で印刷から郵送までできてお手頃だった。

YouTubeにも名刺の作り方を投稿しているので動画の方が見やすい方はこちらを見ていただきたいです。

デザインを決める

名刺を作るためにまずはデザインを決める。Canvaのテンプレートで名刺を検索するとたくさん出てくるので気に入ったものを選ぶ。

テンプレートが決まったら名前やメールアドレスなどを変更してあっという間に完成!

自分だけのデザインにしたければ画像を加えたりフォントを変えたり好きなように編集できる。

印刷

Canvaで印刷すると1,700円くらいかかる。

今回はラクスルの通常サイズ名刺印刷にする。料金は100枚で454円+送料200円。税込で741円だった。

発注してから4日後に名刺が100枚届いた。

終わりに

SNSなどで繋がることが多く名刺は少しダサいイメージもあったがやすく良い感じに作れたのでやってみてよかった。もしデザインを変えたくなってもすぐに印刷できそう!

[Pythonで未来予測] AIを使って株価や販売量を未来予測する方法を解説!

strong engineer

Pythonを使って過去のデータから未来を予測する方法を解説します。YouTubeにも投稿しているので動画の方が見やすい方はぜひ動画でご覧ください!

YouTube: [Pythonで未来予測] AIを使って株価や販売量を未来予測する方法を解説!

概要

未来の株価を予測するために、過去のデータをPythonのstooqというライブラリを使って取得します。取得したデータをもとにpmdarimaというAIのライブラリを用いて学習を行い、学習したモデルを使用して未来の株価を予測します。

青色の線の過去のデータかAIが予測した未来のデータを緑色の線で描いています。

今回使用したコードはGoogle ColabというブラウザからオンラインでPythonが実行できる環境で公開しています。以下のリンクからアクセスして実際に動かしながら確認することで理解が深まると思います。

https://colab.research.google.com/drive/1RIouiTq43u1QqD6xA6aurLgCFTMHEi60

やること

pmdarimaのインストール

https://colab.research.google.com/drive/1RIouiTq43u1QqD6xA6aurLgCFTMHEi60

株価データを取得

from pandas_datareader.stooq import StooqDailyReader
from datetime import datetime

start = datetime(2023, 11, 1)
end = datetime(2024, 2, 1)
brand = '1306.JP' #TOPIX
stooq = StooqDailyReader(brand, start=start, end=end)
data = stooq.read()

AIを使って学習

# 学習
train = data.Close.to_numpy()
train = np.flip(train) # 時刻が古い方から新しい方の順番にする
model = pm.auto_arima(train, d=2, seasonal=False, max_p=6)

AIを使って未来を予測し、グラフに表示する

import matplotlib.pyplot as plt
# 予測
p = 12
forecasts = model.predict(p)

# グラフ表示
x = np.arange(61+p)
plt.plot(x[:-1*p], train, c='blue')
plt.plot(x[-1*p:], forecasts, c='green')
plt.show()

終わりに

正しい未来を正確に予測することは難しいですが、過去のデータから未来を予測するのはAIの得意分野の一つです。予想以上に簡単に実行できるのでみなさんもぜひ試してみてください。Google ColabのコードYouTubeの動画も参考にしていただきたいです。