tech

swift でプロセスのリストを得る

https://developer.apple.com/legacy/library/qa/qa2001/qa1123.html にサンプルがあったので GetBSDProcessList 関数を swift で書いてみた。 ついでに最近 carthage を使っているのでそれでも入れられるようにしてみた。 github.com こんな感じで使う impo…

最近の native webrtc で [NSString stdStringForString:]: unrecognized selector sent to class で落ちる場合

最近の native webrtc を xcode でビルドしてアプリが [NSString stdStringForString:]: unrecognized selector sent to class のようなエラーで落ちる場合は Technical Q&A QA1490: Building Objective-C static libraries with categories これなので、Oth…

ical フォーマットのファイルのコンポーネントや、行をコマンドラインでフィルタする

github.com どうしてもこの ical ファイルからこのコンポーネントやこの行をコマンドラインから削除したいという場合に使えます。 $ cat /path/to/ical | icalfilter -filter-component "..." -filter-component "..." -filter-line "..." こんな感じで正規…

go で同じ flag を slice で受け取る

たまに go で同じ flag を slice で受け取りたくなるので書いた github.com こんな感じで使う。 var ( strs = sliceflag.String(flag.CommandLine, "str", []string{}, "str") ) func main() { flag.Parse() log.Println(*strs) } $ go run main.go ---str a…

apns に go から接続する

apns には前書いた APNs Provider API と昔からある Binary Provider API というのがある。 どちらも tls で接続する必要がある。 前者の場合は net/http の Transport の TLSClientConfig に tls.Config を指定する。 後者の場合は crypto/tls の Dial 関数…

APNs Provider API (HTTP/2 ) を go (1.6) から扱う

APNs Provider API で http/2 を喋るサーバが提供されるようになった。 前のやつみたいに tls でつないで指定された通りに bytes 列を作るということもなくそのまま json を送れば良い。json 以外に必要であったオプション例えば, priority 等は header で指…

osx のメニューバーを暗くした場合に白いアイコンにする

button.image = NSImage(named: "StatusBarIcon") button.image?.template = true こんな感じで template にすればよしなにやってくれる。 ref http://www.leebrimelow.com/prepping-icons-for-yosemite-dark-mode/

ical フォーマットを go でパースする

github.com f, err := os.Open("/path/to/ical") if err != nil { log.Fatal(err) } obj, err := icalparser.NewParser(f).Parse() if err != nil { log.Fatal(err) } var b bytes.Buffer icalparser.NewPrinter(obj).WriteTo(&b) こんな感じで使う。 リファ…

fluentd で go のログを panic 含めて集約する

go で書いたアプリケーションのログを fluentd で集約するとする。 アプリケーション自体のログは fluentd に直接投げるのではなくファイルに書かれていて、普段のログはなにかのフォーマット(例えばここでは json とする)で書かれてる場合このように書く…

weechat の notify_private, notify_highlight なものを pushbullet に送る

soh335/weechat-pushbulletgithub.com pushbullet いつのまにか title を空で body だけで送った場合は body が push 通知に表示されるようになってた。 なので、body だけで送るシンプルなのが欲しかったので書いた。

capistrano の対象の server を ansible の inventory file から設定する

hosts = `ansible -i /path/to/inventory hoge:fuga --list-host` hosts.split("\n").map { |host| host.strip }.each do |host| server host, user: 'app', roles: %w{app} end これだと ansible 上でいう hoge または fuga な host をリストアップし、capi…

native webrtc (objc) で audio track に echo cancel, auto gain control などのオプションを設定する

