よもやま話β版

よもやま話を書きます。内容はぺらぺら。自由に書く。

File.stat('testfile').mode の戻り値について調べた

戻り値が何を意味するのか調べた備忘録。 前提として対象ファイルのパーミッションについて知るためにこのメソッドが使えそうということが把握できている状態である。

mode の値は8進数

https://docs.ruby-lang.org/en/2.7.0/File/Stat.html#method-i-mode

File.chmod(0644, "testfile")   #=> 1
s = File.stat("testfile")
sprintf("%o", s.mode)          #=> "100644"

まず sprintf("%o", s.mode) とあるので、 s.mode の戻り値は8進数にして確認すれば良さそうということがわかる。

mode はどんな情報を持つか

次にこの mode の8進数から何を読み取ればいいのか確認する。

Returns an integer representing the permission bits of stat. The meaning of the bits is platform dependent; on Unix systems, see stat(2).

このように書かれているのでUnixのstat(2)あたりを目標にわかりやすい資料を探してみる。

http://www.coins.tsukuba.ac.jp/~yas/coins/syspro-2002/2002-06-17/

モードが8進数で 0100644 (C言語の文法で、0から始まる数は、8進 数)であることから、ファイルの型(普通のファイルかディレクトリかという 情報)を調べることができる。

ここに乗っていた図がとてもわかりやすかった。 自分の理解を足してさらに噛み砕くとこんな感じの解釈になった。

modeの8進数と2進数の変換

ということで 100644 の上2桁で型の情報、下3桁でパーミッションの情報を表していると読み取れる。

型の情報の定義の確認

0100644の上位4ビット、つまり、0170000と AND (C言語のでは、 &演算子)をとった結果は 0100000 となる。この値は、普通のファ イル(regular file)を意味する。

ANDを取るというのは、2進数のとき同じ桁がどちらも1だった場合1にする、ということなので上位ビットのみ取り出すという意味合いになります。

ANDと16進数表現

そして <sys/stat.h> の表記は 0x8000 となっていて、16進数8000を表すので regular file を表すということを把握できる。

#define S_IFREG         0x8000  /* regular */

おまけ

  • 8進数を表現するとき、先頭に0がつく。 0100644
  • 16進数を表現するとき、先頭に0xがつく。0x8000

参考

ググらないと生きていけない脳みそだ...webの世界ありがとう。

Kaigi on Rails で発表しました(2020/10/03)

Kaigi on Rails で発表させていただきました!

speakerdeck.com

こういった大きなイベントに発表の機会をいただけてビビりながらも初めての動画投稿にトライしました。 Timetableが公開されたとき「すごい発表者の皆様の中に混じってしまった...」と冷や汗が凄かったです。

Kaigi on Rails 自体が第1回ということもあり、どういう方向性になるのかなと思っていたのですが、熟練の方から初学者の方まで楽しめる内容がバランスよく詰まった素敵な会だったと感じました。 そのバランスの中で、自分は初学者の方向けのコンテンツ比重として役目を果たせていれば良いなと思います。 自分があんまりDockerとかモダンなインフラ構成を履修できていないので、ちょっと紹介内容が古かったかなというあたりは反省です...。 あと、いらすとやさんの汎用性が凄かった。レールの素材を見つけてから「ほぼ全部いらすとやさんでいこう」と決めました。ありがとういらすとやさん...!

www.irasutoya.com

また、動画の事前投稿だったので当日は集中して発表を聞くことができました。 Rails開発をする上で「えっそんなことできるの!?」と行った発見の発掘ができたり、Railsからちょっと離れているけどいちエンジニアとして大事な話も押さえることができ、憧れは止まらないし止めちゃいけないなと改めて思えたり...、とても素敵な8時間でした。

準備してくださった運営のみなさま、発表者のみなさま、聞いてくださったみなさまありがとうございました! & お疲れ様でした!

f:id:beta_chelsea:20201003210759j:plain
駅員さんの帽子 ¥1,600

