ASi このページをアンテナに追加 RSSフィード

2018/06/14 Thursday

ワンデーアキュビューオアシス

http://d.hatena.ne.jp/ashura156/20161119


便利な酸素透過率比較表

http://xn--pckhws0c8nsbe1081ezo9b.jp/%E9%85%B8%E7%B4%A0%E9%80%8F%E9%81%8E%E7%8E%87%E3%83%A9%E3%83%B3%E3%82%AD%E3%83%B3%E3%82%B0/


含水率の話

http://eye-space.jp/topics/topics_moisturecontent/


イオン性と非イオン性

http://refrear.jp/eyeknowledge/%E3%82%B3%E3%83%B3%E3%82%BF%E3%82%AF%E3%83%88%E3%83%AC%E3%83%B3%E3%82%BA%E3%81%AE%E5%90%AB%E6%B0%B4%E7%8E%87%E3%81%A8%E3%82%A4%E3%82%AA%E3%83%B3%E3%81%AE%E8%A9%B1/


トータルワンは汚れはつきにくくて装用感が良い。ただちょっと視界が少し安定しない。滲む感じがするというか、若干フォーカスが甘い感じがするというか。


今回はワンデーアキュビューオアシスにしてみよう。


酸素透過がトータルワンよりちょっと悪いのが気になるけど、グループ1は乾きにくく汚れにくいそうだ。< http://nocontact-nolife.com/1day-acuvue-oasys/


含水率が2ウィークメニコンプレミオの40に近い38%なのは大丈夫かなー

トータルワンは中心含水率 33だったのに比べると少し高い。


レンズモードで送税込み\5,960

https://www.lensmode.com/


BC/DIA(8.5/14.3) PWR(-5.25)

これまでは右のPWR -5.5 にしていたが、今回は同じにした。

