(参加メモ)第10回 PostgreSQLアンカンファレンス@東京

  • 開催概要
    • 開催日時:2/2(土)午後(13時半~17時半くらい)
    • 規模感:20分セッション×10本×3部屋(予定)
    • 参加者:50~60名くらいを想定
    • プログラム:当日調整します
  • 場所

  • Twitter HashTag

Thoughts

  • アンカンファレンス が初めてだったのだが、とても楽しい形式と感じた。
    • 今後はガシガシ参加していきたい。
    • この形式に向いた会場。トイレがロック解錠必要なのには面食らったが。
      • 飲み物の自販機、選択肢が多彩でかなりの低価格。
  • 貴重な事例が聞けた。とてもありがたい。
    • DB運用でのあれこれが、ふんだんに。

プログラム

20190202_program.jpg (940.5 kB)

勉強会前の時間が空いたのでアンカンファレンスの様子

RDBアンチパターン

14:20 - 14:40 (曽根さん)
(資料は見つけたら追加)

  • フラグの闇
  • データベースの迷宮
  • 転んだ後のバックアップ
  • タイムゾーンの業
  • まとめ
    • DBの問題は忘れた頃に
    • サーバーの問題は休日に
    • アプリケーションの問題は納期前に
    • 脆弱性の発見は連休中に

勉強会のほうの様子

PostgreSQLの暗号化について

14:40 - 15:20 (坂田さん) [^1]

  • データベースを安全に扱う

    • データベースの脅威(への対策)
      • 暗号化
      • アクセス制御
      • 監査
    • 暗号化と鍵管理
      • 常にセットで考える必要がある
  • データベース暗号化

    • 方法
      • PostgreSQLが提供
      • ベンダが提供(PowerGresなど)
      • OSが提供
    • ツール
      • pgcrypto
      • TDE for PG
        • エグゼキューター層
      • PowerGres Plus
        • ストレージマネージャ層
      • dm-crypt
        • OS層
  • 驚異のモデル化

    • DB内からの不正参照
    • DB外からの不正参照
    • 物理的な不正取得
  • 暗号化が必要なデータだけを暗号化するべき

  • 暗号化性能の組み合わせ

    • オーバーヘッドをもっとも小さくする組み合わせ
      • 範囲:列
      • 処理層:OS
  • アプリケーションでの対応

    • 難しさ
      • ...
    • 透過的データ暗号化
      • TDE for PG
      • PowerGres Plus
  • 暗号化と鍵管理

    • 鍵管理についての要件
      • PCI-DSS
        • 3.5 鍵管理について
        • 3.6.5 取り換えについて
    • 鍵管理システム(KMS)
    • 鍵ローテーションを考慮して暗号化方式を選択する
  • PostgreSQL セキュリティ機能強化

    • 9.5
      • ...
    • 9.6
      • ...
    • ・・・(書くのが追いつかない・・・)

PostgreSQL 11 解体新書

15:25 - 16:05 (曽根さん) [^1]

  • (4000円くらいの話をタダで聞ける)
  • 目玉の新機能
    • パーティションの強化
      • 10で入って、11で圧倒的強化
      • 3種類
        • レンジ
          • 1月,2月,3月などの範囲で分ける
        • リスト
          • 東京,大阪,名古屋のような
        • ハッシュ
          • 指定したKey(int)÷テーブルの余りで分散する
      • 性能強化
        • その1
        • その2
        • その3
    • パラレルクエリの強化
      • 11で追加された対象
        • Parallel Hash Join (9.6からより強化)
        • CREATE TABLE AS SELECT
          • データ移行で移すときに役立つ
        • CREATE MATERIALIZED VIEW
        • UNION ALL によるAPPEND
        • SELECT INTO
        • CREATE INDEX
      • 多くの読み込みは並列化できる
        • 書き込みはまだ未対応
      • 基本的にはVer.upするだけで速くなる
    • SQLの拡張
      • INDEX ONLY SCAN の強化
      • INCLUDE句の追加
        • INDEXに参照用の列を指定
      • Window関数の強化
        • EXCLUDE句
    • 嬉しいユースケース
      • パーティション同士の結合
      • スキャンが多い
      • ・・・
      • ALTERの際にDEFAULT NULLではないカラムの追加が高速に!
    • PostgreSQL 11 の罠
      • ・・・
      • JIT compile はまず導入されただけ
      • ストアドプロシージャに過度の期待をしない
      • 非互換の変更
      • RDSなどDBaaSに来るにはまだ時間がかかる
  • その他の新機能
    • JITコンパイルの導入
    • ストアドプロシージャの導入
      • ストアドファンクション(戻り値必須)はあった
      • テストデータ作るときに便利
    • レプリケーションの強化

