znc (IRC proxy server) のSSLオレオレ証明書をMacにインストールする

大したことじゃないんだけど、解決するのに2時間くらいかかったからメモ。

背景

znc wikiの署名済みサーバ証明書のページにはちゃんとした証明書貰った場合の設定の仕方が書いてあって、そりゃそっちの方が正しいってのはわかるんだけど実験用サーバとかでHostsに適当な名前をつけて使いたいことがあった。 そのサーバにznc建ててSSL使おうと思ったんだけど、IRC Client(俺はTextual使ってる)とかweb adminがサーバ証明書おかしいぜ、っていちいち文句言うのなんとかしたかった。

TL;DR

自己署名証明書でもいいからSSLでznc使いたいならznc --makepemで作成したpemに含まれる証明書をキーチェーンアクセスに追加すればよい。

試したこととかハマったこととか

  • opensslで生成したcrtとかkeyをzncサーバにコピーして使う
  • キーチェーンで生成したcrtとかpemをzncサーバにコピーして使う

→zncがpem読めないのか、TCPつないでもすぐ切れる

  • chefのレシピ作成中のvagrantznc --makepemで作成したpemを使ってたらCNがvagrant-centos65.vagrantup.comとかになってた

→正しいホスト名にしてからpemつくろう

最終的にやったこと

  1. zncサーバに入ってznc --makepem秘密鍵兼証明書を作成
  2. BEGIN CERTIFICATEからEND CERTIFICATEまでの行をhogehoge.certに保存
  3. hogehoge.certをキーチェーンアクセスで開きホスト名が正しいことを確認して追加する

以上です。

夏コミで出す本のご紹介「ななかInside PRESS vol.5」3日目 8/17 (Sun) き36b

f:id:mtgto:20140814231248j:plain:w300

夏が暑くて本も厚い

前回の投稿が1月だったのにいつの間にやら夏本番!台風も来てましたが本番の天気はどうなることでしょうか。そこ、どっちみち中は暑いだろ、とか言わないように。

さて、なんだかんだで我々第七開発セクションのコミケ参加も五回目となります。まあ今回は初回以来の落選とあいなりまして、これで今回はゆっくりできる・・・と思ったのですが、@richmikanまつらリッチ研究所さんのところで置かせていただけることにあいなりまして、めでたしめでたし。 今回も冬コミの紹介同様に各記事の紹介をしちゃいますので、参加する人もしない人も気になったら読んでみるといいよ。

各記事のご紹介

「Immutable Infrastructureの最適解を探る」 by いつもの戦犯 @tboffice

Immutable Infrastructure(略すとII)ってのは直訳すると不変なインフラ、つまり設定をあとでいじったりしない、というような意味です。当記事では前回冬コミで特集したChefを始めとしてAnsible、Serverspec、Docker、Cobbler、Serfといったツールの紹介と導入方法について触れています。 私個人はプログラマーとして作ったコードをインフラに載せるのが仕事なわけで、デプロイのスクリプト化(CapistranoとFabric)はやったことがありますが、それより下のレイヤー(ミドルウェアやOS)までコード化しないと大規模インフラを扱えないクなってきているわけでして。いやはやインフラの世界も流行の入れ替わり激しいものですね。

「恐怖 シェルショッカーの掟 ~Web アプリ早く作れぬ言語は rm -rf の巻~」 by 謎の救世主 @richmikan

個人的に一番面白かった記事。シェルスクリプトでWebのショッピングサイトを作る記事です。とか書いてもワケガワカラナイヨッて感じですが、要はショッピングサイトのCGI部分を*NIX標準コマンド+独自の便利シェルスクリプトの組み合わせることによって実現できることの説明をしています。コードはGitHubで公開&実際に稼働しているサーバーもあるので机上の空論ではありませんので念のため。

「解説 Socket.IO 1.0」 by @sisidovski

WebSocketが注目されていた時代に、プロトコル未対応のブラウザでも同じようなAPIで利用することができたnode.js用の双方向通信ライブラリSocket.IOは今年2014年の5月にリリースされました。1.0においてマルチプロセス環境でのスケーラビリティの向上やNode.js以外のプログラムからサーバへのイベント通知ができるようになったことをご存知でしょうか。 はい、私は全然知りませんでした。この記事ではそんな方にもう一度Socket.ioの重ねてきた進化を知るいい機会になるのではないでしょうか。

