Author Image

Hi, I am ナワフ

Mahmuduzzaman Chowdhury

iOSエンジニア at METADESIGN SOLUTIONS

経験豊富なiOS開発者ですが、従来の開発者とは少し違います 😇。
3年以上のモバイル開発の実績があり、コーディングに取り掛かる前に、分析、理解、そして徹底的なコミュニケーションを取ることを大切にしています。最近はオープンソースプロジェクトに夢中です。

Swift
Xcode
RxSwift
Flutter
React Native
Python

経験

1

Remote, UK

iOSエンジニア

2022年4月 - 現在

Responsibilities:
  • 12年間にわたる2つの相互接続されたレガシーiOSコードベース、eyLogeyParentの所有権を引き受け、機能の維持および開発を行い、アプリ間のシームレスな統合と機能を確保。
  • クロスファンクショナルチームと協力し、アップロードキュー、カスタムフレームワーク、オフライン観察、観察への追加、薬剤フォームと事故報告書の書き直し(署名機能付き)などの主要機能をXIBsとObjective-Cを使用してゼロから設計・実装。
  • 徹底的なコードレビューとパフォーマンステストを実施し、アプリの読み込み時間と応答性を30%改善。

Dhaka, Bangladesh

iOSエンジニア

2021年5月 - 2022年3月

Responsibilities:
  • スタートアップに100万ドルのベンチャーキャピタル資金を調達し、ビジネスの大幅な成長を牽引した、視覚的に印象的で高性能なモバイルアプリ「Beeda」を開発。シームレスなユーザーエクスペリエンスを実現。
  • Beedaウォレット、ライドシェアリング、Beedamall、食料品配送、宅配便、薬局、ローン、スパなど、複数のサービスを統合した包括的なスーパーアプリのコア機能を設計・実装。ユーザーフレンドリーなインターフェースを提供。
  • Google Mapsを統合・カスタマイズし、ユーザーとドライバーのリアルタイムステータスを正確に表示。効率的なルーティングとアニメーションポリラインを実装。UIKitを使用してカスタムUIコンポーネントを開発し、シームレスなインターフェースを提供。Instrumentsを使用したテストとデバッグにより、アプリのクラッシュ率を30%削減。
  • アルゴリズムの改良、スレッド戦略の最適化、効果的なキャッシュメカニズムの実装により、Beedaアプリの最適化を設計。CPU使用率の低下を実現し、パフォーマンスとバッテリー効率を向上。
2

プロジェクト

Beeda User
Beeda User
Beeda User
iOSエンジニア 2021年5月 - 2022年3月

Beeda Mega Appは、AIに支えられたオンデマンドプラットフォームで、フードおよび商品配送、交通サービス、デジタル決済、マルチベンダーEコマース、エンターテインメント、旅行、不動産、仕事、場所、デジタル名刺、ソーシャルメディア、自動車関連サービスなど、50以上のオンデマンドソリューションを提供します。

Beeda Driver
Beeda Driver
Beeda Driver
iOSエンジニア 2021年5月 - 2022年3月

Beeda Driver Appは、ドライバーが注文を管理し、ルートを最適化し、収益を効率的に追跡するための強力な配送および物流プラットフォームです。リアルタイム通知、GPSナビゲーション、シームレスな顧客とのコミュニケーションにより、スムーズで効率的な配送を実現します。ドライバーは簡単にサインアップし、必要な書類を提出して、すぐに注文を受け付けることができます。エチオピアやインドなどの地域に特化した設計で、ドライバーが生産性と収益を最大化できるようサポートします。Beeda Driver Appで、よりスマートで迅速な配送を体験してください!🚚

eyParent
eyParent
eyParent
iOSエンジニア 2022年4月 - 現在

eyparentは、親が子供の学習の過程を通じて、より定期的かつリアルタイムで子供の発達を理解できるように支援することを目的とした専用アプリです。保育園は、コメント、家庭での観察、日誌、報告書、事故/インシデントシート、メッセージを通じて親を情報提供し、関与させることができます。eymanageや支払いゲートウェイと統合すると、親は自分のアカウントの全体像を把握し、オンラインで請求書を確認して支払うこともできます。

eyEmployee
eyEmployee
eyEmployee
iOSエンジニア 2022年4月 - 現在

eyemployeeモバイルアプリは、保育施設のオーナー、HRマネージャー、およびすべての従業員間に橋渡しを提供し、全体的なHR体験をシームレスにします。このアプリを使用するには、貴社が当社(eyworks)の製品のいずれかに契約している必要があります。スタッフチームを引き付け、HRをより便利にし、仕事を一つの簡単なアプリに統合して、スタッフの生活を効率化します。従業員はシフトの確認、更新の受け取り、簡単に休暇のリクエ

eyLog
eyLog
eyLog
iOSエンジニア 2022年4月 - 現在

