target="_blank"問題について、自分なりにまとめてみた

はじめに

「target="_balank"」がtwitterで賑わっていたので、調べてみました。
概要程度のざっくりした内容ですので、ご了承ください。

target="_balank"問題とは

「target="_blank"」が存在する場合、
「rel="noopener noreferrer"」が勝手に付与されてしまう。

なにが困るのか?

「rel="noopener noreferrer"」が付与されてしまうことが困る。
特に、「noreferrer」が問題となる。
これによってアフェリエイトで収益を得ている人が、正しく収益を得られなくなってしまう。

target="_blank"とは

  • targetとは:htmlの属性、リンクの表示先を表現する
  • _balankとは:リンクは新しいウィンドウ (タブ) に展開されるようにする設定

つまり、リンクを押下した際に、別タブで開くようにする設定されるということ。
[出典]https://reference.hyper-text.org/html5/attribute/target/

rel="noopener noreferrer"とは

  • relとは:htmlの属性、リンク先との関係を表現する
  • noopenerとは:元ページが他ページによって上書きされないようにする設定
  • noreferrerとは:リンク先に、リファラを送信しないようにする設定

つまり、リンク押下時に リファラが送られなくなるということ。
[出典]https://reference.hyper-text.org/html5/attribute/rel/

リファラとは

どのサイトから飛んで来たのかが分かる経路を示すもの。

アフェリエイトの仕組み

アフェリエイトの対象となる広告リンクから飛んで来た人が、クリックや商品の購買した場合に、広告リンクを張っている人に対してお金を払う仕組み。

まとめ

勝手に「rel="noopener noreferrer"」が付与されることによって、広告リンクから飛んで来たのか分からなくなり、正しく収益が得られなくなってしまっているのでは?ということらしい。 ただ、影響があるのは、ほんの一部みたいなので、不安になったら調べたり、問い合わせをすればいいと思います。

あとがき

上記現象は、wordpressを使っていると起こるみたい。 セキュリティの関係らしいが、詳細は不明。。。
時間が、あれば追記します。
間違っている点などがあれば、ご指摘いただけると幸いです。。。

DockerでRedmine環境構築

前提

・Dockerが、すでにインストールされていること。

はじめに

今回、docker-compose.yml作成を行います。
以下、やることの目標になります。
・Dockerを使ってRedmineを作る
プラグインを入れる

基本的な事は、公式に書いてあるので参照していただければ幸いです。
Redmine公式はこちら

ディレクトリ構成

手始めに、作業ディレクトリとして以下のように、
フォルダを作成して頂くとスムーズかと思います。

redmine
├── mysql_data
└── redmine_data
    ├── plugins
    └── themes

Dockerを使ってRedmineを作る

準備

公式のymlを参考に作ります。(バージョンの固定とポート、DBパスワードのみ修正)
以下のdocker-compose.ymlを作成すれば、ここでの作業は、完了になります。
ディレクト

redmine
├── docker-compose.yml ←追加
├── mysql_data
└── redmine_data
    ├── plugins
    └── themes

・docker-compose.yml

version: '3.1'

services:

  redmine:
    image: redmine:4.0.3
    restart: always
    ports:
      - 3000:3000
    environment:
      REDMINE_DB_MYSQL: db
      REDMINE_DB_PASSWORD: password

  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: redmine

実行

以下、コマンドを打ちます。
(完了まで少し時間が掛かると思う。)

$ cd 配置場所までのパス/redmine
$ docker-compose up

ブラウザで「localhost:3000」にアクセスしてみましょう。
見慣れたredmineの画面が表示されるはずです。
確認後、ターミナル(パワーシェル)で「ctrl + c」で停止します。

プラグインを入れる

準備

コマンドを打ち込んで入れるのも面倒なので、ローカル環境にマウントしてみましょう。
(ついでにテーマも!)
これで、入れる準備は完了です。
・docker-compose.yml

version: '3.1'

services:

  redmine:
    image: redmine:4.0.3
    restart: always
    ports:
      - 3000:3000
    environment:
      REDMINE_DB_MYSQL: db
      REDMINE_DB_PASSWORD: password
    volumes:
      - ./redmine_data/plugins:/usr/src/redmine/plugins ←追加
      - ./redmine_data/themes:/usr/src/redmine/public/themes ←追加

  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: redmine

プラグイン配置

マウントしたフォルダにプラグインを配置しましょう。

redmine
├── docker-compose.yml
├── mysql_data
└── redmine_data
    ├── plugins
    │    ├── easy_gantt ←追加
    │    └── redmine_issue_templates ←追加
    └── themes

