Puppeteer を使って Yahoo のニュースをスクレイピングしてみる

kanazawa.rb meetup #72 で Puppeteer を触る機会があったので残しておく。

Puppeteer

github.com

インストールは

npm i puppeteer

ver 1.7.0 から puppeteer-core ってのが公開されたらしくこっちだと Chromium を同時にダウンロードされることはないみたい。

すること

f:id:k6i:20180825141555p:plain

Yahoo のページから上記のニュースの一覧を取得してコンソールに表示してみる

プログラム

Puppeteer を使って Yahoo のニュースをスクレイピング

こんな感じで、 「ブラウザを起動して、ヤフーのページを開いて、ニュース取得する Javascript を実行するっていう」を Node.js を使ってコマンドラインから実行できる。

実行結果

node scraping_yahoonews.js
[ 'オスプレイ 佐賀県民の不安写真',
  '関東など猛暑日 東京22日ぶり写真NEW',
  'ロヒンギャ難民 長期化に焦り写真NEW',
  '愛知岐阜の遺体 仕事で面識か写真NEW',
  '旧盆の海にお化け?気象台解説写真',
  '吉田輝星 内定先監督の不安写真',
  'みやぞん まずは1.55キロ完泳写真NEW',
  '南米熱狂 FLOWのアニソン写真' ]

感想

Puppeteer の理解より先に、Javascript の書き方の理解が必要そう。 async/await とかどうなってるのか全然わかってないし、 jQuery 使って〜とかの知識しかなくてちょっと辛い。

VS CodeでSpring Boot を起動しようとしたら「Build failed, do you want to continue?」と表示されて起動しない

バージョン

  • VS Code 1.25.1
  • Debugger for Java 0.10.0
  • Spring Boot 2.0.2

参照

下記ページを参照することで解決できた。

stackoverflow.com github.com

したこと

  • F1 キー押す
  • Java: Open Java Language Server log file を選択
  • 6行目に
Command-line arguments:  -data C:\Users\xxxx\AppData\Roaming\Code\User\workspaceStorage\56838f4e76654cb1f380037ac07c0b54\redhat.java\jdt_ws

ってあるので、56838f4e76654cb1f380037ac07c0b54 のフォルダを削除するかリネームする。(VS Code 一旦終了してする)

Java Language Server が workspace を持ってるみたい。

  • F5 キー押して起動してみる
  • 起動したー

Spring Boot でセッションタイムアウトを1秒に設定しようとしてハマった

バージョンとか

  • Spring Boot 2.0.2
  • Embedded Tomcat

設定してみる

application.yml にタイムアウトの設定を追加して、下記のコードで確認を行う。

タイムアウトの値は極端に短く 1 秒になるようにしてみる。

server:
  servlet:
    session:
      timeout: 1
int t = request.getSession().getMaxInactiveInterval();
System.out.println(t);

結果は

60

getMaxInactiveInterval() の戻り値は秒だから 60 秒ってことか。

timeout: 2に変更しても、結果は変わらず。

何で 1 秒ならんの?

ちなみに、yml から設定を削除して実行してみると、1800 が表示されるので、 デフォルトは 1800 秒( = 30 分) のようだ。

60 になってるから設定は何かしら効いているっぽい。

よくわからんからソース読む。

で、このあたりが怪しい。Math.max で大きい方取ってる。

   private long getSessionTimeoutInMinutes() {
        Duration sessionTimeout = getSession().getTimeout();
        if (isZeroOrLess(sessionTimeout)) {
            return 0;
        }
        return Math.max(sessionTimeout.toMinutes(), 1);
    }

github.com

リファレンスには下記のようにあるので、application.yml の設定は「秒」で設定されてる。

server.servlet.session.timeout= # Session timeout. If a duration suffix is not specified, seconds will be used.

https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html

Duration がよく分からなかったので実験してみる

Duration 実験

まとめ

つまり、application.yml の 1 秒とか 2 秒の設定は、Duration#toMinutes()0 になって Math.max(sessionTimeout.toMinutes(), 1) の比較で 1 に負けて、1 分つまり 60 が設定されたってことか。

秒で設定出来そうに見えて、分刻みでしか設定出来ないってことになるんだな。

最小の設定は 1 分 (= 60 秒)なんだな。

VS Code で Java を書くときに Lombok が無くてエラーが出たとき

VS CodeJava のプログラムを見たとき、Lombok を使用している場合大量のエラーが発生した。

前までは自分でパスを設定する必要があったみたいだけど、今はエクステンションが用意されているみたいで追加するとUser Settings に下記が追加される。

ビルドしてエラーが無くなって解決。

"java.jdt.ls.vmargs": "-noverify -Xmx1G -XX:+UseG1GC -XX:+UseStringDeduplication -javaagent:\"C:\\Users\\xxxxx\\.vscode\\extensions\\gabrielbb.vscode-lombok-0.9.4/server/lombok.jar\" -Xbootclasspath/a:\"C:\\Users\\xxxxx\\.vscode\\extensions\\gabrielbb.vscode-lombok-0.9.4/server/lombok.jar\"

marketplace.visualstudio.com

参考

Lombok support · redhat-developer/vscode-java Wiki · GitHub

Spring Boot Thymeleaf Starter を 1.5.10 から 2.0.1 にあげたらレイアウトがうまく動かなかったけど解決した

2.0 から Compile Dependencies の nz.net.ultraq.thymeleaf / thymeleaf-layout-dialect が無くなっている。

Maven Repository: org.springframework.boot » spring-boot-starter-thymeleaf » 1.5.13.RELEASE

Maven Repository: org.springframework.boot » spring-boot-starter-thymeleaf » 2.0.2.RELEASE

compile('nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect')

を builld.gradle に追加して解決

追記

