2018年以降の記事はGitHub Pagesに移行しました

AndroidのAccountManagerをとりあえず動かすところまで

あらすじ

  • Androidでアカウントに関連する情報をアプリ内に持ちたくない
    • Android側でAccountManagerという仕組みを用意してくれている
  • しかし、説明を読んでもイマイチピンとこなかった
  • 実際に動きを確認できるところまでサンプル作ってみた

参考

AccountManagerの概念

AndroidSecurity安全なアプリケーションを作成するために P267より抜粋

環境

動くもの

ハマり

AccountManager Authenticator ともにサンプル通り作ってみようと思ったらエラーの切り分けができなかった

  • Android的に×なのか
  • AccountManager的に×なのか
  • 使おうとしたGoogle APIのお作法的に×なのか(多分これが一番有力)
    • Android Security(2012/2/21 第二版)のサンプルが古めのGoogle APIを使っていたため、これを最新に置き換えて〜という作業も発生していた

空の Authenticator を作って、とりあえず登録できる口だけ用意する事で一気通貫通す事ができた!

Golangで作ったスクリプトをbrew install&brew updateできるようにする

あらすじ

Golangスクリプトを作ったので、バイナリにしてhomebrewでインストール/アップデートできるようにしてみた。

細かく色々できるけど、とりあえず今回は最小で。

参考

環境

要件

  • GitHubに上げたスクリプトbrew install xxxでインストールできるようにしたい
  • でもたまにはgo get github.com/xxxでもインストールしたい

ブツ

まずはブツを作った。

引数にディレクトリ与えたら、最下層のファイルを直前のディレクトリ名にリネームするっ的なスクリプト。こちらは特に意識する必要はない。

なんとなく動くようになったら、go buildして作ったファイルをGitHubのReleasesからv0.1として追加した。(割愛/今回は配布先のPCにgoコマンドがない前提なので、実行ファイルをそのまま配る)

  • 実行ファイルのUrlを覚えておく
    • https://github.com/gosyujin/bulkrenamer/releases/download/v0.1/bulkrenamer
  • sha1ハッシュ値を取っておく

Homebrew用設定

Formulaの作成

brew createで作れるみたいだけど、とりあえず手打ち。

リポジトリの名前はhomebrew-APPNAMEとするルール。今回はbulkrenamerなのでhomebrew-bulkrenamerリポジトリを作った。

ファイルはAPPNAME.rb。今回はbulkrenamer.rb

    class Bulkrenamer < Formula
  desc "BulkRenamer"
  homepage "https://github.com/gosyujin/bulkrenamer"
  head "https://github.com/gosyujin/homebrew-bulkrenamer.git"
  version "v0.1"
  url "#{homepage}/releases/download/#{version}/bulkrenamer"
  sha1 "5e3ac6469395aae60a00c61f45b5343207cca330"
  def install
    bin.install Dir['bulkrenamer']
  end
end

  

sha1で比較とか他にも色々できるが、ひとまず

  • urlはツールの場所
  • versionはFormulaのバージョン。バージョンアップ時に使う

だけ。

インストールとアップデート

Homebrewでインストール

tapしてinstallでいける!

    $ brew tap gosyujin/bulkrenamer
==> Tapping gosyujin/bulkrenamer
Cloning into '/usr/local/Library/Taps/gosyujin/homebrew-bulkrenamer'...
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
Checking connectivity... done.
Tapped 1 formula (25 files, 16.8K)
$ brew install bulkrenamer
==> Installing bulkrenamer from gosyujin/bulkrenamer
==> Downloading https://github.com/gosyujin/bulkrenamer/releases/download/v0.1/bulkrenamer
==> Downloading from https://github-cloud.s3.amazonaws.com/releases/52855923/178f416a-dfc8-11e5-9f9c-fc48ca5e1c98?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAISTNZFOVBIJM
()
🍺  /usr/local/Cellar/bulkrenamer/v0.1: 2 files, 7M, built in 8 seconds
$ bulkrenamer -v
BulkRenamer ver.0.1

  
Homebrewでアップデート

homebrew-bulkrenamerを更新してbrew updateしてもらう。

今回は配布ファイル変えずにバージョンだけ上げてみた。

  • v0.2になっているのは一回試した後だから
  • 本来の流れ的にはブツ(bulkrenamer)を更新してreleasesに新しいバージョンを登録後、この操作を行う

brew update

    $ brew update
Updated Homebrew from 468adbc to 215cb53.
Updated 3 taps (caskroom/cask, caskroom/versions, gosyujin/bulkrenamer).
 ==> New Formulae
dropbox-uploader         gnu-complexity
 ==> Updated Formulae
cromwell                 mitmproxy
dcd                      nss
dmd                      planck
gosyujin/bulkrenamer/bulkrenamer ✔               rust
libpagemaker

  

brew outdatedで更新があるツールの確認。

    $ brew outdated
gosyujin/bulkrenamer/bulkrenamer (v0.1, v0.2 < v0.3)
go (1.5.3 < 1.6)
openssl (1.0.2f < 1.0.2g)

  

