キャッシュでRedisがMemcachedに勝る理由

MemcachedまたはRedis?これは、最新のデータベース駆動型Webアプリケーションからより多くのパフォーマンスを引き出すことについての議論で、ほとんど常に発生する質問です。パフォーマンスを改善する必要がある場合、多くの場合、キャッシュが最初のステップであり、MemcachedまたはRedisが最初に使用する場所です。 これらの有名なキャッシュエンジンには多くの類似点がありますが、重要な違いもあります。2つの中でより新しく、より用途の広いRedisは、ほとんどの場合、優れた選択肢です。 キャッシュ用のRedisとMemcached 類似点から始めましょう。 MemcachedとRedisはどちらも、メモリ内のKey-Valueデータストアとして機能しますが、Redisはデータ構造ストアとしてより正確に記述されています。 MemcachedとRedisはどちらもデータ管理ソリューションのNoSQLファミリーに属しており、どちらもKey-Valueデータモデルに基づいています。どちらもすべてのデータをRAMに保持するため、もちろんキャッシュレイヤーとして非常に便利です。パフォーマンスの点でも、2つのデータストアは非常に類似しており、スループットと遅延に関してほぼ同じ特性(およびメトリック)を示します。 MemcachedとRedisはどちらも成熟しており、非常に人気のあるオー

続きを読む

Java開発者のための関数型プログラミング、パート1

Java 8は、Java開発者にラムダ式を使用した関数型プログラミングを紹介しました。このJavaリリースは、Javaプログラミングについて、命令型のオブジェクト指向の観点からのみ考えるだけではもはや十分ではないことを開発者に効果的に通知しました。Java開発者は、宣言型関数型パラダイムを使用して考え、コーディングできる必要もあります。 このチュートリアルでは、関数型プログラミングの基本について説明します。用語から始めて、関数型プログラミングの概念を掘り下げます。最後に、5つの関数型プログラミング手法を紹介します。これらのセクションのコード例では、純粋関数、高階関数、遅延評価、クロージャ、およびカリー化を開始できます。 関数型プログラミングは増加しています 米国電気電子学会(IEEE)は、2018年の上位25のプログラミング言語に関数型プログラミング言語を含めました。GoogleTrendsは現在、関数型プログラミングをオブジェクト指向プログラミングよりも人気があるとランク付けしています。 明らかに、関数型プログラミングは無視できませんが、なぜそれがより一般的になっているのですか?特に、関数型プログラミングを使用すると、プログラムの正当性を簡単に検証できます。また、並行プログラムの作成を簡素化します。同時実行(または並列処理)は、アプリケーションのパフォーマンスを向上させるため

続きを読む

OOPでの関連付け、集約、および構成の説明

統一モデリング言語(UML)は、オブジェクト指向システムをモデリングするための事実上の標準です。UMLには、関連付け、集約、構成、依存関係、継承の5種類の関係があります。この記事では、これらの概念の最初の3つについて説明し、残りの概念は別のブログ投稿に残します。 オブジェクト指向プログラミングにおける関連 アソシエーションは、他の点では無関係なオブジェクト間の意味的に弱い関係(意味的な依存関係)です。アソシエーションは、2つ以上のオブジェクト間の「使用」関係であり、オブジェクトには独自の存続期間があり、所有者は存在しません。 例として、医師と患者の関係を想像してみてください。医師は複数の患者と関連付けることができます。同時に、1人の患者が治療または相談のために複数の医師を訪問することができます。これらのオブジェクトにはそれぞれ独自のライフサイクルがあり、「所有者」や親は存在しません。関連付け関係の一部であるオブジェクトは、個別に作成および破棄できます。 UMLでは、関連付け関係は1つの矢印で表されます。アソシエーション関係は、1対1、1対多、または多対多(カーディナリティとも呼ばれます)として表すことができます。基本的に、2つ以上のオブジェクト間の関連付け関係は、1つのオブジェクトが別のオブジェクトにメッセージを送信できるように、それらの間の通信パス(リンクとも呼ばれる)を示し

続きを読む

Ubuntu18.04へのOracleJava SE11のインストール