(バイオフィニティは BC/DIA(8.6/14.0) だった


ワンデーアキュビューオアシス

メーカー ジョンソンエンドジョンソン

タイプ 1day

グループ 1(非イオン性低含水)

度数範囲(D) +5.00 ~ +0.50、±0.00、-0.50 ~ -6.00(0.25step)-6.50 ~ -12.00(0.50step)

素材 シリコーンハイドロゲル

枚数(1箱あたり) 30枚/90枚

含水率 38%

Dk(酸素透過係数) 103

DK/L(酸素透過率) 121

CT(レンズ中心厚) 0.085mm

BC(ベースカーブ) 8.5mm

DIA(レンズ直径) 14.3mm

UVカット 有り

[]Cognito の user attribute の admin権限での変え方

CLI:

aws cognito-idp admin-update-user-attributes --user-pool-id ap-northeast-1_XXXXXXXXX --username someone --user-attributes Name=email,Value=someone@somewhere.com --profile xxxxxxxx --region ap-northeast-1

[]最近勝手にログアウトする。

作業が失われたりブラウザ皆閉じられたりしてとても困る。

http://help.duetdisplay.com/faq/124748-duet-was-running-and-i-got-logged-out-of-my-mac

にある

$ defaults write com.apple.dock expose-animation-duration -float 0

$ killall Dock

をためしてみた。

どうなるか。

2018/06/13 Wednesday

[]Cognito の user attribute の admin権限での変え方

CLI:

aws cognito-idp admin-update-user-attributes --user-pool-id ap-northeast-1_XXXXXXXXX --username someone --user-attributes Name=email,Value=someone@somewhere.com --profile xxxxxxxx --region ap-northeast-1

[]最近勝手にログアウトする。

作業が失われたりブラウザ皆閉じられたりしてとても困る。

http://help.duetdisplay.com/faq/124748-duet-was-running-and-i-got-logged-out-of-my-mac

にある

$ defaults write com.apple.dock expose-animation-duration -float 0

$ killall Dock

をためしてみた。

どうなるか。

2018/05/01 Tuesday

[]epoc ミリ秒 <-> 日付文字列 変換

epoc milli seconds <-> date string transform

milli sec -> date string

ruby -e 'puts Time.at(1514764800, 000000).getutc'

2018-01-01 00:00:00 UTC


node -p 'new Date(1514764800000)'

2018-01-01T00:00:00.000Z


date string -> milli sec

ruby -e 't=Time.new(2018,01,01,00,00,00,"+00:00"); puts t.to_i*1000 + t.nsec*1000'

1514764800000


node -p 'new Date("2018-01-01 00:00:00Z").getTime()'

1514764800000

2018/04/26 Thursday

[]Slack の記事をコマンドラインで取得

Get messages on Slack by command line / terminal.


https://api.slack.com/custom-integrations/legacy-tokens で token 作成


https://api.slack.com/methods/search.all を使用。


パラメータ query の内容は下記を参考に。

https://get.slack.help/hc/ja/articles/202528808-Slack-%E5%86%85%E3%82%92%E6%A4%9C%E7%B4%A2%E3%81%99%E3%82%8B

const TOKEN = 
  "PUT TOKEN HERE";

// Usage
// node slackget.js [desc]

var http = require('https');

var DESC;
process.argv.find(function(e){
  if (e == "desc"){
    DESC = true;
  }
});

let page = 1;
var start = new Date(Date.now() - 4 * 24 * 3600 * 1000);
var startDate = dateTimeStr(start).slice(0, 10);
console.log("get from " + startDate);

getMessages();


function getMessages(){

  http.get(
    'https://slack.com/api/search.all?token=' + TOKEN + 
    '&page=' + page + 
//    '&query=after%3Ayesterday&sort=timestamp', (res) => 
    '&query=after%3A' + startDate + '&sort=timestamp', (res) => 
  {
    const { statusCode } = res;
    const contentType = res.headers['content-type'];

    let error;
    if (statusCode !== 200) {
      error = new Error('Request Failed.\n' +
                        `Status Code: ${statusCode}`);
    } else if (!/^application\/json/.test(contentType)) {
      error = new Error('Invalid content-type.\n' +
                        `Expected application/json but received ${contentType}`);
    }
    if (error) {
      console.error(error.message);
      // consume response data to free up memory
      res.resume();
      return;
    }

    res.setEncoding('utf8');
    let rawData = '';
    res.on('data', (chunk) => { rawData += chunk; });
    res.on('end', () => {
      try {
        processResult(JSON.parse(rawData));
      } catch (e) {
        console.error(e.message);
      }
    });
  }).on('error', (e) => {
    console.error(`Got error: ${e.message}`);
  });
}

var list;

function processResult(json){
  //console.log(json);
  console.log("page=" + page);
  if (!list){
    list = json.messages.matches;
  }else{
      list = list.concat(json.messages.matches);
  }
  
  if (json.messages.paging.pages != page){
    ++page;
    getMessages();
    
  }else{
    // got all pages
    list.sort(function(a,b){
      if (a.ts > b.ts) {return DESC ? -1 : 1;}
      if (a.ts < b.ts) {return DESC ? 1 : -1;}
      return 0;
    });
  
    list.forEach(function(e){
      //console.log(e);
      console.log(
        dateTimeStr(new Date(e.ts * 1000)) + " " + e.channel.name + " " + 
        e.username);
      var text = e.text.replace("&gt;", ">");
      console.log(text);
      console.log('');
    });
  }
}

function dateTimeStr(date){
  let padm = ''; 
  let padd = '';
  let padh = '';
  let padmin = '';
  let pads = '';
  let month = date.getMonth() + 1;
  if (month < 10){
    padm = 0;
  }
  if (date.getDate() < 10){
    padd = 0;
  }
  if (date.getHours() < 10){
    padh = 0;
  }
  if (date.getMinutes() < 10){
    padmin = 0;
  }
  if (date.getSeconds() < 10){
    pads = 0;
  }
  return date.getFullYear() + '/' + 
    padm + month + '/' + 
    padd + date.getDate() + ' ' +
    padh + date.getHours() + ':' + 
    padmin + date.getMinutes() + ':' +
    pads + date.getSeconds();
}

2018/04/15 Sunday

[] E/G オイル TOTAL QUARTZ 7000 15W 50 調達

送税込み8Lで\11,088

このショップ https://store.shopping.yahoo.co.jp/vigoras/

2018/03/27 Tuesday

[] DynamoDB を local PC で動かす

下記から落として動かす。簡単。

https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/DynamoDBLocal.html


だが落とし穴もある。


README.txt には


$ java -Djava.library.path=./DynamoDocal_lib -jar DynamoDBLocal.jar


とあるが、これだとなぜか Java API ではテーブルが見つからない、などとハマる。


下記のように -sharedDb をつけると良い。AWSRegion 等に応じて別の DB

を作らず単一のスコープとなる。


$ java -Djava.library.path=./DynamoDocal_lib -jar DynamoDBLocal.jar -sharedDb


ref:

https://stackoverflow.com/a/29560004/306488

2018/03/21 Wednesday

日立の炊飯器 RZ-AX10M

展示品を2万で買ったのだが、これの情報がいやにネットで少ない。2017製なのに。なぜだろう。

RZ-AV100M の前機種なのだと思うが。

2018/03/09 Friday

[]Cognito を Javascript から使う実験

https://dev.classmethod.jp/cloud/aws/login-form-by-using-aws-sdk-for-javascript/ はとても参考になったが、記事が使っているAWSのJavascript向けSDKが古かった。そこで公式の https://github.com/aws/aws-amplify/blob/master/packages/amazon-cognito-identity-js/README.md を参照しつつ v1.32.0 時点の仕様で動くようにして試してみた。


amazon-cognito-identity.min.js は 2018/3/9 現在最新の下記リビジョン。

https://github.com/aws/aws-amplify/blob/62f7f2e365a1b4b99e9ebdf55e30199121afa19b/packages/amazon-cognito-identity-js/dist/amazon-cognito-identity.min.js


なお csshttps://codepen.io/Lewitje/pen/BNNJjo のものを使わせてもらったが、無くても Cognito の確認には支障ない。

js/common.js

下記のID類を Cognito の管理画面か Admin API で作成して揃えておく。

var AWS_REGION = 'ap-northeast-1';
var COGNITO_IDENTITY_POOL_ID = 'ap-northeast-1:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx';
var COGNITO_USER_POOL_ID = 'ap-northeast-1_XXXXXXXXX';
var COGNITO_CLIENT_ID = 'xxxxxxxxxxxxxxxxxxxxxxxxxx';
var COGNITO_IDP = 
    'cognito-idp.' + AWS_REGION + '.amazonaws.com/' + COGNITO_USER_POOL_ID;

login.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Login</title>
        <link rel="stylesheet" href="css/style.css">
  </head>
  <body>
    <div class="wrapper">
      <div class="container">
        <h1 class="msg">Welcome</h1>
 
        <form class="form">
            <input type="text" placeholder="Username" id="name">
            <input type="password" placeholder="Password" id="password">
            <button type="submit" id="login-button">Login</button>
        </form>
 
      </div>
    </div>

    <script src="js/amazon-cognito-identity.min.js"></script>
    <script src="https://sdk.amazonaws.com/js/aws-sdk-2.5.2.min.js"></script>
    <script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
 
    <script src="js/common.js"></script>
    <script src="js/login.js"></script>
 
  </body>
</html>

js/login.js

newPasswordRequired に管理コンソール上でアカウント作成した場合の強制パスワード変更の実装を簡易にしてある。


// js client では ClientID に client secret が生成されていると動作しない

AWS.config.region = AWS_REGION;
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
    IdentityPoolId: COGNITO_IDENTITY_POOL_ID,
});