上記はとりあえず採択が決まった日にポチった帽子です。そこそこウケてて買った甲斐がありました。やったね。

Googleグループメールアドレスから送信したい時の設定

Googleグループメールアドレスを使って送信させたいとき、SMTPサーバーの設定を求められて困ったので備忘録。 なんか探したけど見つからなかったので。

その1. Googleグループ(のメールアドレス)を作る

作ったとする。 また、この中にちゃんと送信させたい人をメンバーに入れておく。 ちゃんとGoogleグループ宛に送信されたメールが届くことを確認しておくと吉。

その2. Gmailの設定を開く

設定 > アカウントとインポート > 名前: (Gmailを使用して他のメールアドレスからメールを送信します) そう、送信したいんですよ。と思いながら「他のメールアドレスを追加」を選択。

その3. ダイアログが開くので設定

別のメールアドレスの情報を入力してください。

名前: の項目にはその送信者として表示したい名前を記入する。
メールアドレス: の項目にはGoogleグループメールアドレスを設定する。
エイリアス として扱います。」は以下のヘルプを良く読んで決める。
https://support.google.com/a/answer/1710338

SMTPサーバー経由でメールを送信します。

(ドメイン名)のSMTPサーバー経由でメールが送信されるように設定します。と言われるので下記のように埋める。

SMTPサーバー: smtp.gmail.com
ポート : 587
ユーザー名: 今設定しようとしているgmailアドレス(Googleグループに登録したもの)
パスワード: そのgmailアドレスアカウントのパスワード
TLSを使用(推奨)をラジオボタンON

この時、例えばユーザー名には自分のgmailアドレスを入力しようとしていて、二段階認証していた場合、 パスワードに入力するのはログインパスワードではなく「アプリパスワード」のため注意。 アプリパスワードについては以下のヘルプを良く読む。

https://support.google.com/accounts/answer/185833?hl=ja

その4. 認証コードを受け取って入力して完了

上記手順を終えると、認証コードを入れろと言われるが、すでにグループアドレスに追加されていれば認証コードは届くはずなので、それを入れる。 無事自分のgmailからグループメールアドレスをfrom扱いにして送信できる。

やったね。おしまい。

できるだけ身軽になりたかった(サブマシンとしてのSurfaceGo)

愛用しているMacBookProが、 「バッテリーの交換修理のアラートがでる」 「tのキーのツメが割れて打てない時がある」 「そもそもキーボード交換修理プログラムの対象モデル」 という問題揃い踏み状態となっていた。 幸いAppleCareの期間内でもあったので、2020の年始に修理に出すことにした。 しかしながらバリバリ仕事で使っているものなので、修理中、トラブルシューティングに対して無防備になるのは避けたい。

そこで、以前買っていたSurfaceGoをサブマシンとしてしたてて、しばらくの間はこれで乗り切れるようにした。 また、簡易の対処マシンとして、お出かけの際に重宝できるだろうという目論見もあった。

どんな感じに仕立てたのか、備忘録として記録しておく。 ただ、仕立てる決意をしたのが秋で、一気に仕上げたのが最近なので、その間に対応した細かい設定を忘れてしまった...。 いつの間にかgit-bash.exeが入っていたけど、どんな経緯で入れたのか覚えていない...。

Dropboxに.kdbxのファイルを置いておく

まず自分の生活に欠かせないのがパスワード管理ツール。 二段階認証しているとはいえ、Githubへのログインにもまずパスワードが必要となる。 自分はKeePassXを使っているので、.kdbxのファイルをDropboxに入れておき、MacBookPro/SurfaceGo どちらからでも参照できるようにした。片方使っているときは.lockが追加されたり削除されたりの通知が出てくるので、うっかりlockしたまま片方のPCを閉じてしまったりしないように一応気を付けた。

Railsが動く環境を整える

RailsGirlsのページが一番詳しいと自分は思っている。都度メンテナンスもされているのでありがたい。 https://railsgirls.jp/install#setup_for_windows