DB作成

作成したイメージを動かしてみましょう。
おそらくエラーが出始めるので、一旦置いておきます。
(原因は、テーブルが足りないからです。)

$ cd 配置場所までのパス/redmine
$ docker-compose up

次に、別ターミナルを開きます。 以下、コマンドを実行しましょう。
(easy_ganttしか載せていませんが、プラグインのReadMeを見て必要なら他のプラグインにも実行してください。)

$ docker ps
$ docker exec -it コンテナID(一番左に表示されてる) bash
root@コンテナID:/usr/src/redmine# cd /usr/src/redmine/plugins
root@コンテナID:/usr/src/redmine# cd easy_gantt(対象プラグインのフォルダ)
root@コンテナID:/usr/src/redmine# rake redmine:plugins:migrate RAILS_ENV=production

放置していたターミナル(パワーシェル)上で、「ctrl + c」を押して停止します。
停止できたら再度、起動します。
これで、エラーが出ていなければ完了です。
お疲れ様でした。
(Redmineの画面で、プラグインが入っていることの確認を忘れずにね。)

$ docker-compose up

空のレスポンスコード200を返すには?

前提

「200」で返すには、ボディ部が必要だと思っていた。
プログラムは、画面から呼ばれるAPIで基本的にJSONを返す仕様。

はじめに

なぜ「200」で返す必要があるのか?
特に返す情報がない場合、204(=OKかつno contents)でも良いのだが、
自社プログラムにて、200だけが成功とみなされるため。
(画面側の処理が、影響しているのだろう。。。)

課題感

レスポンスコード200(=OKかつボディがある)にするために、実行結果であるJSONが不要な場合でも、「"OK"(=文字列)」をJSONで返している。(既存処理)
「イケてない。。。」とは思いつつも既存処理に倣って「"OK"」を詰めたオブジェクトをJSONに加工して返すような処理を書いていた。

施策

JAX-RS(Jersey)を使って、無駄なレスポンスを削る。
これで、200(=OKかつno contents)で返ってきます。

import javax.ws.rs.core.Response;

public Response method() {
  .
  .
  .
  return Response.ok().build();
}

