taisablog

taisa's engineer blog

スクリーンショット 2019-06-18 17.36.05

投稿日:

-

執筆者:

関連記事

PHPの empty, isset, is_null の違いをしっかり理解する

PHPの isset、empty、is_null をしっかり理解して使おうと思い整理してみました。既にこのような記事「PHP isset, empty, is_null の違い早見表」もあるのでここではこれより少し踏み込んだところまで書いてみます。 empty, isset, is_nullの違い早見表 値 if ($var) empty isset is_null $var = 1 true false true false $var = array(1) true false true false $var = “” false true true false $var = “0” false true true false $var = 0 false true true false $var = array() false true true false $var = false false true true false $var = NULL; false true false true $var false true false true まず表ですが、順番を理解しやすい形に変えてみました。下記のように赤と青のグループで分けて考えておくと理解しやすいです。これをみると「if ($var)とempty」、「issetとis_null」が対になっているのがわかります。 感覚的には、if ($var)は値がありそうだなと思うものがtrueになり、emptyも値がなさそうだな思うものがtrueになる感じがします。issetは、何かしら値がセットされてばtrue(つまり値がfalseでも結果はtrue)、is_nullは値がnullであればtrueということになります。 実際の挙動の動作確認についてはPHPUnitを使ってテストしたものをGitHubにあげているので合わせて確認してみてください。https://github.com/taisa831/AimaiPHP empty, isset, is_null の Notice や Error 出力早見表 次に、PHPのerror_reportingをE_ALLにした場合に、indexのない配列にアクセスした場合やオブジェクトが空の変数や関数にアクセスした場合の挙動をまとめてみました。 値 if ($var) empty isset is_null $var = []; …

Vue.jsで外部APIを使ったTODOリストを作ってみた

APIを使ったTODOリストをVue.jsで作ってみました。TODOリスト用のAPIは以前書いたこちらのAPI「Go言語 GORM+GinでTODOリストのAPIを作ってみた」を利用します。CORSを全て許可しているのでどこからでも叩けるようになっています。 できたもの できたものはこちらです。http://vuejs.taisablog.com/todo APIのエンドポイント APIのエンドポイントは以下としました。 URL http://gin.taisablog.com/api/v1/ GET /todo // 一覧表示 POST /todo // 新規作成 GET /todo/:id // 編集画面表示 PUT /todo/:id // 編集(今回未使用) DELETE /todo/:id // 削除 TODOリストの処理 プロジェクトはvue-cliで作成し、APIはaxiosを利用しました。componentsにTodo.vueファイルを作成しそこにすべての処理を書いています。 インポート import axios from ‘axios’ const NOT_STARTED = 1 // 未対応 const STARTED = 2 // 対応中 const FINISHED = 3 // 完了 data function name: “Todo”, data() { return { todoList: [], inputField: ”, isActive: false, baseUrl: ‘http://gin.taisablog.com/api/v1/’ } }, created function created() { this.getTodo() }, methods : 一覧を取得する async getTodo() { try { let response = await axios.get(this.baseUrl + ‘todo’) this.todoList = response.data } catch (e) { console.log(e) …

PyCon APAC 2017 in マレーシア 参加レポ

