ModelMapperのcustom mappingについて

エキサイト株式会社 メディアサービスエンジニアの中尾です。 前回に続いてModelMapperのちょっとした内容を説明します。 現場ではほとんど使うことはないと思うので、「こんなこともできるんだ」ぐらいでお願いします。 コードは以下になります。 @ExtendWi…

TabBarの選択ボタンを中央寄せにするアニメーション付き無限スクロール化するTips2

エキサイト株式会社の高野です。 前回 TabBarの選択ボタンを中央寄せにするアニメーション付き無限スクロール化するTips を書いたのですが、また別の方法で実装しましたのでその方法を紹介します。 (前回と同様にTabBarをListViewで実装する際の一例です。) …

Android 12での通話に関する通知アクション

こんにちは。エキサイト株式会社 Androidエンジニアの克です。 今回はAndroid 12から追加となった、新しい通知スタイルの種類についてお話しします。 ※ 今回紹介する内容は Android 12 Beta におけるものです。正式版では仕様が変わっている可能性もあるため…

MySQL5.6におけるdatetimeの挙動を実際に試してみた

はじめに MySQL5.6におけるdatetimeの挙動で???ってなったので、仕様を確認しつつ、実際に挙動を確かめてみました。 datetimeの仕様 デフォルト値に関しては、ドキュメントにこのように記載されています。 DATETIME は、NOT NULL 属性で定義されていない…

MyBatisによるコード自動生成で、Javaの予約語を回避する方法

こんにちは。 エキサイト株式会社の三浦です。 JavaにはMyBatisというライブラリがあり、それを使うことでDBとの接続用コードを自動で生成することができます。 DBとのやり取りをするアプリケーションにとっては非常に便利な機能であり、使っている方も多い…

statusBarの表示非表示ハンドリング

エキサイト株式会社の高野です。 今回はFlutterを書いていく中でiOSでstatusBarが表示されない(消えてる)問題の解決に当たっていたのでその辺りについて書いていこうと思います。 環境 iOS: 14.5 Flutter: 2.0.6 Android Studio: 4.1.3 解決方法 先にXcodeの…

effective java の 防御的コピーの話を自分なりに実装してみた