音声を送る場合は let audioTrack = factory.audioTrackWithID("...") のような感じで作るがオプション (RTCMediaConstraints) を現状 RTCPeerConnectionFactory からだと渡せないのでやはり自前で書く必要がある - (RTCAudioTrack*)audioTrackWithID:(NSStr…

native webrtc (mac) で audio の input device を変更する

既に存在する PeerConnectionFactory から変更する方法が変わらなかったので、とりあえず初期化の時に変更する方法 webrtc::AudioDeviceModule *adm = webrtc::CreateAudioDeviceModule(0, webrtc::AudioDeviceModule::kPlatformDefaultAudio); int ret = ad…

git のブランチ間でのスキーマの差分を ALTER 文とかで出す

git difftool -x=schemalex branch1...branch2 path/to/schema とやると出来る。 別に schemalex ではなくてもよく command <before> <after> で diff を求められるツールがあれば良い。*1 ちなみに git diff でやる場合には gitconfig に diff ["sqldiff"] command = ... g</after></before>…

go で雑に mysql の schema をパースして雑に2つの schema から差分を埋める sql を生成する

先日たまたま Lexical Scanning in Go, Handwritten Parsers & Lexers in Go という記事を見つけ面白そうだなと思ったので自分でも何かパースしてみるかという気持ちになった。 ただパースしたいものが特になかったのでなんとなく mysql のスキーマをパース…

mysqld を使ったテストの際に test database がなくてハマった

go で perl でいう test::mysqld のようにテスト用の mysqld プロセスを立てるには github.com/lestrrat/go-test-mysqld を使っている。 しかし、手元だと走るテストが wercker で実行すると test database がないと言われてどうしたものかと思ったら http:/…

xcode でビルドした ios/mac アプリから AppRTCDemo 以外のことを wbertc で通信する

例えば、mac 用にビルドした AppRTCDemo は今のところ映像の受信は出来るが、送信のコードは組み込まれていない。 なので例えばそれを実現するためには ios の際に利用する RTCAVFoundationVideoSource.h のようなコードを自前で書く必用がある。 環境 osx 1…

mac app から webrtc の DataChannel でやりとりをする

環境 osx 10.10.3 xcode 6.3.2 webrtc の revision b444b3f0ff095fce497c403aa8149f15ce2f3ea9 chrome 43.0.2357.81 webrtc を build する iOS - WebRTC の通りに build する。 How to get started with WebRTC and iOS without wasting 10 hours of your li…

clipboard にあるテキスト等を hotkey でいい感じに preview する PreviewBoard というのを作った

https://soh335.github.io/PreviewBoard/latest.zip 起動したら hotkey を登録し呼び出すと clipboard の中身を上のように表示してくれる。 画像、テキストに対応していて、テキストが url ぽかったらアクセスし png, jpeg だったら表示してくれるというオプ…

go で binary.Write してるところで速度が欲しい場合は binary.ByteOrder interface を直に使う

go で binary package の Write は毎回 allocate しているのでもし速度が必要な場合は binary.ByteOrder interface ( binary.BigEndian, binary. LittleEndian ) を直に使うと改善出来る。 もちろん binary.Write の方が使いやすいので速度とかを気にする場…

NSStatusBar にあるアイコンをクリックした際に NSPopover を表示し、フォーカスが外れたら自動で閉じる

import Cocoa @NSApplicationMain class AppDelegate: NSObject, NSApplicationDelegate { let statusItem = NSStatusBar.systemStatusBar().statusItemWithLength(-2) let popover = NSPopover() func applicationDidFinishLaunching(aNotification: NSNoti…

複数の host に reverseproxy みたいに request を clone して投げて response を集める

soh335/proxy-collectorgithub.com 複数の host に reverseproxy みたいに request を clone して投げて response を集めたかったのでそういうのを書いてみた。 proxy 自体の response は json になっていて、proxy 先のレスポンスも正しい json の場合はそ…

スカパーのサッカーの初回放送のスケジュールを ical に変換する

初回放送スケジュール|番組検索|スカパー!サッカー中継 初回放送スケジュール|番組検索|スカパー!サッカー中継 サッカー(だけじゃなくスポーツ全般)、生放送で見たほうが面白いな〜と思っていて、毎回上の、 スカパーのサッカーの初回放送のスケジュ…

radiko を録音したりする radicast を docker で動かす

soh335/radicast soh335/radicast · GitHub radiko を録音したり、podcast 形式の xml を配信する radicast というのを前に作った。これを動かすには radicast 以外に ffmpeg or avconv rtmpdump swftools が必要だった。 録音する環境を移動しようかと考え…

ansible の role を wercker 上で serverspec で test する

ansible の role を serverspec で test をしてみたいと思い、普段使っている wercker で試してみた。 まず、serverspec と ansible が install されている wercker の box を用意した。 次に sample となる role を作った。 soh335/ansible-role-tmux1.9 so…

ruboty-talk から hubot-zatsudan 作った

soh335/hubot-zatsudan soh335/hubot-zatsudan · GitHub 経緯 DocomoruでBOTと雑に会話する - Qiita DocomoruでBOTと雑に会話する - Qiita これが面白かったので ruboty-talk を hubot に移植してみた。 hubot の話 https://github.com/github/hubot/blob/ma…

nasne の録画スケジュールが重複した場合に push 通知を送る

年末から nasne を 2 台で運用するようしたが、1 台の中で重複が生まれた場合はもう 1 台に自動的に受け渡してくれるようなことはしてくれない。なので、毎週録画みたいな予約を入れ放送スケジュールが変更され他の番組と被ってしまった場合、1 台で運用して…

nasne の録画スケジュールを ical に変換する

nasne を探す事が出来るようになった次は nasne-ical という nasne の録画スケジュールを ical 形式に変換するものを書いてみた。 soh335/nasne-ical soh335/nasne-ical · GitHub $ go get github.com/soh335/nasne-ical で install し $ nasne-ical --host …

nasne を探す

https://tools.ietf.org/html/draft-cai-ssdp-v1-03 239.255.255.250:1900 に multicast udp を投げる http request みたいな感じで method は M-Search, path は * とする response も以下のような request 形式で返ってくる NOTIFY * HTTP/1.1 Host: 239.2…

hubot-remind-at という remind.coffee 的なものを書いた

hubot-scripts には remind.coffee という hubot 経由で指定の時間後に mention をくれるというものがある。 これは hubot remind me in 5 minutes to wakeup のように x 時間後という指定をする。 ただ、mention が欲しい時間が特定の時間だったりすると計…