Raspberry Piでいろいろ。【その2 -> Swap領域設定、パスワード変更、パッケージ更新】
inabaです。
昨日に引き続き、Raspberry Piの設定をしていきます。
やること
SSH接続OK起動ドライブをHDDにするOK無線でつなぐOK- Swap領域設定 New
- パスワード変更
- パッケージ更新
- GitLabインストール
Swap領域設定
GitLabのRaspberry Piへのインストールについてのページに
We recommend adding at least 1GB of swap
とあります。
「1GBはスワップ領域作ったほうがいいよ。」という感じでしょうか。
また、Requirementsには
1GB RAM + 3GB of swap is the absolute minimum but we strongly advise against this amount of memory. See the unicorn worker section below for more advice.
とあります。
「メモリが1GBなら3GBはスワップ領域あったほうがいいよ。」という感じでしょうか。
昨日起動ディスクにしたHDDは1TBあるので容量の心配はありません。
なので、どーんと16GB割り当ててみることにします。
Swap領域の割り当てにはパーティションを割り当てる方法とファイルを割り当てる方法があるが、調べたところパフォーマンスに差はなく、ディスクフォーマットをしなくてよいのでファイルを使うことにする。
ちなみにRaspberry PiはもともとファイルのSwap領域がある。
$ swapon -s Filename Type Size Used Priority /var/swap file 102396 0 -1
単位はkBだそうなので、だいたい100MBくらいだろうか。
それでは実際に設定していく。
# Swap領域管理サービスを停止。 $ service dphys-swapfile stop # Swap領域設定ファイルを編集。 $ sudo nano /etc/dphys-swapfile $ cat /etc/dphys-swapfile ... CONF_SWAPSIZE=16384 ... # ↑元々は「CONF_SWAPSIZE=1024」 # Swap領域管理サービスを開始。 # (ちょい時間かかる。) $ sudo service dphys-swapfile start # 確認 $ swapon -s Filename Type Size Used Priority /var/swap file 2097148 0 -1
あれ?
2097148kbという事だから2GBくらいにしかなってない。
調べた。
CONF_MAXSWAP=2048
という行のコメントアウト外して、倍の4096にすると良いらしい。
上の行のコメントは
restrict size (computed and absolute!) to maximally this limit
can be set to empty for no limit, but beware of filled partitions!
this is/was a (outdated?) 32bit kernel limit (in MBytes), do not overrun it
but is also sensible on 64bit to prevent filling /var or even / partition
Google翻訳にかけると
最大限にこの制限にサイズ(計算されたと絶対!)を制限する
制限なしで空にすることができますが、塗りつぶされたパーティションには注意してください!
これは(古い?)32ビットカーネルの制限(MBytes)であり、それをオーバーランさせない
しかし、/varやeven / partitionの埋め込みを防ぐために64ビットでも有効です
重要そうなのは
制限なしで空にすることができますが(can be set to empty for no limit)
ということはCONF_MAXSWAP=
というように空を設定すれば制限無しにできるのかな?
再度設定
# Swap領域管理サービスを停止。 $ service dphys-swapfile stop # Swap領域設定ファイルを編集。 $ cat /etc/dphys-swapfile ... #CONF_MAXSWAP=2048 ... $ sudo nano /etc/dphys-swapfile $ cat /etc/dphys-swapfile ... CONF_MAXSWAP= ... # Swap領域管理サービスを開始。 # (まぁまぁ時間かかる。) $ sudo service dphys-swapfile start Job for dphys-swapfile.service failed. See 'systemctl status dphys-swapfile.service' and 'journalctl -xn' for details. # 失敗したようだ。 $ systemctl status dphys-swapfile.service ● dphys-swapfile.service - LSB: Autogenerate and use a swap file Loaded: loaded (/etc/init.d/dphys-swapfile) Active: failed (Result: timeout) since Mon 2016-12-12 16:49:03 UTC; 1min 20s ago # timeoutと出ている。 Process: 15078 ExecStop=/etc/init.d/dphys-swapfile stop (code=exited, status=0/SUCCESS) Process: 15135 ExecStart=/etc/init.d/dphys-swapfile start (code=killed, signal=TERM)
試しにCONF_SWAPSIZEを1024に戻して開始してみる。
# 念のため停止コマンドを実行 $ sudo service dphys-swapfile stop $ cat /etc/dphys-swapfile ... CONF_SWAPSIZE=16384 ... $ sudo nano /etc/dphys-swapfile $ cat /etc/dphys-swapfile ... CONF_SWAPSIZE=1024 ... $ sudo service dphys-swapfile start $
成功した。
今度はCONF_SWAPSIZEとCONF_MAXSWAP両方に16384を設定してみる。
$ sudo service dphys-swapfile stop $ cat /etc/dphys-swapfile ... CONF_SWAPSIZE=1024 ... CONF_MAXSWAP= ... $ sudo nano /etc/dphys-swapfile $ cat /etc/dphys-swapfile ... CONF_SWAPSIZE=16384 ... CONF_MAXSWAP=16384 ... $ sudo service dphys-swapfile start Job for dphys-swapfile.service failed. See 'systemctl status dphys-swapfile.service' and 'journalctl -xn' for details. # 失敗した。 $ systemctl status dphys-swapfile.service ● dphys-swapfile.service - LSB: Autogenerate and use a swap file Loaded: loaded (/etc/init.d/dphys-swapfile) Active: failed (Result: timeout) since Mon 2016-12-12 17:07:04 UTC; 36s ago # 同じくtimeout Process: 15307 ExecStop=/etc/init.d/dphys-swapfile stop (code=exited, status=0/SUCCESS) Process: 15403 ExecStart=/etc/init.d/dphys-swapfile start (code=killed, signal=TERM)
では、8GBにする。
$ sudo service dphys-swapfile stop $ cat /etc/dphys-swapfile ... CONF_SWAPSIZE=16384 ... CONF_MAXSWAP=16384 ... $ sudo nano /etc/dphys-swapfile $ cat /etc/dphys-swapfile ... CONF_SWAPSIZE=8192 ... CONF_MAXSWAP= ... $ sudo service dphys-swapfile start $
成功した。
結局スワップ領域は8GBに。
パスワード変更
デフォルトユーザpi
でログインすると下記のメッセージが表示される。
SSH is enabled and the default password for the 'pi' user has not been changed.
This is a security risk - please login as the 'pi' user and type 'passwd' to set a new password.
ようは「パスワードがデフォルトだとセキュリティリスクがありますよ。」という話らしい。
なので変更する。
$ passwd Changing password for pi. (current) UNIX password: # 現在のパスワード Enter new UNIX password: # 新しいパスワード Retype new UNIX password: # 新しいパスワード確認 passwd: password updated successfully
念のため別コンソールでログインして反映されたか確認するとよい。
パッケージ更新
全てのパッケージを最新にする。
$ sudo apt-get clean && sudo apt-get update && sudo apt-get -y upgrade && sudo apt-get clean Get:1 http://archive.raspberrypi.org jessie InRelease [13.2 kB] Get:2 http://mirrordirector.raspbian.org jessie InRelease [14.9 kB] Get:3 http://archive.raspberrypi.org jessie/main armhf Packages [128 kB] Get:4 http://mirrordirector.raspbian.org jessie/main armhf Packages [8,981 kB] Get:5 http://archive.raspberrypi.org jessie/ui armhf Packages [53.6 kB] Ign http://archive.raspberrypi.org jessie/main Translation-en_GB Ign http://archive.raspberrypi.org jessie/main Translation-en Ign http://archive.raspberrypi.org jessie/ui Translation-en_GB Ign http://archive.raspberrypi.org jessie/ui Translation-en Get:6 http://mirrordirector.raspbian.org jessie/contrib armhf Packages [37.5 kB] Get:7 http://mirrordirector.raspbian.org jessie/non-free armhf Packages [70.3 kB] Get:8 http://mirrordirector.raspbian.org jessie/rpi armhf Packages [1,356 B] Ign http://mirrordirector.raspbian.org jessie/contrib Translation-en_GB Ign http://mirrordirector.raspbian.org jessie/contrib Translation-en Ign http://mirrordirector.raspbian.org jessie/main Translation-en_GB Ign http://mirrordirector.raspbian.org jessie/main Translation-en Ign http://mirrordirector.raspbian.org jessie/non-free Translation-en_GB Ign http://mirrordirector.raspbian.org jessie/non-free Translation-en Ign http://mirrordirector.raspbian.org jessie/rpi Translation-en_GB Ign http://mirrordirector.raspbian.org jessie/rpi Translation-en Fetched 9,300 kB in 3min 18s (46.8 kB/s) Reading package lists... Done Reading package lists... Done Building dependency tree Reading state information... Done Calculating upgrade... Done The following packages will be upgraded: libdrm2 libicu52 raspberrypi-sys-mods raspi-config 4 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. Need to get 6,615 kB of archives. After this operation, 60.4 kB of additional disk space will be used. Get:1 http://archive.raspberrypi.org/debian/ jessie/main libdrm2 armhf 2.4.71-1+rpi1 [32.4 kB] Get:2 http://mirrordirector.raspbian.org/raspbian/ jessie/main libicu52 armhf 52.1-8+deb8u4 [6,556 kB] Get:3 http://archive.raspberrypi.org/debian/ jessie/main raspberrypi-sys-mods all 20161208+1 [8,412 B] Get:4 http://archive.raspberrypi.org/debian/ jessie/main raspi-config all 20161207 [17.7 kB] Fetched 6,615 kB in 5s (1,267 kB/s) Reading changelogs... Done (Reading database ... 31272 files and directories currently installed.) Preparing to unpack .../libdrm2_2.4.71-1+rpi1_armhf.deb ... Unpacking libdrm2:armhf (2.4.71-1+rpi1) over (2.4.65-3~bpo8+1) ... Preparing to unpack .../libicu52_52.1-8+deb8u4_armhf.deb ... Unpacking libicu52:armhf (52.1-8+deb8u4) over (52.1-8+deb8u3) ... Preparing to unpack .../raspberrypi-sys-mods_20161208+1_all.deb ... Unpacking raspberrypi-sys-mods (20161208+1) over (20161124) ... Preparing to unpack .../raspi-config_20161207_all.deb ... Unpacking raspi-config (20161207) over (20161114) ... Processing triggers for systemd (215-17+deb8u5) ... Setting up libdrm2:armhf (2.4.71-1+rpi1) ... Setting up libicu52:armhf (52.1-8+deb8u4) ... Setting up raspberrypi-sys-mods (20161208+1) ... Installing new version of config file /etc/profile.d/sshpasswd.sh ... Setting up raspi-config (20161207) ... Processing triggers for libc-bin (2.19-18+deb8u6) ...
こんな感じかな。
今日はここまで。
Raspberry Piでいろいろ。【その1 -> SSH接続、起動ドライブHDD化、無線LAN設定】
ご無沙汰しております。
inabaです。
Raspberry Pi 3を夏頃に入手してLチカさせてほったらかしにしていました。
もったいないのでRaspberry PiでGitLabサーバでも作りたいと思います。
備忘録としてブログにも記しておこうとおもいます。
やること
ssh接続
推奨OSのraspbianは最初からsshdが立ち上がっているという話だったが、自分がインストールしたRASPBIAN JESSIE LITEでは立ち上がっていなかったのでsshdを立ち上げ。
これができないとRaspberry Piにキーボードを繋いで操作しなければならないので一番最初にやる。
sudo raspi-config
を実行。5 Interfacing Options
を選択。P2 SSH
を選択。Yes
を選択。Ok
を選択。Finish
を選択。
追記(2017/04/03)
raspi-configが更新され、SSHの設定が7 Advanced Options
から5 Interfacing Options
に変更されました。
この後、同じネットワークにあるPCからssh pi@raspberrypi.local
と打てば入れる。
再起動しても設定は生きているので大丈夫。
自分は面倒なのでsshの設定だけしたら、Raspberry Piのキーボードは外してmacから全部操作することにした。
起動ドライブをHDDに変更
初期状態から変更が少ない状態のままHDDに移行するほうが良いと思うので早めにやる。
理由としては、標準ではSDカードが起動ドライブになるのだが、SDカードは書き換えに弱く、壊れやすいと聞いたため。
ブートローダーはSDカードから変えられないそうなので、SD自体は必須となるのだが、書き込み回数自体は減るだろうと思う。
# ディスク名確認。 $ sudo fdisk -l Disk /dev/sda: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors # 買ったばかりでパーティションが無いので作る。 $ sudo fdisk /dev/sda # 対話式コマンド。 Command (m for help): m # コマンド一覧を見る。 Help: DOS (MBR) a toggle a bootable flag b edit nested BSD disklabel c toggle the dos compatibility flag Generic d delete a partition l list known partition types n add a new partition p print the partition table t change a partition type v verify the partition table Misc m print this menu u change display/entry units x extra functionality (experts only) Save & Exit w write table to disk and exit q quit without saving changes Create a new label g create a new empty GPT partition table G create a new empty SGI (IRIX) partition table o create a new empty DOS partition table s create a new empty Sun partition table Command (m for help): n # 新しくパーティションを作る。 Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): # プライマリパーティションなのでデフォルトのままエンター。 Partition number (1-4, default 1): # パーティションは1つだけ作るのでデフォルトのままエンター。 First sector (2048-1953525167, default 2048): # 最大サイズで作るのでデフォルトのままエンター。 Last sector, +sectors or +size{K,M,G,T,P} (2048-1953525167, default 1953525167): # 同じくデフォルトのままエンター。 Created a new partition 1 of type 'Linux' and of size 931.5 GiB. # パーティションが作られた。 Command (m for help): p # パーティションができたことを確認。 Disk /dev/sda: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors # ... Device Boot Start End Sectors Size Id Type /dev/sda1 2048 1953525167 1953523120 931.5G 83 Linux # パーティション。 Command (m for help): w # ディスクに書き込み。 The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks. # OSの非同期書き込みを考慮してSync $ sync # パーティションのファイルシステムをext4にする。 $ sudo mkfs.ext4 /dev/sda1 mke2fs 1.42.12 (29-Aug-2014) /dev/sda1 contains a ext4 file system last mounted on Sun Dec 11 11:49:33 2016 Proceed anyway? (y,n) y # すでに作成されていると、実行するか確認されるのでy。 Creating filesystem with 244190390 4k blocks and 61054976 inodes Filesystem UUID: 50945b0a-3c30-4de5-a95d-223bb0f6415a Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 102400000, 214990848 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done # SDカードの起動ドライブのデータをHDDにコピー。 $ sudo dd if=/dev/mmcblk0p2 of=/dev/sda1 bs=32M conv=noerror,sync 939+1 records in 940+0 records out 31541166080 bytes (32 GB) copied, 1740.37 s, 18.1 MB/s # ディスクをチェック。 $ sudo e2fsck -f /dev/sda1 e2fsck 1.42.12 (29-Aug-2014) /dev/sda1: recovering journal Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information Free blocks count wrong (7376566, counted=7351276). # ブロック数に差異が出ている。 Fix<y>? yes 修正するかと聞かれたのでy。 Free inodes count wrong (1859519, counted=1859633). Fix<y>? yes # 同じくy。 /dev/sda1: ***** FILE SYSTEM WAS MODIFIED ***** /dev/sda1: 35407/1895040 files (0.2% non-contiguous), 342292/7693568 blocks # SDをコピーしたためSDのサイズになっているらしい。パーティションを最大化するためリサイズ。 $ sudo resize2fs /dev/sda1 resize2fs 1.42.12 (29-Aug-2014) Resizing the filesystem on /dev/sda1 to 244190390 (4k) blocks. The filesystem on /dev/sda1 is now 244190390 (4k) blocks long. # fstabを書き換えるためマウント。 $ sudo mount -t ext4 -o defaults /dev/sda1 /mnt # fstabの/dev/mmcblk0p2を/dev/sda1へ書き換え。 $ cat fstab proc /proc proc defaults 0 0 /dev/mmcblk0p1 /boot vfat defaults 0 2 /dev/mmcblk0p2 / ext4 defaults,noatime 0 1 # 変更前。 # a swapfile is not a swap partition, no line here # use dphys-swapfile swap[on|off] for that $ sudo nano /mnt/etc/fstab # nanoで書き換え。 $ cat fstab proc /proc proc defaults 0 0 /dev/mmcblk0p1 /boot vfat defaults 0 2 /dev/sda1 / ext4 defaults,noatime 0 1 # 変更後。 # a swapfile is not a swap partition, no line here # use dphys-swapfile swap[on|off] for that # ブートローダーの起動ドライブの設定を書き換え # root=/dev/mmcblk0p2 -> root=/dev/sda1 $ cat /boot/cmdline.txt dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait $ sudo nano /boot/cmdline.txt $ cat /boot/cmdline.txt dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/sda1 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait # 再起動 $ sudo reboot # 再起動後 $ df -kh Filesystem Size Used Avail Use% Mounted on /dev/root 918G 839M 879G 1% /
これでHDDを使うようになった。
ファイルシステムをCentOS7で使われているxfsにしようかとも思ったが、説明を読むと、メモリを大量に使うような仕様になっているようだったのでいつものext4にした。
Linux HDDフォーマット 参考サイト
Linux CentOS 外付けHDDのフォーマットとマウント
Raspberry Pi HDD起動 参考サイト
jyn.jp
無線で繋ぐ
$ sudo sh -c 'wpa_passphrase (SSID) (PASSPHRASE) >> /etc/wpa_supplicant/wpa_supplicant.conf'
上記を実行。
(SSID) (PASSPHRASE)は自分のSSIDとパスに変更して実行してください。
仮に
$ sudo sh -c 'wpa_passphrase foo bar >> /etc/wpa_supplicant/wpa_supplicant.conf'
を実行した場合の/etc/wpa_supplicant/wpa_supplicant.conf
が下記。
country=GB ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 network={ ssid="foo" #psk="bar" psk=baz }
パスフレーズが平文でコメントアウトされているので、セキュリティ的に気になるのであれば削除しておいたほうがいい。
自分はテキストエディタnanoで削除した。
$ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
無線接続が遅いと感じたときの対処方法もあるようだったが、現状不満が無いので設定しなかった。
今後、不満があれば設定する。
Raspberry Piで無線LANの反応が悪い時の対処法 | ものづくりエクスペリメント
今日はここまで〜。
【Go】kingpinをinit()でパースしていたらテストでエラーが出た話 #golang
kingpin
標準のflagパッケージでは、同時に長いオプションと短いオプション(shortオプション)を定義するのが面倒。
package main import ( "flag" "fmt" ) var ( dryRun = flag.Bool("dry-run", false, "dry run mode.") ) func init() { flag.BoolVar(dryRun, "n", false, "dry run mode.") flag.Parse() } func main() { fmt.Printf("dry run mode: %v\n", *dryRun) }
説明も二重に出てる。
$ go build -o flag $ ./flag --help Usage of ./flag: -dry-run dry run mode. -n dry run mode.
※説明に関してはパッケージ変数Usage
を上書きすることで変えられる。
上記のような理由でshortオプションの定義がいい感じのパッケージ無いかな〜と探してたらkingpinを見つけた!
kingpinだといい感じにshortオプションを宣言できる!!
package main import ( "fmt" "gopkg.in/alecthomas/kingpin.v2" ) var ( dryRun = kingpin.Flag("dry-run", "dry run mode.").Short('n').Bool() ) func init() { kingpin.Parse() } func main() { fmt.Printf("dry run mode: %v\n", *dryRun) }
Short('n')
だけでshortオプションを定義できる。
説明もデフォルトでいい感じ。
$ go run main.go --help usage: main [<flags>] Flags: --help Show context-sensitive help (also try --help-long and --help-man). -n, --dry-run dry run mode. exit status 1
error in test
便利に使っていたkingpinだけど、テスト時に問題が。。。
フラグを指定していなければ何も問題ない。
$ go test PASS ok gist/kingpin 0.008s
が、フラグを指定するとエラーが。。。
$ go test -v kingpin.test: error: unknown short flag '-t', try --help exit status 1 FAIL gist/kingpin 0.008s
何が起きているのだろうか
-t
の正体を突き止めるために引数を表示するログを入れてみた。
func init() {
fmt.Println(os.Args)
kingpin.Parse()
}
結果
$ go test -v [/tmp/kingpin.test -test.v=true] kingpin.test: error: unknown short flag '-t', try --help exit status 1 FAIL gist/kingpin 0.008s
-test.v=true
←これが原因らしい。
標準のflagパッケージではどうか?
func init() { flag.BoolVar(dryRun, "n", false, "dry run mode.") fmt.Println(os.Args) flag.Parse() }
結果
$ go test -v [/tmp/flag.test -test.v=true] === RUN TestRun --- PASS: TestRun (0.00s) PASS ok gist/flag 0.006s
大丈夫っぽい。
ソースを追ったら、flagパッケージのパッケージ変数CommandLine
をgo test
コマンドとテストバイナリで共有しているから大丈夫だったみたい。
(go test
でテストバイナリ作る時に、go test
用のオプションも含めてバイナリを作っているっぽい。)
確認のため、別なFlagSet
を定義してそちらを使ってみる。
package main import ( "flag" "fmt" "os" ) var ( tflg = flag.NewFlagSet("test_flag", flag.ExitOnError) dryRun = tflg.Bool("dry-run", false, "dry run mode.") ) func init() { tflg.BoolVar(dryRun, "n", false, "dry run mode.") fmt.Println(os.Args) tflg.Parse(os.Args[1:]) } func main() { fmt.Printf("dry run mode: %v\n", *dryRun) result := run(*dryRun) fmt.Printf("result: %v\n", result) } func run(dryRun bool) bool { if dryRun { return false } return true }
FlagSet
はNewFlagSet()
で定義できる。
Parse()
だけ通常と違い、引数を渡してやる必要がある。
結果
$ go test -v [/tmp/flag.test -test.v=true] flag provided but not defined: -test.v Usage of test_flag: -dry-run dry run mode. -n dry run mode. exit status 2 FAIL gist/flag 0.006s
やはり失敗した。
まとめ
- kingpin特有のエラーではなく、flagパッケージでも出る。
- エラーを出さないためには
main()
でパースする必要がある。
基本的な事だけど、init()
はテスト時に呼ばれて、main()
はテスト時に呼ばれないって事だよね。
laravelのチュートリアルをやった。
どうも。
178inabaです。
はてなブログを開設してみたはいいものの、何を書こうかと考えているうちに数日が過ぎ、
ついさっき、思い出したように
ブログなんだから日記を書こう!
と思い、今日やったことでもつらつらと書こうかなと。。。
今日やったこと
laravelのチュートリアル
タイトルの通りなんですが、
laravel製の軽量フレームワークlumenを触っていて、セッションの機能が無さそうだったのでlaravelを触り出しました。
なんで先にlumen触ってたかと言うと、ざっくり言ってしまえばフルスタックは学習コストが高くてサクッと遊べないという感じがあったからですかね。
やったチュートリアルは2つ
実際多機能でチュートリアルやっただけでは全部把握しきれないですねw
laravelはもうちょっと触ってみる予定です。
mailgunに登録して使ってみた
上のチュートリアルに関連して、laravelのauthに「パスワードを忘れたらメールでURL送ってくれて、新しいパスワードを設定できる機能」があって
それを試そうと思って登録
gmailでも試したのですがパスワードを設定に書くのがなんか嫌で。。。
mailgunだとパスワードじゃなくAPIKeyを設定すればよいみたいなのでよさ気。
あと「mailgun」って名前自体がかっこよくないですか?w
ドメインも勉強のために持っていたので、それ使って独自ドメインでメール送れるように設定。
設定はmailgunでDNSレコードの設定値を表示してくれたので楽でした。
多少設定の意味とか調べながら設定して送信。
メールキタ━━━━(゚∀゚)━━━━!!
こういうのは成功した瞬間が楽しいですね。
Mailtrapを使ってみたい
laravelのドキュメントのmailの項で紹介されていたサービス。 送ったメールを実際には送信せず、web画面上から確認できるサービスみたい。
試してみたいです。
その他最近の出来事
- apple musicに入ってみました。
- 神聖かまってちゃんいいですね。 -あるてぃめっとレイザーとロックンロールは鳴り止まないが好きです。
- 好きだったバラエティ番組「ざっくりハイタッチ」が終わってしまいました。
- 終了じゃなくてリニューアルだと思いたいです。。。
- 先週今週は「さんまのお笑い向上委員会」も無いし。。。
- でも次週の向上ゲストは千鳥でおもしろそう!
- ハリウッドザコシショウも出るみたいだし!!
- でも次週の向上ゲストは千鳥でおもしろそう!
今日やったこと以外にも書いちゃった。
書いてみた感じ、「週1くらいなら楽しく更新できるかな」って感じかなー
ではまたー
このブログはmarkdownで書きました.md
ブログはじめてみた。
はてなブログはじめてみた。