var CognitoUserPool = AmazonCognitoIdentity.CognitoUserPool;

var poolData = { UserPoolId: COGNITO_USER_POOL_ID,
                 ClientId: COGNITO_CLIENT_ID,
                 Paranoia : 7
};
 
var userPool;
var cognitoUser;

$("#login-button").click(function(event){ 
    event.preventDefault();
	
    var authenticationData = {
        Username : $('#name').val(),
        Password : $('#password').val()
    };
	
    var authenticationDetails = new 
	    AmazonCognitoIdentity.AuthenticationDetails(authenticationData);
    var userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData);
	var userData = {
        Username : $('#name').val(),
        Pool : userPool
       };
	   
    cognitoUser = new AmazonCognitoIdentity.CognitoUser(userData);
    cognitoUser.authenticateUser(authenticationDetails, {
		onSuccess: function (authresult) {
             var url = "mypage.html";
             $('form').fadeOut(700, function(){
                $(location).attr("href", url);
             });
             $('.wrapper').addClass('form-success'); 
        },
        onFailure: function(err) {
            console.log('onFailure');
            alert('msg='+ err.message);
        },
        mfaRequired: function(codeDeliveryDetails) {
            // MFA is required to complete user authentication.
            // Get the code from user and call
            cognitoUser.sendMFACode(mfaCode, this)
        },
        newPasswordRequired: function(userAttributes, requiredAttributes) {            
            // User was signed up by an admin and must provide new
            // password and required attributes, if any, to complete
            // authentication.

            console.log('newPasswordRequired');
            console.log(userAttributes, requiredAttributes);

            // the api doesn't accept this field back
            delete userAttributes.email_verified;

            // これらの必要性はUserPoolの設定による
            userAttributes.address='a';
            userAttributes.given_name='b'; 
            userAttributes.family_name='c';
            userAttributes.middle_name='d';
            // phone number はこの形式の必要がある
            userAttributes.phone_number='+818012345678';

            console.log(userAttributes);

            // Get these details and call
            cognitoUser.completeNewPasswordChallenge('0101abab', userAttributes, this);
        }
    });
});

mypage.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>mypage</title>
        <link rel="stylesheet" href="css/style.css">
  </head>
  <body>
    <div class="wrapper">
      <div class="container">
        <div class="mypage">
          <h1>mypage</h1>
          <div id="username">Username: XXXXX</div>
          <div id="email">EMail: XXXXX</div>
        </div>
      </div>
    </div>

    <script src="js/amazon-cognito-identity.min.js"></script>
    <script src="https://sdk.amazonaws.com/js/aws-sdk-2.5.2.min.js"></script>
    <script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
    
    <script src="js/common.js"></script>
    <script src="js/mypage.js"></script>
 
  </body>
</html>

js/mypage.js


// js client では ClientID に client secret が生成されていると動作しない

AWS.config.region = AWS_REGION;
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
    IdentityPoolId: COGNITO_IDENTITY_POOL_ID,
});

var CognitoUserPool = AmazonCognitoIdentity.CognitoUserPool;

var poolData = { UserPoolId: COGNITO_USER_POOL_ID,
                 ClientId: COGNITO_CLIENT_ID,
                 Paranoia : 7
};

var userPool;
var cognitoUser;
	
var authenticationData = {
    Username : $('#name').val(),
    Password : $('#password').val()
};

