hakobera's blog

技術メモ。たまに雑談

WebRTC P2P を使った画面共有サービスを作ってみた

三行まとめ WebRTC の getDisplayMedia API を利用した P2P で画面共有するサービスを作りました。 全て Managed Service (AWS & Firebase) 上で動作しており、ほぼノーメンテナンスでそれなりスケールします。 無料。ただし、音声無し、TURNサーバー無し、S…

海外カンファレンスの CFP の書き方 - RubyConf Taiwan 2016 の事例

この記事は Recruit Engineers Advent Calendar 2016 の15日目の記事です。 12月2〜3日に開催された RubyConf Taiwan 2016 にスピーカーとして参加してきました。 この記事ではカンファレンスそのものではなく、その前段階の CFP の書き方について、実際に R…

スタディサプリ on Quipper プラットフォームを支える技術

前置き hakobera.hatenablog.com この記事を公開した当時はまだオープンにできなかったのですが、実はこの記事は2月25日にリリースされたスタディサプリ(受験サプリ)を Quipper のプラットフォームに載せ替えるという移行プロジェクトを前提として内容も含…

Quipper の DevOps のお仕事と技術的課題

技術的課題を書くと、それを解決してくれるエンジニアが採用できるって話は本当ですか?というのは冗談としても、今の技術的課題をブログにまとめて公開するノーガード戦法も良いかと思う。— Kazuyuki Honda (@hakobera) May 25, 2015 このツイートがそれな…

Heroku アプリのログを fluentd で ElasticSearch に突っ込んで Kibana で監視する方法

目的 Kibana で Heroku アプリのログを可視化したい。ただし、レスポンスタイムとかは New Relic でも見れるので、ここではアプリが出力したらログを可視化する方法を紹介する。 また、今回、アプリからの出力を可能な限りに簡単にするために、アプリからは …

thunkify する時に注意すべきたった1つのこと

結論 thunkifyをオブジェクトのメソッドに適用する時は、元のメソッドに代入するか、thisを元のオブジェクトにbindすること。 fs.readFile = thunkify(fs.readFile) // または var readFile = thunkify(fs.readFile.bind(fs)); ただし、fs.readFileはvar rea…

ワンクリックで Chrome のスクリーンショットを Gyazo で共有できる Chrome Extension を作りました

インストール方法 Chrome ウェブストアで公開中です。 Gyazo Shot ソース Github上で開発しています。問題報告やプルリクエストなど大歓迎です。 https://github.com/hakobera/gyazo-shot 開発動機および機能 開発中の画面とかをサクッと共有するのに、Gyazo…

Android の DatePickerDialog で「年月」のみ選択させる方法

こんな Fragment を作れば良いと思う。 import android.app.DatePickerDialog; import android.app.Dialog; import android.content.Context; import android.content.res.Resources; import android.os.Bundle; import android.support.v4.app.DialogFragme…

Github Issues を利用したリリースマネージャのお仕事

最近、Quipper という会社で「リリースマネージャ」という名前のお仕事をしています。開発以外の仕事は久しぶりだったので大変でしたが、最終的にそれなり上手く行った方法を振り返りとしてブログに書いておくことにします。 経緯 自分のチームとは別のチー…

Node.js の Heroku 環境におけるパフォーマンス