brew upgrade

    $ brew upgrade bulkrenamer
==> Upgrading 1 outdated package, with result:
gosyujin/bulkrenamer/bulkrenamer v0.3
==> Upgrading gosyujin/bulkrenamer/bulkrenamer
==> Downloading https://github.com/gosyujin/bulkrenamer/releases/download/v0.3/bulkrenamer
==> Downloading from https://github-cloud.s3.amazonaws.com/releases/52855923/c0686154-e21b-11e5-92d2-6d76b5ceb265?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAISTNZFOVBIJM
()
🍺  /usr/local/Cellar/bulkrenamer/v0.3: 2 files, 7M, built in 8 seconds

  

El Capitan上に古いpumaをインストールすると失敗する

あらすじ

El Capitan上に bundle install で古い puma を入れようとしたらエラーになった。

環境

解決策

EL Capitanに古い 2.14 より低い puma を入れるには --with-opt-dir でopensslのパスを指定する必要がある。

$ bundle config build.puma --with-opt-dir=/usr/local/opt/openssl
$ cat ~/.bundle/config
---
BUNDLE_BUILD__PUMA: "--with-opt-dir=/usr/local/opt/openssl"

指定しないとエラー。

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
    /Users/ataka/.rbenv/versions/2.1.4/bin/ruby extconf.rb
checking for BIO_read() in -lcrypto... yes
checking for SSL_CTX_new() in -lssl... yes
creating Makefile
make "DESTDIR=" clean
make "DESTDIR="
compiling http11_parser.c
compiling io_buffer.c
io_buffer.c:119:21: warning: passing 'uint8_t *' (aka 'unsigned char *') to parameter of type 'const char *' converts between pointers to integer types with different sign [-Wpointer-sign]
  return rb_str_new(b->top, b->cur - b->top);
                    ^~~~~~
/Users/ataka/.rbenv/versions/2.1.4/include/ruby-2.1.0/ruby/intern.h:704:29: note: passing argument to parameter here
VALUE rb_str_new(const char*, long);
                            ^