Every Young Heroの物語を祝おう!Eylogは、保育の専門家や介護者のために設計された究極のアプリで、幼児期の発達の魔法を祝います。Eylogは、学習の過程、成長のマイルストーン、特別な瞬間を捉えることを目的としており、日記の記録、観察、進捗報告書を簡単に作成・共有できます。お世話している子どもたちの成長や成果に常に繋がり、貴重な瞬間を見逃すことがありません。

J-Lingo
J-Lingo
J-Lingo
開発者 2024年8月 - 2024年9月

J-Lingoは、B-JETで日本語を学ぶ際に作成したモックアップアプリで、研修生の生活を簡素化し、整理することを目的としています。学習リソース管理、日次/週次のクイズ、オンラインクラスの記録、練習テストなどの機能を提供して学習を向上させます。ゲーム、リーダーボード、フォーラムなどのインタラクティブな要素により、プロセスを楽しく協力的に進めることができます。研修生は進捗を分析で追跡し、プロフィール共有で成果をシェアすることも可能です。J-Lingoは、すべてのB-JET研修生にとって、日本語学習をより快適、効率的、楽しいものにすることを目指しています!🌟

スキル

最近の投稿

Hero Image
eyLogがモバイルリリースを管理する方法

コンテキスト App StoreやPlay Storeでのアップデートの定期的なリリースは、特に複数のアプリを同時に管理する場合、思っている以上に複雑です。異なるチームのワークフローを探ることは興味深いものです。共通点や相違点を明らかにすることで、有益な戦略が見つかる可能性があります。ここでは、eyLogのモバイルリリース管理についての概要を紹介します。 リリースサイクルの概要 私たちのリリースサイクルは、多くの企業が行っていることと非常に似ています。以下は、私たちがどのように管理しているかの簡単な説明です: 私たちは毎月新しいバージョンをリリースしているので、毎月リリースカットを行います リリースカットが行われたら、すぐにテストが始まります。主要な問題を修正するためには約1週間の時間があり、その間にリリースブランチに修正を追加していきます テストと修正が完了した後、通常月の中旬にApp Storeレビューにアプリを提出します。このタイミングで、もし審査での拒否や遅延があった場合に余裕を持つことができます 承認を得ると、ビルドは月末までリリースの準備を整えておきます リリース当日、私たちは自動更新で小規模なユーザーグループにフェーズリリースでアップデートを展開します。これにより、テストで見逃した大きな問題を早期に発見することができます 新しいリリースのパフォーマンスを慎重に監視した後、7日目には全ユーザーへの展開を加速させます この間に、次のリリースの準備も始めているので、サイクルは連続的に進行します コミュニケーションの管理 リリースやロールアウト中にコミュニケーションを明確で整理されたものに保つために、各リリースごとにCliqチャンネルを作成します。例えば、#ios-release-6-1-0 のように。この方法により、特定のリリースに関する更新情報や議論を一元化することができ、他のチャンネルでの気が散る情報を減らし、過去のリリースに関する情報も簡単に見つけることができます。 専用のCliqチャンネルを持つことは、ホットフィックスを発行する際に特に有用です。私たちは毎週更新をリリースしているので、既存の問題に対するホットフィックスは、2つのリリースが同時に行われることを意味します。それぞれのリリースのコミュニケーションを独立したチャンネルで行うことは、混乱を避けるために重要です。例えば、バージョン6.1.0のホットフィックスに関連する内容は#ios-release-6-1-0で議論され、次のバージョン6.2.0に関する議論は#ios-release-6-2-0で行われます。 リリース候補のテスト 私たちのアプリは非常に大きいため、リリース候補のテストを1人または少人数のグループで全て処理することは不可能です。品質保証(QA)チームだけでは、毎週行われる重いテストに追いつくことができません。多くの変更や新機能が迅速に開発されているため、正しいテストが行われているかを確認することが難しいです。実際に機能を開発している人々が、何が新しいのか、何が変更されたのか、どのようにテストすべきかを最もよく理解しています。 そのため、リリース候補のテストには「ウォッチドッグ」と呼ばれるエンジニアグループを頼りにしています。このグループはバックエンド、フロントエンド、モバイルエンジニアで構成されており、それぞれが自分の担当するアプリの部分をテストします。ウォッチドッグは、テスト中に見つかった問題を修正するか、修正を他の人に委任します。各部分は通常、私たちのプロダクトチームに対応しており、例えばログインチームはアプリのログイン機能をテストします。ウォッチドッグは、承認する前に必ず実行しなければならないテストを持っており、すべてのコンポーネントが承認されてからリリースをレビューのために提出することができます。 リリース候補のテスト中に発生した問題の処理 ウォッチドッグがリリース候補のテスト中に問題を見つけた場合、彼らはチームと協力して問題を解決し、標準的なプルリクエストを使用してメインブランチに修正を加えます。修正がマージされた後、その修正は「チェリーピック」というプロセスを通じてリリースブランチに追加される可能性があります。しかし、変更を最後の瞬間に加えることはリスクを伴うため、リリースに含めることができる内容には厳格なルールがあります。 私たちは、ユーザー体験に影響を与える重大な問題や新たに発生したバグの修正は許可しますが、ユーザーに影響を与えない軽微なバグ修正や、締切を過ぎた新機能を追加することは許可していません。修正リクエストをレビューするシステムを開発しており、チームは問題を説明し、証拠を提供するリクエストを提出し、それをリーダーが確認します。 リリース後のホットフィックスのプロセスは、リリースサイクル中のチェリーピックのリクエストに似ていますが、ルールはさらに厳格です。ホットフィックスを作成するにはより多くの労力が必要で、今後の通常のリリースに干渉する可能性があります。リリースサイクルの遅い段階でバグが発見された場合(アプリがレビューに提出された後、公開前など)、修正するかどうかは、リリース後のホットフィックスと同じ厳格なルールに基づいて決定されます。 更新がまだ公開されていなくても、レビュー待ちやすでに承認されている場合があります。これを修正するには、現在のビルドを却下してアプリを再提出する必要があります。これによりリリースが遅れる可能性があるため、修正が必要かどうか、またその処理方法をケースバイケースで評価します。ビルドを却下して修正を適用し、再提出することもあれば、予定通りリリースを実施し、後でホットフィックスを発行することもあります。あるいは、バグがホットフィックスを必要とするほど重大でないと判断し、次のリリースサイクルで修正することを選択することもあります。 リリース後のロールアウトの監視 リードと担当開発者は、リリース後の監視を共同で担当しています。私たちはNew RelicとFirebaseを活用して、クラッシュやシステムの健全性を追跡しています。リードが異常を検知した場合、担当開発者に詳細な調査と必要な修正を指示します。一方、問題が発生しない場合、自動的にフルロールアウトに進むことが可能です。