「バランス wii ボードで健康管理」 by @tkzwtks

プログラマーのダイエットは一味違います。Wii Fit UのバランスボードをBlueToothでPCに接続、通信内容をパースして最後はfitbit.comに送信するところまで作っちゃいます。 それ以外にも自転車の走行距離を自動計測したり食事の内容はEvernoteに保存したり、とどこまでもプログラマーらしさが光る内容となっています。実際にダイエットの効果があったのかはこの記事で確認してみてください。

「今すぐ試そう HTTP/2」 by @syu_cream

ここ1, 2年、GoogleのSPDYプロトコルをベースとした次期HTTPバージョンの仕様の策定、標準化が進んでいるHTTP/2。皆様も耳にしたり気が早い人は既にブラウザのオプションでHTTP/2を有効にしてTwitterFacebookなどを使っているのではないでしょうか。 この記事では現行のv1.1の問題点の解説、2.0がそれをどう解決するのかの説明、そしてHTTP/2対応のサーバーやクライアントの使い方の紹介を行っています。ちなみにこの記事の執筆後にdraft14が公開されて、慌てて加筆してもらったのはここだけのはなし。

風水プログラミング」 by @irimo_hot

中国4000年の歴史が産みだした気の流れを元にしたプログラミング環境の構築の紹介を行っています。そう、コンソールの入力待ちのときに$マークが表示されているのは風水によって金運をアップさせるためなんだよ、な、なんだってー?みたいな知識を得ることができます。 関係無いですが銀座にある弊社では机の上にいろんな私物をおいている人が多いですが、あれもひょっとしたら風水に基づくものだったりするんでしょうか。

AWS をコード化する」 by @rosylilly

AWSの設定を試行錯誤した結果、再現できない状態になってしまって困ったことはないですか?かといってChefのクックブックは学習コスト高いし・・・みたいな。 当記事ではRoute 53(AWSDNSサービス)を題材に、RubyによってDNSレコードの設定を例を交えながら解説します。例えば「Route 53がサービスのヘルスチェックを行い、サービスダウンと判定したらレコードを自動的に変更する」設定をRubyで書くことができることを説明しています。 DNSの設定って最初にやって後は放置、みたいなものだと思っていたのですが、Route53なら動的に切り替えられることを知っていれば「他のスクリプトと組み合わせればもっと面白いことができるのでは?」など新しい発想が出てくるきっかけにもなるかもしれませんね。

「できね!家庭用 3D プリンタ」 by おめが

「Up!Plus2」「SCOOVO C170」「Da Vinci」という3つの家庭用3Dプリンタ(といってもそれなりのお値段します)を半年間使ってみて分かった比較と必要な調節について解説しています。 魔術師でなくても空想具現化ができるのはありがたい時代になったものです。あとは空想の3Dモデリング化の技術の進歩の方をお願いしたいです。。。

というわけで

日曜日の三日目、き36b「松浦リッチ研究所」でお待ちしております。 B5で160ページってもうわけわからんな!おねだんは1,200円だそうです。既刊(前回+前々回)もあるだけ持っていきます。 ちなみに表紙の地球(?)はコードによって生み出される世界(=サーバー)を意味してるんだそうです。言われなきゃわからなかったけど可愛いから許しました。

そういえば私が今回の本のために書いた記事は諸事情でお蔵入りにしたので近いうちにこのブログで公開できればなあと思っています。

新年の挨拶と1年半ぶりにiOSアプリをバージョンアップした話

あけましておめでとうございます。コミケを見にきていただいた方はお疲れ様でした。


突然だがニコニコ実況っていうサービスが好きだ。日曜洋画劇場ニコニコ実況片手にみんなで見てる気分になるのが好きだった(最近は全く見なくなってしまった。理由は察してくれ)。ニコニコ実況っていうのは要はテレビ版のニコニコだ。俺の部屋のテレビとPCはそっぽ向くように置かれてるのでテレビ見てる時にパソコンを見るのが面倒だった。なのでiPhone版アプリを作った。

ニコ実

ニコ実

  • Satoshi Goto
  • エンターテインメント
  • 無料

