2017/10/20

Android向け Microsoft の ホームアプリと Edge

Android向け Microsoft の ホームアプリEdge がリリースされ、ホームアプリはなかなかの高評価、これで bing 利用者も増えるかも??
一方の Edge は、レンダリングエンジンは独自の Trident ではなく blink
使ってみた所、軽快さがない・・・プレビュー版だから?
Windows で Edge 使ってる人のみにオススメな感じか

Google Home(Assistant) での独自コマンド所感

Google Home(Assistant) で独自コマンドを色々作ってみた所感


一発物の命令と応答
「ok,google テレビつけて」みたいなの

IFTTT で this に Google Assistant that に Webhook を選択するだけ、だが this→thatが一方通行なため、Web等からのレスポンスを Assistant へ反映できない

具体的には this の Google Assistant で文字や数値を入れるタイプを選択した場合 $ を入れた所が、変化する場所(例「お父さんに $ とメールして」)で、レスポンス(例「お父さんに $ とメールしました」)には $ が使えるのみ
一方 that の Webhook では $ → {{TextField}} という置換文字を post したりして Webへ送り出すことは出来る。ただし、ここでのWebレスポンスを先程の、レスポンスに使うことが出来ない

チャット形式のアプリ型
「ok,google リモコンにつないで」みたいなので、リモコンアプリに接続(そっから先は、アプリから抜けるまで、アプリとの対話になる)
詳細な流れはコチラ


上記だと、レスポンスを変えられないので物足りない
下記だと、大掛かりすぎるというかチャットを抜けるまで対象アプリとの会話になり、自然終了しない

ちなみに連携サービス IFTTT, Microsoft Flow, Zaiper のうち、Google Assistant に対応するのは今のところ IFTTT のみ

これ IFTTTができてるんなら、直接 Google Assistant とやり取りできるんじゃないかと思うのだが、誰かおせーてー

google_accounts_daemon: Google Compute Engine OS Login is not active. の謎ログ(未解決)

Google Cloud Platform で VM を作り直した(Centos7)ところ messages ログへ1分毎に下記が記録される

google_accounts_daemon: Google Compute Engine OS Login is not active.

SELinux の無効を有効に戻しても、関係なく記録され続け...
いつから記録されているかと遡ってみたら、マシンを構築してすぐ、私がまだ最初にログインする前から既に記録されていた...

とりあえず

# systemctl stop google-accounts-daemon.service
# systemctl disable google-accounts-daemon.service

なんかで逃げてみたけど、他に影響出ないだろうか...

そういえば、このサーバを作成し直した原因が yum update で google~ みたいなアップデートで反応がなくなって、再起動しても cpu使用率100%のまま起動不能になったことだった
詳しく調べずにマシンを作成し直したワケだが、google~daemonに問題ありなのかも

正規表現で最後のスラッシュまでを取得

正規表現でURL等の最後のスラッシュまでを取得

var urlSrc = 'http://example.com/hoge/fuga/index.html';
var urlPth = urlSrc.match(/.+\//); // ← http://example.com/hoge/fuga/

2017/10/19

Let's Encrypt + さくらレンタルサーバー OSブラウザ別 .htaccess

Let's Encrypt にさくらのレンタルサーバーが対応したので、リダイレクト用 .htaccess を書いたメモ

非対応のブラウザ等はリダイレクトしないという感じの記述です
本来はガラケーとかも考慮すべきかもしれませんが、下記ではしてません

Let's Encrypt 総合ポータル と userAgent一覧 を参考に、iOS, Android, Internet Explorer の旧バージョンをザックリと対象外に

RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} !iPhone\ OS\ [2-3]\_
RewriteCond %{HTTP_USER_AGENT} !Android\ [1-2]\.
RewriteCond %{HTTP_USER_AGENT} !MSIE\ [4-9]\.
RewriteCond %{HTTP:X-SAKURA-FORWARDED-FOR} ^$
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

改行を LF で記述

2017/10/17

IFTTT で "Push Notifications failed to update" と表示されて通知をオフにできない

