sshd 側で自動 SSH 再接続 ubuntu 16.04

/etc/ssh/sshd_config で下記設定

/etc/ssh/ssh_config ではない

ClientAliveInterval 60
TCPKeepAlive yes
ClientAliveCountMax 10000

https://unix.stackexchange.com/questions/200239/how-can-i-keep-my-ssh-sessions-from-freezing

git add されていないファイルのみ stash する : git stash -u -k

git add -pでコミット候補を作ったあと、一旦それだけ試したい時

git stash -u -k で add されていないもの全部 stash できる。(新規ファイルもstash されます)

Dockerhub の auto-build でリポジトリ名が50文字以上あると登録できない

Create ボタンを押しても画面が遷移しなかったのでコンソール開いたらエラーが出てた

42文字のリポジトリ名だったので organization 含め50文字ぽい。

{"detail": {"vcs_repo_name": ["VCS repository name cannot exceed 50 chars"]}}

折りたたみキーボードを日常使いするために買ったものと感想

折りたたみキーボードを日常使いするために買ったものと感想

使いみち

  • ほとんど開発 (android, web, なにかスクリプトとか。 intelliJ, script)
  • ブラウザで調べごととかネットサーフィン (chrome, vimium
  • メールとかチャットすこし
  • スマホに繋いで開発とかブラウザ見たりとか
  • たまに設計資料の図書く
  • たまに 3DCAD

少しキーボードよりの使い方ですがマウス(トラックボールとかタッチパッドとか)も使います。

余談ですがいくつか買って試したけどメインに決めたもの以外は少し触ってすぐ使わなくなってもったいないのと、 キーボードって買って試してみないと全然わからない割にヨドバシとかでは折りたたみが少なくて他にも試したい方いらっしゃったら送りますのでご連絡ください。 下に出したものが全部あります、中古で良ければお譲りしますのでそのまま使っていただいてもいいですし。

いままでは6年間くらい ELECOMのトラックボール付きパンタグラフのキーボードを使っていました。 出先でスマホに繋いで使うときもいつも同じ道具を使いたいので 普段から折りたたみキーボードを使うことにしました。

ちなみに今まで使っていたものはこれ 大きさと折りたためないこと以外は完璧で、 トラックボールも(上の用途内では)使いやすかったしキー配置も良かったんだか廃盤になった bluetooth でなく専用レシーバのもので3000 円、blueoothありのもので7000円くらいだった。 今見たら18,600円ですごい値上がり ..

次買うのもので大事にしたこと

  • 折りたたみ
  • パンタグラフ
  • bluetooth
  • functionキーがきちんとある
  • かなの「けとか「へとかが正しい位置にある
  • マウス的なトラックポインタとかなにかある
  • キーピッチ16程度

すごくよく作られてる感じがする折りたたみ

動きがなめらか これは貰い物で、アマゾンの履歴で正確に探せないけど多分これ

評判の良かった iClever のキーボード

4,799円

超期待してたマイクロソフト

9000円くらいだったような

極小のタッチパッドがついた elecom

5,000円くらい 少し難点があるものの、これが一番よかったのであと4台買った

シリコンの折りたたみ

値段は覚えてない

あまり良くなかった 丸められるのはいいけどタイピング時にキーが引っかかる、

IntelliJで既存のソースコードを新しい window で開くには該当のソースファイルを選択して Shift+Enter

マウスでドラッグしなくて良くなった。

intellij-support.jetbrains.com

やっときた勝手についてくるスーツケース!!!

https://www.indiegogo.com/projects/travelmate-a-fully-autonomous-suitcase-and-robot-technology--2#/
https://www.indiegogo.com/projects/travelmate-a-fully-autonomous-suitcase-and-robot-technology--2#/

TypeScript 2.0 mongoose で hook が動かない

環境

Typescript 2.0.6 Mongoose 4.9.4

原因

TypeScript, ES6, Mongoose のどれが良くないのかはわからないけど アロー記法がお気に召さないらしい。

ソースは通っているのに動かない。 以前は mocha テストの this.timeout() も効かなかった。 function(… に直したら想定通りに動くようになった。 アロー記法と function 定義は同じでなかったからそういうことも有り得そうだけど.. エラーも出ないし時間がかかった。

NG

import {Schema} from "mongoose";
export let sampleSchema: Schema = new Schema({
        name: String,
        createdAt: Date,
        deleted: Boolean,
    })
    .pre('save', (next)=> {
        if (!this.createdAt) {
            this.createdAt = new Date();
            this.deleted = false;
        }
        next();
    });

OK

import {Schema} from "mongoose";
export let sampleSchema: Schema = new Schema({
        name: String,
        createdAt: Date,
        deleted: Boolean,
    })
    .pre('save', function (next) {
        if (!this.createdAt) {
            this.createdAt = new Date();
            this.deleted = false;
        }
        next();
    });

androidアプリのスプラッシュが遅くて無意味問題が解決した

本来スプラッシュはアプリの読み込み待ちの間だけ見せるもので、iosではそれができるらしい。

iosのアプリではsplashあるからとかなんとか言われてandroidでも作らざるを得ないこと多いと思うけど 自分が作ったのも含めいままで見たことある実装は全部 アプリの読み込みが終わったあとわざわざ画像を見せて使用開始を遅らせるだけのsplashだった

googleカレンダーのスプラッシュ表示が異様に早くて、実装方法が検討つかなかったんだがlayoutなしのactivityにthemeでバックグラウンドを指定するらしい。

https://www.bignerdranch.com/blog/splash-screens-the-right-way/ ありがとうございます。

git instaweb の lighttpd で undefined symbol: FAMNoExists

Ubuntu 16.04 で git instaweb を見てみたかったんだけど下記エラー。

someone@somewhere:~/anyware$ git instaweb
lighttpd: symbol lookup error: lighttpd: undefined symbol: FAMNoExists
Could not execute http daemon lighttpd -f.

gamin を入れて治った。

sudo apt install -y gamin

Android アプリが OutOfMemory で落ちるときに確認を忘れがちなこと -> Bitmapのサイズ, src, View.INVISIBLE

確認した端末の環境

  • Galaxy S6
  • Android 6.0
  • 普段の空きメモリ 600m くらい

結論

  • 動的にリソース指定する ImageView に レイアウトしやすいからって xml 上の src に画像指定しない

アプリの内容と状況

  • 大体全画面くらいのサイズの画像を2枚 ViewPager で 1枚ずつ全画面表示するタイミングがある
    • Gallary のような。
    • 今後増えるので ViewPager を使用
  • 全画面大の画像は1枚あたりのサイズ 450k, 700k の png
  • 80k と 370 k の png があるページを足したら OutOfMemoryError が出るようになった
  • ViewPager での画像読み込みは Picasso 使用

当時の苦しみ

  • 全画面で表示したいので小さいサイズで読み込めない
  • そもそも 数百k 単位の画像数枚で OOM にまでなる ? 全部足しても 1.6m くらいなのに …
  • 全画面大の画像はファイルサイズ最大 700k だったけど View に入った Bitmap は 64m
    • bitmap だから当たり前だけど忘れていた…

作業内容

ログが長いので先に修正点から。 Android StudioAndroid Monitor -> Monitors タブで確認 - 80k, 370k の画像をとりあえず 30k と 90k に -> 最初のこのベージすら表示できなかったものがまずは表示できるように。 全画面の画像も読み込んで最大 220m allocated. - ViewPager で表示する fragment の Layout XML の Image View の src に 700k の png を指定していた -> もちろん画像は動的に java 側で指定しているので外した。外すだけで allocated 最大 160m. - 80k, 370k の画像は表示し終わったら非表示にするので View に setImageResource(0) 指定 -> allocated 160m で変わらず。 - 80k, 370k の画像は表示し終わったら非表示にするので View に setVisibility(View.INVISIBLE) を指定していたので View.GONE に変更 -> allocated のサイズは変わらず 160m

Log

80k と 370 k の画像のページから既に表示できない

E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: com.example, PID: 22875
                  java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example/com.example.MainActivity}: android.view.InflateException: Binary XML file line #14: Binary XML file line #17: Error inflating class <unknown>
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3254)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3350)
                      at android.app.ActivityThread.access$1100(ActivityThread.java:222)
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1795)
                      at android.os.Handler.dispatchMessage(Handler.java:102)
                      at android.os.Looper.loop(Looper.java:158)
                      at android.app.ActivityThread.main(ActivityThread.java:7237)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
                   Caused by: android.view.InflateException: Binary XML file line #14: Binary XML file line #17: Error inflating class <unknown>
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:551)
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:429)
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:380)
                      at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:474)
                      at android.app.Activity.setContentView(Activity.java:2387)
                      at com.example.MainActivity.onCreate(MainActivity.java:45)
                      at android.app.Activity.performCreate(Activity.java:6876)
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135)
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3207)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3350) 
                      at android.app.ActivityThread.access$1100(ActivityThread.java:222) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1795) 
                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                      at android.os.Looper.loop(Looper.java:158) 
                      at android.app.ActivityThread.main(ActivityThread.java:7237) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
                   Caused by: android.view.InflateException: Binary XML file line #17: Error inflating class <unknown>
                      at android.view.LayoutInflater.createView(LayoutInflater.java:657)
                      at com.android.internal.policy.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:58)
                      at android.view.LayoutInflater.onCreateView(LayoutInflater.java:706)
                      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:774)
                      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:716)
                      at android.view.LayoutInflater.rInflate(LayoutInflater.java:847)
                      at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:810)
                      at android.view.LayoutInflater.parseInclude(LayoutInflater.java:1001)
                      at android.view.LayoutInflater.rInflate(LayoutInflater.java:843)
                      at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:810)
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:527)
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:429) 
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:380) 
                      at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:474) 
                      at android.app.Activity.setContentView(Activity.java:2387) 
                      at com.example.MainActivity.onCreate(MainActivity.java:45) 
                      at android.app.Activity.performCreate(Activity.java:6876) 
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135) 
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3207) 
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3350) 
                      at android.app.ActivityThread.access$1100(ActivityThread.java:222) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1795) 
                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                      at android.os.Looper.loop(Looper.java:158) 
                      at android.app.ActivityThread.main(ActivityThread.java:7237) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
                   Caused by: java.lang.reflect.InvocationTargetException
                      at java.lang.reflect.Constructor.newInstance(Native Method)
                      at android.view.LayoutInflater.createView(LayoutInflater.java:631)
                      at com.android.internal.policy.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:58) 
                      at android.view.LayoutInflater.onCreateView(LayoutInflater.java:706) 
                      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:774) 
                      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:716) 
                      at android.view.LayoutInflater.rInflate(LayoutInflater.java:847) 
                      at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:810) 
                      at android.view.LayoutInflater.parseInclude(LayoutInflater.java:1001) 
                      at android.view.LayoutInflater.rInflate(LayoutInflater.java:843) 
                      at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:810) 
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:527) 
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:429) 
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:380) 
                      at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:474) 
                      at android.app.Activity.setContentView(Activity.java:2387) 
                      at com.example.MainActivity.onCreate(MainActivity.java:45) 
                      at android.app.Activity.performCreate(Activity.java:6876) 
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135) 
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3207) 
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3350) 
                      at android.app.ActivityThread.access$1100(ActivityThread.java:222) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1795) 
                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                      at android.os.Looper.loop(Looper.java:158) 
                      at android.app.ActivityThread.main(ActivityThread.java:7237) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
                   Caused by: java.lang.OutOfMemoryError: Failed to allocate a 200450764 byte allocation with 16765264 free bytes and 140MB until OOM
                      at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
                      at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
                      at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:856)
                      at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:675)
                      at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:2228)
                      at android.content.res.Resources.loadDrawableForCookie(Resources.java:4215)
                      at android.content.res.Resources.loadDrawable(Resources.java:4089)
                      at android.content.res.Resources.loadDrawable(Resources.java:3939)
                      at android.content.res.TypedArray.getDrawable(TypedArray.java:886)
                      at android.widget.ImageView.<init>(ImageView.java:157)
                      at android.widget.ImageView.<init>(ImageView.java:145)
                      at android.widget.ImageView.<init>(ImageView.java:141)
                      at java.lang.reflect.Constructor.newInstance(Native Method) 
                      at android.view.LayoutInflater.createView(LayoutInflater.java:631) 
                      at com.android.internal.policy.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:58) 
                      at android.view.LayoutInflater.onCreateView(LayoutInflater.java:706) 
                      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:774) 
                      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:716) 
                      at android.view.LayoutInflater.rInflate(LayoutInflater.java:847) 
                      at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:810) 
                      at android.view.LayoutInflater.parseInclude(LayoutInflater.java:1001) 
                      at android.view.LayoutInflater.rInflate(LayoutInflater.java:843) 
                      at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:810) 
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:527) 
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:429) 
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:380) 
                      at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:474) 
                      at android.app.Activity.setContentView(Activity.java:2387) 
                      at com.example.MainActivity.onCreate(MainActivity.java:45) 
                      at android.app.Activity.performCreate(Activity.java:6876) 
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135) 
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3207) 
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3350) 
                      at android.app.ActivityThread.access$1100(ActivityThread.java:222) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1795) 
                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                      at android.os.Looper.loop(Looper.java:158) 
                      at android.app.ActivityThread.main(ActivityThread.java:7237) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
