ユユユユユ

webエンジニアです

2020-01-01から1年間の記事一覧

オマカセからアラカルトへ

Ruby と Rails は明らかに自分の軸となる技術だ。そもそもこれらとの出会いがなければ僕はエンジニアになっていなかった。人生を変えてくれた技術であるとも言える。ただ、知れば知るほどに別の技術に目移りし始めてしまっていたのも事実。 あれやこれやの言…

無理して SPA を採用しないこと

TIL

「ゼロからアーキテクチャを考えるのであればどのような構成を検討しますか?」 これはある企業の面談を受けたときに聞かれたこと。僕は、最低限サーバーサイドのAPIとフロントエンドのSPAを分割する、というようなことを話した。 いま振り返ってこう考えて…

最大公約数を利用して最小公倍数を求める

「最大公約数」と問われると「ユークリッドの互除法!」とただちに着想が湧くようにはなってきた。 その一方で「最小公倍数」と問われたら、「おや...」と思いながら調べ直さざるをえない自分がいた。 この記事できちんと整理して、記憶に定着させたい。 定…

Ruby は 64-bit より大きい整数値をどう扱っているか?

先週末の AtCoder ABC169 B の問題で、long long 型の整数をオーバーフローさせてしまった。しかもそれに気づけずにだいぶつまずいてしまった。 atcoder.jp Ruby や Python であれば意識せず扱える部分であっただけに悔しさがある一方で、こうも思った。 Rub…

自己紹介ページの紹介

AWS

jnsato.com で自己紹介ページを公開している。 jnsato.com シンプルなページではあるが、裏ではいろいろと工夫をしている。たとえばページのホスティングについて、AWSのサービスを組み合わせて稼働させているのだが、最高水準の可用性とパフォーマンスを保…

静的コンテンツを S3 バケットに継続的にデプロイする

AWS

jnsato.com でホストしている自己紹介ページについて、連続して書いてきた。昨日はホスティングのインフラ構成について書いた。 jnsato.hateblo.jp こちらの記事にて、このウェブページはサーバーレスな構成を取っていて、保守にリソースを割く必要はほとん…

貧者の AWS ウェブホスティング戦略

AWS

前回記事に引き続き、 jnsato.com でホストしている自己紹介ページについて。前回はデザイン面について書いた。 jnsato.hateblo.jp 今回はホスティングについて書く。 構成 はじめに構成図を示しておく。それはこんな形。 各サービスの詳細については公式ド…

デザインを知らないエンジニアによるウェブデザインの工夫

jnsato.com で自己紹介ページをホストしている。 jnsato.com いろいろ工夫はしているのだけれど、自分がどういう意図で何をどう工夫したのか、いずれ自分でも忘れてしまいかねないから、ここに書き残しておく。 いくつかの記事に分割して書くことにする。ひ…

Lambda + API Gateway + DynamoDB で Go の小さなアプリを作った

なにか作ってみようとなったときにサーバーレスで簡単にホストできるのは嬉しい。 パブリックなプロダクトではないし、ソースコードもプライベートレポジトリにおいてあるので、具体的にどう、という話が書けないのは残念だが、せめてやったことのアーカイブ…

AWS Amplify でコンテンツ管理ダッシュボードを実装して得た10個の手応え

AWS

AWS Amplify というフレームワークについて、 Developers.IO の記事を筆頭に、名前を見かけることがここ数ヶ月でグンと増えた感覚がある。 CLI で簡単にサーバーレス構成を立ち上げられてとても楽らしい、など漠然とした印象を持つだけだったが、小さなプロ…

コロナ時代のGraphQL

GraphQLのチュートリアル、 How to GraphQL をやった。どんな技術であるのかについて、概論やイメージは浸透しているだろうから、この記事はあらためてそれを紹介するというよりも、初めて実装に触れた学習者の立場から手応えを交えて書く。すなわち、GraphQ…

2^n 通りのbit全探索を m^n 通りの深さ優先探索に一般化する

以前の記事で bit 全探索を利用して冪集合を作った。 jnsato.hateblo.jp これは任意の有限集合の各要素について、部分集合に含めるか含めないかを表すフラグの組み合わせを総当たりする方法であった。各要素が 0 or 1 の二元のいずれかに振り分けられるため…

『Real World HTTP 第2版』でHTTPの歴史的文脈と最新動向を俯瞰する

Goの学習を進めるにあたって、A Tour of Goを終え、簡単なAPIの実装を経て、『改訂2版 みんなのGo言語』を読んだ。書評を記事として残すこともした。 jnsato.hateblo.jp 読了後は、同書執筆陣の技術ブログの過去記事を乱読していた。それだけ信頼できる書き…

任意の集合のすべての部分集合を列挙する

任意の集合について、すべての部分集合を列挙したい。これはつまり、ある集合から冪集合を作りたい、と言い換えられる。 たとえば 3 つの要素からなる集合 X = {1, 2, 3} に対してP(X) = {{}, {1}, {2}, {3}, {1,2}, {1,3}, {2,3}, {1,2,3} }であるような写…