こんな事できるなんてすごいなぁー(小並感

結果

無駄なオブジェクトが減らせてよかったと個人的には思ってる。
こんな事も知らなかった自分が恥ずかしい。。。

つぶやき

Dockerやドメイン駆動など、色々勉強しなくてはいけない重いものが増えてきて、中途半端になってきてる。。。 拙い記事ばかりですが、見に来て下さりありがとうございます。 なんとか整理して皆さんにお届けできるように頑張ります。

Dockerをはじめてみる。(エラー編)

はじめに

ここでは、テキストを進めた際に、起きたエラーと解決方法について記載して行こうと思う。 (原因までは、言及していないのでご了承ください。。。) 列挙形式で記入のため、分かりずらかったらコメントください。

Docker [ Adrian Mouat ]

価格:3,888円
(2019/3/11 22:07時点)

5章 開発でのDockerの利用

5.1 "Hello World!"

  • 問題箇所
[Dockerfile]

FROM python:3.4

RUN pip install Flask==0.10.1
.
.
.
  • エラー
DEPRECATION: Python 3.4 support has been deprecated. pip 19.1 will be the last one supporting it. Please upgrade your Python as Python 3.4 won't be maintained after March 2019 (cf PEP 429).
  • 解決方法
    バージョンをあげる。
FROM python:3.6

  • 問題箇所
[Dockerfile]

FROM python:3.6

RUN pip install Flask==0.10.1 uWSGI==2.0.8
.
.
.
  • エラー
requests.exceptions.ConnectionError: HTTPConnectionPool(host='dnmonster', port=8080): Max retries exceeded with url: /monster/monster.png?size=80
  • 解決方法
    バージョンをあげる。
RUN pip install Flask==0.10.1 uWSGI==2.0.18

6章 シンプルなwebアプリケーションの作成

6.2 既存のイメージ利用

  • 問題箇所
[identidock.py]

@app.route('/monster/<name>')
def get_identicon(name):
    r = requests.get('http://dnmonster:8080/monster/' + name +'?size=80')
.
.
.
  • エラー
requests.exceptions.ConnectionError: HTTPConnectionPool(host='dnmonster', port=8080): Max retries exceeded with url: /monster/monster.png?size=80
.
.
.
  • 解決方法
    ymlに追記する。
[docker-compose.yml]
.
.
.
  volumes:
    - ./app:/app
  links:
    - dnmonster

dnmonster:
  image: amouat/dnmonster:1.0

2/2_QUARKUS(Javaフレームワーク)触ってみた!(チュートリアル実行編)

はじめに

今回は、チュートリアル実行編です。 「そんなの自分でやってやるぜ!」って方に向けて、 以下に実行するチュートリアルの元URLを添付しておきます。

quarkus.io

環境構築編

環境構築大事!!
コマンド漏れなく打ってるのに、エラーになったらここを疑ってみて!
以下、リンクはWindowsの方向けに貼っておきます。
macは、「brew」使えばいいので...(脳筋

1. IDE(Javaなので、ecilpseかIntelliJ かな?)
eclipsehttp://mergedoc.osdn.jp/
IntelliJhttps://www.jetbrains.com/idea/
1. JDK 8以上
Windowshttps://qiita.com/ko2a/items/69fa8a5366d7449500ca
JAVA_HOMEの設定も忘れずに!
1. Maven or Gradle(Mavenが無難かな)
Mavenhttps://qiita.com/tarosa0001/items/e5667cfa857529900216
Gradle:https://qiita.com/vvakame/items/83366fbfa47562fafbf4
1. GraalVM
GraalVM:https://www.graalvm.org/docs/getting-started/ qiita.com

eclipseとかの入れ方は、ググっておくれ...
その他は、先駆者の方の記事をお借りします...(ありがたやー)
Gradleでのビルドは、追々やれたらいいな。。。

チュートリアル

1.Gitからクローンを落としてきます。

$ cd 保存場所
$ git clone https://github.com/quarkusio/quarkus-quickstarts.git

※ソースを落とす際に、プロジェクト名を変えないで!

2.Quarkusプロジェクトを作成します。

$ mvn io.quarkus:quarkus-maven-plugin:0.11.0:create \
    -DprojectGroupId=org.acme \
    -DprojectArtifactId=getting-started \
    -DclassName="org.acme.quickstart.GreetingResource" \
    -Dpath="/hello"

3.動作確認をします。

$ cd quarkus-quickstarts
$ cd getting-started
$ mvn compile quarkus:dev

localhostにアクセスする。
URL:http://localhost:8080

f:id:WoodPecker:20190317003130p:plain

もう一つコンソールを開き、curlを投げてみる。

$ curl http://localhost:8080/hello
hello

とりあえず今回は、ここまで!
お疲れ様でしたー

補足

プロジェクト作成時に、以下のエラーが出て焦ったけど、コマンド打つ階層を間違えてただけだったよ。。。

[ERROR] Failed to execute goal io.quarkus:quarkus-maven-plugin:0.11.0:create (default-cli) on project quickstart-projects: Unable to generate the project, the `projectGroupId`, `projectArtifactId` and `projectVersion` parameters are not supported when applied to an existing `pom.xml` file -> [Help 1]

リンク

続きはこちら↓
未作成
前回はこちら↓ woodpecker.hatenadiary.jp

1/2_QUARKUS(Javaフレームワーク)触ってみた!(導入編)

はじめに

3/7(かな?)に発表された新しいフレームワークのため、
記述内容に拙いところがありますが、ご了承ください。
quarkus.io

QUARKUSとは

サーバ関係でよく耳にするであろうredhat社が作ったJavaフレームワークです。 ( redhat社ホームページ:https://www.redhat.com/ja/global/japan )

何が嬉しいの?

  1. くそ早ええー
  2. くそ軽い!
  3. 既存のライブラリにも対応してるぜ

https://quarkus.io/assets/images/quarkus_graphics_v3_bootmem_wide_03.png

f:id:WoodPecker:20190312215818p:plain
出典:https://quarkus.io/

上記画像は、公式サイトに乗っている画像です。 メモリ使用量とアプリを起動してから最初のレスポンスが返却されるまでの時間です。(画像:上) 一目瞭然ですね。 また、画像にあるように既存の便利なライブラリも利用できるようです。(画像:下)

リンク

続きはこちら↓
woodpecker.hatenadiary.jp

Dockerをはじめてみる。

最近、流行りのDockerですよ。

会社でも使い始めたので、エンジニアとして遅れないためにも身につけておきたい。
(そんなこと言ってたらキリがないけどね。。。。)

冒頭良さげだった、安定のO’Reilly本を購入しました。

続くといいね(他人事

まぁ、これから良さげなところをぼちぼち上げていくとしよう。

Docker [ Adrian Mouat ]

価格:3,888円
(2019/3/11 22:07時点)