エキサイト株式会社の中尾です。 effective java を最近読んでいて、気になった部分を自分でコーディングして理解を深めようと思っています。 その一部を紹介します。 public class Main { public static void main(String[] args) { System.out.println("元…

modelmapperの曖昧なマッピングを厳密なマッピングに

エキサイト株式会社の中尾です。 今回はModelMapperのよく使われるオプションについて、説明します。 以下の例は、userIdを別のモデルにマッピングします。 userIdからuserIdなのでもちろんテストは通ります。 @ExtendWith(MockitoExtension.class) public c…

AWS上の本番DBから通信コストを抑えて大量データを開発DBに入れる

こんにちは。エキサイト株式会社のエンジニアのAです 今回はAWS上で本番稼働中のRDSから開発用DBクラスター内に新しく作成したスキーマにデータを入れる必要があったため、その際に通信料金をできる限り最小限で抑える方法をご紹介します 料金について イン…

第一回Radiotalk配信!!〜新卒と語り合おう〜

はじめまして!エンジニアとして新卒で入社した奥田です。 私は現在、社内の社外広報チームに所属しています。 その一環としてRadiotalkでのライブ配信することになりました! 記念すべき第一回は同期たちと最近の生活や仕事などざっくばらんに配信しました…

LogstashをAWS RDSに接続するときの注意点

こんにちは。 エキサイト株式会社の三浦です。 DBからデータをどこかに同期する(例えば、DB内のデータをElasticsearchに同期する)場合、いろいろな方法がありますが、その一つにLogstashを使うというものがあります。 LogstashはElasticsearchと同じくElas…

TabBarの選択ボタンを中央寄せにするアニメーション付き無限スクロール化するTips

こんにちは。 エキサイト株式会社の高野です。 今回はTabBarをListviewで実装することを前提にお話ししていくことを前提としていきます。 FlutterでTabBarを無限スクロール化する方法はいくつかあり、ライブラリでいうと infinite_listview や indexed_list_…

Java9から導入されたMatcherのreplaceAllを使って文字列を置換する

はじめに エキサイト株式会社 21卒 バックエンドエンジニアの山縣です。 PHPで書かれたAPIからSpringBoot / Javaでリビルドを進めていく上で、 独自のイメージタグからHTMLのimgタグに置換する処理をJavaで実装することになりました。 シンプルでスッキリと…

AtomicIntegerを使ってみた

エキサイト株式会社 メディア開発のしばたにえんです。 さっそくですが、下記のコードをご覧ください class CountTest { private int num = 0; @SneakyThrows void CountThreadNum() { int threadNum = 10; ExecutorService service = Executors.newFixedThr…

EC2をCloudFormationとAnsibleで構成管理する

エキサイト株式会社のみーです。 最近はコンテナばかり触っていますが、要件によってはEC2の非コンテナ環境で構築しなければいけないこともあると思います。そういう時に出てくるのが、構成管理どうしよう、という悩み。 ヘルパースクリプトを活用する AWSに…

JUnitの@Before系アノテーションのバージョンによる違い

こんにちは。 エキサイト株式会社の三浦です。 JavaでJUnitを使ってユニットテスト(UT)を行うとき、各テストの前に共通で行いたい処理がある場合、 @Before から始まるアノテーションを使えば簡潔に実装することが出来ます。 ですが、 @Before 系のアノテ…

RedisCacheConfigの設定

エキサイト株式会社 メディア事業部エンジニアの中尾です。 SQL Serverからデータを取得し、redisにデータをキャッシュさせようとしたら以下のエラーが出ました。 Could not write JSON: Java 8 date/time type `java.time.LocalDateTime` not supported by …

Android 12におけるスプラッシュスクリーン

こんにちは。エキサイト株式会社 Androidエンジニアの克です。 Androidアプリでは、起動時に最初の画面が表示されるまで多少の時間がかかり、真っ白の画面がしばらく続いてしまうということがよくあります。 そのため、最初の画面が表示されるまでアプリのロ…

🎉Twitterアカウントを開設しました!🎉

お知らせ こんにちは。excite新卒デザイナーの山﨑です。 この度excitechという技術発信のTwitterアカウントを開設しました! twitter.com じゃ〜ん! アイコンとヘッダーは内波さんという直属のメンターさんが製作してくれましためちゃくちゃかっこいいです…

Javaのメソッドの返り値に、オブジェクトを使うべきかインターフェースを使うべきか

こんにちは。 エキサイト株式会社の三浦です。 Javaで配列を扱う時、すべての配列のインターフェースである List と、具体的に実装したオブジェクトである ArrayList や LinkedList 等があります。 メソッドの返り値で配列を返したいときはこれらのどれでも…

restTemplateでElasticsearchに問い合わせる

エキサイト株式会社 メディア事業部エンジニアの中尾です。 rest-high-level-clientのようなライブラリではなく、restTmeplateでElasticsearchに問い合わせる方法を説明します。 https://mvnrepository.com/artifact/org.elasticsearch.client/elasticsearch…

Javaのカスタムバリデーションで2つ以上のプロパティをチェックするアノテーション

エキサイト株式会社 メディア開発の佐々木です。 現在、SpringBootで2つ以上のプロパティをチェックするカスタムバリデーションを共有します。 アノテーションの定義 下記のようにカスタムアノテーションを定義します。 (@Constraint(validatedBy = NotBlank…

SQL Serverのwith(NOLOCK)の挙動について

エキサイト株式会社 メディア事業部エンジニアの中尾です。 最近はSQL Serverを使うことが多いので、SQL Serverでよく使われているwith(NOLOCK)の挙動について説明できたらと思います。 with(NOLOCK)とは 簡単にいうと、トランザクションレベルを強制的にREA…

AWS Fault Injection Simulatorを使って障害を発生させる

エキサイト株式会社のみーです。 今年の3月より利用可能となったAWS Fault Injection Simulator、FISを使ってフォールトインジェクション実験をしてみました。 aws.amazon.com いわゆるカオスエンジニアリングです。フォールトインジェクション実験をするツ…

【Flutter】コピペで使える!ダイアログのデザイン集

はじめまして! エキサイト株式会社で長期インターンをしている井関です。 まだまだ、Flutterを勉強中ですが、アウトプットや繰り返し使えるためにどんどん書いていきます👍 目次 Widgetを作成する ①まるばつクイズ風(横に均等に並べる) <解説> ②3択クイズ…

Javaにおける、効率の良い一覧データの回し方

こんにちは。 エキサイト株式会社の三浦です。 コードを書いている時、たまに「一覧データの中から条件に合ったものを持ってくる」ことが必要になる場合があります。 一覧データの件数自体が大したことがなかったり、1~2件程度を持ってくるのであれば filter…

MyBatis + FreeMarkerを使用した環境でレコード追加時にAuto IncrementされたIDを取得する

エキサイト株式会社 21卒 バックエンドエンジニアの山縣です。 MyBatisとFreeMarkerを使用した環境において、INSERT文を実行したときにAuto IncrementされたIDが取得できない問題とその解決策についてまとめました。 MyBatisとFreeMarkerを使用した環境 現在…

UTってどこまでやればいいんだろう?(ポエム)

エキサイト株式会社 メディア事業部エンジニアの中です。 SpringBootでUTをやる方法をいくつか紹介しましたが、、、実際にはどこまでやればいいんだろうと、ちょっとポエムを記載します。 tech.excite.co.jp tech.excite.co.jp tech.excite.co.jp tech.excit…

SpringBoot AOP でメソッドの実行時間を計測する

エキサイト株式会社 メディア開発の佐々木です。 SpringBoot/AOPでメソッドの実行時間を計測します。計測は重要です。 依存関係の解消 Gradleで依存関係を解消します。 dependencies { ... implementation "org.springframework.boot:spring-boot-starter-ao…

RDS for Oracleのバックアップ戦略

エキサイト株式会社のみーです。 RDSインスタンスのバックアップを実施するには、RDSの標準機能を使う方法だけでなく、AWS Backupを使う方法も用意されています。 要件に合わせて適切な選択をしていきましょう。 なお、以下の内容はRDS for Oracleを前提とし…