I/System.out: (HTTPLog)-Static: isSBSettingEnabled false
I/System.out: (HTTPLog)-Static: isSBSettingEnabled false

USB メモリを Ubuntu 16 で exFAT にフォーマットする (フォーマット名は小文字でないとエラー)

確認した環境

Install utils

sudo apt-get install -y exfat-fuse

gnome-disks への設定

in terminal

gnome-disks
  • Erase: Don’t overwrite existing data (Quick)
  • Type: Custom (Enter filesystem type)
  • Name: data (何でもいい)
  • Filesystem: exfat

exFAT と書いてあるところが多いけど私の環境ではエラーになった

Error formatting volume
Creation of file system type exFAT is not supported (udisks-error-quark, 11)

諦めた頃に GParted の View -> File System Support で使えるフォーマットのマトリクスを見つけて気づいた。

f:id:h__s:20170410184413p:plain

バージョンとかで違うんだろか . .

秋葉原で Uber EATS 頼めた

いつの間に .. . 千代田区はまだだったんだけど ok googke で遊んでたら出てきたのでつい頼んでしまった

Hungry? Get ¥2000 off your first order on #UberEATS with my code: eats-lgiaj. http://ubr.to/EatsGiveGet

クーポンが出てきたのでどうぞ

TypeScript のコードレビューサービスは CODEBEAT, Codacy 2つ (2017.04時点

当然 tslint, test, coverage は取った上でソースコードのレビューをしてほしい。

経緯

  • TypeScript は書いたことないけど使ってみたい -> お作法とかベストな書き方とか多分できてない
  • チームはたいてい1〜2人 -> 経験のみでのレビューだと指摘の内容が偏りがち。しかも今回はチーム1人
  • Java だと無料で優秀なツールがそろっていたのでその時のような環境を作りたい
    • lint が CheckStyle のイメージ。 FindBug とか PMD のような、もう一歩踏み込んだ指摘がほしい

環境

  • API サーバー用
  • TypeScript 2.0

候補のサービス

共通の特徴

  • 両方共有料。それなりのお値段。 githubと同じかそれ以上くらい
  • PMDとかFindBugとかのインストール型の解析サービスに比べて
    • OAuth でポチポチやるだけなので設定は簡単
    • default で Commit, Pull Request を hook して、結果を勝手にgithub上に押し込んでくれる(CIサービスがやってるような感じ)
    • Badge 嬉しい

Codacy

  • Scala でお世話になった。
  • これも一人だったので助かった
  • サイトがすごく重い .. analyze 済みのものも重いし画面に表示する内容のものがそんなになくても重い
  • exclude の設定をサイト上でするのでリポジトリに固有のファイルをコミットしなくて良い
  • グラフで issue が減っていくのを見ると小さい issue でも対応した時の満足感がちょっと増す
  • Coverage も表示してくれるはずだけど Scala の時は使っていたバージョンが対応していなくて使えなかった
  • TypeScriptに関しては、全然指摘してくれない。今 All A であまり面白くない
  • しばらく使って様子見する予定

CODEBEAT

  • swagger-ui のソースをたくさん指摘してくれる。(書いたところの指摘はあんまりまだ無いけど、codacy よりは多い。)
  • exclude するファイルは gitignore 形式で、コミット必要
  • 画面というか機能は Codacy より少ない印象。(まだ使いこなせてないだけかも)
  • こちらも使いながら様子見

あと、 SideCI も tslint 対応しているみたい 今のところこんな感じだろうか。 他にあったら教えてください . . ..

タブ補完が効かなくなった Ubuntu 16.04

多分 ~/.hashrc をいじってからだと思うけど bash の TAB 補完が効かない。

多分ホームディレクトリを手動で作ったユーザーも効いていない。

~/.bashrcに下記を足して解決した。

. /etc/bash_completion

デフォルトの hashrc には下記で入っているのでこちらで出したほうがいいかと。

if [ -f /etc/bash_completion ] && ! shopt -oq posix; then                                                  
  . /etc/bash_completion
fi

これってもしかして… 手入れ不要のジューサー! JUISIR - Zero cleaning, Maximum juice | Indiegogo

https://www.indiegogo.com/projects/juisir-zero-cleaning-maximum-juice#/