Hero Image
Beedaにおけるキャッシュ管理戦略の最適化

高速でシームレスなユーザー体験を提供するためには、すべてのアプリケーションに効果的なキャッシュシステムが必要です。キャッシュがない場合、アセットを繰り返しダウンロードすることで大量のリソースが消費され、読み込み時間が遅延する可能性があります。この問題を解決するために、開発者はパフォーマンスを向上させ、遅延を最小限に抑えるために、ディスクキャッシュ、LRU(Least Recently Used)キャッシュ、データベースキャッシュなど、さまざまなキャッシュ戦略を利用します。 問題: Beeda Userアプリでは、画像、Lottieアニメーション、ビデオといったメディアアセットを効果的に扱うことが、高速でシームレスなユーザー体験を実現するために不可欠でした。それぞれのメディアアセットには、キャッシュや最適化に関する特有のニーズと課題があります。 画像: 高解像度の画像は大量のメモリとストレージを消費する可能性があるため、ディスクキャッシュ(例: URLCacheやSDWebImageのようなサードパーティライブラリを使用)が重要です。 Lottieアニメーション: Lottieファイル(JSONベースのアニメーション)は軽量ですが、効率的なパースとレンダリングが求められます。インメモリキャッシュ(例: NSCache)を使用することで、繰り返しパースする際の負荷を軽減できます。 ビデオ: ビデオはサイズが大きいため、ストリーミングや部分的なキャッシュが必要で、過剰なメモリやストレージの使用を防ぎます。 各キャッシュ機構が特定のメディアタイプに対して効果的である一方で、次のような重要な課題が浮かび上 実装: Beeda Userアプリにおけるメディアアセット管理の課題に対処するため、各タイプに応じた異なるユーティリティ(Utils)を設計しました。この構造化されたアプローチにより、画像、Lottieアニメーション、ビデオなどのアセットを効率的に処理できます。 1. ユーティリティレイヤー (Utils Layer) 各メディアアセットタイプには、それぞれのタスク(ダウンロード、パース、処理など)を担当するユーティリティクラスがあります。これらのユーティリティは、アプリが直接操作することなく、アセットマネージャーからアセットを取得する中間役として機能します。 例えば、画像ユーティリティを考えてみましょう。もし画像がすでにキャッシュされていなければ、このユーティリティはアセットマネージャーのgetDataメソッドを呼び出して画像をダウンロードします。ダウンロードが完了すると、ユーティリティは生データをアセットマネージャーに渡して保存します。 protocol ImageUtilProtocol { func downloadImage(url: String, imageCompletionHandler: ((UIImage) -> Void)?, storageType: StorageType) } 2. アセットマネージャー (Assets Manager) アセットマネージャーはシステム内の中間レイヤーとして機能し、ユーティリティ(Utils)とさまざまなキャッシュメカニズムの間のブリッジとして働きます。主な役割は、指定されたストレージタイプに基づいて、どのキャッシュ方式を使用するかを決定することです。 StorageTypeパラメータは、利用可能なキャッシュメカニズム(例: インメモリ、ディスク、ハイブリッドなど)を定義します。 enum StorageType { case lru(LRUCacheType) case disk } enum LRUCacheType: String { case lottie case image case video } アセットマネージャーには、データを保存および取得するための共通メソッドがあります。 protocol AssetsManagerProtocol { func writeData(data: Data, forKey key: String, storageType: StorageType) func readData(forKey key: String, storageType: StorageType) -> Data? func removeData(forKey key: String, storageType: StorageType) } アセットマネージャーは、キャッシュ操作の管理において重要な役割を果たします。ユーティリティクラスがそのメソッドを呼び出すと、アセットマネージャーはstorageTypeに基づいて適切なキャッシュレイヤーを決定します。その後、データの書き込み、読み取り、または削除といったタスクを該当するキャッシュメカニズムに委任し、効率的かつ正確にアセットを処理します。

