kei0425tan’s blog

技術的なことを主に

paiza D060:【キャンペーン問題】AボタンとBボタン

キャンペーンをやっていたので久しぶりにpaizaの問題を解きました。

paiza.jp

今回は題では問題の見当がつきませんでしたが、流し読みでチョー簡単なことが分かったので速攻で提出しましたが
それでも、1分以上かかってしまいました。

やっぱり、タイムを気にするのであれば、提出前のチェックはしちゃいけませんね。

ちなみにキャンペーンはこんな感じ
paiza.jp
https://paiza.jp/assets/campaign/amazon_gift_Reward_03-82821d3aa15460642db01e6789823dd5.png

アマゾンギフト
1万円分×2名様
5000円分×5名様
1000円分×5名様
500円分×10名様

あたったらいいなー

Nexus5Xシステムアップデート

Nexus5Xのシステムアップデートが降ってきたのでメモ

バージョンアップ自体は5分ほどで終了しました。


バージョンアップ前

Androidバージョン
7.1.1

Androidセキュリティパッチレベル
2017年1月5日

ベースバンドバージョン
M8994F-2.6.36.2.20

カーネルバージョン
3.10.73-gd28c62a
android-build@wpef24.hot.corp.google.com #1
Thu Nov 17 17:36:12 UTC 2016

ビルド番号
N4F26I


バージョンアップ後(太字が変更点)
Androidバージョン
7.1.1

Androidセキュリティパッチレベル
20017年2月5日

ベースバンドバージョン
M8994F-2.6.36.2.20

カーネルバージョン
3.10.73-gfe160e5
android-build@wpho2.hot.corp.google.com #1
Wed Dec 7 20:26:32 UTC 2016

ビルド番号
N4F26O

javascript の Async/Await を利用した場合のエラーハンドリングについて

普段趣味ではjavascriptでプログラムを書くことが多いのですが、callbackが面倒なので、ずっとPromiseを使っていました。

thenって書けばインデントも増えないし、ブロックごとに新規に変数作ったりしていいじゃんって思っていたのですが、、、

最近作っているアプリケーションで相手のサーバのせいで、通信のエラーが頻発するようになり、やっぱりエラーハンドリングがちょっとつらいので、node v8からリリース予定のAsync/Awaitについて調べてみました。

nodeで試す場合は、v7にして、さらにオプション --harmony-async-awaitを付けてください。
ブラウザの場合は、そのまま貼り付ければ実行できます。


この結果を見ると、await中の例外は残念ながらキャッチしてくれませんでした。

よって、awaitで呼び出すメソッドは、確実に例外処理を行う必要があります。(try catchして、rejectを呼び出すなど)
一方、awaitを利用するほうも、rejectを確実に処理をする必要があります。(try catchして、リカバリなどを行う)

まあ、もともとコールバックで行っていた場合は例外が飛ばなかったし、Promiseで行っていた場合も、catchの付け方が難しかったので、使い慣れたtry catchでエラーハンドリングができるようになるのは、大きなメリットだと思います。

IDCFクラウドに引っ越し

さくらクラウドがクーポン使って無料で利用できたのでしばらく利用していたのですが
無料期間が過ぎそうなので、お引越ししようかと思いました。

そんなに大したことはやっていないため、最安値でサーバが構築できるところを探していましたら、IDCFクラウドが最小構成で500円/月と一番安そうです。

なので、お引越しすることにしました。


www.idcf.jp

今は、3000円分のクーポンプレゼントだそうです。
なので、最小構成の場合は半年間無料でサーバが立てられます。

そういったわけで、普通に仮想マシンを作成したのですが、いつも通りsshで接続しようとしたのですが、できません。
よくよく調べてみると、ここの仮想マシンはプライベートネットワーク上に作成され、インターネット接続をするためには、ポートフォワーディングとファイヤウォールの設定をしないと接続できないようでした。

その設定方法はこちら
めちゃ楽ガイド
https://www.idcf.jp/cloud/pdf/IDCFCloud_installation_guide_nonreg.pdf


ここの仮想マシンのネットワーク設定の通りにやれば、普通はできます。

しかし、全く理解をせずにそのままやってたら、接続できませんでした;;

SSHの設定で、ソースCIDRをMy IPにすると、ブラウザのIPアドレスからのみ接続を許可することになります。
なので、ここは、固定IPで契約している人以外は、ANYにしておくほうがよいと思います。

HTTPとかは必要になったら設定するほうがいいかもしれません。

とりあえず、躓いたところのメモでした。

gitlab→DockerHub→arukas連携

github→DockerHub→arukas連携の記事がありました。

qiita.com

これは、githubにコミットするだけで、自動的にarukasまでデリバリしてくれる非常にありがたいものなのですが
このままでは、githubにpublicで登録しないとうまく動きません。

これは、DockerHubの制限で、automated buildを選択する場合には、仕方のないことでした。

しかし、中には公開したくないソースもあるもので、なんとかprivateでできないかと調べた結果です。

gitlabのCI

gitlabにはCIが内蔵されており、pushされると自動的にタスクを実行する仕組みがあります。
それを利用して、dockerのイメージを作成し、DockerHubにpushすることにより、autometed buildと同じことができます。

DockerHubにpushした後は、上記の山本様の記事同様にすればOKです。


以下、DockerHubのユーザ名はusername、パスワードはpassword、リポジトリ名はhogehogeとします。


gistf32edfe9dbedff86982d7541607b0d18

google spreadsheetの1セルの最大文字数

50000文字まで入るそうです。

google driveの容量も使わないし、ちょっとしたデータを格納するのにいいかもしれませんね。

例えば、ファイルをbase64で文字列変換して、spreadsheetのセルに突っ込むと
セルの最大数が200万セルなので、base64の効率を137%とすると、50GB以上入るかもしれません。

base64 wikipedia
https://ja.wikipedia.org/wiki/Base64ja.wikipedia.org
グーグルスプレッドシート
support.google.com

nodejsで空きポートを探す

dockerを使ってて、コンテナを作るときに空いてるポートを検索する必要があって作成してみました。


gist53fa12e5c95bf476ea1aed82c38e75a2

Promiseを使っているので、v6以上になります。