IFTTT で Applet の通知をオフ or オン しようとすると "Push Notifications failed to update" とポップアップ表示されて通知を変更できない

Applet を turned off で無効化した後、設定変更を行う

2017/10/16

IFTTTで Maker (Maker Channel)が見つからない

IFTTTで Maker (Maker Channel) を検索しても表示されない → Webhooks を使え
(配置などは同じなので、Maker Channel を例にしたサイトを参考に利用できます)
https://ifttt.com/maker のリンクも https://ifttt.com/maker_webhooks へ飛ばされます


2017/10/13

Google Home の設定に必要なアプリが動作する Android および iOS バージョン

Google Home (mini含む) の設定に必要なアプリケーションが動作する Android および iOS バージョン が見つけられにくかったのでメモ

PCではいずれも設定不可、せめてChromeブラウザ拡張でできるようになれば便利だけど、初期の Wi-Fi 接続設定が困難ですな

-->
OSバージョン
Android4.4 以降
iOS9.1+ 以上
Windows設定不可
Mac OSX設定不可

【参考】
Google Home および Google Home Mini を使用するための OS の最小要件

2017/10/10

Google Home の独自コマンドを PHP から応答

Google Home(Assistant) の独自コマンドを PHP(Webサーバ) から応答させたときのメモ

【注意】
ここで使用する独自コマンドは、Google Home から独自コマンドが搭載された自作アプリへ接続して、会話を行うような利用方法です。ok,google に続いて一発ものの命令を行う場合 IFTTT を利用するほうが容易です

基本的な流れはこちらを参考にさせていただきました
上記は例が python + Flask なので既存のサーバへ受け渡すのとはちょっと違ったのでPHPの場合を捕捉

大まかな流れ等
  1. DialogFlow のアカウントを有効にするGoogleサインアップがフツーかもGoogle傘下なので
  2. Agentを作成(この中に intent を複数作成していく)
  3. Intentを作成(音声命令 = intent な感じです)
    解説に有る Fulfillment のチェックボックスが見つからないのは、Fulfillment が定義されていないからです。Fulfillmentを定義すると出現します
  4. Entities は音声命令を節毎に分離して汎用性を高められます
    テレビ電源 入れて」の各節を TV とか パワーとか オンして みたいなゆらぎを入れてクロスでマッチしてくれたりします(後で intent に組み込めるのでテストでは飛ばしてもOK)
  5. Fulfillment で呼び出す URLを指定
    ここのURLは Agentと対になり Intent の Action が送られてきますので、URLが違えば Agent も違うという事になる
Intent が音声等で選択されると Fulfillment で指定されたURLへ json形式のデータが送られてきて、レスポンスも json形式で返すことになります

PHP の場合、こちらの 形式で応答(Action の sayHello が該当の箇所)

また、送られてくる json は、DialogFlowの右側にある「try it now」からコマンドを入力して、一番下の show json で確認できるので、ファイルに保存して
上の
$update_response = file_get_contents("php://input");
$update_response = file_get_contents("filename.json");
としてデバッグするとわかりやすいです

最終的な動作確認は、Webを持っていれば Integrations の WebDemo をオンにして、

表示される iframe をHTMLで貼り付けてれば確認可能です

動作の流れ
「○○につないで」で、テストアプリに接続してチャットを行う感じです
チャットを終了させるコマンドを用意していないと戸惑います
  • スマートフォンであれば上部の×でチャットを閉じる
  • Google Home であれば、上部中央をタッチする
  • 先程の intent で終了コマンドを作成しておく ←コレがあると親切
の3通りがあります(たぶん)
「ありがとう」や「さようなら」という言葉で、最下部の End conversation にチェックを付けると、終了intentを作成しておきます

2017/10/06

Android 8.0 前後ショートカット作成方法の違い - Android Studio

Android 8 (O) API26 からショートカットの作成方法が変わったのでメモ