皆さんのクソクエリ体験談

16:40 - 17:20 (カピバラおじさん さん?)

  • フレームワークのメンテナンスご苦労話

    • CodeIgniter
      • (date - 2 week) <= time を実現するときの苦労
        • トリガーを駆使した
      • MySQL は式インデックスがない
    • O/Rマッパーをどうやってチューニング?
      • 使わない
      • View を駆使
  • 10000カラムのテーブル

    • 最大 1600 カラムでは?
  • Memo

    • オンラインDDL
      • Aurola
        • 投げられる
      • MySQL 5.7
        • 投げられない
    • 「抽選で1名」をどう実装?
    • ElasticSerach は手繰れるけどBigQueryは手繰れない
    • RDBに苦手なことはRDBにさせない

アンカンファレンスから聞こえてきたのをメモなど

その他

  • WiFi は用意していく必要があるようだ
    • 今回自分は持参したが、問い合わせTweetしていた人がいた
    • 登壇者はケーブルも!
  • 実はちょっとした話題を Twitter でふっかけてみた https://twitter.com/sogaoh/status/1091601465313918976 20190202_myQuestion.png (47.4 kB)

    • これをきっかけに、 @soudai1025 さんがたまたま隣だったので少し話ができた。
      • RDBMSは、予測ができない。AIでも入れていかないと・・・と、文字通り壮大なことを。
    • 初めまして、だった
    • スケール大きいな、と思った

Note

[^1] : Twitter で教えてもらったのですが、PostgreSQL Conference Japan 2018 (2018-11-22) での資料のようだったので挿入しました

(参加メモ)Mackerel・WafCharmで実現する AWS運用監視・セキュリティ対策セミナー

Thoughts

  • 資料がどれも整理されていた印象。公開を希望。
  • WAF・監視ともに運用者がいて続けられることが重要ではないかと。
  • アラートの意味を理解して運用するのが肝要であろうと思った。
    • いいサービスに甘えて、目的を忘れないようにしないと。

AGENDA

14:30 - 15:00 受付

15:00 - 15:10 開会(ご挨拶、会場案内)

15:10 - 15:50 AWSセッション

アマゾン ウェブ サービス ジャパン株式会社
技術統括本部 パートナーソリューションアーキテクト
清水 毅
  • タイトル :
    • AWSで実現する、SaaSにおけるセキュリティオートメーションと、AWS最新アップデート
  • 概要 :
    • AWS上に構築するSaaSAWSサービスを組み合わせてセキュリティ対策を自動化する方法と、AWSの最新アップデートについてご紹介します。

1. SaaSセキュリティ対策

  • セキュリティは最優先事項
  • 責任共有モデル
    • ハードウェア〜マネージドサービス:AWS
    • アプリケーション:ユーザー
  • SaaSリファレンスアーキテクチャ
  • AWS PrivateLinkによる接続形態
    • Direct Connect
    • Functional SaaS

2. セキュリティオートメーション

  • 圧倒的なセキュリティ人材不足
    • (会場)専門部署がある・教育している
    • 自動化しなければならない重要な理由
      • 拡張性
      • コスト
      • 信頼性
        • 品質の担保
        • 人為的ミス排除
  • APIによるベンダー感の相互連携
  • クラウドならではの弾力性・拡張性・低コスト

  • セキュリティにおいて自動化したいこと(例)

    • 入力(トリガー)
      • メトリクスベース
      • イベントベース(任意・定期)
      • ルールベース
    • 評価(チェック)
    • 実行(アクション)
      • 通知
      • 確認
      • 修正
      • 対応
      • 分析
  • SSHポートを開けずに運用する時代へ

  • AWS Lambda

    • AWS Lambda
      • サーバーレスのコード実行環境
        • インフラ管理不要
        • 高いパフォーマンス
        • 細やかな料金
    • Lambda Function
      • 実行する関数コードと構成情報
  • セキュリティリスク要因

  • Amazon GuardDuty

    • 脅威検出と継続的監視でAWSアカウントとワークロードを保護
    • 悪意のある不正なスキャンを検知
    • EC2インスタンスの端末観戦検知
  • 適応型セキュリティアーキテクチャ サイクル

    • 予測
    • 防御
    • 検知
    • 対応
  • DevSecOpsライフライクルのセキュリティ