開発周辺の状況

git clone ができない

betachelsea@pcname:/mnt/c/projects$ git clone git@github.com:betachelsea/piyopiyo
Cloning into 'piyopiyo'...
Warning: Permanently added the RSA host key for IP address 'xxx.xxx.xxx.xxx' to the list of known hosts.
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

SurfaceGoにまだ鍵を準備していなかった!

ref: GitHubでssh接続する手順~公開鍵・秘密鍵の生成から~ - Qiita
ref: SSH keyを4096bitで作成する - Qiita

$ ssh-keygen -t rsa -b 4096
$ cat ~/.ssh/id_rsa.pub

表示された鍵を https://github.com/settings/keys に登録すると、git cloneができるようになった。

任意のRubyをいれる

すでにRailsGirlsのチュートリアルでrbenv, Rubyは入っていたが、最新化して任意のバージョンをいれられるようにした。

# rbenv 最新化
$ cd ~/.rbenv
$ git pull

# ruby-buildも新しくする
$ cd ~/.rbenv/plugin/ruby-build
$ git pull

$ rbenv install 2.6.5

$ rbenv versions
* 2.6.3 (set by /home/betachelsea/.rbenv/version)
  2.6.5

bundlerを入れる

Rubyを入れたばかりだとbundlerもないのでまずbundler入れる。

$ gem install bundler

# もしバージョン指定が必要なら(Gemfile.lockの都合とか)
$ gem install bundler -v 2.0.2

環境変数を設定

必要なものがあれば ~/.bashrc に書いておく。

$ vim ~/.bashrc

export SECRET_TOKEN="xxxx...."

再読み込みも忘れずに。

$ source ~/.bashrc

postgresql をインストール

posgresqlを動かせるようにする。
ref: Ubuntu16.04にPostgreSQLをインストール - Qiita
ref: PostgreSQL 11.1をUbuntu 18.04へインストールし、外部から接続する - Symfoware

$ sudo apt-get update
$ sudo apt-get install postgresql

psql コマンドが動かない

betachelsea@pcname:~$ psql
psql: could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

ref: PostgreSQL で psql コマンド を実行したら could not connect to database postgres: could not connect to server: No such file or directory と出る場合 - 約束の地
上記記事を参考にしてclusterをスタートさせてみる。

$ pg_ctlcluster 10 main start

betachelsea@pcname:~$ psql
psql: FATAL:  role "betachelsea" does not exist
# FATALではあるが、通ってはいるのでOK

接続用DBユーザ作成

betachelsea@pcname:~$ sudo su - postgres

# config/database.ymlに書いておいてあるusernameとパスワードのユーザを作る。

postgres@pcname:~$ createuser -d -U postgres -P dbuser
Enter password for new role: パスワードを入力
Enter it again: パスワードを入力

# ユーザーが追加された。

postgres@pcname:~$ psql
psql (10.10 (Ubuntu 10.10-0ubuntu0.18.04.1))
Type "help" for help.

postgres=# \du
                                   List of roles
 Role name |                         Attributes                         | Member of
-----------+------------------------------------------------------------+-----------
 dbuser    | Create DB                                                  | {}
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

rake db:create でDB作成

デフォルトではDBへの接続はPeer認証になっていて、ログインユーザからの $bundle exec rake db:create は失敗してしまう。 そのため、pg_hba.conf を変更する。

ref: PostgreSQLのDBに接続しようとしたら、エラーで接続できない
ref: PostgreSQLのPeer認証と他の認証方法への変更 | Web Memorandum
ref: [Ubuntu 16.04] PostgreSQLのリモート接続設定 - Qiita
ref: [備忘録]WSL(Ubuntu)でPostgresを試す - Qiita

betachelsea@pcname:~$ sudo vi /etc/postgresql/10/main/pg_hba.conf

# "local" is for Unix domain socket connections only
local   all             all                                     peer

# ↓ 次のように変更

local   all             all                                     md5


