Engineering from Scratch

エンジニア目指してます

getServerSideProps

Next.js は getServerSideProps によって取得したデータを使って page の pre-render を行う。 import { InferGetServerSidePropsType } from "next"; export const getServerSideProps = async (context) => { const res = await fetch("https://api.github…

useImmer

useState と同様に,state と state を更新する関数のタプル型を返す hook。state を更新する関数は,immer の produce 関数か値を引数に取れる。 immer producer function produce関数は以下のような interface となる。 produce(baseState, recipe: (draft…

Updating Objects in State

Treat state as read-only import { useState } from "react"; function App() { const [plan, setPlan] = useState({ x: 1, y: 2 }); return ( <> {plan.x} <button onClick={() => (plan.x += 1)}>a</button> ); } export default App; 上記のコードでボタンを押下しても,画面に表示され…

Choosing the State Structure

state の構造を考えるときに,考慮すべき原則は以下。 関連する state をグループ化する。 二つ以上の state を常に同時に更新しているなら,それらの state を単一の state に統合することを考えるべき。 state 間での矛盾を避ける。 冗長な state を避ける…

2022/07/21

readonly readonly のチェックがされない時がある const sum = (obj: { foo: number; bar: number; baz: number }) => { obj.foo = 999999; return obj.foo + obj.bar + obj.baz; }; const myObj = { foo: 0, bar: 100, baz: 1000, } as const; sum(myObj); …

2022/07/20

qiita.com

2022/07/19

mapped type readonly型をつけることで,書き換え不可能なものであるというインターフェースだとわかる const convertToNumberAll = (strArray: readonly string[]): number[] => { return strArray.map((str) => parseInt(str, 10)); }; const array = ["1"…

2022/07/03

You Might Not Need an Effect Resetting all state when a prop changes 悪い例 import { useEffect, useState } from "react"; const App = () => { const [userId, setUserId] = useState(0); return ( <> <button onClick={() => setUserId((userId) => userId + 1)}>+1</button> <Comment userId={userId} /> ); };</comment>…

2022/07/02

You Might Not Need an Effect props や state の変化によりコンポーネントを更新したいときに,useEffect を使うべきではない。 以下の二つの場合,useEffect を使うべきではない。 レンダリングによりデータを変換するとき。 例:あるリストを表示前にフィ…

2022/06/25

外部キーのインデックス rails を使用していると,referencesで外部キーに対して自動でインデックスが貼られる。しかし,そのインデックスの役割を正しく認識していなかった。 usersテーブルに対してpostsテーブルがuser_idを持っている時を考える。postsがu…

2022/06/13

eager_load と preload の使い所 includes eager_load と preload を呼び分ける。どちらかが呼ばれるかコントロールしにくいので,基本使わない。実装を読んでみようと思ったが,読み切るには重そうだったので,週末読む。 eager_load belongs_toとhas_oneに…

2022/06/12

Unix Processes Diving into Rack Rackのrackupコマンドは,プロセスをデーモン化できるため,そのコードを読んでいく。 exit if fork Process.setsid exit if fork Dir.chdir "/" STDIN.reopen "/dev/null" STDOUT.reopen "/dev/null", "a" STDERR.reopen "…

2022/06/11

Unix Processes Our First Pipe 複数プロセス間でのやり取りにパイプを使用する。パイプはデータを単方向通信する。writerがwriteした内容をreaderがreadできる。 irb(main):001:0> reader, writer = IO.pipe => [#<IO:fd 9>, #<IO:fd 10>] irb(main):002:0> writer.write("Into</io:fd></io:fd>…

2022/06/05

Unix Processes Communicating with Process.wait2 Process.wait2は子プロセスのpidとexit codeを含むstatusを返す。 irb(main):024:1* def use_process_wait2 irb(main):025:2* 5.times do irb(main):026:3* fork do irb(main):027:3* random_number = rand…

2022/06/04

Unix Processes Descriptors Represent Resources irb(main):002:0> passwd = File.open('/etc/passwd') => #<File:/etc/passwd> irb(main):003:0> puts passwd.fileno 9 => nil irb(main):004:0> hosts = File.open('/etc/hosts') => #<File:/etc/hosts> irb(main):005:0> puts hosts.fileno 10</file:/etc/hosts></file:/etc/passwd>…

2022/06/02

プロセスとスレッド MMU Memory Management Unit プロセスごとに専用の物理メモリ領域を確保し,その物理領域にアクセスするための仮想アドレスを用意し,両者のアドレスのマッピングを行う マッピング情報はページテーブルという名前でメモリ上に保持される…

2022/06/01

PumaとUnicorn Unicorn blocking マルチプロセス forkを使ったmaster-slave unicorn-masterが起動するとunicorn-childをforkして生産する。暇になった,unicorn-childがunicorn-masterにリクエストを要求する。masterは要求のあったchildに処理を行わせるだ…

2022/05/31

NginxとApache 参考 qiita.com blog.inductor.me blog.framinal.life C10K問題とは ハードウェアの性能上は問題がなくても,あまりにもクライアントの数が多くなるとサーバーがパンクする問題のこと。プロセスやスレッドが多くなることが原因となる。 プロセ…

2022/05/30

書籍 Real World HTTP ミニ版 www.oreilly.co.jp メモ チャンク 概要 全体を一括で送信するのではなく,小分けにして送信する。時間のかかるデータ転送を少しずつ前倒しで行うことができる。 メリット1 サーバーの負荷軽減 具体例 ライブ動画を配信するとき…

Rubyでの並行処理

並列処理について学習する機会があったため,Rubyで知識のブラッシュアップを行う。 プロセスとスレッド 両者の名前を頻繁に聞くが,全く意味を理解していなかった。プロセスは実行されるプログラムの単位で,その中にスレッドが1つ以上存在する。 そして,…

kaminariにPRを出してみた

概要 OSSでRuby力を高めていきたいと思っている中,初のOSS挑戦にいいIssueがないかなと探していたところ下記Issueを発見。ただ,Issueが出されたのも2021/4で特に対応もされてなさそうだし,kaminariのgem自体も,もうそんなに活発に開発されているわけでは…

ActiveModel::APIを調べてみた

ActiveModel::Model api.rubyonrails.org ActiveRecord::Baseと同じように,クラスをModelのように扱えるようにするmodule。 module ActiveModel module Model extend ActiveSupport::Concern include ActiveModel::API end end 実装は,extendとincludeを行…

Railsの Custom Validation

RailsのCustom Validationを初めて使ったから,まとめる。参考資料はRailsガイド。 railsguides.jp Record ごとのValidation 以下のHuman Classを考える。ここでいうrecordとは,Human のオブジェクトをを指す。 iclass Human include ActiveModel::Validati…

2022/1

1月は5冊読んだ。途中,リズムを崩したりもあったが思うように勉強できてよかった。インターンばかりに行っていて,アウトプットばかりになっていたから,4月まではインプット重視でやっていく。ReactとアルゴリズムとCS関係を読んでいくつもり。 1.Metaprog…

マネーフォワードで1年間インターンをしてみて

この記事はMoney Forward 関西拠点 Advent Calendar 2021の24日目の記事です。 23日目は,大倉さんのスクラムとボクでした。大倉さんの今までの経験,普段の思考が垣間見える素晴らしいポエムでしたね。 初めまして!マネーフォワード関西開発拠点でエンジニ…

クックパッドサマーインターンに参加してきた

8/16~8/27にクックパッドのサマーインターンに参加してきました。 techlife.cookpad.com 前半五日間はクックパッドの社員の方々による講義,後半五日間は実務に取り組みました。 講義の内容としては,Next,GraphQL,SwiftUI,Rails,aws,サービス開発講義と盛り…