3. AWS re:Invent 2018 最新アップデート

  • AWS Control Tower
  • AWS Security Hub

15:50 - 16:30 サイバーセキュリティクラウドセッション

株式会社サイバーセキュリティクラウド
営業部 WafCharmセールス
坂口 龍一
  • タイトル :
    • AWS WAFの自動運用サービス「WafCharm」
  • 概要 :
    • WafCharmはビックデータとAIを使ってAWS WAFのルールを自動的に運用するサービスです。 WAFの知識や経験がなくてもWafCharmを利用すればすぐにWebセキュリティ対策が可能です。

WAFとは?

  • 社内セキュリティ
    • PC
    • 社内ネットワーク
  • Webセキュリティ

    • Webサイト
  • 最新のWebサイトに対する攻撃事例

  • 経営者の誤認

    • セキュリティ対策済みだと思っていた
    • 個人情報が外部のデータベースへ送信されていた

WafCharm

  • AI×ビッグデータによるWAF自動運用

  • AWF WAF の課題

    • マネージドルールは1つだけ
    • セルフサービス(残り9つ)
  • 3つの製品コンセプト

    • より強力な防御を
    • 楽に
    • 安心して
  • System Architecture

    • AWS
      • CloudFront/ALBにWebACLを作成
      • CloudFront/ALBのS3ログ出力設定
      • AccessKeyの設定
        • S3のRead権限
        • WAFへのフルアクセス
    • WafCharm
      • ルール自動入れ替え
      • ログ分析 -> 最適ルール分析・シグネチャによる攻撃分析
  • 利用開始後の運用チェック

    • Managed コンソールで
  • 月次レポート・攻撃検知メール

  • プラン料金:フリー・エントリー・ビジネス・エンタープライズ

    • WebACL利用料金
    • プラン料金(ウェブリクエスト数)
    • ウェブリクエスト追加料金
  • blog

攻撃遮断くん

  • AWSと、他のハイブリッド環境
  • 特徴
    • あらゆるWebシステムに導入可能
    • クラウド型WAF唯一の定額制
    • 自社開発ならではの万全なサポート
  • サービスラインナップ

    • エージェント駆動型
    • DNS切り替え型
      • DDoS特化型WAF
  • 攻撃遮断くんならではの魅力

    • 複数のWebサイトへの対策
    • DDoS攻撃の対策
    • 運用とサポート面を重視
      • 24/265
      • 日本人・日本語

16:30 - 16:40 休憩

16:40 - 17:20 はてなセッション

株式会社はてな
サービス・システム開発本部 Mackerelチームセールス
永吉 邦浩
  • タイトル :
  • 概要 :
    • Mackerelはクラウド時代のサーバー監視SaaSです。オンプレ環境のみならず、クラウド時代の複雑なインフラに対しても適切な監視をすばやく構築することができます。適切な監視はビジネススピードに直結します。Mackerelを使って、ビジネスを加速させて行きましょう。

サーバー監視の必要性 〜なぜサーバー監視は必要か

  • いち早く障害発生を確認できるように
  • 復旧にいち早く取りかかれるようにするため

サーバー監視サービス Mackerel

  • SaaS型のサーバー監視サービス
    • メリット:メンテナンス不要
    • デメリット:ネットに接続されてないと
  • push型の監視
  • GUICLIAPI

DevOpsの中核として

  • はてなの中でのMackerel
    • 「わからない」ことを「わかる」ようにするツール

動的なクラウド環境にも柔軟に追随

  • オートスケールにもスマートに対応
    • 使った分だけ
  • 各種パブリッククラウドにも対応
  • 外形監視
  • セキュリティ対策
  • Dockerモニタリング
  • 460日(1年+1四半期)データ保持

  • サーバ管理に

  • 監視設定のコード管理

  • ロードマップ

    • 機械学習による異常検知
    • コンテナ化対応
    • GCPインテグレーション
    • SAML認証
    • 時系列データベースの拡張