var authenticationDetails = new 
    AmazonCognitoIdentity.AuthenticationDetails(authenticationData);

var userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData);
var userData = {
    Username : $('#name').val(),
    Pool : userPool
};

// これがポイント
cognitoUser = userPool.getCurrentUser();
	
if (cognitoUser != null) {
    cognitoUser.getSession(function(err, sessresult) {
        if (sessresult) {
            console.log('You are now logged in.');
            cognitoUser.getUserAttributes(function(err, attrresult) {
                if (err) {
                    alert(err);
                    return;
                }
                $("#username").html("Username: " + cognitoUser.username);
 
                for (i = 0; i < attrresult.length; i++) {
                    if (attrresult[i].getName()=="email"){
                      $("#email").html("EMail: " + attrresult[i].getValue());
                    }
                }
 
                // Add the User's Id Token to the Cognito credentials login map.
                AWS.config.credentials = new AWS.CognitoIdentityCredentials({
                    IdentityPoolId: COGNITO_IDENTITY_POOL_ID,
                    Logins: {
                        COGNITO_IDP: sessresult.getIdToken().getJwtToken()
                    }
                });
            });
        } else {
           var url = "login.html";
           $(location).attr("href", url);
        }
    });
} else {
  var url = "login.html";
  $(location).attr("href", url);
}

2018/02/16 Friday

[] Dali の @JoinColumn / @PrimaryKeyJoinColumn

EclipseLink が There should be one non-read-only mapping defined for the primary key field と言って来る場合、多分まず間違いなく Dali の Entity class の自動生成が PK に対して @PrimaryKeyJoinColumn を生成すべきところを @JoinColumn を生成するために起きている。


orm.xml で Entity 定義を下記のような感じで上書きしてやると自動生成クラスを改変せず対処できる。

<entity-mappings>
  <entity name="ATable" class="model.ATable">
    <attributes>
      <one-to-one name="ForeignTable">
        <primary-key-join-column name="id"/>
      </one-to-one>
    </attributes>
  </entity>
</entity-mappings>

2018/02/11 Sunday

OHM LED電球

今日交換。パッケージにある40000時間保つかな?

2018/02/08 Thursday

[] mysqldump

schema dump, DB指定

mysqldump -h 127.0.0.1 -P 3306 -u root -proot DatabaseName --routines --no-data --skip-add-drop-table


DB全て

mysqldump -h 127.0.0.1 -P 3306 -u root -proot --all-databases --routines --no-data --skip-add-drop-table

2018/01/28 Sunday このエントリーを含むブックマーク このエントリーのブックマークコメント

2018/01/24 Wednesday

家の中の結露が凍るほど寒い今朝

f:id:ashura156:20180125065542j:image

2017/12/29 Friday

今年が終わるなぁ

辛い年だった。ほんと。

2017/12/19 Tuesday

[]Code Deploy の log

lifecycle hook の実行時 log 等は:

/opt/codedeploy-agent/deployment-root/deployment-logs/codedeploy-agent-deployments.log


codedeploy-agent の実行時 log は:

/var/log/aws/codedeploy-agent/codedeploy-agent.log

2017/12/08 Friday

Slack にポストされるメッセージを Zapier で email に転送する

これ自体は Zapier だけで実現できるのだが、如何せん Zapier の無料枠が少なすぎて只とは行かない。


しかし、slack ってなんでそう流行ってるのかね。mailer と slack と両方見ないといけなくて、単純に無駄に時間を費やすんだけど。おまけに重いし。

2017/12/06 Wednesday

[]Simple Email Service (SES)

Simple Email Service (SES) のページで Identity Management / Email Adresses

に送り元(from) に使うアドレスを登録する必要がある。登録依頼するとそのアドレスに確認URLが送られて来、踏むと登録される。


IAM Policy に下記権限が要る。

{
   "Version": "2012-10-17",
   "Statement": [
       {
           "Effect": "Allow",
           "Action": [
               "ses:SendRawEmail",
               "ses:SendEmail"
           ],
           "Resource": "*"
       }
   ]
}

コマンドラインだと簡単にはこれで送れる。

aws --region us-west-2 ses send-email --from someonefrom@somewhere.com --to someoneto@somewhere.com --subject "test title" --text "test"

2017/12/03 Sunday

りゅうせーいがー きらーりー とんでいるー

随分前からこの歌が頭でグルグル回るんだけど、なんの曲だろう。

スプーンおばさんと関係がありそうなんだけどなぁ

昨日までのおしゃべりが どうしてなのか わんだーらん りゅうせーいがー きらーりー とんでいるー

2017/11/29 Wednesday

日立のドラム洗濯機 BD−SV100AL

8月頭に15万でゲット。

半月経ったら練馬の電気屋で14万台だったなー


順調によく乾き働いている。

2017/11/27 Monday

[]コマンドラインからチェック

conf の文法確認

httpd -t -D DUMP_VHOSTS


conf の設定内容の一部表示

httpd -S


ロードされているmoduleのリスト

