tech

vim で markdown のリンクをタイトルを取得しインサートする

前回の続きになるが、もし hugo 等にブログを乗り換えた際はてな記法が使えなくなり markdown 等で書く必要がある。 現在このブログは基本的には markdown で記述しているが、リンク周りは [http://example.com:title] というはてな記法を使っていることが多…

vim で再度開いた場合にカーソルの位置を復元する、ただし gitcommit 以外。

autocmd BufReadPost * if ine("'\"") > 0 && line("'\"") <= line("$") | exe "normal g`\"" | endif と設定していたけど、コミットメッセージを書く際にも効いていてこの場合は先頭位置にカーソルがあるべきなので autocmd BufReadPost * if &filetype != …

はてなブログの記事データを hugo のデータに変換する

soh335.hatenablog.com にて記事データのパースをすることが可能になったので今度はそれを hugo のデータに変換することを試みる。そのために hatenablog2hugo というコマンドを書いた *1 github.com パースした内容を hugo の下記のようなフォーマットに変…

Movable Type ( はてなブログ ) からエクスポートした内容をパースする

直ちにブログを置き換えたいというわけではないけど、いざそうなあった場合にどうすべきか考えてはてなブログの過去の記事のエクスポートについて調べた。 help.hatenablog.com 上の記事に書いてある通り Movable Type 形式というものでエクスポートされる。…

native webrtc で動画や音声のデータにアクセスする

通常のビデオチャットのような使用用途で native webrtc を用いる場合 *1、動画を表示する view などが sdk レベルで提供されているので、そのまま使えば良い。(音声データは中で複数音声をミキシングなどしてよしなに再生するところまでやっている)ただ、…

swift で FSEvents をシュッと扱う

swift だけで書いてみたかったので書いてみた github.com import FileWatch let filewatch = try! FileWatch(paths: ["/path/to/dir"], createFlag: [.UseCFTypes, .FileEvents], runLoop: NSRunLoop.currentRunLoop(), latency: 3.0, eventHandler: { event…

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 が必要だった。 録音する環境を移動しようかと考え…