12月後半、あるきっかけで休日の3連休にがっつり改修を行い、iTunes Connectのホリデーが終わってすぐアプリ申請、大晦日にリリースされた。iPadで文字が小さくなってしまう問題があったりもしたが(修正版を申請したのでもう少しお待ちください)、概ねレビューを見ると好評のようでアップデート作業をやってよかったなと思っている。

最後に更新してから1年半以上経ったアップデートになったわけだが、最初はリファクタリングのつもりだったんだがこれから書く変更点のせいで結局ほとんど1から書き直すことになった。この文章を書く前は「こうしたほうがいい」とかいう話にしようかなとおもったんだけど正月だしお酒飲んでてめんどくさくなってきたのでただの列挙になってしまった。ここまで読んでる人がいたら申し訳ない。

覚えてる大きな変更点

ARC

それまでのアプリは非ARCコードで書かれていたので、ARC対応にした(アップデート前はiOS 4.3対応だったため)。retain, release, autorelease, dealloc書かなくてよくなったのはほんとうに有難い。やはり面倒なことは一つでも少ない方がいい。行も短くなるし。

CocoaPods

以前は対応しているライブラリも少なく使ってなかったのだが、最近はかなり揃っているので使うことにした。使っているライブラリは次の通り。

  • AFNetworking
  • CocoaLumberjack
  • AFKissXMLRequestOperation
  • SSKeychain

空っぽなプロジェクトにAFNetworkingを追加すると、出来上がるバイナリサイズが370KBほど増えたので結構怖いなと感じた。何でもかんでも追加するとファイルサイズがどんどんでかくなっていくので使用するライブラリは必要最小限にするようにしたほうがいい。

今はMac / iOSのアプリを一つのxcworkspaceで作ってるんだが、そういったPodfileの定義する方法の情報が見つからなくて辛かった。ごちゃごちゃいじってたらできたんだが、ここでは書かない。興味ある人はそのアプリをOSSで公開する予定なのでそれを待ってほしい。

Storyboard

チーム開発ではコンフリクト解消が困難になるので使わないほうがいいだろうが、個人開発では使ったほうがいいと思う。ビュー間の移動をSegueでコード無しで追加できるのは楽だ。ただiPadのビューが6つあるとThunderbolt Displayを使っていてもStoryboardの編集は狭くて使いづらいのである程度ビューが少ないアプリじゃないときついかもしれない。

あと慣れてないのも悪いんだが、Auto layoutにかなり苦しめられた。親画面からの相対位置で右寄せ、下寄せさせたいだけなのに何度もXcodeに怒られながら修正をする必要があった。たまに警告なしの状態にしてもビルド時に失敗したことがあったので、なんかバグが残ってる気がする。前のバネで指定する方式は楽だったなあ。

Localize

前はUIのローカライズをするときにはxibをロケールの数作って編集していた気がするんだが、今はxib/storyboardとstringsファイルに分けて後者だけを編集すればいいようになっている。便利だなと思う一方で、自動生成されるstringsをみてもどの位置の文字列かパッとわからないこともあって辛かった。今後xib/storyboardいじったときにstringsのアップデートで苦しめられそうな未来が予想できる。

あと前もあったんだが、Localizable.stringsを追加してもシミュレータでは追加が反映されるのに実機では反映されないことが起きた。Option押しながらクリーンをやったら反映されるようになったんだが、原因がはっきりせずにもやもやしたままだったりする。

iOS 7の全画面ビュー

iOS 7からステータスバーの裏もビューとして使われるようになった。そのためコメントが流れる領域とステータスバーが被ってしまい、ステータスバーがとても読みにくくなった。ぐぐると一枚ビューを置いてTop Layout Guideを使ってステータスバー分だけずらすように設定しておけばStoryboardだけでもステータスバーには被らないように出来た。

delegateからBlocksへ

今回のアプリだと例えば「HTTP API叩いて通信結果が成功したらビューを更新して失敗したらエラーダイアログだす」みたいな処理が多い。今までまずは成功、失敗呼び出しを定義したプロトコルを作り、delegateを登録し、ってことをやってたんだがこれをBlocks型に書き換えた。 Blocksにしたことで「成功と失敗処理が同一メソッド内にあるので見やすい」「プロトコルを定義する必要がない・名前を考える必要がない」という楽さを感じた。ちょっと変わったことをやろうとすると苦労することもあるが(例えばBlocksで再帰呼び出しメモリリークしないように書く、とか)、ちょっとした通信処理とか書くときにはスッキリ書けるっていうだけでBlocksに変えてよかったなと思う。

