動かざることバグの如し

近づきたいよ 君の理想に

はてなブログをHTTPS化した話

ついにこのブログもSSL化する時が来た

動かざることバグの如し

うん、ちゃんと表示されてる(

HTTPS化したあとにやったこと

Google Search Console再連携

クソ仕様としか言えないのだが、Search Consoleではhttpとhttpsは分けて計測される

したがって連携を追加する必要がある

GAのデフォルトURLを変更

アナリティクスの管理>プロパティ設定を開くと、『デフォルトのURL』という項目がある。

これをhttpsで選択する。

リダイレクトの挙動

curlで確認してみた 301でリダイレクトしているのがわかる

$curl -sD - -o /dev/null http://thr3a.hatenablog.com/entry/20190407/1554621409
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Sat, 10 Aug 2019 22:24:45 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Cache-Control: private
Location: https://thr3a.hatenablog.com/entry/20190407/1554621409
Vary: User-Agent, X-Forwarded-Host, X-Device-Type
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-Revision: aea41f932ffaacb829d7e6593b3ad384
X-XSS-Protection: 1
X-Runtime: 0.040431
X-Varnish: 696778893
Age: 0
Via: 1.1 varnish-v4
X-Cache: MISS

さーて、この影響でどのくらいPV下がるんでしょうか(焦り

iTerm2のステータスバーを真下に表示させる方法

背景

Macユーザー御用達のターミナルアプリ、iTerm2だが、最近になってなんとステータスバーがついた

Status Bar - Documentation - iTerm2 - macOS Terminal Replacement

これでCPU使用率とか、ネットワークの速度、カレントブランチ等の表示、あと時計も表示できるすごい =)

頑張ればオレオレコンポーネントも作れるらしい

が、残念ながらタブの真下に表示されてしまう。。。普通ステータスバーって言ったら一番真下じゃないんか、、、

結論

設定可能

  • iTerm2の設定画面を開く
  • 「Appearance」タブをクリック
  • 「General」タブを表示
  • 「Tab bar location:」の項目があるので「Bottom」を選択

f:id:thr3a:20190811061103p:plain

これで真下に表示されるようになった iTerm2くっそ便利だけともうちょっと設定表示洗練してほしい、、

Year!!!

f:id:thr3a:20190811061156p:plain

Gitlab APIを使って一括でユーザー全員を特定のグループに所属させる

環境

  • Gitlab 11

背景

全員が使えるプロジェクトが作れるグループがほしかった。

しかしGitlabの仕様上、グループ自体の権限を「internal」または「private」にしても、全員が閲覧プロジェクトにはなるが、結局そのグループに所属していないとそのグループ上に新規にプロジェクトを作成したりMasterにマージ等ができない

つまり、何でもありのオープンワールド的なグループを作るには全員をそのグループのメンテナーとして追加するしかない。

人数的に画面上で追加していくのはツラみがあったのでAPI経由でできないか試してみた。

前準備

GitlabのAPIのアクセスにはプライベートトークンというのが必要である。これは管理画面のプロフィールから取得できる。

手順

まずはGitlabに登録されている既存のユーザーのID一覧を取得する active=trueで停止されたユーザーは除外される

curl -H "Private-Token: xxx" https://gitlab.example.com/api/v4/users?active=true

次に追加したいグループのIDを調べるためにグループ一覧を取得

curl -H "Private-Token: xxxx" https://gitlab.example.com/api/v4/groups

最後に/groups/:id/members で追加 以下は一例

curl -X POST --header 'Private-Token: xxxx' --data 'user_id=17&access_level=40' https://gitlab.example.com/api/v4/groups/52/members

RubyでSelenium+Capybaraで簡単スクレイピング

環境

  • Ruby 2.x
  • Capybara 3.28.0

やりたいこと

Selenium構文ツラいからCapybara使いたい人生だった(使った

require "selenium-webdriver"
require "capybara"
require "capybara/dsl"
include Capybara::DSL

Capybara.configure do |capybara_config|
  capybara_config.default_driver = :selenium_chrome
  capybara_config.default_max_wait_time = 10
end

ua = "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36"
Capybara.register_driver :selenium_chrome do |app|
  options = Selenium::WebDriver::Chrome::Options.new(
    binary: "/Applications/Chromium.app/Contents/MacOS/Chromium",
    args: ["--headless", "--disable-gpu", "window-size=1280x800"],
  )
  Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
end

Capybara.javascript_driver = :selenium_chrome

# Yahooで検索してスクリーンショットを取得
visit "https://www.yahoo.co.jp"
find("#srchtxt").set("ruby")
find("#srchbtn").click
page.save_screenshot("ss.png", full: true)

RubyでHeadless Chromeを操作してスクレイピング

環境

概要

RubyスクレイピングするならMechanize一択だが、昨今のサイトではJavascriptが動かないとデータが取れないサイトも多い。

PhantomJSが死んでしまった今、Headless Chromeが1番いいのだが、Puppeteerはちょっと、、て時にRubyでやりたいて時にselenium-webdriverを使ってスクレイピングをしてみたメモ

インストール

必要なものは以下

Chrome

先に動かすサーバーにChrome、ないしはChromiumが必要

ChromeDriver

Chromeを操作するのに必要

https://sites.google.com/a/chromium.org/chromedriver/

selenium-webdriver

これはGemなのでbundle init して bundle add selenium-webdriver でおk

コード

Yahooにアクセスしてスクリーンショットを取るだけのシンプルなサンプルコードは以下

require "selenium-webdriver"

ua = "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36"
options = Selenium::WebDriver::Chrome::Options.new(
  binary: "/Applications/Chromium.app/Contents/MacOS/Chromium",
  args: ["--headless", "--disable-gpu", "window-size=1280x800"],
)
driver = Selenium::WebDriver.for :chrome, options: options
driver.navigate.to "https://www.yahoo.co.jp"
puts driver.title
driver.save_screenshot("ss.png")

で実行するとスクリーンショットが取れているはず

f:id:thr3a:20190810142622p:plain