Hero Image
BeedaのSwiftコンパイル時間を83%改善

コンテキスト Beedaの新機能拡張に伴い、コンパイル時間が深刻な問題となってきました。些細な変更やフルコンパイルに約11分もかかるため、開発ワークフローに大幅な遅延が生じていました。 生産性を向上させ、開発の効率を改善するために、このコンパイル時間を劇的に短縮することを目指しました。この記事では、どのようにしてコンパイル時間を2分にまで短縮したかを紹介します。 Xcodeの最適化レベル Xcodeでは、以下の3つの最適化レベルから選択できます: なし 高速 全モジュール最適化を使用した高速 これらの設定を活用して、どのようにこの改善を実現したかを紹介します。 「全モジュール最適化」を有効にすることで、コンパイルプロセスが大幅に加速されます。しかし、「高速」または「全モジュール最適化を使用した高速」設定を選択すると、デバッグ機能が無効になります。これらのオプションのいずれかを選択し、アプリをコンパイルした後にデバッグを試みると、コンソールに次のメッセージが表示されます: アプリは最適化されてコンパイルされました - ステッピングは異常に動作する可能性があり、変数が利用できないことがあります。 解決策:ユーザー定義設定を追加する 全モジュール最適化を有効にするには、Xcodeプロジェクトの設定にユーザー定義設定を手動で追加する必要があります。以下はその方法です: 手順 プロジェクト設定に移動: プロジェクトナビゲータでプロジェクトを選択します。 ビルド設定タブに移動します。 ユーザー定義設定を追加: ビルド設定ペインの左上隅にある**+**ボタンをクリックします。 ユーザー定義設定の追加を選択します。 設定名をSWIFT_WHOLE_OPTIMIZATION_LEVEL(または他の関連する名前)にします。 値をYESに設定して、全モジュール最適化を有効にします。 Debug設定でNoneを設定 ターゲットのビルド設定で、Debug構成の最適化レベルをNoneに設定します。 この改善がBeedaに与える影響 コードを頻繁に更新し、反復しているiOSチームにとって、この改善は効率の向上、コストの削減、顧客体験の向上に大きな役割を果たしています。具体的に言うと、1日30回のコンパイルを実行する場合、この最適化は1日に約26時間のコンパイル時間を節約します。この時間の節約は、3人の追加の開発者のアウトプットと同じくらいの効果があります。

学歴

2016年 - 2021年
Bsc in Computer Science & Engineering
CGPA: 3.41 のうち 4
課外活動:
  • Mozillaのボランティアとして、リリース前のバグトリアージに貢献し、Quality Assurance(QA)チームに参加。
  • 受信したバグレポートをレビューし、カテゴリ分けを行い、適切なコンポーネントに割り当て、再現手順を明確にすることで品質向上に努めた。
  • コミュニティと協力し、定期的なBug Daysに参加してバグリストを共同で対応・管理し、トリアージプロセスの効率を向上。
Government Science College
2013-2015
Higher Secondary School Certificate
Willes Little Flower School & College
2002-2012
Secondary School Certificate

実績

Japanese (N4)
University of Miyazaki Mar 2024 - Dec 20204

B-JET(バングラデシュ-日本 ICT エンジニア育成プログラム)**は、バングラデシュと日本の協力による取り組みで、バングラデシュのITエンジニアのスキル向上を図り、日本の技術産業で働く機会を創出することを目的としています。このプログラムは、日本における熟練IT専門家の需要の増加に対応するとともに、バングラデシュのエンジニアに対して、日本の求人市場に向けた高度なトレーニング、日本語スキル、および文化的な理解を提供します。