String shortcutName = "Shortcut Name";
Intent  shortcutIntent = new Intent(Intent.ACTION_MAIN);
        shortcutIntent.setClassName(this, "com.example.myApplication"); // 呼び出すActivity
        shortcutIntent.putExtra("key1", "value1"); // 渡す情報()
        shortcutIntent.putExtra("key2", "value2");

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    // Android 8 O API26 以降
    Icon icon = Icon.createWithResource(getApplicationContext(), R.mipmap.ic_shortcut);
    ShortcutInfo shortcut = new ShortcutInfo.Builder(getApplicationContext(), shortcutName)
            .setShortLabel(shortcutName)
            .setLongLabel(shortcutName)
            .setIcon(icon)
            .setIntent(shortcutIntent)
            .build();

    ShortcutManager shortcutManager = getSystemService(ShortcutManager.class);
                    shortcutManager.requestPinShortcut(shortcut, null); // フツーのショートカット
                    // shortcutManager.addDynamicShortcuts(Arrays.asList(shortcut)); // ダイナミックショートカット
} else {
    // Android 7 Nougat API25 以前
    Parcelable icon = Intent.ShortcutIconResource.fromContext(this, R.mipmap.ic_shortcut);
    Intent  intent = new Intent();
            intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, shortcutName);
            intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
            intent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
            this.sendBroadcast(intent);
}

ダイナミックショートカットは、アプリアイコンをうにゅっと押し続けて4つくらいまで表示されるショートカットの事です(iPhoneでいう3D Touch のクイックアクション)

requestPinShortcut の第2引き数はショートカット作成後のイベントらしいです、エミュレータでは requestPinShortcut 処理後にOSからショートカット作成確認のダイアログが出てましたので、作成が完了したかどうかなんかが受け取れるのかも(未確認)

// 一覧取得
ShortcutManager shortcutManager = getSystemService(ShortcutManager.class);
List shortcutList = shortcutManager.getDynamicShortcuts();
for (int i = 0; i < shortcutList.size(); i++) {
 shortcutList.get(i);
}

// 削除
ShortcutManager shortcutManager = getSystemService(ShortcutManager.class);
    shortcutManager.removeDynamicShortcuts(Arrays.asList("ショートカット名"));

ダイナミックショートカットを操作できるのは該当アプリケーションのみです
また、(操作の話ですが)ダイナミックショートカットを長押しして、フツーのショートカットとしてコピーする事が出来ます

2017/10/05

Amazon Prime 会員向けに読み放題サービス開始

読み放題サービス Prime Reading 開始

家族会員のアカウントにもメールが到着しているが、家族会員が利用できるかは不明(Video等も利用できないので、おそらく不可)


まぁ、Videoとか有るくらいだから、読み物もあって当然かも

WebView の Basic認証 NG時にリトライさせたい - Android Studio

WebView の Basic認証をダイアログ表示させるものの、入力情報が間違っていてもリトライしてくれない

認証エラーは onReceivedHttpError イベントの errorResponse.getStatusCode() == 401 を拾うことで捕捉可能ですが、ページを初めて開いた時も同じ401のイベントが発生するので注意が必要です

下記では authRun をダイアログ入力直後とするフラグを設けて onPageFinished や onReceivedError で解除を行っていますが、もっとスマートな方法は無いものだろうか...

@Override
@TargetApi(Build.VERSION_CODES.M)
public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) {
      super.onReceivedHttpError(view, request, errorResponse);
      if( request.isForMainFrame() && (errorResponse.getStatusCode() == 401) && authRun ){
        authRun = false;
      view.reload();
      }
}

【追記】
上記コードは Android 6.0 (API 23) 以降用でで、それ以前は 同名のイベントが存在するものの...
            
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { // < API 23
      super.onReceivedError(view, errorCode, description, failingUrl);

}

これが全く使えないイベントで 401時に呼ばれるはするものの errorCode に -1 が入っていたりして判断できるものが全くありません

Basic認証しているということで onReceivedHttpAuthRequest を利用していると思いますが
@Override
public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) {
    if( (view != null) && handler.useHttpAuthUsernamePassword() ){
    
    }
}
Android 6.0 (API 23) 以前(4.1で確かめただけで、全て確かめてません)では、認証失敗時(401)にこのイベントが再度呼ばれるようで、しかも handler.useHttpAuthUsernamePassword() に false が入った状態(爆)もぅねぇ
handler.useHttpAuthUsernamePassword() || authRun とかでとりあえず逃げておいたけど、バージョンで分けるのが正しい方法だと思います

