React Native + Expo:ネットワークへの接続・切断を検出する

検出にはNetinfoを用います。まず、

expo install @react-native-community/netinfo

でインストールしてください。

import * as React from 'react';
import NetInfo from '@react-native-community/netinfo';
import { StyleSheet, Text, View, Alert } from 'react-native';
import { withNavigationFocus } from 'react-navigation';
import { Button } from 'react-native-elements';

class screenA extends React.Component {

  state = {
    isConnected: false,
  }

  async componentDidMount() {
    const unsubscribe = NetInfo.addEventListener( state => {
      if (this.state.isConnected && ! state.isConnected) {
        this.setState({
          isConnected: false
        });
      }
      if (!this.state.isConnected && state.isConnected) {
        this.setState({
          isConnected: true
        });
      }
    });
  }

  render () {
    if (this.state.isConnected) {
      return (
        <View>
          <Text>{'\n'}This is screen A, connected</Text>
        </View>
      );
    } else {
      return (
        <View>
          <Text>{'\n'}This is screen A, NOT connected</Text>
        </View>
      );
    }
  }
}

export default withNavigationFocus(screenA);

React Native + Expo:AppLoadingで数秒待つ

当初、こんな書き方をしていました:

  render() {

    if (!this.state.isReady) {
      return (
        <AppLoading
          startAsync={this._dummyPromise}
          onFinish={ () => this.setState( { isReady: true }) }
          onError={console.warn}
        />
      )
    }
<中略>
  async _dummyPromise() {
    let delay = new Promise( (resolve, reject) => {
      let wait = setTimeout( () => {
        clearTimeout(wait);
        resolve("Delay executed");
      }, 3000);
    });
    return delay;
  }

参考ソース:https://italonascimento.github.io/applying-a-timeout-to-your-promises/

こちらのほうが簡潔に書けます:

  render() {

    if (!this.state.isReady) {
      return (
        <AppLoading
          startAsync={this._dummyPromise}
          onFinish={ () => this.setState( { isReady: true }) }
          onError={console.warn}
        />
      )
    }

<中略>
  async _dummyPromise() {
    await new Promise(resolve => setTimeout(resolve, 3000));
  }

参考ソース:https://qiita.com/suin/items/99aa8641d06b5f819656

AWS:EC2のボリュームを拡張する

CentOS7で稼働しているマシンのルートFSの容量が足りなくなったので、拡張してみました。

  1. コンソールにログインし、インスタンス一覧から拡張したいインスタンスを選びます。
  2. Descriptionにボリュームが表示されているのでクリックします:

f:id:thebaker:20190912201402p:plain

  1. EBS-IDをクリックします
  2. ActionsからModify Volumeを選択

f:id:thebaker:20190912201445p:plain

  1. サイズを変更しModifyをクリック

f:id:thebaker:20190912201537p:plain

  1. ログインしlsblkで拡張結果を確認します

  2. パーティション情報の変更

/dev/sdaと1の間はスペースが入ります:

growpart /dev/sda 1
  1. ファイルシステムのタイプを確認
df -Th
  1. ボリュームサイズの拡張

XFSの場合

xfs_growfs /dev/xvda1

EXT4の場合

resize2fs /dev/xvda1
  1. 結果を確認
df -h

IE11:ajaxで構文エラー

以下のコードが構文エラーを吐いて悩んでいました:

    $.ajax({
      type: 'POST',
      url:  '/get-products',
      dataType:'json',
      cache: false,
    })
    .then(
      function (data) {
          // なんらかの処理
      },
      function () {
          // なんらかの処理
      }, // ここのカンマを削除する必要がある
    );

2つ目のfunction()の終わりのカンマを削除したらエラーが消えました

AWS:【和訳】本日の東京リージョンの大規模障害の原因

EC2に関しては「ほとんど」のインスタンスとボリュームが復旧したようですね。 以下が掲載されていました:

[04:18 AM PDT] Beginning at 8:36 PM PDT a small percentage of EC2 servers in a single Availability Zone in the AP-NORTHEAST-1 Region shutdown due to overheating. This resulted in impaired EC2 instances and degraded EBS volume performance for resources in the affected area of the Availability Zone. The overheating was caused by a control system failure that caused multiple, redundant cooling systems to fail in parts of the affected Availability Zone. The chillers were restored at 11:21 PM PDT and temperatures in the affected areas began to return to normal. As temperatures returned to normal, power was restored to the affected instances. By 2:30 AM PDT, the vast majority of instances and volumes had recovered. We have been working to recover the remaining instances and volumes. A small number of remaining instances and volumes are hosted on hardware which was adversely affected by the loss of power. We continue to work to recover all affected instances and volumes. For immediate recovery, we recommend replacing any remaining affected instances or volumes if possible. Some of the affected instances may require action from customers and we will be reaching out to those customers with next steps.

以下、手抜きですが和訳です:

日本時間の8月23日の12:36分に、AP-NORTHEAST-1リージョンの1つのAZにおける一部のEC2がオーバーヒートによりシャットダウン。同AZ内のEC2の障害とEBSのパフォーマンス低下につながった。オーバーヒートの原因は同AZ内の制御システムの故障を起因とした複数の、冗長化された冷却システムの故障。冷却システムは15:21に復旧し、影響を受けていた箇所の温度が元に戻り始めた。温度が戻るにつれて、影響を受けたインスタンスへの電源の供給が復帰。18:30にはほとんどのインスタンスとボリュームが復帰。以降、障害が残るインスタンスとボリュームの復帰作業に取り掛かった。ほげ。これら残りの、ごくわずかのインスタンスとボリュームは電源の供給ロスから強い影響を受けた。これらのインスタンスとボリュームの復旧は継続中。即時の復旧を行う場合は、こういったインスタンス・ボリュームから他のインスタンス・ボリュームへの載せ替えを推奨する。これらのインスタンスの復旧にはお客様の強力が必要な場合があり、次のステップとしてそれらのお客様に連絡をする。