Heroku で Node.js を動かしても絶対的なパフォーマンスは得られないのだけれど、最近仕事で Node.js on Heroku をやっているので、実際にどれくらいのパフォーマンスがでるのか測ってみました。 今回調べたのは、主に3点。 2X Dyno (CPUとメモリが2倍のDyn…

YAND (Yet Another Node.js Documentation) のソースを公開しました

1年前にこんなエントリを書きました。 僕の考えた最強の Node.js Document Viewer - hakobera's blog YAND 自体は結構使っていたのですが、色々あって Node.js v0.6.10 で更新を止めていました。 が、さすがに v0.8 用のものが欲しくなってきたので、v0.8.18…

EventEmitter.emit() によくある勘違い

突然ですが、Node.jsで次のプログラムを実行した結果を答えてください。 var EventEmitter = require('events').EventEmitter; var event = new EventEmitter(); console.log('1'); event.on('open', function () { console.log('2'); }); event.emit('open'…

「Node.jsは静的コンテンツには向いていない」のか?

この記事は東京Node学園祭2012 アドベントカレンダーの8日目の記事です。 この記事を書こうと思った理由 Node.jsに関するWeb上の記事を読んでいると、「Node.jsは静的コンテンツに弱い」とだけ書いてある記事をよく見かけます。有名なところだと、LinkedInの…

Tuppari コミュニティ始めました & IE に対応しました

Tuppari コミュニティについて これまで個人で Tuppari を書いていましたが、@seratch が Ruby ライブラリ書いてくれてので、これを機にコミュニティ体制に移行しました。Tuppari の Ruby クライアントを書きました - case class HatenaDiary(id: Symbol = ’…

Tuppari の Java クライアントを作った

Tuppari - WebSocket on Your Cloud - - Scalaとlift のはずだった ・・・前回、Node.js で構築した Tuppari (コンセプトは Pusher クローン)を紹介しましたが、実は API 仕様が公開されていて、Node.js 以外の言語/環境でもクライアントを作ることができ…

Tuppari - WebSocket on Your Cloud -

Tuppari とは 東京Node学園 6時限目で発表した Node.js で作られた Pusher クローンです。 簡単に言うと WebSocket を利用した大規模 Broadcast に特化したサービスです。インフラとしては Amazon Web Services (以降、AWS)上で動かすことに最適化されてい…

簡単にレーダーチャートが描けるライブラリ Raphael-Radar

最近は Google Chart Tools や Highcharts のように綺麗なグラフがかけるライブラリが増えてきましたが、レーダーチャートをサポートしているものがあまりなく、あっても用途にマッチしなかったので jQuery と Raphael を使って、レーダーチャートが描けるラ…

Router-Line はじめました

4/18 に開催された 東京Node学園 5時限目 で @KOBA789 さんが自作のルータである Router-Line を紹介していました。その時から便利そうとは思っていたのですが、最近ちょっとした API サーバを書く時に実際に Router-Line を使ってみて、改めて良いなと思っ…

鹿駆動勉強会に参加してきました

4/29 に奈良の能楽ホール(重要文化財!)で開催された 鹿駆動勉強会 に参加して、LTしてきました。関東以外の勉強会に参加したのは初めてでしたが、懇親会で twitter でしか知らなかった方々と直接お話できたりして、とても楽しかったです。当日の流れや各L…

WebSocket で PNG 画像をバイナリ転送して、JavaScript で展開して表示してみた

Node.js で WebSocket-Node を使って実装しました。 転送するめぼしい画像が見当たらなかったので、デスクトップをスクリーンキャプチャして転送してみました。ブラウザはChrome 17以上か、Firefox 11以上が必要です。サーバ側は scrrencapture コマンドを利…

Node.js vs Play vs SAStruts

前置き Experiences with Node.js: Porting a RESTful Service Written in Java - ZiggyTech上記記事では、実験的にJava (Jersey + Hibernate on Tomcat) で実装された REST API サーバを Node.js で書きなおしてみたら、少ないリソース(CPU/メモリ使用量)…

Play の evolutions を Heroku で使おうとしてハマった

Database-Driven Web Apps with Play! | Heroku Dev Center (we don’t recommend setting jpa.ddl to update for a real world production app. Use Play!’s database evolutions instead.) Heroku の Play のチュートリアル記事に「jpa.ddl=update が許され…

Heroku で package.json で指定した任意のバージョンの Node.js を 動かす方法

2012/8/7 追記Heroku が公式で package.json での Node.js/NPM のバージョン指定に対応したので、現在は以下の方法は必要ありません。普通に package.json の engines に利用したいバージョンを書けばOKです。以下の情報は古いです。本日、開催された Heroku…

nvmw で npm がインストールできない問題を修正しました

hakobera/nvmw · GitHub1週間前に対応したんですが、念のため、こちらでも告知しておきます。 主な変更点は以下の通りです。 npm がインストールできなくなっていた問題を修正 npm の git リポジトリの構成変更に伴いインストール方法を変更 npm をビルドし…

Play Framework で複数データベースに接続する方法

Play Framework 1.2.4 では、標準の機能で複数データベースに接続することができません。 ただし、希望としては上がっていて、実は 1.3 では実装される予定です。#706 Multiple database/JPA support - Play framework 1.0 (now in maintenance mode) - play…

僕の考えた最強の Node.js Document Viewer

自分がNode.js でプログラミングをする際に、必ず参考にするページがあります。それは Node.js の公式ドキュメントです。 Node.js v0.8.12 Manual & Documentationバージョンアップにも追随して、最新の情報が得られるので、書いている人には頭が上がりませ…

uglify-me : UglifyJS のフロントエンドを作った

既にあるような気もするのですが、ちょっとだけ特殊な要件に対応したかったので、uglify-me という JS 圧縮ライブラリである UglifyJS のフロントエンドを Node.js で組んでみました。hakobera/uglify-me · GitHub デモ以下のようなケースにマッチします。 …

tail.io - 標準入力をブラウザで tail -f できる htmlcat のクローンを Node.js + Socket.IO で作った

標準入力をブラウザで tail -f できる htmlcat というのを書いた - NaN days - subtechこの記事をみて便利そうだったのですが、Perl 詳しくなくて動かし方がよくわからなかったので、勉強がてらに Node.js + Socket.IO でクローンを作ってみました。npm モジ…

Node.js 入門者向けチュートリアル テストもあるよ

先月、学生向けの無料講義を開催している TechHUB.jp で Node.js の講義をやりました。そこで利用した講義資料(正確には補足資料)を、最新の Express と mocha でも動くように修正したので、せっかくなのでブログでも周知しておきます。Node.js で作るリア…

さくらのクラウドで Node.js v0.6 を動かすメモ

サーバの作成とSSH公開鍵の登録は済んでいるものとする。 OS は Ubuntu 10.04 LTS 64bit(随時追記予定) 初期設定 ログイン 普通の Ubuntu と違って root ユーザでログインする点に注意 なんとなく気持ち悪いので、一般ユーザを作成。sudo 権限を設定。SSH…