ちなみに、onReceivedHttpAuthRequest には別の落とし穴もあるようで、
ユーザーとパスワードをURL埋め込んで、かつ認証情報が間違っていた場合、このイベント内でいくら正しい認証情報を入れ直したとしても、URLの埋め込みを利用されて全く認証が完了しなかったりします
なので、load時に埋め込み認証情報を分離して、このイベントで投入し直すという方法を取りました


2017/10/04

ClosedXML.dll の入手

ClosedXML.dll の入手について友人から聞かれたのでメモ
  • ClosedXMLは旧公式サイトから GitHubへ移動
  • バイナリDLLがダウンロードできるのは、旧サイトのDownloadsページ の右の方
    (ここでは、0.75.0までのバイナリがダウンロードできるらしい)
  • 上記より新しいバイナリは、GitHubのソースからコンパイルしなさい

GitHubのソースからコンパイル手順
  1. ClosexXML(GitHub) 右の Clone or download から zip ファイルをダウンロードして解凍
  2. Zipファイル内の ClosedXML.sln を Visual Studio (今回は 無料の 2015 Community)で開く
  3. ソリューションをビルド(注意・デフォルトで他のプロジェクトが選択されている場合がある)
  4. ClosedXML-develop\ClosedXML\bin\Debug や ClosedXML-develop\ClosedXML\bin\Release に ClosedXML.dll や DocumentFormat.OpenXml.dll が生成される
    FastMember.Signed.dll は何でしょう??




2017/10/03

Button のイベントを発生させる - Android Studio

ボタンのタップイベントを呼び出す

((Button)findViewById(R.id.myButton)).callOnClick();

Android ProgressBar の setAlpha は 0~1

Android で ProgressBar の setAlpha 設定を行ったメモ

setAlpha の引き数 0~255 のパーツが多いみたいですが
ProgressBarsetAlpha0(透明)~1(透過なし) の float 指定

progressBar.setApha(0.5f) とかです

2017/10/02

Android ProgressBar のクルクルが環境によって表示されない

Android の ProgressBar のクルクル(砂時計というのも古いのか)が実行環境によって表示されない
開発者向けオプションの「Animator再生時間」がオフになっていると、そのものが表示されません
また、クルクルの速度はここの設定が反映されますが、あまり遅い 2x等にすると、ホーム画面のフォルダがモッサリしたりします

Android Studio で AdMob 導入手順が簡単になっていた

SDKの容量がものすごいことになり(200GB)ついでに、Android Studio 2.3.3 を再インストールした環境で、久々に AdMob を利用しようとしたら、かなりやり方が変わっていたのでメモ

AdMob にサインインして、広告ID(ca-app-pub-XXXXXXXXX みたいなの)を受け取るのは同じです

上記取得で、
Google Mobile Ads SDK をダウンロードしてください。と出ますがリダイレクトループでダウンロードできませんし、よく手順解説で見かける google-services.json へのダウンロードリンクもなくなってます

という事で
プロジェクトへの追加
File - Project Structure を開いて、Ads の AdMob にチェックを入れて OK を押すだけ

必要なものがダウンロード?され build.gradle に項目が追加されます(たぶん)

あとは

AndroidManifest.xml に権限を追加(無ければ)
    <uses-permission android:name="android.permission.INTERNET">
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE">

レイアウトに広告ブロックを追加
        <com.google.android.gms.ads.AdView
            android:id="@+id/adView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_alignParentBottom="true"
            ads:adSize="BANNER"
            ads:adUnitId="ここに取得したIDを入れる">
        </com.google.android.gms.ads.AdView>
       
アクティビティの super.onCreate 等に下記の広告ロードを追加
        AdView mAdView = (AdView) findViewById(R.id.adView);
        AdRequest adRequest = new AdRequest.Builder().build();
        mAdView.loadAd(adRequest);

そんな感じでした

2017/09/30