この記事は、現在の長期サポート(LTS)JavaバージョンであるJava11をインストールするUbuntuLinuxユーザー向けのクイックガイドです。コードベースをJava11に移行する場合を簡単に説明し、Ubuntuコマンドラインを使用してOracle JDK11をインストールする手順を説明します。 これは、Java 11をインストールするUbuntuユーザー向けのクイックガイドであることに注意してください。Java11の機能や移行の問題については、他の場所で十分に説明されているので、あまり深く掘り下げません。 Java11に移行する場合 2014年3月にリリースされたJava8は、Java開発へのより現代的なアプローチを約束しました。この傾向は2017年も続き、Oracleがより速い開発リズムを発表し、以前のリリース間でJavaSEが停滞することを可能にしていたオールオアナッシングアプローチを破棄しました。 長期サポートが予定されているJavaリリースは少ないため、注意を払うことが重要です。Oracleに関する限り、非常に愛されているJava 8はすでにゴミ箱に入っており、Java9とJava10も同様です。これらのバージョンは引き続き使用できますが、積極的に更新またはサポートされていません。 [参照:Ubuntu Linux18.10「CosmicCuttlefish」

続きを読む

Julia vs. Python:データサイエンスに最適なのはどれですか?

Pythonがカバーする多くのユースケースの中で、データ分析はおそらく最大かつ最も重要になっています。Pythonエコシステムには、科学計算とデータ分析の作業を迅速かつ便利にするライブラリ、ツール、およびアプリケーションがロードされています。 しかし、特に「科学計算、機械学習、データマイニング、大規模線形代数、分散並列計算」を目的としたJulia言語の背後にいる開発者にとって、Pythonは十分に高速でも便利でもありません。Juliaは、科学者やデータアナリストに、迅速で便利な開発だけでなく、驚異的な実行速度を提供することを目指しています。  Julia言語とは何ですか? Juliaは、2009年に4人のチームによって作成され、2012年に一般に公開されました。これは、Pythonや、科学計算やデータ処理に使用されるその他の言語やアプリケーションの欠点に対処することを目的としています。「私たちは貪欲です」と彼らは書いた。彼らはもっと欲しかった:  リベラルなライセンスを備えたオープンソースの言語が必要です。Rubyのダイナミズムを備えたCのスピードが必要です。Lispのような真のマクロを持ちながら、Matlabのような明白で馴染みのある数学表記を備えた同像性の言語が必要です。Pythonのように一般的なプログラミングに使用でき、Rのように統計が簡単で、Per

続きを読む

機械学習とは何ですか?データから得られるインテリジェンス

機械学習の定義 機械学習は、データからモデルを自動的に作成するためのメソッドまたはアルゴリズムを含む人工知能のブランチです。明示的なルールに従ってタスクを実行するシステムとは異なり、機械学習システムは経験から学習します。ルールベースのシステムは毎回同じ方法でタスクを実行しますが(良くも悪くも)、アルゴリズムをより多くのデータに公開することで、トレーニングを通じて機械学習システムのパフォーマンスを向上させることができます。 機械学習アルゴリズムは、多くの場合に分けている教師(トレーニングデータが答えでタグ付けされている)と、教師なし(存在する可能性がある任意のラベルが学習アルゴリズムには表示されません)。教師あり機械学習の問題は、分類(住宅ローンの支払いを逃す確率などの非数値の回答を予測する)と回帰(マンハッタンストアで来月販売されるウィジェットの数などの数値の回答を予測する)にさらに分けられます。 教師なし学習はさらに、クラスタリング(ランニングシューズ、ウォーキングシューズ、ドレスシューズなどの類似したオブジェクトのグループの検索)、関連付け(コーヒーやクリームなどのオブジェクトの一般的なシーケンスの検索)、および次元削減(投影、特徴選択)に分けられます。、および特徴抽出)。 機械学習の応用 機械学習のアプリケーションについては日常的に耳にしますが、すべてが非合金の成功であ

続きを読む

Javaをゼロから学ぶ