# 再起動する
betachelsea@pcname:~$ sudo service postgresql restart
 * Restarting PostgreSQL 10 database server                [ OK ]

改めてdbをつくってmigrationする

betachelsea@pcname:/mnt/c/projects/piyopiyo$ bundle exec rails db:create
betachelsea@pcname:/mnt/c/projects/piyopiyo$ bundle exec rails db:migrate

Redisいれる

$ rails s して localhost:3000 にアクセスしてみると、次のエラーが出た。

This results in IO::EINPROGRESSWaitWritable Operation now in progress - connect(2) would block

ref: Ruby on Rails: Operation now in progress - connect(2) would block - Stack Overflow
ref: redis - System has not been booted with systemd as init system (PID 1). Can't operate - Stack Overflow

そういえばRedisを使っていた。

$ sudo apt install redis-server
$ sudo service redis-server start

bundle install のエラーはapt-getで解決

結構世の中にはbrew(Homebrew)でinstallして解決とか書かれているが、あれはMacOSのパッケージマネージャーなので、apt-getで対応する。 ほかにはリポジトリによって多種多様だと思うので、各自頑張るしかなさそう。 まずエラーを読んでググればとりあえずなんとかなる。

サーバにsshできるようにしておく

必要なサーバにsshできるように設定しておく。 sshしたいサーバを事前にリストアップして設定、疎通確認しておくのが肝要。

deployが権限的にできない

capistranoでデプロイしようとしたところ、Could not open a connection to your authentication agent. と出て出来なかった。 ssh-add するといいらしい。次の記事を参考にして解決した。

ref: ssh-addできなかったときへの対処 - Qiita

$ eval `ssh-agent`
$ ssh-add ~/.ssh/id_rsa

MacBookProを修理に出す

無事、SurfaceGoでなんとかいつも通り仕事ができるだろうという感触を得られたため、AppleStoreに予約をして修理をお願いした。 年末年始、工場が動いていないので結局修理期間は平日に食い込むことになった。 また、AppleCareに加入してなければ¥53,000の修理費がかかったようだ。入っててよかったAppleCare...。

  • 12月30日(日) 昼頃に修理依頼、預ける
  • 1月4日(土) Apple修理センターに到着(メールが届く)
  • 1月5日(日) 修理開始の連絡メールが届く
  • 1月6日(月) 製品をお渡しする準備ができましたのメールが届く、引き取りに向かう

実質2~3日での修理だった。年末年始じゃなくて平日金曜とかに出した方がよかったのかもしれない...。 何はともあれ無事仕事の相棒は戻ってきたし、簡易お出かけの軽いSurfaceGoの整備もできた。

よかったよかった。 2020年もやっていくぞ。

RailsGirlsTokyo 12th コーチ参加&LT

2019/08/02-03 の日程で開催された RailsGirlsTokyo 12th にコーチ参加させていただきました! 初コーチということで、しどろもどろになりつつも、Girlsのみなさんの第一歩を少しでもお手伝いできたかなと思うと嬉しい気持ちでいっぱいです。 Girls、コーチ、スタッフのみなさん、ありがとうございました! 参加に誘ってくださったオーガナイザーのらいむさんにも大感謝です。 回数を重ねることでコーチ力(?)が上がるらしいので、ぜひまた参加したいです。

また、LT枠があったと聞いて勢いで発表させていただきました。 ただ自分がRailsRubyについてうんぬんを語れるほどの知識量に自身がなく、また今回の主役はプログラミングの扉口に立ったばかりであるGirlsのみなさんということで、プログラミングするに欠かせない「パソコン」をテーマにしました。

speakerdeck.com

実は資料づくりのときに一番頑張ったのがノートパソコンの歴史調べだったんですが、時間の関係で結局スキップしたので、興味ある方は眺めて懐かしんでください :) Girlsのみなさんの「次の一台」選びのときにまたほんのりと思い出していただければ幸いです!

プロジェクターを選んだ(その2)