17:20 - 17:25 Q&A

17:25 - 17:30 閉会

Note

(参加メモ)TeamUp Developers LAB ~開発組織のHRに関するナレッジシェアイベント~ #1

  • 2019/01/17(木) 19:30 〜 21:15
  • チームアップ株式会社(スローガングループイベントスペース)
    • 東京都港区南青山2-11-17(第一法規本社ビル2F)
  • Twitter HashTag:

Thoughts

  • どの事例も採用のみに限らずそのあとのフォローアップの取り組みをいろいろ工夫している、と感じた。
  • 情報共有にもとても気を遣っているようだ。「なるべく拾う」をけっこう聞いたような感覚。
  • 「正解はない」という声も聞いた。やはり、難しい世界だ。

AGENDA

1930-1940

オープニング
- チームアップ株式会社 のご説明

1940-2000

GVA TECH株式会社 取締役 CTO/エンジニア 本田 勝寛様
急成長するプロダクトの開発の現場で、CTOが取り組む自律型組織をつくる仕組み 〜事業とメンバーが共に成長できるように〜

  • 自律型組織を目指した理由:
    • 自分がボトルネックになってしまった失敗
      • 任せたほうがワークするとわかった
  • 業務の時間内に時間をとって話す(1 on 1)
    • 聞くことは3つ
      • アウトプットの振り返り
      • 障害、困っていること
      • チャレンジしたいこと
  • 情報共有
    • esa にドキュメント
    • Slack に分報
      • 社長の悩みもオープンに
    • 横串の情報共有(MTG)も定期的に
  • Q.どういう評価をしている
    • 現在制度作成中
    • 「納得のいく」を心がけている

2000-2020

株式会社エバーセンス / 開発部 部長 西山 修様
ベンチャーフェーズで実現する“急がば回れ”のオンボーディング ~全ては組織とプロダクトのコンセプトのために~

  • 主要なサービス

    • 妊婦さん向けアプリ ninaru (ニナル) など複数
    • 少ないエンジニアでマネージしている
  • 急がば回れのオンボーディングを3つの軸で

    • 採用
      • 何よりもビジョン共感
      • 成長ポテンシャル重視
      • 「いいヤツ」
    • 入社時
      • 本人の希望を出来るだけ尊重
      • 必ずメンターをつける、研修期間を設ける
    • 継続
      • ポジションローテーションを積極的に
      • 誰もがプロダクトに意見する
      • SREのようなテクニカルチームが開発者を支援

2020-2030

休憩
なかった・・・

2030-2050