それで、あなたはJavaでプログラムしたいですか?それは素晴らしいことです、そしてあなたは正しい場所に来ました。Javaの101シリーズは、基本から始まり、あなたが生産性のJava開発者になるために知っておく必要があるすべてのコアな概念をカバーし、Javaプログラミングへのセルフガイド紹介しています。このシリーズは技術的なものであり、概念を理解するのに役立つコード例がたくさんあります。Javaだけでなく、プログラミングの経験があることを前提としています。 この最初の記事では、Javaプラットフォームを紹介し、Java SE、Java EE、およびJavaMEの3つのエディションの違いについて説明します。また、JavaアプリケーションのデプロイにおけるJava仮想マシン(JVM)の役割についても学習します。Javaプログラムを開発して実行できるように、システムにJava Development Kit(JDK)をセットアップするのを手伝って、典型的なJavaアプリケーションのアーキテクチャーを始めましょう。最後に、単純なJavaアプリをコンパイルして実行する方法を学習します。 Java12および新しいJShell用に更新 このシリーズはJava12用に更新されており、Javajshellを学習してJavaコードのプロトタイピングを行うためのインタラクティブなツールである新しいものの

続きを読む

レビュー:VirtualBox5.0とVMwareWorkstation 11

OracleVirtualBoxとVMwareWorkstationは、数年前からそれを公開しています。VirtualBoxはリングの「フリーでオープンソース」のコーナーを占めていますが、VMwareWorkstationは独自の商用アプリケーションです。価格については、ワークステーションは一般的に機能とパフォーマンスをリードしていると同時に、他のVMware仮想化ラインとの緊密な統合も提供しています。 ただし、基本的に、2つの製品は非常に似ています。どちらもWindowsまたはLinuxホストで実行され、Windows、Linux、およびUnixの幅広いゲストをサポートします。 (VirtualBoxはOS Xでも動作しますが、VMwareはFusion for Macを提供しています。)VirtualBoxとWorkstationの両方で、大規模なVMと複雑な仮想ネットワークを作成できます。どちらも、保存できる限り多くのVMのスナップショットを作成でき、VM間を移動するためのグラフィカルなタイムラインを提供します。どちらもリンククローンをサポートしており、VMのコピーをスナップショットに基づいてディスクスペースを節約します。 つまり、VirtualBoxとWorkstationは、デスクトップ上で仮想マシンを実行するための最も有能な方法です。バージョン5.0では、Virtual

続きを読む

Java 9はここにあります:あなたが知る必要があるすべて

Java 9(正式にはJava Platform Standard Editionバージョン9)がついに登場し、開発者はそのJava Development Kit(JDK)をダウンロードできるようになりました。 物議を醸す新機能がいくつかありますが、古いスタイルのJava配信の最後の行でもあります。 Java 9JDKをダウンロードする場所 Oracleは、開発者がダウンロードできるようにJava SE 9JDKとドキュメントを投稿しています。 Java9の主な新機能 Java SE 8のほぼ3年後にデビューした、Java SE 9には、いくつかの重要なアーキテクチャの変更と、多くの改善があります。 Java9のモジュール性はゲームチェンジャーです Project Jigsawに基づく新しい、物議を醸すモジュール性機能は、より保守的なショップがモジュール性が成熟するのを待つことを決定したとしても、JDK9が今提供しなければならないものを見たい最先端のJavaショップの興味をそそるに違いありません。 モジュール性(Java Platform Module Systemの形式)は、JDKをモジュールのセットに分割して、実行時、コンパイル時、またはビルド時に結合します。モジュール性は「推移的な」変更と呼ばれ、モジュール間の依存関係を理解できるようにします。 Java 9の

続きを読む

Rでグループごとに数える方法

複数のグループによるカウント(クロス集計レポートと呼ばれることもあります)は、世論調査から医療検査に至るまでのデータを調べるのに便利な方法です。たとえば、人々は性別や年齢層ごとにどのように投票しましたか?RとPythonの両方を使用するソフトウェア開発者の数は男性と女性ですか? Rのカテゴリでこの種のカウントを行う方法はたくさんあります。ここでは、私のお気に入りのいくつかを共有したいと思います。 この記事のデモでは、Stack Overflow Developers調査のサブセットを使用します。この調査では、給与から使用されているテクノロジーに至るまで、数十のトピックについて開発者を調査します。使用する言語、性別、およびそれらが趣味としてコーディングされているかどうかの列を使用して、それを絞り込みます。また、開発者がR、Python、またはその両方を使用して報告したかどうかについて、独自のLanguageGroup列を追加しました。 フォローしたい場合は、この記事の最後のページに、私が使用しているのと同じデータセットを取得するためにデータをダウンロードして整理する方法についての説明があります。 データには、調査回答ごとに1つの行があり、4つの列はすべて文字です。 str(mydata) 'data.frame':83379obs。4つの変数の:$ Gender:chr "Ma

