Skip to content

Commit 219db72

Browse files
authored
Merge pull request #79 from wedinc/fix/design-modification
Modify design and add sidebar
2 parents 627d261 + 85a8ac9 commit 219db72

19 files changed

+206
-78
lines changed

assets/images/link.svg

Lines changed: 5 additions & 4 deletions
Loading

assets/styles/tailwind-customs.css

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
.sidebar-title {
2+
@apply mb-4 text-stone-600 text-xl font-semibold font-manrope;
3+
}
4+
5+
.sidebar-link {
6+
@apply mb-4 ml-1 text-stone-600 hover:text-stone-400 text-lg font-medium font-manrope;
7+
}

components/Card.vue

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,38 @@
11
<template>
22
<NuxtLink
3-
class="flex flex-col items-center bg-white border border-gray-200 rounded-lg shadow md:flex-row hover:bg-gray-100 dark:border-gray-700 dark:bg-gray-800 dark:hover:bg-gray-700"
3+
class="flex flex-col h-auto md:px-10 px-6 py-6 rounded-2xl hover:bg-stone-200 md:border-2 border border-stone-500 hover:border-stone-700"
44
:to="props.path"
55
>
6-
<img
7-
class="object-cover w-full rounded-t-lg h-96 md:h-auto md:w-48 md:rounded-none md:rounded-l-lg"
8-
:src="props.image ? `thumbnails/${props.image}` : 'wed-logo.png'"
9-
:alt="props.title"
10-
/>
11-
<div class="p-4 w-full leading-normal">
6+
<div>
7+
<p class="text-sm font-medium text-stone-500">
8+
<time :datetime="$dayjs(props.date).format('YYYY-MM-DD')">
9+
{{ $dayjs(props.date).format('LL') }}
10+
</time>
11+
</p>
1212
<h5
13-
class="mb-2 text-2xl font-bold tracking-tight text-gray-900 dark:text-white"
13+
class="md:mt-2 md:mb-4 mb-3 my-2 md:text-2xl text-lg font-semibold tracking-tight text-stone-700 font-manrope"
1414
>
1515
{{ props.title }}
1616
</h5>
17-
<p class="mb-3 font-normal text-gray-700 dark:text-gray-400">
18-
{{ props.description }}
19-
</p>
20-
<p class="mb-3 font-normal text-gray-700 dark:text-gray-400">
21-
<time :datetime="$dayjs(props.date).format('YYYY-MM-DD')">{{ $dayjs(props.date).format('LL') }}</time>
22-
</p>
23-
<p class="mb-3 font-normal text-gray-700 dark:text-gray-400">
24-
{{ props.author }}
25-
</p>
17+
</div>
18+
<div class="flex flex-col md:flex-row">
19+
<img
20+
class="md:w-1/5 md:mb-0 mb-4 object-contain md:aspect-video aspect-auto"
21+
:src="
22+
props.image
23+
? `${!props.image.startsWith('/') && '/'}thumbnails/${props.image}`
24+
: '/thumbnails/dummy-image.jpg'
25+
"
26+
:alt="props.title"
27+
/>
28+
<div class="md:pl-8">
29+
<p class="mb-3 text-base font-normal text-stone-700 line-clamp-3">
30+
{{ props.description }}
31+
</p>
32+
<p class="text-sm font-normal text-stone-600">
33+
{{ props.author }}
34+
</p>
35+
</div>
2636
</div>
2737
</NuxtLink>
2838
</template>

components/content/ProseA.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<img
55
src="@/assets/images/link.svg"
66
alt="External link icon"
7-
class="w-3 m-0 ml-1 mb-1.5 inline align-bottom"
7+
class="w-3 m-0 ml-1 mb-1 inline align-bottom"
88
/>
99
</NuxtLink>
1010
</template>

content/2018-19-tech-timeline.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ date: 2021-09-13
66
image: 2018-19-tech-timeline.png
77
---
88

9-
# はじめに
9+
## はじめに
1010

1111
僕らはONEとZero、dim.の3つのプロダクトを作っています。2018年に1人目のエンジニアとして入社してから、これまでどういった技術を使って、どういった技術的意思決定をしてきたかについて紹介していきます。前提として、エンジニア数人のスタートアップなので、コスパが良い選択をすることを心がけてきました。
1212

@@ -16,7 +16,7 @@ image: 2018-19-tech-timeline.png
1616