httpd -M

[]apache で VirtualHost

sudo vi /etc/apache2/httpd.conf

して下記のコメントアウトを外す

#LoadModule vhost_alias_module libexec/apache2/mod_vhost_alias.so

どこかの conf に下記のように書く

Listen 60080

<VirtualHost *:60080>
  ProxyPass /somewhere/ http://www.somewhere.com
</VirtualHost>

[]VirtualHost と Location の関係

Location を VirtualHost の中に書けば、その内容は該当の VirtualHost にだけ効く。

Listen 60080

<VirtualHost *:60080>
  ProxyPass /somewhere/ http://www.somewhere.co.jp
  <Location /somewhere/>
    AuthType       Basic
    AuthName       "OSXLogin"
    AuthUserFile   /etc/apache2/users/passwords
    Require        valid-user
  </Location>
</VirtualHost>

これを例えば下記のようにしていると、

Listen 60080

<VirtualHost *:60080>
  ProxyPass /somewhere/ http://www.somewhere.co.jp
</VirtualHost>

<Location /somewhere/>
    AuthType       Basic
    AuthName       "OSXLogin"
    AuthUserFile   /etc/apache2/users/passwords
    Require        valid-user
</Location>

port 80 でも 60080 でも somewhere に Basic auth が掛かる。しかし、ProxyPass は 60080 にしか設定していないので、auth に通過した後で NotFound になる。


仮に 80 を public、60080 を private のような使い分けをする場合に、public の 80 の Basic auth が攻撃の糸口にならないとも限らないので、注意が必要。

2017/11/17 Friday

[]CLI での RDS MySQLインスタンスの作り方

DB の ParameterGroup はあらかじめ作っておく。下記では "DBParameterGroupName": "db-1" の db-1。

DBName は MySQL では省略できる。

create-db-instance.json

{
    "DBName": "ADatabase", 
    "DBInstanceIdentifier": "db-1", 
    "AllocatedStorage": 5, 
    "DBInstanceClass": "db.t2.micro", 
    "Engine": "mysql", 
    "MasterUsername": "root", 
    "MasterUserPassword": "1234567890", 
    "VpcSecurityGroupIds": [
        "sg-12345678",
    ], 
    "AvailabilityZone": "us-west-1a", 
    "DBSubnetGroupName": "main-subnet", 
    "PreferredMaintenanceWindow": "tue:01:00-tue:02:00", 
    "DBParameterGroupName": "db-1", 
    "BackupRetentionPeriod": 7, 
    "PreferredBackupWindow": "19:00-20:00", 
    "Port": 3306, 
    "MultiAZ": false, 
    "EngineVersion": "5.7.17", 
    "AutoMinorVersionUpgrade": true, 
    "LicenseModel": "general-public-license", 
    "OptionGroupName": "default:mysql-5-7", 
    "PubliclyAccessible": false, 
    "Tags": [
        {"Key": "owner", "Value": "someone"},
        {"Key": "workload-type", "Value": "development"}
    ], 
    "StorageType": "gp2", 
    "StorageEncrypted": false, 
    "CopyTagsToSnapshot": false, 
    "EnableIAMDatabaseAuthentication": false
}

$ aws --profile someone rds create-db-instance --cli-input-json file://`pwd`/create-db-instance.json


なぜか OSX では "file://" が要る。

成功すると下記の様な出力が得られる。

{
    "DBInstance": {
        "PubliclyAccessible": false, 
        "MasterUsername": "root", 
        "MonitoringInterval": 0, 
        "LicenseModel": "general-public-license", 
        "VpcSecurityGroups": [
            {
                "Status": "active", 
                "VpcSecurityGroupId": "sg-12345678"
            }
        ], 
        "CopyTagsToSnapshot": false, 
        "OptionGroupMemberships": [
            {
                "Status": "in-sync", 
                "OptionGroupName": "default:mysql-5-7"
            }
        ], 
        "PendingModifiedValues": {
            "MasterUserPassword": "****"
        }, 
        "Engine": "mysql", 
        "MultiAZ": false, 
        "DBSecurityGroups": [], 
        "DBParameterGroups": [
            {
                "DBParameterGroupName": "db-1", 
                "ParameterApplyStatus": "in-sync"
            }
        ], 
        "AutoMinorVersionUpgrade": true, 
        "PreferredBackupWindow": "19:00-20:00", 
        "DBSubnetGroup": {
            "Subnets": [
                {
                    "SubnetStatus": "Active", 
                    "SubnetIdentifier": "subnet-12345678", 
                    "SubnetAvailabilityZone": {
                        "Name": "us-west-1a"
                    }
                }
            ], 
            "DBSubnetGroupName": "main-subnet", 
            "VpcId": "vpc-12345678", 
            "DBSubnetGroupDescription": "Main subnet", 
            "SubnetGroupStatus": "Complete"
        }, 
        "ReadReplicaDBInstanceIdentifiers": [], 
        "AllocatedStorage": 5, 
        "DBInstanceArn": "arn:aws:rds:us-west-1:111122223333:db:db-1", 
        "BackupRetentionPeriod": 7, 
        "DBName": "ADatabase", 
        "PreferredMaintenanceWindow": "tue:01:00-tue:02:00", 
        "DBInstanceStatus": "creating", 
        "IAMDatabaseAuthenticationEnabled": false, 
        "EngineVersion": "5.7.17", 
        "AvailabilityZone": "us-west-1a", 
        "DomainMemberships": [], 
        "StorageType": "gp2", 
        "DbiResourceId": "db-XXXXXXXXXXXXXXXXXXXXXXXXXX", 
        "CACertificateIdentifier": "rds-ca-2015", 
        "StorageEncrypted": false, 
        "DBInstanceClass": "db.t2.micro", 
        "DbInstancePort": 0, 
        "DBInstanceIdentifier": "db-1"
    }
}