Spring Boot 2.0 Migration Guide · spring-projects/spring-boot Wiki · GitHub

公式にもマイグレーションガイドで書いてあった。

Thymeleaf 3 からはネイティブな方法が用意されてるから無くなってるらしい。

使いたいなら自分で追加してくれ。

とのこと。

AWSOME DAY ONLINE TRAINING の メモ

オンラインセミナーを聞いたときのメモ

聞きながらだったので、取り逃しとかもある

AWS の紹介と歴史~Amazon EC2, Amazon EBS, Amazon S3, Amazon VPC

  • アマゾン社内のビジネス課題を解決するために生まれた
  • AWS 上で実現できないことは無いと言われている
  • 3000 を超える、機能拡張を実施
  • 最近ではセキュリティの厳しい金融機関でも採用
  • 強み
    • 資本の支出を変動費に切り替える
      • 従量課金で、初期費用が発生しない
    • 規模の経済の利点を得る
      • 60 回以上の値下げ(薄利多売)
    • キャパシティの予測が不要
    • スピードとアジリティの向上
    • データセンターの運用保守費が不要に
    • 分単位で世界中にデプロイ
  • AWS グローバルインフラストラクチャ

EC2

EBS

  • Amazon EC2 インスタンスストア
    • ハイパーバイザー内にある
    • インスタンスを止めるとデータは消える
  • Amazon EBS
    • EC2 からはネットワーク経由でアクセス
    • このネットワークは高速
    • スナップショットを S3 に保存
    • 支払いはプロビジョニングした分 100GB 中 5GB しか使って無くても 100GB の課金

S3

  • ファイルシステムとしての使用は推奨していない
  • バケットに無制限のオブジェクトを保存可能
  • 最大 5TB のオブジェクトを保存可能
  • 99.999999999% のオブジェクトの耐久性(イレブン・ナイン)
    • 3箇所以上のデータセンターにデータを格納している
  • 99.99% のオブジェクト可用性
  • オブジェクトはインターネットに公開可能
  • 動画配信や静的なサイトの構築が可能
  • バケット
    • デフォルト 100個(上限緩和申請可能)
  • オブジェクト
  • キー
  • アクセスコントロールリスト/バケットポリシー

  • ディレクトリの概念は無く全てフラットに存在している

  • バージョニング
    • 有効化することでバージョン管理される
    • バージョン管理されているファイルが全て課金対象になる
  • Amazon Glacier
    • S3 に似たサービス
    • 低コストの長期アーカイブサービス
    • 低頻度アクセスのデータに最適
    • オンプレミスの磁器バックアップの置き換えをイメージ
    • リアルタイムアクセスには利用不可
  • Amazon S3 - 低頻度アクセス(IA)
    • 低頻度アクセスのデータに最適
  • ライフライクルポリシー
    • S3 -> S3 低頻度アクセス -> Glacier -> 削除
    • 保存期間に基づいてオブジェクトを削除、移動ができる
  • 使用した分のみの料金が発生
  • AWS簡易見積ツール

VPC

  • 仮想ネットワーク
  • サブネットと呼ばれるネットサーク

    • それぞれのアベイラビリティーゾーンに作成する
    • private サブネット
      • インターネットへ出入り出来ない
    • public サブネット
      • インターネットへ出入りできる
  • public ip アドレス(Global IP アドレス)

  • private ip アドレス(Local IP アドレス)
  • VPN 接続可能
  • 全てのリソースが VPC 内にあるわけではない
    • S3 はリージョンに存在sる

AWS の伸縮性とベストプラクティス

セキュリティ、アイデンティティ、およびアクセス管理

  • 責任共有モデル
    • お客様責任範囲
    • AWS 責任範囲
  • SSL エンドポイント
    • 安全な送信
  • セキュリティグループ
  • VPC

    • ネットワーク制御
  • IAM

    • ユーザーとアクセスの管理
    • ロールと権限の管理
    • フェデレーティッドユーザーと権限の管理

    • IAM ユーザー

      • アクセスキーの使用は推奨されていない
      • アクセスキーは IAM ロールで同じことができる
    • IAM グループ
    • IAM ロール
      • ヘルメットの役割
      • 通常はアクセスできないがヘルメットをかぶる(ロールを引き受ける)ことでアクセス権限を委任する
    • IAM ポリシー

      • デフォルトは拒否
      • 最小権限の原則に従う(ベストプラクティス)
      • 明示的に許可された場合にアクセス可能になる
    • AWS STS(一時セキュリティ認証情報)

AWS のデータベース

  • Amazon RDS

    • マネージド型サービス
    • 運用負荷を削減
    • マルチ AZ 機能

      • DB インスタンスがスタンバイ状態で別の AZ に配置されて、同期的にレプリケートされる
      • マスタに障害発生時に自動的にスタンバイに対してフェイルオーバーを行う
      • メンテナンス時にスタンバイをメンテしてフェイルオーバーして、マスタをメンテすることが可能
    • 自動バックアップ

    • 手動スナップショット

      • S3 に保存
    • Amazon RDS for Aurora

  • Amazon DynamoDB

    • NoSQL

      • = Not Only (SQL SQLだけではない)
      • 水平方向のスケーラビリティが可能
    • スケーラビリティ

  • 共有ストレージ

VS Code で markdown のプレビュー表示のフォントを変更したい

ユーザー設定で下記の項目を編集して解決。

今回は、

fontFamily に Ricty Diminished

fontSize を 18 に変更

"markdown.preview.fontFamily": "-apple-system, BlinkMacSystemFont, 'Segoe WPC', 'Segoe UI', 'HelveticaNeue-Light', 'Ubuntu', 'Droid Sans', sans-serif, 'Ricty Diminished'",
"markdown.preview.fontSize": 18