1717
[https://wow.one/app/](https://wow.one/app/)
1818

19-
# 2018年
19+
## 2018年
2020

2121
まずはONEリリース時(6/12)の技術スタックです。
2222

@@ -44,7 +44,7 @@ Infra: Heroku
4444

4545
metabaseでダッシュボードを作り、各々がSQLを書いて数字を見る文化がONEのリリース当初からありました。この文化は今も続いており、簡単なクエリなら自分で書ける人の方が多い組織になっています。
4646

47-
# 2019年
47+
## 2019年
4848

4949
### 前半
5050

@@ -93,7 +93,7 @@ Infra: GCP, Terraform, Fastly
9393

9494
</aside>
9595

96-
# 2020年
96+
## 2020年
9797

9898
続きはこちらです。
9999

content/2020-tech-timeline.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ date: 2021-09-14
66
image: 2020-tech-timeline.png
77
---
88

9-
# はじめに
9+
## はじめに
1010

1111
[2018 - 19 WEDの技術のタイムライン](2018-19-tech-timeline.md) の続きになります。
1212

13-
# 2020年
13+
## 2020年
1414

1515
### BigQueryでのデータウェアハウスの構築
1616

@@ -69,6 +69,6 @@ ONEで利用しているOCRのマイクロサービスもONEに影響がでな
6969

7070
</aside>
7171

72-
# 最後に
72+
## 最後に
7373

7474
2021年はSwift UIでの新しいプロダクトdim.を作ったり、Zeroの管理画面をリリースしたり、TV放映が増えたことでのリクエスト数の急激な増加に耐える対策などをしていっています。詳しくは別の投稿で書いていこうと思います。

content/20231116-log-analytics-using-ai.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ date: '2023-11-23'
88
私は、「生成 AI によるユーザーの行動解析について」を聴講しました。
99
行動データと生成AI、続いて生成AIから行動 Embeddings を作る、の内容でした。
1010

11-
# 行動データと生成AI
11+
## 行動データと生成AI
1212

1313
[Plaid](https://plaid.co.jp/)[KARTE](https://karte.io/) では、訪問者の行動や感情をリアルタイムに解析し、一人ひとりに合わせたCXを実現するサービスを提供しています。
1414
その実現に、どのように生成 AI を組み込んでいくかの説明でした。
@@ -22,7 +22,7 @@ date: '2023-11-23'
2222
Plaid では、リアルタイムに行動データを分析し、適切なアクションを提供しています。
2323
この際、生成AIに対して、ユーザのコンテキストデータを提供することで、ユーザ行動分析の可能性を広げています。
2424

25-
# 生成AIで行動 Embeddings を作る
25+
## 生成AIで行動 Embeddings を作る
2626

2727
生成 AI でユーザ行動 Embeddings を生成、ベクトル演算を可能にしさまざまな分析・アウトプットにつなげます。
2828

@@ -36,6 +36,6 @@ KARTE では、まず運営側で、基本的なユーザーの行動をプロ
3636
次に、ユーザーの行動をプロント化し、生成 AI を使って行動 Embeddings 化します。
3737
その結果、エンドユーザーの様々な Web 行動をイベントとして計測し、Context を抽出、検知した Context に応じて接客することが可能になりました。
3838

39-
# 感想
39+
## 感想
4040

4141
ONE でもユーザーからレシートを買い取っており、一連の購買情報から Content を作成し、そこから行動解析にもつなげられそうだなあ、と思いました。

content/android-ios-life-cycle.md

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ date: 2022-06-30
66
image: android-ios-life-cycle.jpeg
77
---
88

9-
# はじめに
9+
## はじめに
1010

1111
こんにちは。Android / iOS エンジニアの原田です。
1212

@@ -17,119 +17,118 @@ image: android-ios-life-cycle.jpeg
1717

1818
本記事は、そんなネイティブアプリの開発を学ぶ上で、一番基盤となるライフサイクルについて OS ごとに簡単にまとめてました。ぜひ、畑の違うプラットフォームについての翻訳書として、参考いただければと思います。
1919

20-
# 対象者
20+
## 対象者
2121

2222
- iOS のコードを読む Android 開発者
2323
- Android のコードを読む iOS 開発者
2424

25-
# 前提
25+
## 前提
2626

2727
- Android 側の解説は、 Activity よりも頻出であると考えられる Fragment を用います。
2828
- iOS 側の解説は、UIViewController を用います。
2929
- 執筆時点の環境は下記です。
3030
- Android 12
3131
- iOS 15
3232

33-
# Fragment Lifecycle
33+
## Fragment Lifecycle
3434

3535
Fragment の Lifecycle は下記のようになります。プロダクトの設計や実装方針によって気にするべき状態は変わってきますが、どういう状況であっても知っていた方がいいと考えるのは赤枠で囲んだ6つです。
3636

3737
![Blank board - Page 1 (5).png](<content/android-ios-life-cycle/Blank_board_-_Page_1_(5).png>)
3838

39-
## onCreate()
39+
### onCreate()
4040

4141
Fragment が生成された時に一度だけ呼び出されます。
4242

4343
以降、Fragment が生存している限りは2回目が呼ばれることはありません。
4444

45-
## onCreateView()
45+
### onCreateView()
4646

4747
Fragment に表示する View を生成する時に呼び出されます。返り値として、表示する View のインスタンスを返却する必要があります。
4848

4949
バックグラウンドからアプリを復帰させたり、別の画面へ遷移してからバックキーで戻ってきた場合など、画面を再表示するたびに呼び出されます。
5050

51-
## onViewCreated()
51+
### onViewCreated()
5252

5353
View が生成された後に呼び出されます。
5454

5555
引数として、 `onCreateView` で返却した View が渡ってくるため、ここで View の表示内容や制御等の初期化を行うことが多いです。
5656

5757
iOS 開発者に注意する点があるとするなら、**この時点では View のサイズが決定していない**ため、View のサイズを使って座標を計算したりすることはできません。もっと言うなら、Android には`viewWillLayoutSubViews()` のような状態はありません。実際に描画されるまで View のサイズを取得することができないので、状況によっては `ViewTreeObserver` などを使って描画を監視する必要があります。
5858

59-
## onResume()
59+
### onResume()
6060

6161
Fragment が表示されて、アクティブな状態になった時に呼び出されます。
6262

6363
特に何か推奨される処理がある訳ではないですが、強いて言うなら画面が表示されたタイミングでしたいことがあればここで処理します。
6464

65-
## onDestroyView()
65+
### onDestroyView()
6666

6767
`onCreateView()` で生成した View が破棄される時に呼び出されます。
6868

6969
具体的には、別の画面へ遷移した場合や、アプリをバックグラウンドにした時など、画面が見えなくなった時に都度呼び出されます。
7070

71-
## onDestroy()
71+
### onDestroy()
7272

7373
Fragment が破棄される時に1度だけ呼び出されます。
7474

7575
Fragment が居なくなってしまうため、ここで任意の処理をさせたいと考えた場合、本当に必要な処理か、あるいは適切なタイミングか精査した方がよい印象です。
7676

77-
# UIViewController Lifecycle
77+
## UIViewController Lifecycle
7878

7979
UIViewController の Lifecycle は下記のようになります。こちらについても、採用する技術について気にするべき状態が大きく変わります。本記事では扱いませんが、xml で View を構築することが多い Android と比べて、iOS 開発では Interface Builder や Swift UI と選択肢があるため、状況に応じて実装の作法が変わることがあります。
8080

8181
とは言え、基本的な部分は一緒ではあるため、その中で理解しておいたほうがいいと考える状態は赤枠で囲んだ6つです。
8282

8383
![Blank board - Page 1 (7).png](<content/>android-ios-life-cycle/Blank_board_-_Page_1_(7).png>)
8484

85-
## viewDidLoad()
85+
### viewDidLoad()
8686

8787
View の階層構造が読み込まれた時に1度だけ呼ばれます。
8888

8989
View に対する追加の初期化処理や、Xib ファイルの読み込み、AutoLayout(Android で近い概念は ConstraintLayout) での制約の指定はここで行われます。
9090

91-
## viewWillAppear()
91+
### viewWillAppear()
9292

9393
画面が表示される前に1度だけ呼ばれます。
9494

9595
ここでは、View の表示に関わる追加の処理を実行します。[公式 Docs](https://developer.apple.com/documentation/uikit/uiviewcontroller/1621510-viewwillappear) に具体例が載っているので、ここではそのまま引用しておきます。
9696

9797
> For example, you might use this method to change the orientation or style of the status bar to coordinate with the orientation or style of the view being presented.
98-
>
9998
100-
## viewWillLayoutSubViews()
99+
### viewWillLayoutSubViews()
101100

102101
ViewController に表示する SubViews をレイアウトを決定する前に呼び出されます。
103102

104103
画面のレイアウト処理に対して、もっともよく確認する部分です。AutoLayout で制約をつけられている場合はその限りではないですが、何かしらレイアウトに関する座標やサイズの計算をして配置する必要がある場合、必ずここで処理します。
105104

106-
## viewDidLayoutSubViews()
105+
### viewDidLayoutSubViews()
107106

108107
SubViews をレイアウトが決定した時に呼び出されます。
109108

110109
もしも、レイアウトした SubViews に対して何か変更をしたい場合はここで処理することになります。
111110

112111
代表的な例 かつ Android 開発者向けの注意点として、iPhone X 以降で導入された **safeArea はここ以降でないと取得できない**ため、マージン調整の処理をすることがあります。
113112

114-
## viewDidAppear()
113+
### viewDidAppear()
115114

116115
実際に画面が描画されて表示された時に呼び出されます。
117116

118117
Android の `onResume()` と同様に、実際に画面が表示された時にしたいことがあればここで処理します。
119118

120-
## viewDidDisappear()
119+
### viewDidDisappear()
121120

122121
View が破棄された時に呼び出されます。
123122

124123
こちらも Android の `onDestroyView()` に似ていて、別の画面へ遷移した場合や、アプリをバックグラウンドにした時など、画面が見えなくなった時に都度呼び出されます。
125124

126-
# 最後に
125+
## 最後に
127126

128127
今回は Android の Fragment 及び iOS の UIViewController それぞれで簡単にライフサイクルの紹介をしました。
129128

130129
もっと細かい話をすれば、Android は Fragment と Activity の関係、iOS では ViewController と SubViews のレイアウトの順序など説明すべきことは沢山あるのですが、まずはそれぞれのプラットフォームを学ぶためのとっかかりとして活用していただければと思います。
131130

132-
# 参考
131+
## 参考
133132

134133
[https://developer.android.com/guide/fragments/lifecycle](https://developer.android.com/guide/fragments/lifecycle)
135134

content/clean-architecture-completely-understood.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ SOLID の目的は
110110

111111
どんなに優れたレンガを使っても組み立て方が悪いと、でたらめな家が出来上がってしまうので、その**組み立て方**に関する原則となる。
112112

113-
# コンポーネントの原則 (Ⅳ部)
113+
## コンポーネントの原則 (Ⅳ部)
114114

115115
ここで示す、コンポーネントとは、デプロイ単位のことである。
116116

@@ -175,7 +175,7 @@ SRPをコンポーネントように言い換えたもの。
175175

176176
システムには、いい依存と悪い依存がある。つまり、依存することが悪いというわけではなく、依存することで得られるメリットとのトレードオフを考える必要がある。
177177

178-
# アーキテクチャ (Ⅴ部)
178+
## アーキテクチャ (Ⅴ部)
179179

180180
アーキテクチャの目的は、システムのライフサイクルをサポートするもの
181181

content/dynamic-view-test-tips.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,23 +10,23 @@ image: dynamic-view-test-tips.jpeg
1010

1111
今回は Android ONE で実際に実行している Espresso を使った UI テストの Tips を紹介しようと思います。
1212

13-
# はじめに
13+
## はじめに
1414

1515
Espresso は簡潔に UI テストを書ける非常に強力なライブラリです。しかし、実際に稼働しているプロダクトは非同期 かつ 動的に UI が変わるのが普通です。公式 Docs を読んだだけでは挙動が複雑な View に対して、どのようにテストを書けばいいか戸惑うことも多いかと思います。
1616

1717
今回はそういったエンジニアに向けて、Espresso の Tips をまとめてみました。
1818

19-
# 対象者
19+
## 対象者
2020

2121
動的に表示内容が変わる View の Espresso テストを書くエンジニア
2222

2323
[https://developer.android.com/training/testing/espresso/basics](https://developer.android.com/training/testing/espresso/basics)
2424

25-
# 実行環境
25+
## 実行環境
2626

2727
Android Studio Chipmunk | 2021.2.1 patch 1
2828

29-
# Test Libraries
29+
## Test Libraries
3030

3131
2022/6/30時点の Stable Releaseを採用
3232

@@ -36,7 +36,7 @@ Android Studio Chipmunk | 2021.2.1 patch 1
3636

3737
[https://developer.android.com/jetpack/androidx/releases/test](https://developer.android.com/jetpack/androidx/releases/test)
3838

39-
# Tips of Espresso Test
39+
## Tips of Espresso Test
4040

4141
## 1. 非同期に更新される View の場合
4242

0 commit comments

Comments
 (0)