終わりに

1年半ぶりのアップデートをやることでiOSの世界では1年半ってとても長いんだなというのを強く感じた。例えばNSArray, NSDictionaryなどのシンプルな糖衣構文や、上では書いてないがModulesも使うようになった。OSのメジャーバージョンも上がるのが早いし、開発者が追いついていくのもなかなか大変なものだ。それでも、いやだからこそiOSは新しいものが好きな開発者にとって楽しいプラットフォームなのかなと思ったのだった。

冬コミ 3日目 12/31 (Tue)に「ななかINSIDE PRESS vol.4」を出します(西し-35a)

f:id:mtgto:20131214121725j:plain:w300

冬だ!スノボだ!コミックマーケットだ!

夏コミの追い込みもいつのやら。早いもので冬コミの入稿が終わりました。今回で4回目のコミケ出展でございます。今年はもしかしたら会場には行けないかもしれないのですががが。

今回も記事8本、108ページとよくわからない分厚さになっております。メインテーマは「Chef!」ということで表紙もChefをイメージした女の子になっております(表紙は@ok__rayさんに描いてもらいました)。Chefでサーバを構築してみたはいいものの途中からめんどくさくなって手作業で設定してる人いませんか、後ろから包丁でXXXされちゃいますよ!(そんな設定はない)

内容も以前のようにプログラミング話ばかりではなく、幅広く取り上げております。詳細は第7開発セクションのサイトをどうぞ

さて、今年の夏コミの紹介を書いた時のように今回も各記事の簡単な紹介をしますので、なんとなく読んだ気になってください。