Galaxy S7 Edge がフリーズして起動不可能に

Galaxy S7 Edge (SC-02H SCV33) が VR使用中にフリーズして、電源ボタン長押しでも再起動しない

ボリュームUP + ボリュームDown + 電源 を長押で再起動

2017/09/28

Fragment に置いた WebView が真っ白のまま

Android で Fragment に置いた WebView がロードしても真っ白なまま
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_browser, container, false);

        webView = (WebView)view.findViewById(R.id.webView1);

        // :

        return inflater.inflate(R.layout.fragment_browser, container, false);
    }
原因は inflater.inflate を2回呼び出していた
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_browser, container, false);

        webView = (WebView)view.findViewById(R.id.webView1);

        // :

        return view;
    }

2017/09/26

「ヨドバシ・ドット・コム」配送遅延て日本郵便が原因?

ヨドバシ・ドット・コムで、2017年9月20日(水)頃から出荷作業に遅れが生じているとか
ちょうど 21日(木)の夜に注文していたので、その履歴
21日(木)21時頃に注文した商品は、6時間後の22日(木)3:00には引受してる

注文時から、到着予定日が 26日(火)と記載されていたので、おかしいと思っていたら、何故か荷物には「着日指定」が行われており、最寄りの郵便で3日も保管という始末

これって、ヨドバシの注文を日本郵便がさばききれないので、配達日を分散させて均等化を図ったって事じゃないのでしょうか

私の所に到着する Amazonの荷物も半分くらい日本郵便になっているし、忙しさが移動しているのかもね

2017/09/21

iCloudメールで受信拒否

iCloudメールから転送元が拒否され

The original message was received at Thu, 21 Sep 2017 08:00:00 +0900 (JST)
from **********.ne.jp [***.***.***.***]

   ----- The following addresses had permanent fatal errors -----