自己証明書で通信するコンテナスイートの実装と、いまさらそれを学ぶ意味について

Go

自己署名した証明書について、オレオレ証明書と揶揄する呼び方が浸透して、自己署名のリスクという側面はおおいに宣伝されている。一方で、ではどのような手順を踏めば証明書に署名し、発行できるのか、という実態について、知る機会を持つことはなかった。 …

深さ優先探索と std::next_permutation でそれぞれ n! 通りの順列を生成する

長さ n の順列 [1, 2, ..., n] を並べ替えて n! 個の順列を作りたい。 2<=n<=8 程度として、二通りのやり方を試してみた。 深さ優先探索 与えられた順列を末尾の要素から再帰的に swap して前通りの組み合わせを試す。ループごとに添字が 1 ずつ増えていくの…

ループイテレータの型を思考停止で int 型にしてはならない

y = f(x) = x^5 となるような写像 f を作ろうとして次のようなコードを書いてハマった。 unsigned long long N[1000]; for (int i = 0; i < 1000; i++) { N[i] = i*i*i*i*i; } Nは unsigned long long と定義しているが、 i^5 の i を int としてしまってい…

『改訂2版 みんなのGo言語』でグッドプラクティスを学ぶ

API Gateway を使った小さなアプリケーションを立ち上げる機会があり、前々から使ってみたい欲求があったGo言語のランタイムを選択して実装した。SAM CLI が充実しているおかげでつつがなく実装を終えることはできたが、Go言語そのものに対する興味はさらに…

【go1.11以降】Go言語のモジュール依存管理には golang/dep を使わずに go mod を使うこと

学習者として、同じ学習者に向けた注意喚起として書く。 golang/dep は使わないこと golang package dependencies と検索すると、 golang/dep というツールのレポジトリがヒットすると思う。筆者の環境で、執筆日の時点ではトップに表示された。 github.com …

『クラウド破産を回避するAWS実践ガイド』を読んでAWSのセキュリティ/監査サービスを運用し始めた

AWSを触るようになって3年強となり、仕組みにもだいぶ慣れてきたし、より多くのサービスを使うようになった。IAM などはポリシーもロールもどんどん増えてきていている。 とはいえリソース群をコード化して管理するにも限界がある。新しく定義するにもコンソ…

SVGのアクセシビリティを title タグで向上させる

TIL

material-ui と material-icons で書いたコンポーネントを react-testing-library でテストしようとした。およそこんな形のコンポーネントだ。 import IconButton from '@material-ui/core/IconButton'; import AddIcon from '@material-ui/icons/Add'; cons…

最近やっていること

TIL

個人ページをゆるく拡張 https://jnsato.com だいぶ前、初めて自分のドメインを取得したときに、生の HTML と CSS だけ書いて S3 バケットにおいただけの個人ページを作って、そのままずっと放置していた。そもそも HTML 直書きなんかしていたせいで更新する…

aws-vault で amplify-cli を動かす

aws-vault で amplify init できない Amplify のチュートリアルをやっていてamplify initでさっそくつまづいた。 $ aws init ? Enter a name for the project myapp ? Enter a name for the environment dev ... init failed Error: ENOENT: no such file or…

1password での二段階認証をやめて Authy を導入した

AWS

AWSアカウントの保護、とりわけルートアカウントの保護について、改めて考えた。1passwordを二段階認証に利用してきたが、考えるほどにこれは「多要素認証」の原則に反するやり方であり、本末転倒であるという思いが強まった。 多要素認証の定義 うんざりす…

ブログを始めました

エンジニアとして就職してから2年になります。その間、進んで技術記事を書いたりはしないできました。たまにQiitaに書くことはあっても、それは「この情報は絶対に誰かの助けになる」という強い動機づけがあってやっと書き始める、というくらいには腰の重い…

S3 + CloudFront + Route 53 の構成を CloudFormation にインポートする

AWS

※2020/03/05投稿のQiita記事をエクスポートしたものです。 S3 + CloudFront + Route 53の構成で静的ウェブサイトの配信を行っている。 レポジトリには静的ファイルだけを置いて、AWSリソースはだいぶ昔に手作業で構築したものが動き続けている。以下の記事な…

Digdag + Embulk を気持ちよく開発運用するためにやってみたこと

TIL

※2018/11/19投稿のQiita記事をエクスポートしたものです。 執筆背景 Digdag と Embulk による既存のバッチ処理をアップデートする機会があったのですが、あれこれつまずいて苦しい思いをしてしまいました。 あれこれ試行錯誤するに当たって、様々な方が蓄え…

MacでMySQL5.7をアンインストールする

TIL

※2017/01/20投稿のQiita記事をエクスポートしたものです。 MySQL5.7の完全アンインストール WHY MySQL5.6系を利用したいのに誤って5.7系をインストールしてしまった。 pidエラーとsocketエラーの堂々巡りに陥ったので、いっそのことアンインストールしてバー…