続きを読む

Web開発者を苛立たせるものは何ですか?ウェブブラウザー

2019年の後半にMozillaがウェブプラットフォーム、ツール、機能の経験について調査した開発者はほとんど満足していましたが、いくつかの欠点、特にブラウザサポートの問題を挙げていました。 全体として、59.8%がウェブに満足していると報告し、16.3%は非常に満足しています。6.8%だけが不満で、2.2%が非常に不満でした。これらの調査結果は、世界中の28,000人を超えるWeb開発者および設計者からのインプットを利用したMDN Web DNA(Developer Needs Assessment)レポート2019の一部でした。 MDN Web DNA Report 2019は、Webプラットフォームの将来を形作ることを目的とした、Web開発者とデザイナーのニー

続きを読む

Javaでアサーションを使用する方法

実行時に正しく機能するプログラムを作成するのは難しい場合があります。これは、実行時にコードがどのように動作するかについての仮定が間違っていることが多いためです。Javaのアサーション機能を使用することは、プログラミングロジックが適切であることを確認する1つの方法です。 このチュートリアルでは、Javaアサーションを紹介します。最初に、アサーションとは何か、およびそれらをコードで指定して使用する方法を学習します。次に、アサーションを使用して前提条件と事後条件を適用する方法を説明します。最後に、アサーションと例外を比較し、コードで両方が必要な理由を確認します。ダウンロードコードを入手するこのチュートリアルの例のソースコードをダウンロードします。JavaWorld用にJeffFriesenによって作成されました。 Javaアサーションとは何ですか? JDK 1.4より前は、開発者はコメントを使用して、プログラムの正当性に関する仮定を文書化することがよくありました。ただし、コメントは、仮定をテストおよびデバッグするためのメカニズムとしては役に立ちません。コンパイラはコメントを無視するため、バグ検出にコメントを使用する方法はありません。また、開発者はコードを変更するときにコメントを更新しないことがよくあります。   JDK 1.4では、コードに関する仮定をテストおよ

続きを読む

EJBとは何ですか?EnterpriseJavaBeansの進化

Enterprise JavaBeans(EJB)は、Javaプラットフォーム上で大規模な分散ビジネスアプリケーションを開発するための仕様です。EJB1.0は1998年にリリースされました。最新のリリースであるEJB3.2.3がJakartaEEに含まれるように採用され、Jakarta EnterpriseBeansに名前が変更されます。 EJBアーキテクチャ EJBアーキテクチャは、エンタープライズBean(EJB)、EJBコンテナ、およびJavaアプリケーションサーバーの3つの主要コンポーネントで構成されています。EJBはEJBコンテナ内で実行され、EJBコンテナはJavaアプリケーションサーバー内で実行されます。 EJBには、セッションBeanとメッセージ駆動型Beanの2種類があります。 セッションBeanはクライアントによって呼び出され、トランザクションやリソース管理などのエンタープライズ機能をクライアントがプログラムで利用できるようにします。 メッセージ駆動型Beanもエンタープライズ機能をカプセル化して提供しますが、非同期でイベント駆動型です。メッセージ駆動型Beanはイベントをリッスンして応答し、クライアントから呼び出すことはできません。 EJBシステムで永続性を提供するために使用されると、エンティティBeanはJava PersistenceAPI

続きを読む

Javaでのクラスとオブジェクトの初期化

