サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
災害への備え
shokai.org
wikiを作った semiraraというwikiを作った。blogとして使えるgyazz(アウトラインエディタ的なwiki)を目指したもので、既にwordpressより書きやすいので今後はこっちに書いていく。 http://wiki.shokai.org/shokai Reduxとkoa v2とasync-awaitとサーバーサイドレンダリングの練習がしたかったので色々やった。 こんな感じでカーソルのある所だけwiki記法がむき出しになる。 くわしい解説 semirara: このwikiのこと – shokai しばらくしたらこのblogのfeedも転送する 2日目(7/3 日曜日)の14時からwikiについて喋らせてもらう。 トーク概要 ReactでWikiを自作して運用している話 · Issue #94 · hachiojipm/yapcasia-8oji-2016mid-timeta
Raspberry Piにnode.jsインストール と同じ方法 Edisonのopkgにあるnodeが0.12とかで古すぎるので、自分で5.5を入れた。 CPUはAtomなので、linux-x86のビルド済みバイナリをダウンロードしてくればすぐ使える http://nodejs.org/dist/ % wget http://nodejs.org/dist/v5.5.0/node-v5.5.0-linux-x86.tar.gz % tar -zxvf node-v5.5.0-linux-x86.tar.gz % mv node-v5.5.0-linux-x86 ~/node 最初から入っている/usr/bin/nodeを消す方法がよくわからなかったのでホームディレクトリに置いてしまった PATHを前の方に通した .bashrc export PATH=$HOME/node/bin:$PA
monorepoという1つのリポジトリに複数プロジェクトを入れる開発手法がある。 この記事で知った。 単一リポジトリで複数package|projectを管理することをmonorepoというそう – なっく日報 そういえばRocketIOやnode-lindaを作っていた時は自作のライブラリ/パッケージが3,4層に積み上がっていて、単一パッケージ内で生じるバグはテストを書けば潰せるけどパッケージ間で起こるバグは非常に解決が難しかった。イベント発火のタイミングによるものとか。パッケージをまたがったテストをどこに書くのかという問題がある。 複数パッケージで起こったバグはどっちのissueに書けばいいのかわからないし、両方でブランチ切って同時に修正してリリースしたりとか超面倒だった。 バージョン毎の依存関係も、serverの1.3に対応してるのはclientの1.5で・・とか依存関係を書くのがや
Node.jsでYahooから天気を取得するnpmを作った。 https://www.npmjs.com/package/weather-yahoo-jp YOLP(Yahoo Open Local Platform)のリアルタイム降雨情報のAPIと、Yahoo天気の予報の取得ができる。 Nodeに日本の天気関係のnpmが無かったのと、今まで使っていたRubyのお天気系Rubygemが全て動かなくなっていたので自作した。 天気をスクレイピングして取ってくる部分がHTMLの変更により動かなくなってしまう事が多いみたいなので、CircleCIで毎日テストを走らせる事により異常にすぐ気づけるようにしてある。 現時点でv0.2.0 forecastの方はまだ多少項目追加する予定なので(気温の前日との差や降水確率など)最新情報はREADMEを見ると良い エラーや要望はissueかtwitterにどう
定期的にCircleCIでのテストを実行するAWS Lambda Functionを書いた。 shokai/circleci-daily-build: kick CircleCI rebuild everyday とくにソースコードの変更が無くても定期的にCIを実行しておきたい場合がある。 依存ライブラリを毎日全て最新版にアップデートしてテストするとか、スクレイピング対象のHTMLが変更されていたらすぐに気づきたい場合とか。 天気予報をスクレイピングで取ってくるライブラリを定期的に実行している様子。毎朝テストされて結果がSlackに通知される。 CircleCIにビルドを頼む CircleCIにはAPIがあるので外部からビルドを要請できる。 https://circleci.com/account/api でAPIキーを取得して使う。 curlとかでやってもいいんだけど、circleciと
mochaでtestを書く時にitという関数を使うのだが、ifと書き間違えている事に気づかず30分ぐらいハマった。前にも同じ事があったのに30分かかったので、この調子だと何度でもハマる自信がある。 itがifでも文法エラーが起こらないし、そのテストコードの部分が実行されないだけなので気づかない。 シンタックスハイライトされてても文字の色で判別なんて人間には不可能。 間違え探しみたいなデバッグをしたくないからテスト書くのに、そのテスト自体が間違え探しなのはどうなのと思う。 もっと細かく考えると if文に定数を渡せるのがおかしい カンマ演算子の存在自体が悪い itって関数名どうなの そもそもtestの中でif文なんて必要ない というのがある。 eslint-if-in-test作った テストコードの中でif文を使う理由が思いつかないので、ESLintでなんとかする事にした。ESLintはプラグ
新横浜は新幹線が止まるしイベント施設が複数あるので、土日はなんらかの目的をもって訪れる人が多いみたいでニコニコ笑顔の人が多くて良い。そのかわりイベントの入場前・退場後の時間帯は強烈に混雑して駅に入れなくなる事がまれによくある。 そこでtwitter botにイベント情報を喋らせることにした。毎朝ツイートするので危険を察知できる。 そのうち混雑度を算出する機能も追加したい。あと開場時間も。 新横浜 12月23日のイベントは 横浜アリーナ : 平井 堅 日産スタジアム : 日産スタジアム歳時記イベント 「もちつき&しめ縄飾りづくり」 — neoyokohama (@neoyokohama) December 22, 2015 ソースコード https://github.com/shokai/neoyokohama-bot coを使うと、非同期処理を同期的に書いて順番に実行したり、あるいはasy
ローストビーフとグレービーソースを作った。何度作ってもおいしいのでレシピを書いておく。 料理としては簡単なのだが、牛モモ肉が手に入りづらい。(今はクリスマスだからわりと手に入りやすい) 自家製ローストビーフが流行ったら近所のスーパーにも常時置かれるようになる気がするので流行ってほしい。 感想 人間が実際に手を動かす時間が短いので楽でよい。適当に焼いて放っておけば肉はできる。トンカツ等の方が難しいぐらいのレベル。 アルミホイルで包んで余熱で調理したり、肉を事前に室温に戻しておく必要があるので、そこだけ時間がかかる。 ソースが重要。グレービーソースでぐぐるとみんな違う作り方していたので気にせず適当に作ったら最高にうまくできた。 材料 肉 牛モモ肉の塊 オリーブオイル クレイジーソルト 塩 キッチンペーパー アルミホイル ソース(グレービーソースのような物) 肉を焼いた後の油 玉ねぎ 1/2個
BlendMicro npmが自動再接続・複数接続できるようになった で、BLE Nanoにも接続できるっぽいと書いた。今やってる。 BLENano実機の開発環境が手に入ったのでセットアップしたメモを書いておく。 写真の上の部分がBLE Nanoで、下はそれにUSBインタフェースを追加するMK20 USBボード。プログラムを書き込む時だけ下が必要で、デプロイする時は上の部分だけで良い。 なおBLE Nanoは12ピンでMK20は14ピン、1ピンずつ余るけど差し間違えると死ぬ可能性があるので注意。写真のようにUSBコネクタ側を余らせ、USBコネクタと反対側に白いアンテナとRedBearLabのクママークが来るようにする BlendMicroとの違い BLE Nanoと似たものにBlendMicroがあるが、これは普通のAVRマイコンを使ったArduinoにnRF8001というBLEチップを外
coffeeからES6(babel)に少しずつ書き換える の続き。 そもそも書き直す必要があるのか 正直シンタックスはcoffeeの方が好き。無駄にカッコつけなくていいし、インデントでpipeやpromiseをつないで書いていくのも見た目が良い。 coffeeは書きやすい。 まあすでに動いている物を書き直す必要は無いと思う。 移行するとしたら、ネガティブな動機が1つ、ポジティブな動機は2つある。 coffeeの開発の停滞 詳しくcoffeeの開発状況をウォッチしてないからよくわからないけど、詳しい人が「開発が停滞している」と言っているのでそうなんだと思う。 さよなら CoffeeScript – mizchi's blog coffeeはここ1年ぐらいバージョンが上がった時にdiffだけは見ているのだが、毎回git diffで差分を見て一瞬で理解できるぐらいの更新しかされてない。まあようす
前:CircleCIでAndroidのプロジェクトをビルドする 色々やってプロジェクトが複雑化してきたら、2回ビルドできなくなった。けど解決した。 circle.ymlはこうなっている machine: java: version: oraclejdk8 environment: JAVA_OPTS: "-Xms518m -Xmx2048m" dependencies: pre: - echo y | android update sdk --no-ui --all --filter "extra-android-m2repository,extra-android-support,extra-google-google_play_services,extra-google-m2repository" test: pre: - cd mobile/src/main/java/org/sho
BLE接続のArduinoマイコンボードBlendMicroと簡単に通信できるnodeライブラリをアップデートした。 https://www.npmjs.com/package/blendmicro v0.2.3になった。 普通BLEで通信しようとすると、PeripheralをScanしてServiceを探してTXとRXを探して……とかなり面倒な実装をしなければならないのだが、このライブラリを使うとマイコン側のble_set_name関数で指定した名前で探して接続まで全部やってくれるのでとても簡単に通信ができる。 BlendMicroと距離が離れて電波が通らなくなったり、太陽電池で動かしていて電源が落ちたりした時に、自動的に再scanしてちゃんと再接続できるようになった。 この機能はデフォルトで有効になっている。 というかもともと再接続は実装していたんだけどバグがあったのでちゃんと直した。
coffee-scriptで書いていたwebアプリをES6(babel)に書きなおした。 全部を一気に書き直してハイ動いたーとやるのは無理なので、coffeeとES6のファイルが混在しても動かせるようにして、少しずつ書き直した。 書き直したのはこれ React+Fluxxor+socket.ioでfluxなチャットを作った https://github.com/shokai/node-flux-boilerplate インストール % npm install babel babelify browserify watchify -save-dev とやっていたのだが、数日前にbabelが5から6にアップデートされて、babel-coreやbabel-preset-*など色々分割されて、大分色々変わってしまった。周辺ツールも対応の過渡期だったのでbabel5系を使うようにバージョンを指定した
LDRでazuさんのはてブを見たりもしているんだけど、自分JavaScriptガチ勢ではないのと流れが速いのとで追い切れなかったりする。 最近はお風呂で湯船につかっている時にタブレットでmenthasを見てる。 http://menthas.com/javascript どういうアルゴリズムなのか詳細はよくわからないけど、わりと面白い記事が流れてきてしかもノイズが少ない。内容面白いのに3,4人しかbookmarkしてない記事も流れてきて掘り出し物感もある。 LDRをタブレットで快適に見る方法があればまた違う気もするけど、良い方法が無い あとmenthasにはRSSもあるのでそっちもLDRに登録して見てる http://menthas.com/javascript/rss
MIDIデバイスを自作し、ブラウザのWeb MIDI APIと通信した。 rkistner/arcoreを使ったら簡単にできた。 もともとLeonardo以降のATMega32U4を使っているArduinoはMPU内にUSB機能が内蔵されていて、その部分もプログラマブルなのでキーボードやマウスにしたりとかできる。 セットアップ % git clone git@github.com:rkistner/arcore.git % cd arcore/ % ./install.sh ~/Documents/Arduino/hardware/arcore にシンボリックリンクが貼られる。Arduino IDEを再起動するとターゲットボードが増えてるので選択する。 プログラムを書く analogReadでセンサーを読んでMIDI channel1にコントロールメッセージを送る。analogReadは1
PlatformIOというArduino/mbed/MSP430などに対応したパッケージマネージャ兼ビルドツールをセットアップした。 http://platformio.org https://github.com/platformio/platformio 本体はPythonで書かれている。 たしか半年ほど前に気づいたんだけど、githubのArduino関係のリポジトリにlibrary.jsonというファイルを追加するプルリクが大量に送られていた。何だこりゃと思ったらplatformioの中の人が新しいパッケージマネージャ作ったから〜と送りまくっていた。library.jsonはNode.jsのpackage.jsonを参考にしているらしくてだいたい同じ仕様になっている。 地道な努力のおかげかすでに260個もライブラリが登録されている。 そもそもArduinoにはパッケージマネージャな
Web DB Press vol.87のES6の特集を読みながら、ES6を勉強した。とてもわかりやすかった。 紹介されている機能をちょこちょこと試す細かいスクリプトを色々書いたりメモを取ったりしたのでまとめておく。色々な機能があった。 https://github.com/shokai/es6-study 最近Web MIDI APIを使ってたんだけど、そのインタフェースがES6のPromiseとfor-ofで回す新しいIteratorとTypedArrayで実装されていたので、今後ブラウザに増える新しいAPIがES6前提で作られるなら普段からES6で書くようにしたほうがいいかなと思った。 個人的にはcoffeeの方がES6よりちょっと好き。でもfor-of文がES6で新しく増えたMapやIteratorを使う時に重要なんだけど、coffeeのfor-of文は別の意味があるので、coffe
最近のChromeはWeb MIDI APIといってMIDIキーボード等の楽器を接続し、その入力が取れる。 Chrome拡張でもそれは使える。 inputタグにフォーカスしている時に楽器からの入力をキャプチャして、パスワードを生成&入力するChrome拡張を作ってみた。 https://github.com/shokai/webmidi-password-generator パスワードは覚えるのが難しいけど曲のフレーズとかなら覚えやすいだろ、多分・・という気持ちを形にした。 といっても見た目に派手な動きがあるわけじゃなくてUSBコネクタにMIDIデバイス刺して演奏したらいきなりinputタグにパスワードが入力されてる状態になるので、blogで説明は難しい。 こんな感じでMIDIメッセージを受信してパスワードっぽい文字列が生成される。2回演奏して、ちゃんと同じパスワードが出てる。 これの問題
rbenvでRubyインストールするのって色々オプションつけたり下準備が面倒だけど、brew install rubyで最新版入るし、1.8〜2.0の頃と違って2.0以上で動くコードは2.2でも問題ない感じがするからRuby処理系のバージョン切り替え要らないじゃん、homebrewで最新版インストールすればいいじゃんという気持ち nginxアップデートしたらopensslも一緒に上がってRubyがぶっ壊れた Yosemiteにアップデートしたので MacをYosemiteにアップデートした homebrewで入れてたnginxもアップデートした。 % brew tap marcqualie/nginx % brew install nginx-full --with-mp4 --with-mp4-h264-module 最近のはデフォルトでwebsocket proxyが有効になっていて便
1年ぐらいgulpを使おうとがんばったけど理解できなかったので、先月からこちらを参考にpackage.jsonのnpm run scriptにshell script書いてタスク実行する方式をやっている 参考:Grunt/Gulpで憔悴したおっさんの話 – MOL あらためて最近使ってるコマンドの周辺ツールを調べると、ファイル更新検知して差分だけタスク実行してくれる機能があるのが多い。 babel → –watchオプションが最初から付いてる ESLint → eslint-watchで入るeswコマンド browserify → watchifyコマンドにbrowserifyのオプションそのまま渡すだけでok あとは上の記事にも書いてあるんだけどparallelshellで複数のwatchしてくれる系コマンドを同時に実行できるので 例えばこんな感じでpackage.jsonのscript
指定ディレクトリの下の写真をランダムにiTermの背景設定するコマンドができた。 https://gist.github.com/shokai/872e375c0b0636b0c2ae Enterキーを押す毎に画像を切替えるようにzshを設定してみたらすごい疲れる感じになった。これでアニメgifが再生できたら最高だったんだけどただの静止画になってしまう。 写真.appの中身をランダムに表示している。写真.appの顔認識機能が作ったサムネイルも読み込まれるせいで、たまたま撮った写真に写っている知らない人の顔ドアップサムネイル画像もたまに表示されて誰コイツ感がある。 定期的にtumblrとかから画像を取ってきても楽しそう。 ふつうにプログラムを書いたりしているところ AppleScriptの代わりにJavaScriptで書けるというJavaScript for Automationを使ってみた
ようやくYosemiteにアップデートした。 homebrewをよけておく /usr/local があるとアップデートに6時間ぐらいかかるらしいので、どこか別の場所によけておいてOSアップデートが終わったら元に戻す % mv /usr/local ~/usr_local そのまま戻して、今のところコンパイルしなおしたりしないでも動いてる。 Yosemiteインストール App Store.appからアップデートした。 ダウンロード終わってからはわりとすぐだったと思う。 ファンが爆音で回り続け、SSD容量がファイル消しても消しても減り続ける アップデート後、起動した瞬間からファンが回りまくって凄く重い。SSDの容量も10GB空いてたのにいきなり「残り1GBです」という警告がでておどろく。ファイル削除してもまたみるみる減って1GBになる。 Yosemiteにアップデートしなきゃよかったと思った
作った。 https://www.npmjs.com/package/korg-nano-kontrol % npm i korg-nano-kontrol -save ブラウザならWeb MIDI APIで、Nodeならmidi npmでMIDIコントローラと通信するようになっているのでrequireすればあとは適当に動く。 あと、最初coffeeで書いて全部完成したんだけどbabel(ES6)で書き直してみた。というのもES6は前々から使ってみたかったんだけど、1から機能を1つずつ勉強するのは苦手なので、既に慣れてるcoffeeの機能をフルに使ってある程度の大きさの物を実装してからES6で書きなおす事で色々な機能を一気に使わざるを得ない状況を作って勉強してみた。 KORG nanoKONTROLとは EdisonとMIDIコントローラでHueを調光する とか Node.jsとMIDIコ
HerokuのHubotを寝させる 無料で使うには1日6時間寝かせないとならないので Heroku | Heroku’s Free (as in beer) Dynos dashboard.heroku.comからaddonにProcess Schedulerを追加して6時間寝させる。 参考:HerokuでHubotを指定の時間に寝かせる – はらへり日記 寝る前に報告させる 寝る前に「寝ます」とか「寝ましょう」とか言ってくれた方が安心感がある。 herokuはプロセスの終了時にSIGTERMを投げてくるので、それを受ければいい。 nodeだとprocess.on(‘SIGTERM’, function(){ });でキャッチできるはずだけどHubotではできなかった。ソースをよく見たらbin/hubotが先にSIGTERMにイベントを登録して、その中でexitしていた。なのでSIGTER
縦長のwebページを画像として保存したかったので久しぶりにcapybara-webkitを使った。 インストール Macで使うにはqtが必要 % brew install qt % gem install capybara-webkit % gem list | grep capybara capybara (2.4.4) capybara-webkit (1.5.2) キャプチャ 久しぶりに使ったらインタフェースが変わってたけど、ドキュメントが無いみたいなのでlib/capybara/webkit/driver.rbを読んで適当にやったらキャプチャできた。 capybara-capture.rb require 'capybara-webkit' require 'uri' exit 1 if ARGV.empty? url = ARGV.shift driver = Capybara:
既存のbrainがあまりにもひどいので自作した。 https://www.npmjs.com/package/hubot-mongodb-brain https://github.com/shokai/hubot-mongodb-brain npm installして、external-scripts.jsonに書けば使える。何も設定しなくてもローカルのmongodbか、Herokuならmongolabかmongohqを読み込む。 他のbrainからの移行スクリプトもある。 以前爆発した時 hubotのbrainが爆発した hubot-brain-redisは全データを1つのblobとして固めて保存するから、brainのサイズが1.5MBを超えるとRedisToGoのmax memoryにひっかかって保存できなくなる。 そこでhubot-brain-redis-hashに乗り換えたのだが、
久しぶりにCircle CIを試したら、起動が妙に速くなっていた(前からこんなに速かったっけ?)のでいくつかのプロジェクトで使ってみる事にした。 Slackのインテグレーションがlimitに達していたので、Hubotで通知させるのを書いた。 circleci-webhook.coffee 設定 こんな感じでwebhook設定するとJSONが来るので、HubotがSlackに通知してくれる。 circle.yml machine: node: version: 0.12 deployment: staging: branch: master heroku: appname: (herokuのアプリ名) notify: webhooks: - url: https://自分のhubot.com/circleci-webhook?room=(chat部屋名) 動作 Hubot自体のビルド通知も、
参考 Sending and Receiving Messages | Android Developers これ読んであとは勘で書いたらWearable.MessageApi.sendMessageがなんとなく動いた。 Wearable.MessageApi.sendMessageの用途 Wearにはスマホ側の通知が全部表示されてそこからアクションも全部実行できるんだけど、スマホ通知からWearのActivityを起動したりはできない。スマホからWearのActivityとか呼びたい時は、sendMessageでWear内のWearableListenerServiceを実装したサービスと通信して、そこからWear内でIntent発行してもらってActivityを起こす。 Wear上のActivityからスマホに通信して何か処理してもらう時もsendMessageを使う。 WearにはW
Gitをhomebrewで2.3.6にアップデートしたら、行内の文字単位のdiffが完璧に出るようになってた。 以前は一応見れたけど3割ぐらい文字化けしてた → 文字単位でgit diff 1行が長い文章を書いている時は、変更された文字単位で背景色がつくとどこが変わったかわかりやすい 設定 diff-highlightにパスを通す % brew install git % ln -s /usr/local/Cellar/git/2.3.6/share/git-core/contrib/diff-highlight/diff-highlight /usr/local/bin/diff-highlight ~/.gitconfig でpagerを設定 [color] ui = auto [pager] log = diff-highlight | less show = diff-highli
次のページ
このページを最初にブックマークしてみませんか?
『shokai.org - 橋本商会』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く