2017/11/04 Saturday

[]ブレーキパッド調達

ぼちぼちなので。

以前156TSで使ってみてなんの問題も無いのでDixcel。

yahoo で Premium タイプ F 2513092 / R 2551685 を送税込\19,872


Dixcel のサイト

http://www.dixcel.co.jp/sx/e36.php?enode=11381011113110111111011-111-131-100-&ts=sports&qry=ALFAROMEO%20GT%20#n0111

2017/11/01 Wednesday

[]mysql_upgrade

DB performance_schema の Table session_variables が無いと言って MySQLWorkbench

が接続拒否られるので調べてみて、DB の更新が必要らしいことがわかった。

sudo mysql_upgrade -u root -p

sudo service mysqld restart

これで治った。

2017/10/30 Monday

[]サンバイザー調達

購入時から右側助手席のサンバイザーの付け根が折れており、差し込みの締め込み圧だけで止まっており、時々グッと差し込んでやらないと外れる状態なので、いい加減調達することにした。

もっと早くしていればGT向けに鏡が大きくなったものを見つけられたかもしれないが、諦めて147のものを買うことにした。型番は一致するのでつけられるはず。

ebayイギリス業者から送税込 £28.99 \4442 paypal

多分船便で12月着


現車についていた型番は B288 937 DX 2 (2 DX かも知れず)

f:id:ashura156:20171001155109j:image

f:id:ashura156:20171001154933j:image

2017/10/28 Saturday

[]舵角一杯で右折すると左前輪からカランがらんと

音がする。6月にオイル交換してからな気がする。その時にタイヤも外しているが、何の音なのか…

2017/10/10 Tuesday

2017/09/27 Wednesday

[]CLIOSXへのインストール

下記に説明がある。

http://docs.aws.amazon.com/ja_jp/streams/latest/dev/kinesis-tutorial-cli-installation.html

install pip

$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 1558k  100 1558k    0     0  2371k      0 --:--:-- --:--:-- --:--:-- 2371k

$ sudo python get-pip.py
Password:
The directory '/Users/someone/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
The directory '/Users/someone/Library/Caches/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Collecting pip
  Downloading pip-9.0.1-py2.py3-none-any.whl (1.3MB)
    100% |████████████████████████████████| 1.3MB 1.1MB/s 
Collecting wheel
  Downloading wheel-0.30.0-py2.py3-none-any.whl (49kB)
    100% |████████████████████████████████| 51kB 9.3MB/s 
Installing collected packages: pip, wheel
Successfully installed pip-9.0.1 wheel-0.30.0


install awscli

Amazaon の説明通りではエラーになった。同件↓

https://saku.io/failed-to-install-awscli-on-mac/

$ sudo pip install awscli
The directory '/Users/someone/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
The directory '/Users/someone/Library/Caches/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Collecting awscli
  Downloading awscli-1.11.156-py2.py3-none-any.whl (1.2MB)
    100% |████████████████████████████████| 1.2MB 1.2MB/s 
Collecting PyYAML<=3.12,>=3.10 (from awscli)
  Downloading PyYAML-3.12.tar.gz (253kB)
    100% |████████████████████████████████| 256kB 4.6MB/s 
Collecting rsa<=3.5.0,>=3.1.2 (from awscli)
  Downloading rsa-3.4.2-py2.py3-none-any.whl (46kB)
    100% |████████████████████████████████| 51kB 10.7MB/s 
Collecting docutils>=0.10 (from awscli)
  Downloading docutils-0.14-py2-none-any.whl (543kB)
    100% |████████████████████████████████| 552kB 2.5MB/s 
Collecting botocore==1.7.14 (from awscli)
  Downloading botocore-1.7.14-py2.py3-none-any.whl (3.7MB)
    100% |████████████████████████████████| 3.7MB 358kB/s 
Collecting s3transfer<0.2.0,>=0.1.9 (from awscli)
  Downloading s3transfer-0.1.11-py2.py3-none-any.whl (54kB)
    100% |████████████████████████████████| 61kB 11.4MB/s 
Collecting colorama<=0.3.7,>=0.2.5 (from awscli)
  Downloading colorama-0.3.7-py2.py3-none-any.whl