Javaのクラスとオブジェクトは、使用する前に初期化する必要があります。クラスがロードされるときにクラスフィールドがデフォルト値に初期化され、オブジェクトがコンストラクターを介して初期化されることを以前に学びましたが、初期化にはまだまだあります。この記事では、クラスとオブジェクトを初期化するためのJavaのすべての機能を紹介します。ダウンロードコードを取得するこのチュートリアルのサンプルアプリケーションのソースコードをダウンロードします。JavaWorld用にJeffFriesenによって作成されました。 Javaクラスを初期化する方法 クラス初期化に対するJavaのサポートについて説明する前に、Javaクラスを初期化する手順を要約してみましょう。リスト1を検討してください。 リスト1.クラスフィールドをデフォルト値に初期化する class SomeClass { static boolean b; static byte by; static char c; static double d; static float f; static int i; static long l; static short s; static String st; } リスト1はクラスを宣言していSomeClassます。このクラスは、種類の9つのフィールドを宣言しboolean、byte、

続きを読む

Kubernetesとは何ですか?次のアプリケーションプラットフォーム

Kubernetesは、コンテナオーケストレーション、つまり、コンテナと呼ばれる複数の大部分が自己完結型のランタイムから構築されたアプリケーションの管理に人気のあるオープンソースプラットフォームです。2013年にDockerコンテナ化プロジェクトが開始されて以来、コンテナの人気はますます高まっていますが、大規模な分散コンテナ化アプリケーションの調整はますます困難になる可能性があります。コンテナ化されたアプリケーションを大規模に管理しやすくすることで、Kubernetesはコンテナ革命の重要な部分になりました。 コンテナオーケストレーションとは何ですか? コンテナは、VMのような関心の分離をサポートしますが、オーバーヘッドがはるかに少なく、柔軟性がはるかに高くなります。その結果、コンテナは、ソフトウェアの開発、展開、および保守についての人々の考え方を一新しました。コンテナ化されたアーキテクチャでは、アプリケーションを構成するさまざまなサービスが個別のコンテナにパッケージ化され、物理マシンまたは仮想マシンのクラスタ全体に展開されます。しかし、これにより、コンテナーオーケストレーション(コンテナーベースのアプリケーションの展開、管理、スケーリング、ネットワーキング、および可用性を自動化するツール)が必要になります。 Kubernetesとは何ですか? Kubernetesはオープンソ

続きを読む

Javaポリモーフィズムとそのタイプ