以前会社のプロジェクターを購入したが、個人的にも入用になったので改めてプロジェクターを選んだ。 選んだ時に考えたことを備忘録としてつけておく。 目標として、明るい部屋に負けないプロジェクターを探した。

コントラスト比の高いやつがいいな

前回選んだプロジェクターは明るさが3500lmあった。 3500lmというのは、そこそこのお値段のものと遜色ないくらいレベルの明るさのはずだ。 だが、でかい窓から陽光がガンガン入ってくる真昼間の室内利用ではどうも力不足を感じてしまっていた。 改めて「明るい部屋でも綺麗に見えます!」と謳っている製品と諸々比較したところ一つ発見があった。 コントラストが圧倒的に違う。 前回はコントラストを気にせず、3000:1 としたが、もっと高品質のものを探しにいくと10000:1 とかになっている。 条件1として「コントラスト比が高いもの」を設定した。

短焦点がいいな

次に、3500lmも明るさがあるプロジェクターが陽光に負けてしまう要因として、投影距離ではないかと考えた。 投影サイズを稼ぐためにスクリーンとプロジェクター本体の距離を広げると、どんなに明るい光を使っても弱まってしまう。 この問題を解決する条件2として、「短焦点」のプロジェクターを探すことにした。

キミに決めた

お財布と相談しつつ満足いきそうなものとして、BenQのMW826STを採用した。

BenQ MW826ST
BenQ MW826ST

自分は短焦点プロジェクターなるものを扱ったのは初めてだったため、ここに来て衝撃の体験をした。 普通に設置しようとしたとき、投影画面がでかすぎてスクリーンに収まらなかった。そのため、スクリーン投影サイズを調整するために本体とスクリーンを近づける必要があった。これまで自分がプロジェクターの設置をしてきたときは、画面サイズを大きくするときに、いつも遠ざける方向に配置変更していた記憶しかなかった。ゲームで敵に入力レバー逆になる混乱攻撃を仕掛けられたような気分になった。これが短焦点か...。

くっきり映っていて満足
くっきり映っていて満足

前回購入したYG600Wと比較してみて、今回明るい部屋でも満足に見れそうだということを確認できた。写真左がMW826ST、右がYG600Wである。投影画面の濃さが違うし、距離も違う。満足のいく買い物だった。

チェック項目 CP-X2521WN YG600W MW826ST
壊れちゃったやつ 前回買ったやつ 今回買ったやつ
解像度 XGA (1024x768) WXGA(1280x800) WXGA(1280x800)
明るさ 2700lm 3500lm 3400lm
コントラスト比 2000:1 3000:1 20000:1
重さ 2.3 kg 2.2 Kg 2.6kg

Amazonで注文できる各プロジェクターの性能比較表を作って悩んだ甲斐があった。

追加余談

  • MW826STで映画をみてみたが、音質はそこまで良いとは言えないと感じた。
  • D-sub 15 ピンケーブルが付属していて、HDMIケーブルは無かった。HDMIで繋げたいなら別で調達が必要。
  • カバンは ソフトキャリングケースCBP-MS61 を別で買ったけど、ピッタリすぎてなんかピチピチ。もう一回り大きいカバンでもよかったかもしれない。

初めての確定申告2019 by freee

ちょっと副業があったので収入/経費をfreeeを使いました。 一瞬おやっと思ったところだけ備忘録でつけます。

トップページでむっちゃ言われる

f:id:beta_chelsea:20190217194921p:plain

制限日つきです。気合いを感じます。

Step1: 基本

  • 提出する申告書を選びましょう

freeeを開始した時点で開業届けを出している場合、「所得税青色申告承認申請書」というのを一緒に出しているみたいです。 過去の書類を引っ張り出してきたところ確かにありました。 「青色申告」を選びました。

  • 提出方法を選びましょう

マイナンバーカードとICカードリーダを準備しておいたので「freeeで電子申告」を選んでみました。

  • 開業日

過去の書類(開業届)にハンコが押されていたので、その日を設定しました。開業日とか忘れてたわ。