<*******@icloud.com>
    (reason: 550 5.7.0 Blocked - see https://support.proofpoint.com/dnsbl-lookup.cgi?ip=***.***.***.***)

なメールが返された

https://support.proofpoint.com/dnsbl-lookup.cgi?ip=***.***.***.*** のURLから解除申請しろという事なワケだが、それじゃ「迷惑メール」フォルダは何のためにあるんだろうかと

そもそも iCloudメールはフィルタが貧弱でspam非判定が利用できないとか、片手間な感じが強い

2017/09/17

Gear VR がインストールできない

Galaxy S7 Edge でもらった Gear VR を久々に出してきて Oculus アプリを起動したら、Gear VRアプリをインストールしろとの指示、しかしインストール画面に進んでも「サーバに接続中」の後、一瞬インストールが表示されるが元の画面に戻ってしまう
Oculusアプリの自動更新設定をオンにして、端末を再起動・しばらく放置するとアップデートが完了して利用可能になる
アップデート通知もオフにしていたので、数回のアップデートをスキップしていたためだろう

2017/09/15

NTTは加入電話を2本以上申し込むと違う局番を持ってくる

ひかり電話を推し進めるようになってから NTTは、加入電話(メタル系のアナログやISDN)を2本以上申し込むと、違う市内局番を持ってくる
※03-xxxx-yyyy の xxxx の所

市内局番が違う電話番号は、

  • ISDNのiナンバーに組み込めない
  • 加入電話(アナログ、INS64, INS1500)のダイヤルインに組めない

これらの問題を回避できる事から「ひかり電話」のセールスへと繋がるワケです

ちなみに、回線申込時に同じ局番にして欲しいといえば、同じ局番の番号をくれるくらいの事はしてくれますので、将来どちらへ転んでもいいように、同じ局番で揃えておくことをオススメします。


あと、ひかり電話で追加番号を頼むと、ひかり電話専用の市内局番が割り振られます。この番号は今のところ、加入回線や他社のサービスへ番号ポータビリティできませんので、注意が必要です。
この場合、予算と時間があれば、加入回線を新規で引いて、すぐにひかり電話の追加番号へ移行するという方法で、何処へでもポータビリティ可能な番号で運用することが可能です。

Android VPN の通知をロック画面から消す

Android で VPN接続の通知を、ロック画面から消す
設定→通知→詳細設定→全てのアプリ(システムアプリを表示)で
「Androidシステム」の通知設定を変更
他の通知に影響が有るかと思ったが、今のところ問題なし

Time4vps の障害情報ページ

リトアニアの VPS サービス Time4vps の障害情報ページ
(サーバが再起動されていたので、調べたら Kernel upgrade と記載されていた)

https://billing.time4vps.eu/status/
カレンダーの赤い所がソレです

2017/09/12

「support.Microsoft.com は言う」偽マイクロソフトのページでブラウザがフリーズ

重いjavascriptを処理させて、ブラウザクラッシュを誘うページ
「**お使いのコンピュータは、BLOCKEでした。」

【閲覧注意・javascriptをオフにして閲覧】
http://www.support.microsoft9063yjpmschs7577.com.s3-website-ap-northeast-1.amazonaws.com/

ブラウザがメモリを使いまくって停止したようになるだけなので、特に問題はありません

support.microsoft をサブドメインに含むサイトはブロックすべきかもね
まぁ、上記を放置している amazonaws.com やリンク元の www.cpm20.com を hosts ファイルに登録しておいてもいいです

Windows10 のスタートでアプリが検索できなくなった時の対処

Windows10 のスタートメニューで、アプリケーションが検索できなくなることがしばしば
ストアアプリ以外を検索させる方法は、コチラ

今回は、全てのアプリケーションが検索できなくなった場合(インデックス破損とかそういうの)

OS再起動とかかったるいので、タスクマネージャーを起動(ctrl+shift+esc)して、詳細から SearchUI.exe を選択→タスクの終了で、強制終了 → しばらくすると SearchUI.exe は自動で起動する
これで、スタートをからアプリケーションを検索してみる

2017/09/11

モバイルdポイントカードかざすだけだが、音にセンスが無いドコモ

dポイントカードをおサイフケータイへ入れおけば、ローソン等でかざすだけでdポイントが付与される「モバイルdポイントカード」
iD決済をスマートフォンで行う場合、dポイント付与とiD決済を連続して行えるわけだが、モバイルdポイントの音が「プヒ」みたいな音で、とても恥ずい
ここにも、ドコモのセンスの無さが漂ってきます

デスクトップOSの Google Drive アプリ終了で「バックアップと同期」への移行が簡単だった

デスクトップOS の Google Drive アプリが終了予定で、バックアップと同期(Backup and Sync) へ移行しろとの事

コレ、Google Drive が終了するんじゃなくて、バックアップと同期に Google Drive への同期機能が含まれてるから、そっちを使えという意味で、サービスそのものや Android や iOS の Driveアプリは継続
今回移行する「バックアップと同期」は、Drive同期とフォトアップロード等、Google ストレージへの接続アプリの統合版という事になる
Google Drive からの移行は、Google Drive を削除せずにバックアップと同期をダウンロードしてインストールするだけ
Google Drive を削除せずに上記をインストールすれば、接続情報なども引き継がれるので、再認証も不要です

2017/09/08

Nova Launcher のフォルダ + サイレントモードPRO でカメラ無音が解除されてしまう

サイレントモードPRO を有効にした端末で、Nova Launcher のフォルダに置いてあるアイコンを開くと、数秒でカメラの消音状態が解除されてしまう
フォルダスワイプ(Nova Launcher Prime 機能)では症状が出ないので、フォルダアイコンが閉じる等の状態変化にサイレントモードPROが反応している様子

アイコンやショートカットをフォルダから出すか、フォルダ先頭においてスワイプ起動することで消音状態を継続させられる

2017/09/04

北朝鮮ミサイル発射のお知らせでやるべきこと

北朝鮮のミサイルが発射されてから、北海道の東沖に着水するまでの時間が14分なので

何をやっても無駄ですな
迎撃による破片を避けるために、屋内に居るというくらいだろうか

どこかへ避難するにも、着弾位置が確定できないなら移動しても無駄だし

冷蔵庫の好きなものを急いで食べるとかか
人生最後の食事になるかもしれないので

Google Chrome プルダウンメニューのショートカット

Google Chrome 設定関連メニューをプルダウンさせるショートカット
Chrome のキーボード ショートカットには、ホットキーだからか載っていないのか

Alt + F でプルダウンメニューが開く

2017/09/01

懐かし Windowsの カット・コピー・ペースト

オレが Windowsを使い始めた頃、Ctrl+Insertがコピーで、Shift+Insert が貼り付け、Shift+Delete が切り取りだった
わかるかなぁ~ わかんねーだろーなぁ~

昔と今のショートカット
動作
切り取りShift+DeleteCtrl+X
コピーCtrl+InsertCtrl+C
貼り付けShift+InsertCtrl+V
※今でも使えます

cuenote.jp 使うなら spf くらい設定したらどうよ

cuenote.jp 経由でお知らせを送ってくるサービスが多数ある
(基本的にどうでもいいお知らせメールなので、うちではspamスコアが上がるように設定しているわけだが)

しかし、spfも設定せずに cuenote.jp 経由でお知らせを送ってくるような銀行があったりするわけで・・・

一斉送信するサービスないか?→ cuenoteてのがあr → それで送ろう

みたいな、テキトーな社内の動きがあるんだろうよ

2017/08/31

急ぎの仕事で pgAdmin4 が糞すぎて気絶するかと思った

接続先が Oracle から PostgreSQL に変更となったので、ソース変更という急ぎ(6時間くらい)の仕事を受け取ったのだが、PostgreSQL が入っていなかったので、インストールして付属の pgAdmin4 を使って、疑似テーブルを作成しようとしたが、あまりの糞加減に気絶しそうだった

インストール後、pgAdmin4 を起動してテーブルを作成しようとしたが Schemas の中身にDBが表示されるとか意味不明~、再起動で通常の表示に

んで、テーブルを作成してテキトーなカラムを作って、View/Edit Data からデータを入れようとしたが、データが入りません・・・・・・
この View/Edit Data でテーブルを編集するには、そのテーブルに プライマリキーが存在しないと編集できないんだそうな

画面内からユーザーパスワード変更したら、そっから先何も出来ないとか、ずいぶんと足を引っ張ってくれました

2017/08/29

Djangoのバージョン選択

Python のフレームワーク Django を利用した際のバージョン選択のメモ

まずは、Pythonで 2.7を利用するか 3系統を利用するかを決定
Django はどちらもサポートしているわけですが、ここの対Python対応バージョンを見てみる

3系統なら Django2.0移行でもいいんじゃね。とか思ってしまうわけですが、こちらに Django バージョンごとのサーポート期間てのがあり
LTSとついているのが、ロングサポートになります
つまり、Django 1.11が Python2.7系でも3系(3.7移行でなければ)でも、現状で最も長くサポートされるという事になります
プロジェクトが 2019年以降に稼働するなど、ターゲットを Django 2.2 とした場合 2.0や2.1を選択する必要があるかもしれません

2017/08/24

ひかり電話→ISDN への番号通知

ひかり電話から、ナンバー・ディスプレイ契約なしの NTT ISDN(INS64, INS1500)回線へ着信させた場合、番号が通知されます

一般的に通知される発呼側の回線
  • ISDN回線
  • ひかり電話
  • 050 IP電話
  • 携帯電話
  • PHS
加入回線(一般的なアナログ電話)以外といった感じです

2016年12月末の総務省データをまとめると、加入電話の割合は 9%を切っており
ISDN回線でナンバー・ディスプレイ契約を行う意味が微妙になってきています

2016年12月末 電話回線加入者数
種別加入数(万加入)割合
加入電話2,0288.89%
ISDN3181.39%
IP(0ABJ)3,20614.05%
IP(050)8343.66%
携帯電話16,06870.45%
PHS3561.56%
合計22,810100.00%

2017/08/21

Time4VPS を使ってみた



cloudatcost のサーバがあまりにも定期的にぶっ壊れるので、リトアニアの格安サーバ Time4VPNを使ってみたので、箇条書き他
  • 初期費用不要・30日間返金保証
  • 前払い期間の長さに応じて割引あり
    トップページに表示されるのは Quarterly = 1/4年 = 3ヶ月払いの 1ヶ月分
  • ユーザー登録に「モバイルのsms」と「メールアドレス認証」の両方が必要→それぞれにコードが送られてくる
  • 支払い方法は、クレカ, paypal, bitcoin 等
  • 契約期限毎に支払いの必要あり(クレカの場合、自動更新されるかも・・・今回はpaypalで利用)
  • サーバ構築やOSインストールは、それぞれ5~15分程度
  • ping応答は 300ms弱→sshで若干の応答遅れ(cloudatcostよりかなりマシ)
  • swap有り → メモリ1GBのプランで 512MB
  • コンパネから転送量やリソース使用量が数値とグラフで確認可能
支払い間隔は変更できる?
各サーバごとに次の支払い期間を設定可能


rootパスワードは?
サーバの Install OS(OSを再インストールする所)を開いて[Installation Result]を開くと、最後にインストールしたOS(つまり現インストールOS)の root パスワードが記載されている

【追記】しばらく使ってみて・・・
安定はしていて、サーバへの上りは問題ないですが、下り(サーバから見ての上り)が遅い
Resilio Sync で同期させて 1Mbps 出ない 400kbps とかです
契約から一週間は速かったんだけどね

PhraseExpress 無効/有効の切替

PhraseExpress で有効無効の切替ショートカットキー設定が、Ver.12から無くなっている

マニュアルの該当項目(Temporarily disable PhraseExpress)よると、ctrlキーを押しながらタスクトレイをクリックすることで、有効無効を切り替えることが可能です

2017/08/17

100万円預け続けた時の利率による増加変化

100万円預けた時の利率による変化

表示利率は税引前、計算後の値は税引き後
複利(金利による増加分を次年へ反映)で積み重ねています

年/率0.20.511.524810
11,001,5941,003,9841,007,9691,011,9531,015,9371,031,8741,063,7481,079,685
21,003,1901,007,9841,016,0001,024,0481,032,1281,064,7641,131,5601,165,720
31,004,7891,012,0001,024,0961,036,2891,048,5771,098,7021,203,6941,258,610
41,006,3901,016,0321,032,2571,048,6751,065,2881,133,7221,280,4281,358,902
51,007,9941,020,0811,040,4831,061,2101,082,2661,169,8591,362,0521,467,187
61,009,6001,024,1451,048,7741,073,8941,099,5141,207,1471,448,8801,584,099
71,011,2091,028,2251,057,1311,086,7301,117,0371,245,6231,541,2441,710,328
81,012,8211,032,3221,065,5551,099,7191,134,8391,285,3261,639,4951,846,616
91,014,4351,036,4351,074,0451,112,8641,152,9251,326,2951,744,0091,993,763
101,016,0521,040,5641,082,6041,126,1661,171,2991,368,5691,855,1862,152,636
111,017,6711,044,7101,091,2311,139,6271,189,9661,412,1911,973,4512,324,169
121,019,2931,048,8731,099,9261,153,2481,208,9301,457,2032,099,2542,509,371
131,020,9171,053,0521,108,6911,167,0331,228,1971,503,6502,233,0782,709,330
141,022,5441,057,2471,117,5261,180,9821,247,7711,551,5772,375,4322,925,223
151,024,1741,061,4601,126,4311,195,0981,267,6571,601,0322,526,8613,158,319
161,025,8061,065,6891,135,4061,209,3831,287,8591,652,0632,687,9433,409,990
171,027,4411,069,9351,144,4541,223,8381,308,3841,704,7212,859,2943,681,715
181,029,0791,074,1981,153,5741,238,4661,329,2361,759,0583,041,5693,975,092
191,030,7191,078,4781,162,7661,253,2691,350,4201,815,1263,235,4634,291,848
201,032,3611,082,7741,172,0311,268,2491,371,9411,872,9813,441,7174,633,843

昭和の頃は、退職金を定期預金へ入れて、10年で倍になっていたと言われていましたので、金利が10%程度あったのでしょうな