Collecting pyasn1>=0.1.3 (from rsa<=3.5.0,>=3.1.2->awscli)
  Downloading pyasn1-0.3.6-py2.py3-none-any.whl (63kB)
    100% |████████████████████████████████| 71kB 11.2MB/s 
Collecting jmespath<1.0.0,>=0.7.1 (from botocore==1.7.14->awscli)
  Downloading jmespath-0.9.3-py2.py3-none-any.whl
Collecting python-dateutil<3.0.0,>=2.1 (from botocore==1.7.14->awscli)
  Downloading python_dateutil-2.6.1-py2.py3-none-any.whl (194kB)
    100% |████████████████████████████████| 194kB 6.0MB/s 
Collecting futures<4.0.0,>=2.2.0; python_version == "2.6" or python_version == "2.7" (from s3transfer<0.2.0,>=0.1.9->awscli)
  Downloading futures-3.1.1-py2-none-any.whl
Collecting six>=1.5 (from python-dateutil<3.0.0,>=2.1->botocore==1.7.14->awscli)
  Downloading six-1.11.0-py2.py3-none-any.whl
Installing collected packages: PyYAML, pyasn1, rsa, docutils, jmespath, six, python-dateutil, botocore, futures, s3transfer, colorama, awscli
  Running setup.py install for PyYAML ... done
  Found existing installation: six 1.4.1
    DEPRECATION: Uninstalling a distutils installed project (six) has been deprecated and will be removed in a future version. This is due to the fact that uninstalling a distutils project will only partially uninstall the project.
    Uninstalling six-1.4.1:
Exception:
Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/pip/basecommand.py", line 215, in main
    status = self.run(options, args)
  File "/Library/Python/2.7/site-packages/pip/commands/install.py", line 342, in run
    prefix=options.prefix_path,
  File "/Library/Python/2.7/site-packages/pip/req/req_set.py", line 778, in install
    requirement.uninstall(auto_confirm=True)
  File "/Library/Python/2.7/site-packages/pip/req/req_install.py", line 754, in uninstall
    paths_to_remove.remove(auto_confirm)
  File "/Library/Python/2.7/site-packages/pip/req/req_uninstall.py", line 115, in remove
    renames(path, new_path)
  File "/Library/Python/2.7/site-packages/pip/utils/__init__.py", line 267, in renames
    shutil.move(old, new)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 302, in move
    copy2(src, real_dst)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 131, in copy2
    copystat(src, dst)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 103, in copystat
    os.chflags(dst, st.st_flags)
OSError: [Errno 1] Operation not permitted: '/tmp/pip-7JcVq_-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/six-1.4.1-py2.7.egg-info'


下記で前掲のページの解決策に従い成功。pip への指示が違う。

$ sudo -H pip install awscli --upgrade --ignore-installed six
Password:
Collecting awscli
  Using cached awscli-1.11.156-py2.py3-none-any.whl
Collecting six
  Using cached six-1.11.0-py2.py3-none-any.whl
Collecting PyYAML<=3.12,>=3.10 (from awscli)
  Downloading PyYAML-3.12.tar.gz (253kB)
    100% |████████████████████████████████| 256kB 3.7MB/s 
Collecting rsa<=3.5.0,>=3.1.2 (from awscli)
  Downloading rsa-3.4.2-py2.py3-none-any.whl (46kB)
    100% |████████████████████████████████| 51kB 7.4MB/s 
Collecting docutils>=0.10 (from awscli)
  Downloading docutils-0.14-py2-none-any.whl (543kB)
    100% |████████████████████████████████| 552kB 2.2MB/s 
Collecting botocore==1.7.14 (from awscli)
  Using cached botocore-1.7.14-py2.py3-none-any.whl
Collecting s3transfer<0.2.0,>=0.1.9 (from awscli)
  Using cached s3transfer-0.1.11-py2.py3-none-any.whl
Collecting colorama<=0.3.7,>=0.2.5 (from awscli)
  Using cached colorama-0.3.7-py2.py3-none-any.whl
Collecting pyasn1>=0.1.3 (from rsa<=3.5.0,>=3.1.2->awscli)
  Downloading pyasn1-0.3.6-py2.py3-none-any.whl (63kB)
    100% |████████████████████████████████| 71kB 9.6MB/s 
Collecting jmespath<1.0.0,>=0.7.1 (from botocore==1.7.14->awscli)
  Downloading jmespath-0.9.3-py2.py3-none-any.whl
Collecting python-dateutil<3.0.0,>=2.1 (from botocore==1.7.14->awscli)
  Using cached python_dateutil-2.6.1-py2.py3-none-any.whl
Collecting futures<4.0.0,>=2.2.0; python_version == "2.6" or python_version == "2.7" (from s3transfer<0.2.0,>=0.1.9->awscli)
  Using cached futures-3.1.1-py2-none-any.whl
Building wheels for collected packages: PyYAML
  Running setup.py bdist_wheel for PyYAML ... done
  Stored in directory: /var/root/Library/Caches/pip/wheels/2c/f7/79/13f3a12cd723892437c0cfbde1230ab4d82947ff7b3839a4fc
