寝ても覚めてもこんぴうた

プログラム書いたり、ネットワーク設計したり、サーバ構築したり、車いじったり、ゲームしたり。そんなひとにわたしはなりたい。 投げ銭は kyash_id : chidakiyo マデ

Macでトラックパッドをダブルタップした際に選択状態にする

f:id:chidakiyo:20200506221509j:plain

マックで文章を選択したい場合、トラックパッドをダブルタップ(ダブルクリック)で単語を選択状態にしたり、
トリプルタップ(トリプルクリック)をして1行まるっと選択状態にしたりという使い方ができますが、
新しくMacを買ったら設定がされていなかったためとても困って調べたのでメモです。

文字の上でダブルクリックするだけでこの画像のような感じに選択できる機能ですね。 f:id:chidakiyo:20200507084259p:plain

設定方法

設定方法はアクセシビリティの中にあります。(ずっとトラックパッドの設定を探していた・・・)

f:id:chidakiyo:20200506220943p:plain

ポインタコントロールトラックパッドオプションを選択します。

f:id:chidakiyo:20200506221017p:plain

ドラッグを有効にする にチェックを入れ、 ドラッグロックあり を選択します。

f:id:chidakiyo:20200506221050p:plain

基本的にこれで設定が有効になります。

落とし穴

自分の場合には上記設定をしてもうまく選択状態にならず困っていましたが、
原因はクリック速度(ダブルクリック間隔)が最速になっていました・・・

右端ではなく、少し左側に持ってくることでクリック間隔が遅くても反応するので、トリプルクリックの間隔など、個人の使いやすい設定に調整するととても良さそうです。

f:id:chidakiyo:20200506221235p:plain

ではではー

STUN / TURN / ICE とかってなんの略?(WebRTCに関する用語)

f:id:chidakiyo:20200429003356j:plain

略がわからないと単語わからなくなるのでメモ

STUN (Session Traversal Utilities for NAT)
TURN (Traversal Using Relay around NAT)
ICE (Interactive Connectivity Establishment)
SDP(Session Description Protocol)
MCU(Multipoint Control Unit)
SFU(Selective Forwarding Unit)

なるほど、これでスッキリ

ブラウザでCSVファイルをダウンロードしようとするとブラウザで開いてしまう (GCS編)

f:id:chidakiyo:20200424144928j:plain

ファイルのダウンロード機能など作成することがよくあると思いますが、
Chromeだとファイルとしてダウンロードができるのに、Safarだと何故かブラウザ上でダウンロードしたいファイルを展開してしまう。
そんな事ありますよね。

何が必要か

答えをいきなり書くと、 Content-Disposition ヘッダーが必要。
デフォルト値は inline (ブラウザでそのまま展開)になっているようです。(MDNによると)

以下のようなパラメータの設定パターンがあります

Content-Disposition: inline
Content-Disposition: attachment
Content-Disposition: attachment; filename="filename.jpg"

ファイルとしてダウンロードさせ、その際のファイル名を指定する場合には一番下のパラメータがヘッダーに含まれている必要があります。

GCSではどのように設定するのか

こちらの図のように、GCS内に格納されているオブジェクトのメタデータを選択し、 Content-Disposition に対し必要な項目を入力します。

f:id:chidakiyo:20200424144718p:plain

参考資料

https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Content-Disposition

ではでは。

Mac OS 10.15 (Catalina) にOracle JDKを複数インストールして管理する方法

f:id:chidakiyo:20200406111529j:plain

MacJDKをインストールすることって開発者の人であればまぁまぁあることだと思いますが
確定申告などでJDK 8(JREでよいが)など古いバージョンが必要、などと言われることがありますよね。

そんな場合にCatalinaに複数のOracle Javaをインストールして管理する方法があります。
(これの他にも方法がありますが、OS標準で用意されているのはこちらになります)

Oracle JDKを普通にパッケージでインストールする

このへんOracleのサイトから各バージョンのJDKのダウンロードが行えます。
今回は、JDK1.8(Java SE 8)と、JDK11(Java SE 11)をインストールする例でやってみます。
その他のバージョンをインストールする場合も同様のイメージです。

  • Java SE 8 をダウンロードする(インストーラ付きのものを選択しましょう、拡張子が.dmgのものです)
  • Java SE 8 をインストールする

インストールはダブルクリックするだけなので特に詳細は書きません。
ダブルクリックしてインストーラをポチポチするだけです。

同様に、

  • Java SE 11 をダウンロードする(同様に拡張子が.dmgのもの)
  • Java SE 11 をインストールする

Javaを切り替える仕組みを用意する

切り替える仕組みは /usr/libexec/java_home を利用します。

Catalinaの場合標準シェルがzshになっているはずなので、 .zshrc ファイルを修正し、設定を適用します。

Java SE 8 を利用する場合

export JAVA_HOME=`/usr/libexec/java_home -v 1.8`

Java SE 11 を利用する場合

export JAVA_HOME=`/usr/libexec/java_home -v 11`

いい具合に使い分ける場合

以下のように利用していないバージョンをコメントアウトしておくと良いと思います。

#export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
export JAVA_HOME=`/usr/libexec/java_home -v 11`

まとめ

とくにまとめに書くこともないですが、
つい1ヶ月ほど前に新しいMacをかって、このMacにはいつまでJavaを入れずに我慢できるかという誰得の試みをひっそりとやっていたのですが、確定申告というイベントのためにインストールせざるを得なくなり、なんか古臭いJavaをインストールする羽目になったり悲しいですね。

