サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
CES 2025
meetup-jp.nhncloud.com
数年前からUDPへの言及が増えてきたようです。実際には海外でよく使われており、北米では2000年初期だけでもゲームサーバーと動画サービスの主要プロトコルはUDPが使用されていました。まだ大半の商用ゲームサーバーは、UDPを主要プロトコルとして使用しています。 UDPが頻繁に言及され始めた時期は、2013年にGoogleが発表したQuicと、海外の商用ゲームネットワークライブラリとサービスが国内に公開されてからのようです。ゲーム関連のサービスやライブラリは、Apple、GoogleのP2PのマルチプレイヤーゲームAPIとPhoton、RakNet、UnityのUNetなどが代表的です。そしてTCPとUDPの両方が実装されている推奨プロトコルはUDPです。 ここでは、UDPを使用するときに考慮すべき内容について紹介したいと思います。 マルチプレキシング マルチプレキシングを使用する主な理由は、
確率的データ構造であるブルームフィルター(Bloom filter)は、ストレージを節約できる上、高速検索ができるため、HBase、Redisなど様々なデータベースで活用されているという話をよく聞きます。実際にどのように活用され、どのような原則でデータを含蓄的に表現できるかを簡単に説明した後、実際のデータ処理環境でどのように使用されているか、サンプルを使って紹介しようと思います。 ブルームフィルターの原理と実装 ブルームフィルターを簡単に説明すると、次のように言えます。 「どのような値が集合に属しているかをチェックするフィルタ、及びこれを構成するデータ型」 この構造を図式化してみましょう。 保存したい集合の値をn個のハッシュ関数(hash function)を経るようにして(1)、出力された各ビットをビットマップ配列に保存(2)します。 すべての値に対して、このプロセスを経ると、最終的に保
はじめに あなたがウェブページを作成するとき、豊富な機能を提供するため、よく作られているUIライブラリを用いることがありませんか?今回は、NHNで開発したTOAST UIにおいて、これまでに培った経験とノウハウを大放出したいと思います。ここでは、UIライブラリの作成方法を紹介するために、ライブラリの目標、機能、使用した技術スタック、Webpackの設定まで、すぐに適用できるように実用的な内容で構成しました。UIライブラリの作成方法や、ノウハウA to Zを知りたい方は、パソコンを用意して一緒に始めましょう。 まず、TOAST UI Gridについて紹介しましょう。Gridはさまざまなツールやシステムに使用されており、TOAST UI Calendar v2にもGridが使用されています。Gridは大容量のデータをレンダリングするため、パフォーマンスが非常に重要となるUIライブラリですが、P
最近、新しいプロジェクトを進行することになり、従来のビューを本格的に導入することになりました。ここでは、Webpack4を皮切りに、3回にわたってWebpack4、ES6、ビュー2、Jest開発環境について共有しようと思います。すでにWebpackを使用している開発者と、初めてWebpackに接する開発者の両方を対象にして作成します。 Webpack4での変更点 数ヶ月前にWebpack4が発売されました。最も大きな変化と言えるのは、開発環境に合わせて基本設定されたDevelopmentモードと、運用環境に合わせて設定されたProductionモードが追加されたことです。Parcelの長所であるシンプルな使い勝手を取り入れたようです。そしてモードに応じて適用されるオプションも変わりました。変更点を整理します。 ビルド速度が速くなった。最大98%まで加速できる可能性があると言われている。 w
この記事で使用するOpenSSLのバージョンは1.0.1uです。 ハートブリード脆弱性を回避するには、1.0.1g以上を使用します。 OpenSSL公式ページ:https://www.openssl.org/ 公式文書:https://www.openssl.org/docs/man1.0.1/ssl/ ここではOpenSSLのビルド、プロジェクトに設定する方法、詳細なエラー処理は省略します。 開発に必要な内容だけ整理してみよう。 以下の内容があればすぐにnon-blocking socketにSSLを適用できます。 この記事で必要なヘッダファイルは以下のとおりです。 ssh.h bio.h err.h engine.h conf.h プライベート証明書の生成 テストのために証明書が必要なので、プライベート証明書を1つ作ろう。 以下のように実行すればプライベート証明書を作成できます。 op
GitHubのMerge、Squash and Merge、Rebase and Mergeを理解する GitHubの新バージョンでは、merge、Squash and merge、Rebase and mergeの3種類のマージに対応するようになりました。マージ方式によってコミット履歴が異なるため、どのような場合にどのマージを使用するのがよいか、共有したいと思います。 グラフで表すと 各マージをグラフで表してみます。 merge(a、b、cをreferするmコミットノード作成、mはparentにInit、cを持つ) Squash and merge(a、b、cを合わせて新しいコミットを作り、ターゲットブランチに追加。’ a,b,c ‘コミットはparentをInitだけ持つ) Rebase and merge(a、b、cをシームレスにマージ対象ブランチに追加。各コミットはすべてparen
Overview 基本的にJavaScriptはECMAScript言語スペックに従っています。スペックから、実行コードと実行コンテキストでスコープに関する動作を確認できます。また重要な概念である1級オブジェクトの関数は、その特徴をスペックの全体的な部分から確認できます。そして、クロージャ(Closure)に対する定義はありません。クロージャはJavaScriptが採用している技術的基盤やコンセプトで、JavaScriptはクロージャを用いてスコープ的特徴と一級オブジェクトとして関数のスペックを実装しています。 物や人物に名前をつけて意味を持たせるように、プログラミングでも変数や関数に名前を付与して意味を持たせます。名前がなければ、変数や関数はただ1つのメモリアドレスに過ぎません。そこでプログラムは、「名前:値」の対応表を作り、これを用います。対応表の名前によってコードをより簡単に理解する
{ "id": 1, "title": "title1", "content": "content1", "comments": [{ "id": 1, "email": "Eliseo@gardner.biz", "body": "laudantium enim quasi est quidem magnam voluptate ipsam eos\ntempora quo necessitatibus\ndolor quam autem quasi\nreiciendis et nam sapiente accusantium" }], "writer": { "id": 1, "username": "Bret" } } 基本APIの作成 まずは基本的なAPIを作成しよう。 webモジュールの作成 依存性の設定 現在(2018-03-10)基準で最新バージョンのSpring-Boot
この記事は、Webコンポーネントを紹介する連載記事で、3回目は、Shadow DOMについて紹介します。 おそらく以前のカスタム要素の記事を読まれている方は、さまざまなスペック、APIなど、覚えることが多くて飽きてくるかもしれません。しかし、今回のShadow DOMで学ぶべきAPIはelement.attachShadow()関数のみなので、気軽に始めてほしいです。短いコードから試してみて、詳しい内容を調べていこうと思います。 今回は、HTML、CSSのスコープをテーマにします。 前回の記事 Webコンポーネント:Keep calm and #UseThePlatform Webコンポーネント(2):Custom Elements すべての変数をグローバルに入れるのはやめよう もし、あなたがフロントエンドの開発者なら、グローバルにすべてのことを解決しようとするコードを作っていることでしょ
はじめに TOAST Notificationのサービス内では、APIのバージョン別のオブジェクトと、ビジネスロジック、レイヤー間のオブジェクトとオブジェクト間のマッピング時に、MapStructを使用しています。今回はオブジェクト間マッピングライブラリーであるMapStructについて紹介します。 問題 Springフレームワークでの開発を例に挙げてみましょう。Controller、Service、Repositoryなどのレイヤー間でデータを送受信するときやビジネスロジックでは、1つのオブジェクトをタイプの異なるオブジェクトに型変換したり、複数のオブジェクトを別のオブジェクトに結合させることが頻繁にあります。 このような作業を、開発者がすべて自分で行うとき、主にこのような問題点があります。 面白味がなく繰り返しコードの重複が発生しやすい ミスが発生しやすい 結果として、生産性が落ちる
正確には、git squashというコマンドはありません。interactive rebaseをするのに必要なコマンドの1つです。 時折、以下のように1つの作業を何回もコミットすることがあります。 $ git log --pretty=oneline d442427eae836f15e94f5df0445c70081df79a3e Task 3/3 26395437be53e4e6e68f83aa98560ef93838aaa0 Task 2/3 7c6535580a038e9dcfaa72a98e04848812da9aee Task 1/3 2260a88777c247c31170ff6074d95569ac557afb Initial commit $ Task 1/3〜3/3を1つのcommitにまとめてしまいたいですね。 このような時に使用するのが、interactive reb
はじめに 今回は、各種コミュニティで定期的に登場する「プライベートメソッドをテストするには、どうすればよいか?」あるいは「プライベートメソッドはテストすべきか?」という質問について考えてみたいと思います。テーマ自体は簡単ですが人によって考え方が異なり、特に海外の開発者の意見は千差万別です。最終的にこの問題は「効果的なテストケースとは何か」という問いに似ています。 プライベートメソッドは、オブジェクト指向の観点から考えられたもので、露出した関数内部にアクセスするクロージャの中に隠された関数も等しく対象となります。モジュールの外部インターフェースの背後に隠されたカプセル化されものを言います。(以下、内部実装と呼ぶ) 内部実装はテストの必要があるでしょうか?内部実装に該当するものは、直接テストケースを作成することは避け、公開された外部インターフェースを通じてのみテストしなければなりません。つまり
[Java] Integer.valueOf(127)== Integer.valueOf(127)は真か? Javaには最適化のためオブジェクトをキャッシュするロジックがあります。キャッシュロジックは、アプリケーションのパフォーマンス改善に役立ちますが、意図しない結果を発生させることがあります。さらにクリティカルな障害状況の原因にもなります。 Naresh Joshiの[Java Integer Cache – Why Integer.valueOf(127) == Integer.valueOf(127) Is True]のブログ記事内容を紹介します。Java Integer Cacheについて考えてみましょう。 インタビューで、次のような質問を受けました。 Integer a = 127; Integer b = 127; 上のような2つのIntegerオブジェクトがあります。 a
今回は、KotlinとLambda/SAMが提供している数多くの利点の中から、メモリリークの回避方法について紹介したいと思います。 Android中心に作成しましたが、一般的なJVMにも適用できるので、Java/Kotlinの開発者には参考になると思います。 本文にあるすべてのコードは、GitHubにアップされており、直接テストすることも可能です。 https://github.com/MrKarl/MemoryLeakTest.git Java、匿名クラス とメモリリーク 次のようなJavaで開発されたアクティビティがあります。 public class MyJavaLeakActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.on
Spring Bootのテスト機能を簡単にまとめました。 Spring Boot公式文書を整理したレベルですが、今後Spring Bootアプリケーションを開発、テストする方の参考になれば幸いです。 Spring Bootでテストを Spring Bootは、アプリケーションをテストできるたくさんの機能を提供しています。Spring Bootのテストモジュールは、spring-boot-testとspring-boot-test-autoconfigureがあります。ほとんどの場合は、spring-boot-starter-testだけでも十分です。spring-boot-starter-testは、Spring Bootのテストに使用されるStarterパッケージで、JUnitはもちろん、AssertJ、Hamcrestなど、さまざまなライブラリが含まれています。 主なライブラリ 既存の
ECMAScriptクラスフィールド(class field)の一覧に、プライベートフィールド(Private field)すなわちプライベートプロパティ(Private Property)(以降Private属性)があります。クラスフィールドのスペックは、Stage 3(Candidate)までアップグレードされたので、おそらくもうすぐStage 4(Finished)を経て標準スペックになるでしょう。初期の仕様文書を見たときは「ついにPrivateができるのか?」という期待感と「文法が少し変わっているな」という失望感だけで、現実味はありませんでした。時の流れとともに記憶が薄れていたところ、TypeScript3.8で正式にサポートされるというニュースを聞き、これを契機にPrivate属性について正しく学ぶことにしました。もちろん、これからはプロジェクトでも積極的に使うつもりです。Pub
概要 TOAST AppGuardでは、2020年5月にコード難読化機能を追加しました。今回はコード難読化の概念と機能について簡単に紹介したいと思います。コード難読化は、悪意を持ってアプリケーションのコードにアクセスする攻撃者からコードを保護する技術で、金融、決済、個人情報を使用するアプリには必ず適用すべき機能です。 現在は、関連するアプリのほとんどに、無料または有料のコード難読化機能を使用しています。ここで紹介するコード難読化機能と、難読化されていないコードの危険性を理解して、新規サービスのリリース時や既存サービスのセキュリティを強化する際に、お役立ていただけるとうれしいです。 コード難読化とは? コード難読化とは、ソースコードを読み取りにくくし、可読性を下げる技術です。プログラマーが開発したソースコードの重要なアイデアやデータを、リバースエンジニアリング(reverse enginee
キャッシュとしてのRedis 今回は前回お話したデータ構造について実際の活用事例を紹介する前に、キャッシュとしてのRedisについて紹介したいと思います。ほとんどのサービスでは、Redisを単なるキャッシュの用途に使用していると思いますが、このときRedisをどのように配置するかによって、システムのパフォーマンスに大きな影響を与える可能性があります。キャッシング戦略は、キャッシュされたデータの種類とそのデータへのアクセスパターンによって異なるため、ここで説明する内容がすべてのサービスに当てはまらないという点をご承知おきください。 Look Aside(= Lazy Loading) 名前からわかるように、この仕組みはキャッシュを横に置き必要なときだけデータをキャッシュにロードするキャッシュ戦略です。キャッシュはデータベースとアプリケーションの間に位置し、単純なキー・バリューの形式を保存しま
はじめに 最近まで、GoogleのクラウドプロジェクトにKubernetesクラスタを作成していましたが、有料のため金銭的なコストをかけずにマルチノードクラスタを実践できる環境を構成したいと思い、自宅にあった4台の開発ボードordroid-xu4を活用してみることにしました。 エラー発生 Dockerをセットする過程で問題が発生しました。Dockerをインストールしてテストするため、簡単にビルドしたイメージをPullで受け取りコンテナを実行したところ、以下のように失敗しました。 jaeeunyoo@skynet-201:~$ docker pull frontiersofme/py-app Using default tag: latest latest: Pulling from frontiersofme/py-app ... Status: Image is up to date f
ローカルテスト環境の限界 前回、単一PCにテスト環境を構築してテストを実行する過程を説明しました。 ローカルPC内でブラウザの自動テストを実行する場合、karma-chrome-launcherが、現在のkarmaの実行環境にインストールされたChromeブラウザを実行します。ローカルPC内で他のブラウザを同時にテストしたい場合、Firefox、Safari、Internet ExplorerやEdgeのkarma launcherを追加登録すれば、テストを実行できます。しかしこのような場合、OSXではInternet Explorerのテストが、WindowsではSafariのテストができません。 そこで今回は、ローカルPC上でテストを実行するのではなく、さまざまなOS・ブラウザ環境において、ブラウザの自動テストを行う方法を調べます。 この記事では、サンプルのテスト環境であるIntern
Postman(https://www.getpostman.com/) A powerful GUI platform to make your API development faster&easier, from building API requests through testing, documentation and sharing. Postmanは開発されたAPIをテストし、テスト結果を共有してAPI開発の生産性を高めるプラットフォームです。 Postmanを単にツールとしてではなく、プラットフォームとして導入する理由は、APIテストのみならず、昨年更新されたバージョンからCollection Sync、API Monitoringなどのチームで協業するのに役立つ機能も追加されていることです。ただし、チームで協業するためのTeam Library機能は無料で30日間試すこ
ロードバランサとは? 基本的にLBは外部から入ってきた要求に対し、内部にあるサーバーで負荷を分散する目的で使用されています。自主的に内部サーバーの状態をチェックして、サービスが不可能なサーバーへにはトラフィックを送信しない、またヘルスチェック機能をサポートするため、負荷分散だけでなく、HAの用途にも多く利用されるインフラストラクチャソリューションです。 要求フロー 外部から入ってきた要求は大きくDSR(Direct Server Return)とProxyの二つのモードのトラフィックフローを持つことができます。DSRの場合、下図のように、ユーザーからのリクエストに対して、サーバーが直接回答します。Proxyモードの場合、LBを介して回答を与えます。DSRモードでは、ロードバランサを介して回答する形がないので、ロードバランサの負荷を少なくし、応答がサーバーから直接発信する特性からProxy方
Redis? Redisは、REmote DIctionary Serverを略したものです。おそらくこの記事を読まれているほとんどの方は、Redisを使用したり聞いたりしたことがあることでしょう。 Who uses Redis? Redisはオープンソースなので、さまざまなサービスで自由に使用されています。上図からもわかるように、Airbnb、Uber、InstagramでもRedisが使用されています。TOAST File、Doorayなど、NHNの社内でも多くのチームがRedisを使用しています。昨年、Coupangで大きな障害がありましたが、その原因はRedisであることが明らかになりました。 パレートの法則(Pareto principle) ところで、パレートの法則をご存知ですか?私たちの社会で起こる現象の80%は20%の原因によって発生している、ということを意味する法則です。
2020年5月にLighthouse 6.0が正式にリリースされました。最新のChrome 84も適用される予定です。すぐに使ってみたい方は、Chrome Canary Build(カナリア)をダウンロードしてみてください。 Lighthouseの簡単な紹介 Lighthouseは、ウェブページの性能測定と改善を行うツールで、Chrome開発ツールから確認できます。私たちが作成したウェブがより速くロードされ、ユーザーとすぐに相互作用できるように、さまざまな性能指標と改善ポイントをガイドしてくれます。 このような性能測定ツールが重要なことは言うまでもありません。コンソールログを使ってみなさんのページのパフォーマンスを改善しようとすれば、すぐにお分かりになるでしょう。Lighthouseが提供する各種機能がさまざまな面において適切な情報を提供してくれます。 また、Lighthouseは単にCh
はじめに TOASTクラウドメッセージングプラットフォームサービスの1つであるPushに追加されたAPNs(Apple Push Notification service)JWT認証機能について、開発中に行った技術調査の内容を共有します。この記事は「JWTの概要」と「JWTをさらに詳しく」の2部構成になっています。「JWTの概要」では、JWTの構造や作成および検証方法について説明し、「JWTをさらに詳しく」では、JWTの特徴や使用事例について紹介します。JWTを利用した機能を開発する際や、JWTを使用する開発者の方に役立つ内容になれば幸いです。 気になった点があれば、LinkedInやGitHubからご連絡お願いいたします。 https://www.linkedin.com/in/jinho-shin-7a9b3292 https://github.com/gimbimloki JWT(J
はじめに アプリケーションを開発するとき、データのバリデーションチェックは一般的にアプリケーション全体で発生します。TOASTのメッセージングプラットフォーム商品であるNotificationは、メッセージ形式、メールアドレス形式、受信・発信者番号など、クライアントの入力値に対して多くの検証を行います。そして、入力値の検証に失敗した際には、エラーに対する原因を把握して理解しやすいようにAPIで適切にレスポンスする必要があります。このような目標を達成するため、Javaにおけるデータのバリデーションチェック標準技術であるBean Validationを採用しました。 この記事では、NHN Forward 2019で発表された、PaaS&API Developer Experience(https://youtu.be/zvuhOz8VhhI)で扱われたBean Validationの内容を文章
はじめに 今回は、Android テスティングフレームワークのRobolectricについて紹介します。 まずは簡単にAndroidのテスト種類を調べて、その後、Robolectricについて紹介していきたいと思います。 Android Test Androidで開発してみると、自然と「テスト」に目が行くようになります。Androidのテストは次の方法に大きく分けられます。 ユニットテスト(Unit Test) インストゥルメント化テスト(Instrumentation Test) ユニットテストは、文字通り「単体テスト」を意味します。テスト駆動開発(TDD、Test-Driven Development)で、「事前テスト第一」での開発をしていると、「機能単位別」にテストコードを構成して、そのテストコードを通過する実際のコードを作成したりしますね。あるいはその逆も可能です。このとき使用され
連載 LinuxサーバーのTCPネットワークのパフォーマンスを決定するカーネルパラメータ – 1編 4.ネットワークcapacity関連パラメータ 4.1 maximum file count Linuxをはじめとする一般的なUnixソケットは、まるでファイルのような扱いを受けます。 システム全体で保有できるファイル数が制限されていれば、当然ソケットの全体数にも影響を与えるでしょう。 Linuxでシステム全体が保有できる最大ファイル数は、fs.file-maxカーネルパラメータで設定します。 以下のようなコマンドで現在の設定値を確認できます。 $ sysctl fs.file-max fs.file-max = 775052 一般的に、この値は適度に大きな値が設定されているので、余程のことがない限り、修正することはないでしょう。 ただ、システムが非常に多くのファイルとソケットを使用している
(補足)logging.file.max-history File AppenderはRollingFileAppenderを使用します。ファイルのrollingポリシーがspring-boot 1.5.xまでは、SizeBasedTriggeringPolicyでファイルサイズが特定の値に達すると、新しいログファイルを残す機能のみサポートすることになっていました。そのため時間が経過したログを削除するには、サーバーから別にcrondを回すか、別途logback-spring.xmlの設定が必要でした。しかしspring-boot 2.0.0からrollingポリシーがSizeAndTimeBasedRollingPolicyに変更され、デフォルト設定でログが日別に残るようになりました。(例:spring.2018-01-01.log)logging.file.max-historyで指定し
次のページ
このページを最初にブックマークしてみませんか?
『NHN Cloud Meetup』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く