シタテル株式会社 CTO / 開発・R&D 和泉 信生様
チーム全体での相互補完で実践する“リモート×オンボーディング”

  • 服を「シタテル」

    • マッチング と 生産管理 のサービス
    • 顧客は ブランド、メーカー
  • おもいつく特徴

    • firefighterチャンネル
      • ヘルプを投げる
        • 炎上案件とたたかう、という経緯からの名前
        • とにかく助け合う体制
      • 「IE5でCORSがきかない」という問い合わせ
    • コミュニケーションは Slack、Kibela、Zoom
    • シニアの「いい方」が熊本で採用できた
  • 事前質問への回答

    • スポットメンバー(業務委託など)の巻き込み方や雰囲気の作り方:工夫した
  • 議論も全て残す(Kibela

    • リモートワークのルール策定のときなど
  • 事件簿

    • レビューの当たりが強い
      • その場で解決
      • 若い頃に学生を見ていた効果
    • オフィススペース限界
  • 心がけていること

    • フラット
    • 積極的に助け合う
    • おとせるものは、できるだけおとす
      • ボードメンバーから、開発メンバーへ
      • 忙しくてやらなかった、というのを拾う

2050-2100

アンケート
5段階評価的な設問には回答
自由回答はすみません書かなかった。。

2100-2115

懇親会

  • ありがたくPizzaとソフトドリンクをいただきつつ、本田さん・西山さんとざっくばらんに話した。
    • スタートアップの採用の難しさと勘所について
    • 内容は、心に留めるのみで。

Note


  1. イベントページに出ていた #CTO ではないようだ

SRE Lounge #4 に参加した 2018/07/03

Introduction

単純にキーワード「SRE」に引き寄せられて、2018/07/03 に、SRE Lounge #4 に参加した。
スケールが大きく感じたり、共感を覚えたり、自分の中でついていなかった整理が少しついたように思い、
良い機会だったと感謝のつもりで簡単にまとめてみます。

Event Information

  • 素敵な会場
  • タコスとドリンクで歓迎(ありがたや。ちょっとピリ辛だった。)
  • 内気な自分の割には今回は懇親会をいい感じで楽しめて良かった

Presentations

SRE @ Indeed

  • アイスブレイクが indeed のCM
  • HRのプロセスを変えていきたい、トノコト
  • Slides are almost full English.
  • 監視・OnCall のツールは SaaS を利用
  • 「 データセンターごとフェールオーバー」圧巻
    • それを RAID : Redundant Array of Inexpensive Datacenters と呼ぶのだそうな
      (発表資料ではないのですが)

ランサーズで積み重ねたSRE的取り組みとこれから

  • いろんな技術を使ってる
  • 業務上の役割の整理ができている感(数がすごかったが)
  • 監視系は SaaS に移行したトノコト
  • 環境の整備にだいぶ苦労した・している
  • ミドルウェアバージョンアップの戦いが控えているらしい

弱者のSRE戦略 / SRE strategy for small team

  • 正直なところ、このへんでスーパードライにやられました
  • メンテナンスは季節要因・顧客事情に従って(ビジネスってそりゃそうですよね)
  • 「技術課題に対して優先順位をつけて各個撃破」に強く共感
  • 「情報戦」「接近戦」で、事業へコミットして存在感を上げる

My Comments

  • その後の懇親会で、採用事情など話しました
    • どこもそれぞれ悩みが尽きないようで
  • SREって社内情シスやること多いですよね
    • 頼られちゃうんですよね
  • 海外のチームと一緒に仕事をすることに関して
    • 文化の違いって面白いものですね。考え方柔らかくなりそう。

Other Memo

  • 会場を使わせてもらえるスポンサー募集してるそうです
    • 今回は一時期申し込み 50人くらいいたかと

FastHandleをやってみている(1)

IaC [Infrastructure as Code] への取り組みとして、FastHandle を使ってみようと思ってさわりはじめている。

FastHandle - IT Operations Examples [FastHandle - IT Operations Examples]

複数インスタンス環境

VagrantCentOS(7)を1+4台とubuntu(16.04)を2台、上げてみた。
休日で他のことほぼやってないからかなと思うが、今のところそんなに重くはない。

github.com

インストール前段階

ガイドに従って設定を。
多少、自己流に調整している。
https://fasthandle.net/preparation/installing.html

fasthandle ユーザー追加

% vagrant ssh handle00  
[vagrant@handle00 ~]$ sudo su -

[root@handle00 ~]# useradd fasthandle
[root@handle00 ~]# echo 'fasthandle:fastpass' | chpasswd
[root@handle00 ~]# su - fasthandle
[fasthandle@handle00 ~]$

fasthandle ユーザー設定調整

[fasthandle@handle00 ~]$ cp -p ~/.bashrc ~/.bashrc.`date -d '1day ago' +%Y%m%d`
[fasthandle@handle00 ~]$ cat << @ >> ~/.bashrc
>
> # FastHandle env
> [ -f ~/fhhome/fh.env ] && source ~/fhhome/fh.env
>
>
> # history
> HISTSIZE=10000
> HISTFILESIZE=10000
> HISTTIMEFORMAT='%F %T %z '
> PROMPT_COMMAND="history -a"
>
> PS1="[\u@\h \w \t]\$ "   # -> あとで PS1="[\u@\h \w] に変更した
> @
[fasthandle@handle00 ~]$

[fasthandle@handle00 ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/fasthandle/.ssh/id_rsa):
Created directory '/home/fasthandle/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/fasthandle/.ssh/id_rsa.
Your public key has been saved in /home/fasthandle/.ssh/id_rsa.pub.
・・・

[fasthandle@handle00 ~]$ vi ~/.ssh/config
[fasthandle@handle00 ~]$ cat ~/.ssh/config
# Don't listen yes/no.
host *
      # Ignore "WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!"
      StrictHostKeyChecking no
      UserKnownHostsFile=/dev/null
[fasthandle@handle00 ~]$
[fasthandle@handle00 ~]$ chmod 600 ~/.ssh/config
[fasthandle@handle00 ~]$ ls -la ~/.ssh/config
-rw-------. 1 fasthandle fasthandle 162 Apr 28 22:35 /home/fasthandle/.ssh/config
[fasthandle@handle00 ~]$

「2時間で使いこなす!JetBrains開発ツール ハンズオン」を受講した

Introduction

2017/10/23 に、WindowsからMacにのりかえでだいぶ鈍ってしまっているコーディングスピードを取り戻したく、見つけたハンズオンに参加した。
「ブログ枠」の義務を果たすべく。全容を明かさない程度に。

Event Information

  • 会場は満員(キャパシティは多くはないです)
  • 初めて来た人はおそらく一度はするであろうくらいの、やや到達するのに地図の再確認を要する場所(数分ですが迷いました)
  • 初心者には予習が必要であろうと思われるスピード(まばたきできない2時間。イヤほんとに。)

Impressions

  • 「弊社厳選のショートカット集」は絶品。
  • それを実際に使って覚えられるのが嬉しい。
  • 4〜5年使ってなかったことをこの2時間でだいぶ知った。今までがもったいない・・・

My Comments

  • 費用対効果的観点からも非常にオススメなコース。
  • 「空気を読む」と「リネーム」はこれから多用しそう。
  • Macの設定自体、自分はもっとちゃんと調整しなければならないことに気づいた。。

Other Memo

  • JetBrainsのIDEはEmmet省略記法に対応している
  • File -> Power Save Mode で省電力モード。ヒント出なくなるが。
  • git add はそのときの状態でバージョン管理に追加される点に要注意らしい。

July Tech Festa 2017 直後コメント

Introduction

2017/8/27 に行われたインフラエンジニアの夏の祭典「July Tech Festa 2017」へのコメントを。
忘れないうちに、と思い。

Event Information

  • テーマは「ITエンジニアリングの本質を極める」だったそうな。
  • 何回めの開催かわからないが、初めて参加した。
  • 無償の勉強会ではないが、フルチケットを買って参加する価値は大きいと感じた。関わり方次第だが、費用対効果は高いと思う。

Lectures Line-up

もうたくさんまとめが出ているのでそちらへのリンクを出すにとどめちゃいます。

My Comments

今のエンジニア界隈の問題

懇親会で何人かの方と話していて感じたのですが、採用・人事評価のことを「最大の問題」と感じている方が複数いました。
自分はあまり人に話しかけたりするほうでないので、その中で高確率でこの話が出るということはどこの会社も「辛い」のかなと予想されました。
うまくいってるのはごく一部なのであろうと。

エンジニアに求められる技術要素

プログラムを見て感じたのですが、「AWS」「GCP」といったパブリッククラウドに関するキーワードが少ないような。
もう「当たり前」なんでしょうね。講演の中でも解説なく話が進んだパターンがほとんど。一方で Ansible の説明が本当に丁寧。売り出していきたい感を受けました。
それと、数日前の「あの」話はそんなには聞かれなかったのですが、「ネットワーク」エンジニアの需要が高いように感じた話がいくつかありました。
「セキュリティ」「モニタリング」もまた、これからのエンジニアには欠かせない要素であろうと懇親会でも感じました。
「根っこ」と「最上層(人の目に見える層)」をきちんとおさえなきゃな。

やりたいエンジニアリングを実現するのに大切なこと

とあるセッション(D20)で聞いた名言に尽きると思いました。
「他人の心を粗末に扱うな。お前の心を粗末に扱う人間は相手にするな」
Don’t be reckless with other people’s hearts. Don’t put up with people who are reckless with yours.

Other Memo

  • 最近 Windows から Mac に変えてよかった。バッテリーのもちがほんとに全然違う。こういう1日がかりのイベントにはもはや必需品であろうと。
  • English Cafe 行けばよかった。あの空いた時間に。
  • 会場のIT環境の充実さに時代を感じた。(自分、大学卒業が Windows 97 やら Me の頃)