Javaを10年以上書いてきましたが(Scalaも合わせるとJVMとの付き合いは長い)、最近はJVM要らないんじゃないかなどと過激なことを思いつつ。

書くことないと言いながら適当なことを書きましたが
Oracle JDKの場合にはこの方法で良いですがOpenJDKなどと混在する場合には他のツールを使ったほうが良いみたいです。

ではでは。

GitHub Actions で job や step 単位で条件での実行を行う

f:id:chidakiyo:20200226154149j:plain

こんにちは、GitHub Actionsつかってますか?

GitHub Actions は workflow(yamlファイル) 単位で柔軟に条件の指定ができます。

たとえば

on:
  push:
    branches:
      - 'master'
    paths: 
      - 'go/*'

こんな感じであれば、goディレクトリ配下のファイルに変更があるmasterへのpushがあった場合に実行されます。

workfrlow単位ではなく、その中の job や step といった条件でも特定の条件での実行の可否のコントロールができます。
それを下記していきます。

job 単位での実行の可否

jobs.<JOB_NAME>.if という記述が可能です。

手っ取り早く例を書くと以下のような記述になります。

jobs:
  hoge-job:
    name: hoge-job
    runs-on: ubuntu-latest
    if: "contains( github.ref , '/feat/hoge')"
    steps:

条件は、ブランチが feat/hoge にマッチする際にjobを実行します。

steps 単位での実行の可否

jobと同様にstepsに対してもifの記述が行なえます。
jobs.<JOB_NAME>.steps.if となり、例は以下のようになります。

jobs:
  hoge-job:
    name: hoge-job
    runs-on: ubuntu-latest
    steps::

    ~~ snip ~~

      - name: Set up Go 1.13
        uses: actions/setup-go@v1
        with:
          go-version: 1.13
        id: go
        if: "contains( github.ref , '/feat/foo')"

ブランチが /feat/foo に一致する場合に指定した steps を実行します。

参考

Workflow syntax for GitHub Actions - GitHub Help

Workflow syntax for GitHub Actions - GitHub Help

Contexts and expression syntax for GitHub Actions - GitHub Help

enjoy!

メールを送る(mailto)のリンクから起動したメーラーにSubjectやBodyを入れた状態にする

f:id:chidakiyo:20200204111707j:plain

Webコンテンツのリンクから、メーラーを起動したいケースもあると思いますが、
メーラーで起動した際に、 件名(Subject), 本文(Body)、CCとかも入っていると最高ですよね。
それ、できます!!

この記事は @yukinagae からの提供情報記事です。

HTML(mailto)の場合

aタグで以下のように定義します。

<a href="mailto:to_user@example.com?cc=cc_user@example.com&subject=【重要!】とても大事なメールタイトル&body=とても大事なメール本文">メールはこちらから</a>

このようなタグをhtmlとして用意すると、、
こんな感じの表示になります。

f:id:chidakiyo:20200204111001p:plain

これをクリックしてみるとメーラが立ち上がり、以下のように初期値が設定されます

f:id:chidakiyo:20200204111101p:plain

スクショは省略しますが、iPhoneでも同様にメーラーを起動することができました。

項目の説明

自明ではありますが一応書いておきます。

  • mailto: 直後は to(送信先)のアドレス
  • cc : ccですね
  • subject : 件名です
  • body : 本文

書いてて思ったけどこれは別に悩みませんねww

ではでは。

ElasticsearchをDocker(compose)で気軽に起動してみる

f:id:chidakiyo:20200127192442j:plain

Elasticsearchの振る舞いを気軽に確認したい場合、Docker(compose)で環境を作成すると非常に便利そうだったので、Macのローカルでdocker-composeで動くElasticsearchを構築してみた。

Dockerfile を作成する

ElasticsearchサーバのDockerのイメージを作成する。
日本語を利用する場合には kuromoji をインストールしたほうが良いのでインストールまで行う。

日本語を利用しない場合にはこのコンテナを作成するステップは不要かと思う。

FROM docker.elastic.co/elasticsearch/elasticsearch:7.5.1
RUN elasticsearch-plugin install analysis-kuromoji

docker-compose.yml を作成する

以下のようなファイルを docker-compose.yml というファイル名で作成する

version: '3'
services:
  es01:
    build: .
    container_name: es01
    environment:
      - node.name=es01
      - discovery.seed_hosts=es02
      - cluster.initial_master_nodes=es01,es02
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - esdata01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - esnet
  es02:
    build: .
    container_name: es02
    environment:
      - node.name=es02
      - discovery.seed_hosts=es01
      - cluster.initial_master_nodes=es01,es02
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - esdata02:/usr/share/elasticsearch/data
    networks:
      - esnet

volumes:
  esdata01:
    driver: local
  esdata02:
    driver: local

networks:
  esnet:

container を build する

composeファイルがあると以下のコマンドでbuildできる

docker-compose build

Elasticsearch クラスタを起動する

以下のコマンドで起動

docker-compose up -d

done のような表示が出ればok。

curl経由で動作確認をする

Elasticsearch は 9200 番ポートで起動している。

動作確認のため、以下のようなコマンドを実行する

curl -X GET http://localhost:9200/

エラーにならず、jsonのレスポンスが返ってくれば成功。

かんたんですね

おまけ

docker-composeを停止する場合には

停止(消さない)

docker-compose down

停止(きれいに消す)

docker-compose down --rmi all

でok.