ポリモーフィズムとは、いくつかのエンティティがさまざまな形で発生する能力を指します。それは、幼虫から蛹、成虫へと変化する蝶によって一般的に表されます。ポリモーフィズムは、さまざまなオペランド、引数、およびオブジェクトへの単一のインターフェイスを作成できるモデリング手法として、プログラミング言語にも存在します。Javaポリモーフィズムにより、コードがより簡潔になり、保守が容易になります。 このチュートリアルはサブタイプのポリモーフィズムに焦点を当てていますが、知っておくべき他のタイプがいくつかあります。まず、4種類すべてのポリモーフィズムの概要から始めます。ダウンロードコードを取得するこのチュートリアルのサンプルアプリケーションのソースコードをダウンロードします。JavaWorld用にJeffFriesenによって作成されました。 Javaのポリモーフィズムの種類 Javaには4つのタイプのポリモーフィズムがあります。 強制は、暗黙的な型変換を通じて複数の型を処理する操作です。たとえば、整数を別の整数で除算したり、浮動小数点値を別の浮動小数点値で除算したりします。一方のオペランドが整数で、もう一方のオペランドが浮動小数点値の場合、コンパイラーは、型エラーを防ぐために整数を浮動小数点値に強制(暗黙的に変換)します。(整数オペランドと浮動小数点オペランドをサポートする除算演算は

続きを読む

Javaのデータ構造とアルゴリズム、パート4:単一リンクリスト

このチュートリアルシリーズのパート3で紹介した配列と同様に、リンクリストは、より複雑なデータ構造の基礎となる基本的なデータ構造カテゴリです。ただし、要素のシーケンスとは異なり、リンクリストはノードのシーケンスであり、各ノードはシーケンス内の前のノードと次のノードにリンクされます。ノードは自己参照クラスから作成されたオブジェクトであり、自己参照クラスには、参照タイプがクラス名であるフィールドが少なくとも1つあることを思い出してください。リンクリスト内のノードは、ノード参照を介してリンクされます。次に例を示します。 class Employee { private int empno; private String name; private double salary; public Employee next; // Other members. } この例でEmployeeは、nextフィールドのタイプがであるため、は自己参照クラスEmployeeです。このフィールドは、そのクラスの別のオブジェクト(この場合は別のオブジェクト)への参照を格納できるため、リンクフィールドの例ですEmployee。 このチュートリアルでは、Javaプログラミングにおける単一リンクリストの詳細を紹介します。単一リンクリストの作成、単一リンクリストへのノードの挿入、単一リンクリストからのノードの削除、

続きを読む

Dockerとコンテナーを使用する理由

1981年に出版された本、  Nailing Jelly to a Treeは、ソフトウェアを「曖昧でしっかりと把握するのが難しい」と説明しています。それは1981年に真実であり、それ以来40年近くも真実です。ソフトウェアは、購入したアプリケーションであろうと、自分で作成したアプリケーションであろうと、展開、管理、実行が困難なままです。 Dockerコンテナーは、ソフトウェアを把握する方法を提供します。Dockerを使用して、アプリケーションのデプロイとランタイムの問題(ネットワーク上での公開方法、ストレージとメモリとI / Oの使用の管理方法、アクセス許可の制御方法)が処理されるようにアプリケーションをラップできます。アプリケーション自体の外部で、すべての「コンテナ化された」アプリ間で一貫した方法で。Dockerコンテナーは、DockerランタイムがインストールされているOS互換ホスト(LinuxまたはWindows)で実行できます。 Dockerには、この便利なカプセル化、分離、移植性、および制御以外にも、多くの利点があります。Dockerコンテナーは小さい(メガバイト)。彼らは即座に始まります。それらには、バージョン管理とコンポーネントの再利用のための独自の組み込みメカニズムがあります。これらは、パブリックDockerHubまたはプライベートリポジトリを介して簡単に

続きを読む

Mavenとは何ですか?Javaのビルドと依存関係の管理

Apache Mavenは、Java開発の基礎であり、Javaで最も使用されているビルド管理ツールです。Mavenの合理化されたXMLベースの構成モデルにより、開発者はJavaベースのプロジェクトの概要を迅速に記述または把握できるため、新しいプロジェクトの開始と共有が簡単になります。Mavenは、テスト駆動開発、長期プロジェクトメンテナンスもサポートしており、その宣言型構成と幅広いプラグインにより、CI / CDの人気のあるオプションとなっています。この記事は、Maven POMとディレクトリ構造、および最初のMavenプロジェクトを構築するためのコマンドを含むMavenの簡単な紹介です。 この記事の執筆時点での最新のMavenリリースはMaven3.6.3であることに注意してください。 Maven vs Ant and Gradle MavenはJavaエコシステムの唯一のビルドツールではありませんが、最も人気のあるツールです。以前の世代のXMLベースの構成ツールであるAntには、Mavenの標準化された規則ベースのプラクティスと依存関係管理がありませんが、Mavenにはない柔軟性を提供します。Gradleは、(Mavenのリポジトリを使用して)Mavenエコシステム上で実行される新しいツールですが、構成にGroovyベースまたはKotlinベースのDSLを使用することをサポー

続きを読む

Javaでの継承、パート1:extendsキーワード

Javaは、継承と構成を通じてクラスの再利用をサポートします。この2部構成のチュートリアルでは、Javaプログラムで継承を使用する方法を説明します。パート1では、extendsキーワードを使用して親クラスから子クラスを派生させ、親クラスのコンストラクターとメソッドを呼び出し、メソッドをオーバーライドする方法を学習します。パート2java.lang.Objectでは、他のすべてのクラスが継承するJavaのスーパークラスであるツアーを行います。 継承についての学習を完了するには、コンポジションと継承をいつ使用するかを説明しているJavaのヒントを確認してください。コンポジションが継承を補完する重要な理由と、それを使用してJavaプログラムでのカプセル化の問題を防ぐ方法を学習します。ダウンロードコードを取得するこのチュートリアルのサンプルアプリケーションのソースコードをダウンロードします。JavaWorld用にJeffFriesenによって作成されました。 Javaの継承:2つの例 継承は、ソフトウェア開発者がi

続きを読む