各記事の紹介

  • (特集記事) わがままChefのおいしいrecipeの作り方 @gujauja & @suzuki_kenta

    • 業務で実際にChefを使っている2人によるChefの入門記事です。数時間Chefを触っただけの私が理解に難しいなと思ったところには(強引に)解説を入れてもらっているのでつまづきにくい入門記事になっていればと思います。後半ではChef Solo + Knife Soloでユーザ作成、インストール、(パッケージとコマンドによるものの2種類)、ファイル作成、ロギングを行います。
  • DMM 3Dプリントで連装砲ちゃんを作る @Omegamega

    • DMM 3Dプリントで自分でモデリングした連装砲ちゃん(ぜかましのそばにいるやつ)を作ってみたレポート。素材は石膏、ナイロン、アクリルの3つがあるんですね。失敗できない(いっこつくるのに3,000円とかかかる)のは怖いけど、専用の工具と膨大な時間を使わないと作れなかった3Dモデルの実体化ができるなんていい時代になったものです(※特許切れという意味で)。@Omegamegaのブログに写真や動画があるのでそちらもどうぞ。
  • MMDAI2/VPVM on Qt 開発戦記 @shimacpyon

    • 2011年からVPVMを作っている@shimacpyonの開発偏移です。私個人の印象としてはWindows, Mac, Linuxマルチプラットフォーム向けアプリケーションとなると見た目とか使い心地としてはQtが一番なのかなと思ってます。Java(AWT, Swing, SWT)、GTK, X, .NETもありますが主にMacで使っているとどうも「コレジャナイ感」がすることが多い気がします。
  • 525円とNexus7で"Oculus Rifts7" @binzume

    • Oculus Riftというのはヘッドマウントディスプレイの一つなんですが、ジャイロが入ってるので首を傾ければ向いた方の映像が見えるってやつで、3DCGと組み合わせるとその世界にいるような感覚を体感できます(どれくらいやばいかはhttp://www.youtube.com/watch?v=GoQ0OXJCbaEこの動画を見ていただければわかるかと)。この記事ではジャイロ搭載のNexus 7を使うことでコードレスでHD画質のOculus Rift(みたいなもの)を作ってみたそうです。私も実際に見てみたんですが視界が追随してくるのはまじでヤバイです。
  • Blink(1)でウキウキウォッチング @tboffice

    • Kickstarterから生まれた様々な色にひかるUSBデバイス「blink(1)」を何を間違えたのか10個も買ってしまったために何が何でも役立ててやろうとした人の記事です。1bitでは表現できないものということで、トイレの個室ごとの空き状態を表示したりしています。Blink(1)がそこまで強い光量を持ってるわけではないので、新着イベントよりも状態表示のほうが向いてそうです。
  • 今から始めるMySQL Cluster入門 @kukishuzo

    • MySQLのMaster, Slave構成ですとMasterの障害時にMaster昇格する必要があったりして大変ですよね?そこで紹介するのがこのMySQL Cluster。必要な数のノードだけ最初に組んでおけば、あとはノードが死んでも何事もなかったように動いてくれます。セットアップが大変?資料が少ない?そんな方におすすめです。今なら低反発まくらもセットでついてきます!(きません)
  • 大炎上!在席監視 iBeacon @saiten

    • Bluetooth LEとiPhoneを組み合わせて気になる上司の接近を監視しちゃおう!とかそういう感じの話です。iPhoneだけではなくてAndroidにもBluetooth LE対応機種が出てきているようなので、2014年は流行ったりするのかなあと密かに期待しつつ監視社会怖いなあと怯えたりもしていますん。
  • 某リンゴの倒し方?俺知ってるよ! @inokinn

    • この記事は自分の目で確認しよう!

ということで、12月31日、西し-35aでお待ちしております

一冊800円です。既刊ももっていきますよー。

歌舞伎座.tech#1で「sbtのマルチモジュールのビルドおそくね?」というLTをしてきました

歌舞伎座.tech#1

ニコ生での発表の様子

一行でまとめ:マルチモジュール形式のsbtプロジェクトの場合にSNAPSHOTバージョンのライブラリを使っていると毎回ライブラリの解決してて遅くなるからHTTP Proxyとか使ってキャッシュしましょう。

id:yuto_sasaki に発表資料を見てもらったあとで、SNAPSHOTバージョンが悪いんじゃね?という助言を頂きました。ありがとうございます。

開場中にid:xuwei から補足を頂いてました。ありがとうございます:

コンパイル時間を早くしたいのはもちろんなのですが、それにはハイスペックマシンを用意するくらいしか(ry

C84の3日目に「ななかINSIDE PRESS vol.3」を出します(東ぺ-15a)

f:id:mtgto:20130810101248j:plain:w300

いよいよ今日から夏コミですね!なんだか気温がとても高くなりそうとのことで、参加者の方々はくれぐれも温度調節、水分補給を怠らず楽しく参加してきてくださいね。家に帰るまでがコミケです。

さて、私がコミケに出展側で参加するのもこれで3回目。前回、前々回に続いてプログラミングメインのよもやま話がどばどば詰まった「ななかINSIDE PRESS vol.3」を頒布します。 執筆者8人で128ページときりの良い数字になっております(お値段は600円ときりがよくありませんね)。かなり分厚い(背表紙の幅が1cmくらい?)ので近くを通られましたら、お手にとって確かめていただければと思います。 第7開発セクションのサイトにはサンプルページも用意してしますので興味がある方はそちらもご覧くださいませ。

本の内容

  • AWS実践入門 -AWSの本当のところ @con_mame
    • 業務でAWSを使用しているid:con_mameによる、使用時の注意ポイントや性能測定です。 Let's インスタンスガチャ (※有料です)!
  • よりよい設計手法でSAN値を守る More Better Rails @rosylilly
    • Railsのプロジェクトが大きくなるときに発生する「モデルの命名」「モデルの肥大化」とどう立ち向かうかというRails初学者の私には耳の痛くなる話です。
  • coffeescriptで作るcoffeebotで優雅なコーヒーブレイク @saiten
    • 「それ名前駆動開発」だろって言ってしまうタイトルですが、中身はコーヒーメーカーにコーヒーが残っているかどうかを監視してくれるボットを作った話です。個人的に一番好きな記事です。
  • Render Scriptでサクサク動くAndroidアプリを @binzume
    • RenderScriptというのはアプリからネイティブコードを実行する仕組みです。それNDKでいいじゃん?と思うかもしれませんが、CPU非依存で書けるのでARM以外も対象とするときには楽ができるかも。
  • できる!たのしい!週末iPhoneアプリ開発 @kenmaz
    • 10本のiOSアプリをリリースしているid:kenmazによるアプリ開発 およびリリース後にやること が書かれています。普通の開発ノウハウでは語られない(とおもう)アプリの売上の話なんかも載ってたりします。
  • 知識に差が出る!? Coureutils大全#2 @tboffice
    • lsやcatといった日常生活に欠かせないコマンドたちのご紹介。こんなコマンドあるんだへー、とお手持ちのへぇボタンを押しながらパラパラ読むのが多分正しいかと。前号からの続きですが、これだけ読んでも問題ないです。
  • Asteriskで作る個人認証システム @mtgto
    • 私です。最近増えてきている「二段階認証」を個人でもやるための方法を音声電話、SMSの2つで書きました。
  • 88888の多い動画は!? ニコニコ動画のデータを分析してみよう @shibacow

ということで

8月12日(月)、東ぺ-15aでお待ちしております。私は朝頃サークルブースにいると思いますのでよろしくお願いします。既刊も持っていくよー。

DashでJava SE 7 日本語ドキュメントに対応させてみた

今年の5月にJava SE 7のAPIドキュメントをはじめとした、Java SE 7のドキュメントの日本語版が公開されました(Java SE7API日本語版提供開始Java SE ドキュメント)。

バージョン6までのように「Java 7 HashMap」のように検索して(Googleなら「日本語のページを検索」に制限すると最初に出てくるようになります)Webブラウザで見るのでももちろんいいのですが、MacユーザとしてはやはりDashで見たいわけです。 ちなみにDashというのはMac/iOSなどのAPIドキュメントをキーワードからインクリメンタルサーチで高速に見ることができるツールで、私は重宝しています。ダウンロードすることでScala, Ruby, Python, Node.jsなどにも対応することができます。ちなみに無料でも使えますが、フルバージョンを購入してないと検索時にたまに数秒待たされるとのことだったので、速攻でポチりました。

DashでJava 7 SE API日本語版を対応できるようにするのにはちょっと面倒くさかったのでやり方をメモっておきます。なおJava APIドキュメントのライセンスで、インターネットでの再配布は許可されていないため、Docsetの再配布をする予定はありません。予めご了承ください。

ドキュメントの取得

いくつかキーワードを変えて検索してみたのですが、どうやらJava SE 7の日本語ドキュメントはzip書庫などでまとめて取得することができないようで、仕方なくスクレイピングで取ってくることにしました。wgetで再帰ダウンロードでもいいのかもしれませんが、リンクされてないページがあると嫌だったので英語版ドキュメントをunzipしたもののファイル構造から日本語ドキュメントをダウンロードするという方法を取りました。

Javadocをdocsetに変換するツールの修正

JavadocをDash用のDocsetに変換するツールがGitHubで公開されていたので取ってきます。

https://github.com/Kapeli/javadocset

ですがこれをそのまま使うと変換中に大量の警告が出力され、Dashに取り込んでもクラスやインターフェイスがほとんど読み込めません。 これはこのツールが英語版ドキュメントの書式にのみ対応しているため、クラス名などを取得するためのキーワードが違う日本語ドキュメントは正しく処理ができないんですね。

ということで、日本語ドキュメントに対応できるようにしたForkをGitHubに用意しました。

https://github.com/mtgto/javadocset/tree/japanese

英語版にはない、表現の微妙な差にハマりました(「〜 内のクラス」と「〜 のクラス」とか)。 使用上の注意として、masterブランチは上記の修正を入れてないので、もし使おうとする人はjapaneseブランチからビルドして使ってください。

Docsetに変換

あとはDocsetに変換してDashに取り込むだけです。 javadocsetをXcodeでビルドして、

javadocset Java /path/to/api

と実行するとJava.docsetが生成されます(/path/to/apiは日本語ドキュメント内のapiフォルダへのパスを入れてください)。 これをDashにインストールすればJava 7のドキュメントが検索できるようになっているはずです。英語版Javaドキュメントがすでにインストールされていて、もう不要でしたら削除しておきましょう。

終わりに

以上でJava SE 7日本語ドキュメントをDashで引くための方法についての説明は終わりです。

参考リンクにも入れましたが、Rubyの日本語リファレンスマニュアルをDash用に対応してくれている人がいるので、よろしければそちらもチェックしてみてください。

参考