PyCon APAC 2017に参加してきたのでその参加レポ。自分にとっては初めての海外カンファレンスだったのでとても有意義な旅行になった。 PyCon APACって? 毎年開催されているアジア太平洋のPythonカンファレンスで去年は韓国だったが、今年はマレーシアのクアラルンプールで開催された。 PyCon APAC 2017 クアラルンプールへ 前日の朝に到着 クアラルンプール着いた (@ Kuala Lumpur International Airport 2 (KLIA2) – @my_airports) https://t.co/JIqLhzUfdR pic.twitter.com/upaHiQ6QPT — たいさ (@taisa831) 2017年8月24日 とりあえずチェックインまで軽く街を散策 夜 PyConAPACに参加している日本メンバーで食事会をした。マレーシアはご飯おいしいしツインタワーすごいしでとてもよいところだった。 PyCon APAC 2017 in マレーシア 前夜祭楽しかった。飯うまだしツインタワー凄いしいいところ。 たいささん(@taisa831)がシェアした投稿 – 2017 8月 25 8:02午後 PDT カンファレンス初日 キーノート スピーカーはLuis Miguel Sanchez キーノート始まった #pyconapac pic.twitter.com/eeselKrgZB — たいさ (@taisa831) 2017年8月26日 Tea Break 30分のTea Break。Tea Breakといいつつ食事も提供された。 ティーブレイク pic.twitter.com/QylXOliBqZ — たいさ (@taisa831) 2017年8月26日 Understanding The World With The Help Of Python Understanding The World With The Help Of Python pic.twitter.com/68QWCaCREZ — たいさ (@taisa831) 2017年8月26日 Data Mining of News (Intermediate) Data Mining of News pic.twitter.com/2I6CdLHgjs — たいさ (@taisa831) …

AWS Summit Tokyo 2017:Day2 参加レポ

AWS Summit Tokyo 2017 Day2の参加レポ。そもそも私はこれまでAWS Summit参加したことがなく、AWSについてもこれから本格的に使っていこうとしている段階なので自分にとっては大変為になるサミットだった。 ※ 以下の内容については参加時メモが元になっているので一部誤っている箇所があるかもしれないですがご容赦ください。動画やスライドがあがってくれば確認できるのですがまだ見つけられなかったので確認ができませんでした。 基調講演 まず基調講演会場に入って真っ先に思ったのはめっちゃ広い!!ってこととめっちゃ豪華!!ってこと。この先もそうだけどこれが無料で参加できるなんてさすがAmazon様。という感じだった。 基調講演会場入った。めっちゃ広い。 #AWSSummit pic.twitter.com/E6bqTMVoEu — たいさ (@taisa831) May 31, 2017 オープニング 基調講演は三味線・バイオリン・ギターのスペシャルライブから始まった。これはめちゃくちゃよくてもっと聞いていたかった。 AWS Summit Tokyo スペシャルバンドによる演奏でAWS Summit Tokyo 2017 Day2 基調講演がはじまりました!#AWSSummit pic.twitter.com/SMkfuUfRIG — アマゾン ウェブ サービス (@awscloud_jp) May 31, 2017 アマゾン ウェブ サービス ジャパン 長崎忠雄 オープニングのスペジャルライブが終わりホストスピーカーとしてAWS Japan代表取締役社長が出てきた。スピーチは社長らしく今回は去年と違って規模が約2倍であることやAWSのこれまでの成長・現状そしてこれからの未来について話された。あとサービスコンソールが6月末まえに100%日本語化すると明言していたのにはちょっと驚いた。厳密には以降ホストとゲストが入れ替わってスピーチしていたがスピーチメモは以下まとめて記載する メモ 今回のサミットはRegistration 20,000人以上(世界で一番多い?) 去年の2倍の規模 スタートアップ企業の支援を強化してる 事例大全集ダウンロードできる ユーザコミュニティあるしエンタープライズ版もある サービスコンソールを6月末までに100%日本語化予定 現在90以上のサービスがある 2016年には1017の新サービスおよび機能改善数(数年前は100程度だった) Amazon AIすごいよってことでルービックキューブ動画を再生 パターンが多いので普通なら35年ほどかかるのがこれを使うと0.9秒になるよ 他にもマシンラーニングを導入した企業のコスト削減の紹介 コスト1億円削減したり10日かかってたのが10分に削減したり 5/31からAmazon LightsailがTokyoリージョンで使えるようになる(データ転送量込みで月額5ドルから) いろんな企業にとってデータの移行の課題が大きい AWS Database Migration ServiceでDBを簡単に移行ができるので現在25,000以上が移行済みである ペタバイト級のデータ移行もあるけどそんな場合はAWS Snowballが利用できる AWSサポート充実してる(ベーシック・開発者向け・エンタープライズ向けなど) コストダウンについて これまで2006年のサービスインから明確な競合がいないにもかかわらず61回の値下げをしてる これはユーザファーストであることの表れである オンプレからAWSとのハイブリットのつなぎを重要視 フルマネージドサービスで運用負荷軽減 災害に対するリスクは高い(日本では2018にOsaka Regionが利用可能になる予定) セキュリティとコンプライアンスをファーストプライオリティとしている ゲストスピーカー/三菱UFJファイナンシャルグループ 村林 聡 まず初めのゲストスピーカーは三菱UFJファイナンシャルグループ執行役専務グループCIO。まず最初に自分たちはレガシーな企業だと2回程念を押すように言ったのち、これからはデジタルトランスフォーメーション、オープンイノベーションへ向かっていくという話をされた。具体的にはAPI、BlockChain、AIなどを駆使し7年後には銀行のコアの業務を4割ほどをAIに置き換えられるのではないかと。また、現在はオンプレから順次AWSへサーバ移行中で、現在は5つ程稼働しているが、100程が移行検討中である。ただ最後に今期で退任して次のところへ行きますといって締めていったのでなんとも言えない空気になった。 メモ デジタルトランスフォーメーション、オープンイノベーションへ オンプレから移行予定 AWSでは現在稼働中5つ(100くらい検討中) 今期で退任する ゲストスピーカー/セイコーエプソン 熊倉一徳 続いてのゲストスピーカーはセイコーエプソン株式会社のIT推進本部 本部長が登壇。セイコーエプソンは創業当時からものづくりの企業でありリアルな世界にこれからも提供していくのは変わらないといった一方で現在はサイバー空間も重要視し力を入れている。 メモ ものづくりの企業 リアルな世界に提供するのは変わらない サイバー空間も重要視 クラウドへの移行はかなり困難だった サーバレスアーキテクチャを採用 ゲストスピーカー/レコチョク 稲荷 …