Successfully built PyYAML
Installing collected packages: PyYAML, pyasn1, rsa, docutils, jmespath, six, python-dateutil, botocore, futures, s3transfer, colorama, awscli
Successfully installed PyYAML-3.12 awscli-1.11.156 botocore-1.7.14 colorama-0.3.7 docutils-0.14 futures-3.1.1 jmespath-0.9.3 pyasn1-0.3.6 python-dateutil-2.6.1 rsa-3.4.2 s3transfer-0.1.11 six-1.11.0

[]EC2を止める時の挙動

sudo shutdown -H 0 では stopped になる。再起動可能。

はっきりしないが powered off にすると terminated になり、再起動不能。しばらくのち削除される。

2017/09/26 Tuesday

[]CodeDeploy の lifecycle event hook の ValidateService と AfterAllowTraffic

下記記事参考になったのだが、

http://dev.classmethod.jp/cloud/aws/rolling-update-when-codedeploy-using-elb-health-check/


ValidateService で行うと該当の instance の ELB への登録に進まず、デッドロックしてタイムアウトする。


同じことを AfterAllowTraffic で行えば意図通りの動作になったように思われる。


と言うより、


BeforeAllowTraffic ~ AllowTraffic ~ AfterAllowTraffic の間で ELB に繋いだ instance が InService になるのを待つ処理をしているようだ。Deployの詳細画面でインスタンスアクティビティを見ると AllowTraffic にかかる時間が InService の判定時間に一致している。


従って、lifecycle event hook で InService を待つ必要は無い、と言うことになる。

2017/09/14 Thursday

[]htdigest が生成するもの

https://httpd.apache.org/docs/2.4/misc/password_encryptions.html#digest に公式のドキュメントがある。


下記を生成している

username + ':' + realm + ':' + LOWERCASE(HEXSTR(MD5(username + ':' + realm + ':' + password)))


$ htdigest -c digestpasswords ARealm test

Adding password for test in realm ARealm.

New password: 111

Re-type new password: 111

$ cat digestpasswords

test:ARealm:8ec6c6ae886c1fc52efe07f0071c9f88


String realm = "ARealm";
String username = "test";
String password = "111";

MessageDigest md5 = MessageDigest.getInstance("MD5");
byte[] digest = md5.digest(
    (username + ':' + realm + ':' + password).getBytes());
System.out.println(
    DatatypeConverter.printHexBinary(digest).toLowerCase());

実行すると 
8ec6c6ae886c1fc52efe07f0071c9f88
が出力される。

2017/09/11 Monday

[]keep ssh tunnel active if it was terminated

shell script で実現できる。sshに限らず他のコマンドでも可能。

下記の script を chkconfig で登録した script の start などから <command> & でバックグラウンド呼び出しすれば良い。(ref http://d.hatena.ne.jp/ashura156/20170911/1505114755)

(ssh以外のコマンドの場合確認する exit code を修正する必要があるかもしれない)

#!/bin/sh

alive=true

function term(){
    echo
    echo singal trapped.
    alive=false

    for id in ${children[@]}; do
        kill $id;
        echo child $id killed
    done
}

trap 'term' 2 3 15

while true ; do
    ssh -N -L 10080:REMOTE_SERVER:80 -i ~/.ssh/key USER@TUNNELL_SERVER &
    
    children[$!]=$!
    wait $!
    estatus=$?
    echo child terminated with exit status $estatus
    unset children[$!]
    
    if test $estatus -eq 137 ;then    # killed by 9
        echo exit the loop
        break
        
# 子プロセスとして起動した場合は 2,3 では終わらない (上の空行必要)
#    elif test $estatus -eq 255 ;then  # killed by 2, 3
#        echo exit the loop
#        break
    fi

    if [ "$alive" != "true" ] ;then
        break
    fi
    echo rerun ssh
done

echo $(basename $0) end

[]Daemon / Service 追加

vi /etc/init.d/my_service

#!/bin.sh
# chkconfig: 2345 85 15
# description: my service

case "$1" in
  start)
        echo "Start"
        ;;
  stop)
        echo "Stop"
        ;;
  *)
        echo $"Usage: {start|stop|restart}"
esac

実行権付与

chmod 755 /etc/init.d/my_service


service に追加

chkconfig --add my_service


service を有効化

chkconfig my_service on


有効化時に

env: /etc/init.d/my_service: No such file or directory

と言われる場合、スクリプトの文法エラーや実行権を疑う。


実際のところどう設定されるかというと、

ls -la /etc/rc.d/rc2.d/ を見ると

lrwxrwxrwx 1 root root 14 Jul 5 08:20 S85my_service -> ../init.d/my_service

というようにリンクが作成されており、rc2.d の 2 がスクリプトの # chkconfig: 2345 の 2 と言うこと。


参考

http://kazmax.zpp.jp/linux_beginner/self-made_service_chkconfig.html