2014年度 振り返り
本
今まで技術書はあまり読んでいなかった*1が今年は必要に駆られたのもあって結構読んだ。特に会社にいっぱい置いてあるので買わなくて済む。全部買ってると結構かかるので。
1つ思ったのは、技術本は電子書籍より紙のほうがいいですね。リファレンスのように引くとなると、電子書籍ではさっとたどり着けない。小説や漫画は電子書籍で十分でした。
チーム開発
趣味でコーディングするのと仕事でするのは違うと実感。特にチームで開発することや、他の人にコードレビューしてもらえたのはすごく良い経験でした。助言・指摘してくれたすべての人に感謝してます。
今後
ライフワークとしてコーディングをしていきたい。ブログも継続したい所存です。ただし訳あって業務でコーディング続けられるかは微妙。残念。
*1:一昨年までいた業界の専門書がそもそも少ないというのもあるけど
【書評】大規模サービス技術入門
![[Web開発者のための]大規模サービス技術入門 ―データ構造、メモリ、OS、DB、サーバ/インフラ (WEB+DB PRESS plusシリーズ) [Web開発者のための]大規模サービス技術入門 ―データ構造、メモリ、OS、DB、サーバ/インフラ (WEB+DB PRESS plusシリーズ)](http://ecx.images-amazon.com/images/I/51xlTEcCILL._SL160_.jpg)
[Web開発者のための]大規模サービス技術入門 ―データ構造、メモリ、OS、DB、サーバ/インフラ (WEB+DB PRESS plusシリーズ)
- 作者: 伊藤直也,田中慎司
- 出版社/メーカー: 技術評論社
- 発売日: 2010/07/07
- メディア: 単行本(ソフトカバー)
- 購入: 80人 クリック: 1,849回
- この商品を含むブログ (132件) を見る
はてなの中の人が書いた大規模Webサービスの実践ノウハウ集です。内容は、OSやハードウェアの特性に基づくパフォーマンスの出し方や、DBのスケールアウト、サーバの仮想化や冗長構成、仮想化の話まで多岐に渡ります。途中では、はてなダイアリーで使われる全文検索アルゴリズムの解説まで盛りだくさん。インターンシップ向けに書かれた内容ですが、Web系のインフラエンジニアなら是非読んでほしいです。ただ全くの初心者だと分からないことが多いので、Webサービスの開発経験が少しあったほうがいいですね。
2010年初版の本なので5年ほど前の内容ですが、利用するソフトウェア・ハードウェアの仕組み・特性を理解し、適切に運用することは時代が変わっても同じかと思います。昨今、クラウドサービスが主流になりつつありますが、単純にAWSやAzureを利用するだけでなく、それらの仕組み・特性を理解することが大事ですね。
あと、はてなほどの大規模なサービスはそんなにないので、規模の小さなサービスではスモールな構成からスタートしたほうがいいと思った。サービスの成長予測から適切なインフラの設計・拡張までできる人になれるよう励みます。
インストールにgccコンパイルが必要なgemをプリコンパイルするスクリプト
使い方
$ cat Gemfile source "http://rubygems.org" gem 'http_parser.rb', '~> 0.6.0' $ bundle package $ ls Gemfile Gemfile.lock vendor/ $ ls vendor/cache/ http_parser.rb-0.6.0.gem $ ../gem-native-compile.sh ./ $ ls vendor/cache/ http_parser.rb-0.6.0-x86_64-linux.gem
Facetimeオーディオ/LINE/Skypeの音質比較
前回のエントリーでは、Facetimeオーディオの音質について調査しました。今回は、Facetimeオーディオ/LINE/Skypeを比較してみます。
調査内容
可聴領域の広さ
条件
環境:iPhone5S(Softbank 4G)<--> iPhone6(docomo LTE)
実験音源:http://cse.fra.affrc.go.jp/akamatsu/at/10/AuditoryTest.html
結果
| 周波数 | Facetimeオーディオ | LINE | Skype |
|---|---|---|---|
| 6kHz | 〇 | 〇 | 〇 |
| 7kHz | 〇 | 〇 | 〇 |
| 8kHz | 〇 | 〇 | × |
| 9kHz | 〇 | 〇 | × |
| 10kHz | 〇 | 〇 | × |
| 11kHz | △ *少し遠い | 〇 | × |
| 12kHz | × | 〇 | × |
| 13kHz | × | 〇 | × |
| 14kHz | × | 〇 | × |
| 15kHz | × | 〇 | × |
| 16kHz | × | × | × |
考察
あれ、あれれ。LINEがすごい。15kHzまで聞こえました。可聴領域は一番です。
でも、ほんと個人的な主観だと人の音声はそれほど聞き取りやすいとは感じないんよ。
つまりね、可聴領域が広ければいいというわけではない!ということな気がしてきた。
で、もう少し詳しく感じたことを言うと、LINEは15kHzまで高い音がキンキンに聞こえるんよ。なのに16kHzになったとたんぴたっと聞こえない。
それに対してFacetimeオーディオの高音域は聞こえるといえば聞こえるけど、11kHzに近づくにつれて段々小さくなる。
ここから推察されるのは、Facetimeオーディオは人の音声が聞き取りやすいようにイコライジングしてるんじゃないかと。
高音域は聞こえるけど抑え目にして(コンプレッサかけてる)、人の音声の1kHzあたりを中心に増幅してるわけじゃないかな。
LINEは16kHzからすぱっとリミッターかけてる感じ。
これはちゃんと調査するなら周波数成分比較をしなければならぬな。
また時間があれば、そのうちやりたいと思います。
MQTT Client for iOS written in Swift
MQTT Clientのswift版作ったので公開。
実体はMosquittoのWrapperです。
flightonary/Moscapsule · GitHub
こんな感じで使えます。
import Moscapsule
// set MQTT Client Configuration
let mqttConfig = MQTTConfig(clientId: "cid", host: "test.mosquitto.org", port: 1883, keepAlive: 60)
mqttConfig.onPublishCallback = { messageId in
NSLog("published (mid=\(messageId))")
}
mqttConfig.onMessageCallback = { mqttMessage in
NSLog("MQTT Message received: payload=\(mqttMessage.payloadString)")
}
// create new MQTT Connection
let mqttClient = MQTT.invokeMqttConnection(mqttConfig)
// publish and subscribe
mqttClient.publishString("message", topic: "publish/topic", qos: 2, retain: false)
mqttClient.subscribe("subscribe/topic", qos: 2)
// disconnect
mqttClient.disconnect()実装にあたってswiftからCをそのまま呼び出せるのでCで実装されたMosquittoを使うのは難しくありません。ただし、swiftで定義したfuncやclosureのポインターをcallbackとしてC側に渡すことはできないので、Objective-Cでブリッジさせるのがコツ。
swiftのコンパイラが落ちる
たいした話じゃないけど、swiftさわりはじめて最初に以下のコード書いてコンパイルしたら、Xcode 6.1のSyntax HighlightingがCrashするわ、コンパイラはSegmentation faultするわで笑ったw
let i = 0
println("%d", &i)(swift的には`println("\(i)")`が正しい)
なんか他にもジェネリクスでこねこねするとコンパイラがセグフォルするケースもあるみたいですが、今のところ文法が正しくてセグフォルすることはないみたいなので実用上は問題ないだろう。
Objective-Cは食わず嫌いだったので良いタイミングでswiftが出てきてよかった。Scalaみたいなところもあって覚えやすい。
Facetimeオーディオの音声品質
2014/12/09 追記
LINEやSkypeと比較しました。
Facetimeオーディオ/LINE/Skypeの音質比較 - Pseudo Engineer - こんなかんじでどうでしょう
はじめに
Facetimeオーディオの音声品質っていいですよね。個人的にはLINEやSkypeよりも聞きとりやすいと感じます。LTE回線同士でも遅延がなく安定していて、通常の電話のメリットなんかないと思えます。
じゃあどれくらい音質がいいのか実験してみましょう。本エントリーでの音質の基準はサンプリング周波数の高さとしますので、低い周波数の音から上げていって、どこまで聞こえるかを試します。
条件
環境:iPhone5S(Softbank 4G)<--> iPhone6(Wifi)
実験音源:http://cse.fra.affrc.go.jp/akamatsu/at/10/AuditoryTest.html
結果
| 周波数 | 聞こえたか |
|---|---|
| 8kHz | 〇 |
| 9kHz | 〇 |
| 10kHz | 〇 |
| 11kHz | △ *少し遠い |
| 12kHz | × |
| 13kHz | × |
考察
結構おどろきです。11kHzでも聞こえると言うことは、少なくともサンプリングレートは22kHzということになります。またFacetimeの音声codecはAAC-ELDのようです。(ソース)
音声バンド定義だとWBとSWBの間くらいでしょうか。
300-3400 Hz = Narrowband (NB)
50-7000 Hz = Wideband (WB)
50-14000 Hz = Super Wideband (SWB)
20-20000 Hz = Fullband (FB)
(ソース:http://blog.voxygen.co.uk/?p=1132)