Python Bottleのソースを読む リクエスト・レスポンス編

Pythonの軽量WebフレームワークBottleのソースを読む リクエスト・レスポンス編   Class Hierarchy ここの部分 リクエスト受付からレスポンスまで 前回、サーバの立ち上げ時にルーティングが読み込まれるところまでを確認したので今回はリクエスト受付からレスポンスを返すまでを見てみる。 まずリクエストが来るとwsgiref/handlers.pyのrunが呼ばれ、Bottleの__call__が呼び出される wsgiref/handlers.py self.setup_environ() # リクエストを処理しレスポンスを取得する self.result = application(self.environ, self.start_response) # レスポンスを返す self.finish_response() bottle.py def __call__(self, environ, start_response): “”” Each instance of :class:’Bottle’ is a WSGI application. “”” return self.wsgi(environ, start_response) リクエストを処理する際に、LocalRequestのbindを呼び出しBaseRequestのコンストラクタにてenvironとLocalRequestをセットする。これでBaseRequestのラッパーからパラメータを取得可能になる。レスポンスも同様にLocalResponseのbindを呼び出す。 try: out = None environ[‘bottle.app’] = self request.bind(environ) response.bind() try: self.trigger_hook(‘before_request’) except HTTPResponse: return _e() # ここでリクエストの主処理を実行する out = _inner_handle() return out; finally: if isinstance(out, HTTPResponse): out.apply(response) self.trigger_hook(‘after_request’) BaseRequestのコンストラクタ self.environ = {} if environ is None else environ self.environ[‘bottle.request’] = self リクエスト情報は以下のように取得可能になる def index(): request.forms.get(‘test’) return ‘TOP’ LocalRequestは以下の通りマルチスレッドに対応している #: A thread-safe instance of :class:`LocalRequest`. If accessed from within a #: request …