Step2: 収支

  • 経費をちゃんと登録しよう

一番めんどくさいと言われているところをなんとかしました。 githubの領収書はドル建てだったのですが、クレカをマネーフォワードと連携していたことで無事過去の日本円での引き落とし金額が把握できて助かりました。 (でもプライベートリポジトリのためにやってたんですよね...無料にもどそうかな...うーむ)

  • 諸々の確認を はい/いいえ で答えていく

続けて、はい/いいえで答えられる質問ベースで記入を続けます。 自分は会社からもらっている以外にFXとか全然やってないので殆どいいえでした。

  • 会社から給与を受け取りましたか?

必要だったもの: 会社から発行してもらった源泉徴収票

  • 税務署から予定納税額の通知書は届きましたか?

初回なのでまだもらってない...という認識

確認

申告書を出力できるようです(pdf)。念の為もらっておく。

提出

これを一読しておくのが間違いなさそう。

freeeから電子申告 | 確定申告ガイド

e-tax利用者識別番号を発行

まずfreeeさんのことは一旦忘れてe-taxさんのことを考えます。 初めての利用なので「利用者識別番号」を取得する必要があるようです。

国税電子申告・納税システム-SS000100 ご利用になる前に

こちらは、e-Tax を初めて利用される方が、利用者識別番号を取得するための手続きです。

なるほど。よろしくお願いします。 案内にしたがってどんどん入力します。 開業時に提出した書類などと見比べながらなら迷わず行けると思います。

  • 暗証番号等の入力

あれ?何か出して忘れてたっけ?と思いましたが、初回登録なので今決めてねという項目のようです。 以後、忘れないように注意。また、暗証番号に記号は利用できない。

  • 整理番号

最初に青色申告したときの控えを見てみましたが、整理番号は記入されていませんでした。(まだ番号その控えもらったときは振られてなさそう)

順当に入力すれば 利用者識別番号 が発行されます。 また、メールアドレス確認のメールが翌日までの期限で送信されてくるので、対応しておく。

利用者クライアントソフト

(インストールしたけどドライバ的扱いで申告者が能動的にこのソフトを開いたりはしない...?)

電子申告アプリをインストール

freeeさんのアプリを入れます。(Mac版)

電子証明書登録

改めて 利用者識別番号マイナンバー を入力し、電子証明書の登録に進みます。 freeeさんの電子申告アプリをブラウザから呼び出して進めます。 freeeさんの電子申告アプリではコピペが無効? 自分はツールでパスワードを管理してコピペでどうにかする運用をしていたので、めちゃ長いデタラメな文字列を手打ちすることになりました。まぁいいけど。

freeeアカウントでログインし、ICカードリーダライタを接続した状態でマイナンバーカードのパスワードとe-Taxの暗証番号を入力します。 自分はICカードリーダライタの接続忘れとマイナンバーカードを刺す向きを間違えて何回か失敗しました。

ちなみにICカードリーダライタはこれを買いました。顔写真のある面を下にして入れたら行けました。 KENYA ケンヤ 接触型 USBタイプ ICカードリーダー・ライター 2019年最新版B-CAS,電子申告(e-Tax),マイナンバーカード対応 ブラック https://www.amazon.co.jp/gp/product/B07BDM7Z6P/ref=ppx_yo_dt_b_asin_title_o09__o00_s00

提出!!!

改めて提出の際は電子証明書登録のときと同様に、アプリ起動 > ログインからの、マイナンバーパスワード、e-Tax暗証番号を入力して申告。 freeeのwebサイトへ戻り受付結果を確認したところ、無事「受付完了」とでました。 おつかれさまでした!!!

感想

自分があんまり節税とかに拘らなかったのと(そこまで稼いでない)、事前にマイナンバーカードやICカードリーダライタを準備していたため思ったよりさくっとできました。 とりあえずICカードリーダライタは当面出番がないので無くさないように注意したいです。

おしまい。