1 warning generated.
compiling mini_ssl.c
In file included from mini_ssl.c:3:
/Users/ataka/.rbenv/versions/2.1.4/include/ruby-2.1.0/ruby/backward/rubyio.h:2:2: warning: use "ruby/io.h" instead of "rubyio.h" [-W#warnings]
#warning use "ruby/io.h" instead of "rubyio.h"
 ^
mini_ssl.c:4:10: fatal error: 'openssl/bio.h' file not found
#include <openssl/bio.h>
         ^
1 warning and 1 error generated.
make: *** [mini_ssl.o] Error 1
make failed, exit code 2
Gem files will remain installed in /Users/ataka/github/test/vendor/bundle/ruby/2.1.0/gems/puma-2.13.4 for inspection.
Results logged to /Users/ataka/github/test/vendor/bundle/ruby/2.1.0/extensions/x86_64-darwin-15/2.1.0-static/puma-2.13.4/gem_make.out

調査ログ

2.14.0 以降は修正されているので、特に指定せずともインストール成功する。 2.13.92.14.0 のdiff。

PyLadiesTokyo #8でSphinxハンズオンのTAをしてきた #sphinxjp

あらすじ

さる1/16に開催されたPyLadies TokyoにてSphinxのハンズオンが開催されたのでTAしてきました。

振り返りKPT

Keep
Problem
  • 特に大きな問題もなく、もしもの時のために小さい電源タップを持参すると助かる時があるかも?
Try
  • ハンズオン質問あるあるみたいなものがまとめられるといいかも

ハンズオンあるある

エディタ編
  • 半角スペース、全角スペース、タブを可視化できるエディタだとエラーに気づきやすい…かも!?
    • 不意に混同するとハマっちゃう
アウトプット編(html)
  • テーマ、適用されてない?
    • (1.3以降の)デフォルトテーマである alabaster はそういう見た目なのだ
    • ブラウザの横幅を変えるとメニューバーが目に見えて変化するのでわかりやすい
  • default があるのになんでデフォルトがこれじゃないの?(定番になりつつある質問)
    • Sphinx 1.3からデフォルトテーマは alabaster になった
    • あわせてデフォルトテーマ defaultclassic に名称変更されたが、互換性維持のために残っている
    • Sphinx 1.3でテーマを default に設定して make html すると alabaster 使いなよと警告が出る
    • Sphinxの更新履歴 — Sphinx 1.3.2 ドキュメントによると1.3b3でそうなった様子
$ make html
(略)
WARNING: 'default' html theme has been renamed to 'classic'. Please change your html_theme setting either to the new 'alabaster' default theme, or to 'classic' to keep using the old default.
(略)

golangでニコ動の動画をパトロールするツール「nicony」を作った

あらすじ

年末年始にかけてgolangをまたさわってみた。半年以上触ってないと全部忘れてる。

作ったもの

デモ

できること/やりたいこと

  • ニコレポページに上がる動画一覧をチェックして、コメントと動画をパトロールできる
  • id指定で単一動画でも同じ事ができる
  • マイリストID指定でマイリストの動画を順番にパトロールしたい

学んだこと

あとやりたいこと

  • 我流で書きまくってるから、goのお作法を知ったらそっちに寄せる
  • テスト作る

とりあえず(30分位で作った)ロゴがあるとテンション上がる。ロゴ駆動開発。

SphinxCon JP 2015 で雑用してきた #sphinxjp

あらすじ

さる11/24にSphinxCon JP 2015が開催されました。

今年はそっこうで枠が埋まったので、発表枠ではなくなんかあった時にフォローに回れるよう雑用枠で参加。(去年は発表枠もらってた SphinxCon JP 2014 で発表してきました #sphinxjp - kk_Atakaの日記)

connpassに資料、Toggeterに当日の様子がまとまっています。

個人的には、鹿野さんの基調講演でまとめられていたドキュメントの歴史がSphinxに限らずものすごく貴重だと思った。

昔に遡れば遡るほど知らない名前の技術が使われており、またそれが少なからず後世のツールに影響があるというのを知っておくと色々楽しい。

振り返りKPT

雑用枠的な振り返り。

Keep
  • 1枠あると安心、雑用枠
    • スタッフ/発表者は当日諸々の作業に追われる事態も想定して、1人暇な人が待機してるとリカバリ効いていい感じ
Problem
  • オープニングにちょっと手間取った
    • 会場が開場する前に到着している人が結構多くて入り口でワチャワチャしてて肩身が狭かった…
    • 開場が遅れそうな場合は「開場するまで近場で時間つぶしてて」ってアナウンスするとよかったかも
    • 主催/発表者/お手伝いの人は何時までに、参加者は開場アナウンス出てから入れるとスムーズだけどうまくいくかな?
  • 会場の飲食、電源、WiFi情報の周知
Try
  • デリバリー業とスイーパー業をもくもくとやってた
    • ゴミの分別とかは予め極めておく
  • クロージングと平行して、忘れ物チェックとゴミはゴミ集め場に
    • 今回忘れ物はなかったみたい
  • SphinxCon 2016開催決定!?

以下、自分で見直す用

「ドキュメントシステムはこれを使え2015年版」鹿野桂一郎(@golden_lucky)さん

Sphinx電子書籍を書こうと色々やってみた」@momijiameさん
  • speakerdeckをはてなに貼れん。。。
SphinxMarkdownを使う(仮)」@r_rudiさん
  • speakerdeckをはてなに貼れん。。。
Sphinxで手軽に作るドキュメント」@usaturnさん

Sphinxで社内勉強会(Git)の資料を作ってみた」@takuan_oshoさん

APIドキュメントの話」@tk0miyaさん

「All docs lead to Sphinx」洪民憙さん
  • speakerdeckをはてなに貼れん。。。

Sphinxワークショップ@関西で事例紹介とハンズオンTAをしてきた #sphinxjp

あらすじ

さる10/31に開催された Sphinxワークショップ@関西 にて事例紹介とハンズオンTAをしてきた。

ので振り返りメモ。PyConJPのkptは活かされたのか。

スライド

振り返りKPT

Keep
  1. 会場には遅刻せず余裕を持って到着できた
  2. 質問への対応、割とスムーズだった(と思う/アツい自画自賛)
    • PyConJPの経験が活きたな!
  3. Sphinx Tシャツ持っていった
Problem
  1. MacのDisplayPort忘れた
    • 持ち物チェックリストに追加しよう
  2. 移動時間をちゃんと見積もるべし
    • 帰り際のドタバタ。危うく帰れなくなる所だった(一応、みんな無事に帰れた)
Try
  • 歴史的経緯も気にしてみよう
    • 質問であったのが、「Sphinxのhtmlテーマのデフォルトはなんで default じゃないの?( alabaster なの?)」というもの
      • Sphinx 1.3からデフォルトテーマは alabaster になった
      • あわせてデフォルトテーマ defaultclassic に名称変更されたが、互換性維持のために残っている
      • Sphinx 1.3でテーマを default に設定して make html すると alabaster 使いなよと警告が出る
      • Sphinxの更新履歴 — Sphinx 1.3.2 ドキュメントによると1.3b3でそうなった様子
$ make html
(略)
WARNING: 'default' html theme has been renamed to 'classic'. Please change your html_theme setting either to the new 'alabaster' default theme, or to 'classic' to keep using the old default.
(略)

その他の感想

  • 今回のワークショップ参加者の方は「Officeつらくてなんとか改善したい」派が多かった印象
  • 「ポーギーに話す」の正式名称および出典がわかった

その中にMITでは学生が教官を患わせる前に一度テディベアに説明しなければならないという話が載っている。

大学も熊もあってた。ただ、熊は熊でもテディベアだった。

ちなみに、今までググってたキーワード群を「熊」->「テディベア」に変えると(「大学 熊 話す」を「大学 テディベア 話す」)、上記のサイトが1ページ目に上がってきたのでもう半歩足りなかったみたい。

ググるにも発想力とアドリブが求められる。ハマると全然引っかからない