Webエンジニアの開発記

Webエンジニアの開発記録です。Java,SAStruts,jQuery,AmazonWebService,マッシュアップ。

GCPの「Compute Engine」と「App Engine」の違い

Compute EngineIaaSであり、
App EnginePaaSである。

 

アプリ開発者の視点から

Compute EngineはOS・ハードウェア構成のレイヤーから選択できる。
App EngineはJavaPHPPythonなどを選択すると、インフラは自動でGCP上に構成される。(後はアプリをデプロイするだけ)

 

Compute EngineはApp Engineの領域を含む。
アプリ開発者が任意のJavaプログラムを公開したい場合は、App Engineで簡単に公開できる。
しかし、OSの種類・バージョン等は選ぶことができない。
Compute Engineはインフラの知識が必要である。
そのため、アプリ開発者がインフラの勉強も兼ねてGCPを触ってみる場合は、Compute Engineから始めなければ意味がない。

 

インフラレベルから構築したい、OSやハードウェア性能含めて全てを任意に作りたい場合は、Compute Engineからスタートする。

 

AWS(Amazon Web Service)との対比

Compute EngineAWSのEC2である。
App EngineAWSのElastic Beanstalkである。

 

GCPの下記公式ドキュメントが明るい。

AWS サービスと Google Cloud Platform プロダクトの対応  |  無料試用  |  Google Cloud Platform

業務システムのクラウド開発環境 GCP,Java,Spring

再度就職することになり、次の案件の面接を受けました。
常駐先は横浜。
海・ダイビングが好きなので、東京と違い、すぐ海が見える横浜はテンションが上がります。

さて、面接ではこのようなキーワードが出てきました。

なぜAWSではないのか気になりますが、初のクラウド環境でのアプリ開発なので楽しみです。

現場入場まで2週間あるので、上記環境で簡単なアプリを作ることを目指します。

Servermans@VPS に redmineはインストールできないです

Servermans@VPSredmineはインストールできなかったです。

 

Redmine 3.2をCentOS 7.1にインストールする手順 | Redmine.JP Blog

この中段に

PassengerのApache用モジュールのインストール

というのがありますが、それができないからです。

 

なぜインストールできないかというと、httpd-develとういのがインストールできないから。

それはServermans@VPSの仮想化基盤であるOpenVZだからのようです。

 

passenger-install-apache2-module
が正常終了しないため、passenger_module(mod_passenger.so)が生成されず、redmineapacheと連携させることができないのです。

残念ですが、Servermans@VPSredmineを使うことはあきらめます。

仮想化基盤がOpenVZではなく、KVSであるさくらのVPSやお名前.comのVPSならいけるようです。

 

レンタルサーバー契約変更(DTI ServersMan@VPSにてRedmine構築失敗) | 知識日記@IT中心

とても参考になりました。

ありがとうございます。

 

 

wikipediaの中古ドメインを探したい。

wikipediaの中古ドメインを探したい。

結局何がしたかったかというとコレ。

 

wikipediaからリンク入ってるドメインは、

良い運営がされていた可能性が高い。

 

だからwikipediaからの被リンクはnofollowでも、

ドメインとしての価値は高いと思います。

 

ゆえに、wikipediaの中古ドメインを探したい。

これがしたいがためにドメイン取得可否チェックとか、

発リンクの取得とかやろうとしています。

期限切れドメインの取得可否チェックの続き

ドメインの取得可否チェックだけなら、

別に内容まで取得しなくてよい。

 

URLに接続してみて、そのステータスコードを判定すればいいだけ。

 

URLへのつ接続は、下記を使用する。

URLConnection (Java Platform SE 6)

 

openConnection メソッドを呼び出すことによって、

接続オブジェクトを生成する。

とあるから、openConnectionの結果で、

取得可否は判定できるはずだ。

 

openConnectionの結果

getResponseCodeの結果:java.net.UnknownHostExceptionが発生する

public class UnknownHostException

extends IOException

ホストの IP アドレスが判定できなかった場合にスローされます。

 

上記、openConnectionの結果がUnknownHostExceptionではなく、

openConnection後のgetResponseCodeで発生するようだ。

 

これは文句なしに取得可能。

 

 ・期限切れドメイン

肝心のいわゆる中古ドメイン

http://www.expireddomains.net/deleted-com-domains/

こういうとこでまず拾います。

 

Bikes-To-Rent.com

なんかでやるとどうなるか。

発リンク先の発リンク取得の残課題

課題1 致命的 2階層以上指定するとXPathExpressionExceptionで落ちる。

解析するDocumentがnullだから落ちている。

nullチェックで回避できそう。

できた。

 

課題2 改善  結果リストに重複あり。

 

課題はあるけど次に行きたい。

結果リストのドメイン生存確認ができるように。

 

まず結果リスト(ArrayList)の要素を単なる<String>じゃなくて、

複数要素持てるようにしよ。

 

想定する要素

・取得したURL

・取得したURLのドメイン抽出

ドメイン生存確認結果

 

取得したURLのドメイン抽出にも課題あり。

課題3 重要 サブドメインURLの場合にドメインのみ抽出できるようにする。

再帰的に発リンクを取得しようとしたら、java.util.ConcurrentModificationException

全く見たことがないException見たらワクワクしますね。

新しいことやってるな~

っていう気分になります。

 

ConcurrentModificationExceptionって出たから、

「おっ?」って思った。

と思ったらなんのこっちゃあらへん、


ArrayListの共有違反でした。

ArrayListの使い方が下手ってことね。

 

複数個所から同時にリストの中身を書き換え、

読み込んだ 場合に発生 するようです。

 

何をしたかと言うと、

とあるURLから発リンクを取得した。

 

その発リンク先(複数)からさらに発リンクをどんどん取得し、

結果を格納するArrayListにじゃんじゃんつっこんだ。

 

そうした時に複数の発リンク先の発リンクを、

同時にArrayListにつっこんだからそうなったんや。

 

結果リストを

Collections.synchronizedList(new ArrayList<String>());

によって生成することで解決。

 

って思ったら、違った。

そもそも構造が間違っていた。