サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
災害への備え
blog.restartr.com
August 29, 2016 - golang ※2016-09-05追記: 本記事の対策では不備があるためRe: Goの通信経路選択(net.LookupIP & net.Dial)に続編書きました。 GoのHTTP通信経路選択の挙動について腑に落ちない点があり、net.LookupIP/net.Dialの仕様とそれに伴い生じる接続経路の選択問題、そしてその対策について調べてみました。 TL;DR unix環境におけるGoの名前解決まわりの仕様 net.LookupIPはDNSから取得できたアドレスリストをそのまま返すわけではない 内部ネットワーク間の接続であれば接続元と接続先がビット列的に近いものを優先したアドレスリストを返す net.Dialはnet.LookupIPがかえすアドレスリストの先頭から接続を試みる その後、最初に接続が成功したものとのみ通信を行う DNSラウンドロビン
February 27, 2016 - golang EC2インスタンスの一覧を表示するツールをgolangでつくりました。 ReSTARTR/ec2-ls-hosts 以下のように、ただインスタンスの情報を列挙するだけのシンプルなツールです。 $ ls-hosts i-00001 10.0.0.1 app01 i-00002 10.0.0.2 app02 i-00003 10.0.0.3 app03 i-00004 10.0.0.4 app04 何がうれしいか 以下のような状況において、多少便利になるツールです。 EC2インスタンスを複数台運用している 台数が数十台規模である AutoScalingを利用していて、IPやドメインが頻繁に変わる aws ec2 describe-instancesのレスポンスが遅い aws ec2 describe-instancesのオプション指定が複雑
March 31, 2016 - gadget ErgoDox EZを注文した(けどまだ届いてない)を書いてから1ヶ月半。昨日ようやく到着しました。 注文してから届くまで 数日前に、ErgoDoxEZのサポートから「不在続きで届けられないからこっちに戻ってきてしまうよ」とメールが届いて事態を把握。 配送業者に問い合わせたところ、住所が間違っていたみたいで、正しい住所を伝えたらすんなり届きました。安心のクロネコヤマトです。着払い1500円也。 サポートがちゃんとしてるので安心して注文出来ると思います。本当はあと一週間はやく受け取れたはずと思うと少し残念ですが、無事に受け取ったので結果オーライです。 まだまだ慣れきってない状況ですが、まずはファーストインプレッションをErgoDox EZで書きます。 既存の環境はMacBook Air + HHKB pro2であり、それとの比較を交えつつの感想
February 17, 2016 - gadget ※2016-03-31追記: ErgoDox EZが届いたをかきました。 大きなプロジェクトが一区切りついたこともあって、勢いでErgoDox EZを買いました。 お高めキーボード遍歴としては、FILCO Majestouch(黒軸)を1年程使った後、ここ5年くらいずっとHHKBpro2(墨黒無刻印)を使っていました。が、ずっとこれに変わるコンパクトかつ親指をもてあまさない最高なキーボードがないかなと思ってました。 つい最近「漢(オトコ)のコンピュータ道: キーボードを新しくした話(ErgoDox)」を目にしたこともあって、また理想のキーボードを探してみることにした結果、ErgoDox EZに行き着いた、といういきさつです。 本当なら届いてからポストしようと考えてたのですが、確認したら4月あたりまで1ヶ月程かかるらしいので、とりあえず注
スコア計算式をもとに計算してみると以下のようなスコアとなります(eror, exception, violationsはないので減点は無し) # Elixir/Phoenix irb(main):001:0> base_score = 239 + 93 * 0.1 => 248.3 # Go irb(main):002:0> base_score = 98 + 39 * 0.1 => 101.9 同じクエリを再現したうえで、だいたい2.5倍くらいの性能差?でしょうか。 が、完全に模倣できているか自信はないのであくまで参考程度ということで… 以下にベンチマーカーの出力内容も貼っておきます。 elixir/phoenix版の結果 { "valid" : true, "requests" : 333, "elapsed" : 76093, "done" : "[{Isucon5InitExecu
October 15, 2015 - golang Go Programming Blueprints - Solving Development Challenges with Golang 最近Kindleで購入したので、でひととおり読んで写経してみました。 概要と雑感 2015年1月に発売された書籍であり、Goのバージョンでいうと1.3から1.4の頃に書かれたものです。 著者はGolang UK Conference 2015でトークもしていた@matryerさん。 (※Golang UK Conference 2015 - Mat Ryer - Building APIs - YouTube) いくつかのGo製アプリケーション開発を通じて、Goの機能・パターンを学習する、という感じのもの。機能やパターンについて網羅的ではないものの、特定のユースケースをベースにしているため、パターン
March 9, 2015 - docker 軽くConsulを試してみたくて、でもVagrantで複数台仮想マシンを立ち上げるのはちょっと気が重い…ということでUbuntu14.10 on MacBookAirにDockerコンテナを複数立ち上げてクラスタを構築してみるテストをしました。 Dockerfileとか簡単な動かし方(を適当英語で書いたもの)をgithubにあげてあります ReSTARTR/test-consul-with-docker Docker内のプロセスがLISTENするポートに対してコンテナ外から接続する場合、-pでホストのポートにひもづけるか、--linkでコンテナ同士をつなぐのが最も手軽な方法です。が、consulは複数のポート(HTTP API用、DNS用、ゴシッププロトコル用等)を使うため、この手軽な方法でクラスタを構築することができません。 Dockerコン
January 18, 2015 - ruby Peekという、Railsアプリケーションに組み込めるプロファイリングツール(群)があります。 How we keep Github fastでも言及されているツールです。(2012年なので少し古いですが。) プロファイリングツールと適正 プロファイリング用のツールはたくさんあって、時間がかかる特定の処理を改善するために使うものもあれば、常時記録して特異な変化を監視するものもあります。 今回は後者寄りの要件であり、これに見合うものとしてPeekを取り上げました。 Railsでこれ以外のツールとしては、rack-mini-profilerやnewrelic/rpmなどがあり、それらについて今回の要件と照合してみました。 newrelic rpm newrelicのサービス上で結果が確認出来るだけではなく、デベロッパーモードの場合に”/newre
April 20, 2014 - vim rubyやpythonなど通常のプログラムを書く場合は、基本的にソフトタブ(2spaces)でインデントされるようにvimを設定しています。 set noexpandtab set tabstop=2 set shiftwidth=2 けれど、Goの場合はインデントはハードタブが通例。 なので拡張子が”.go”の場合だけハードタブでインデントするための設定を.vimrcに書いておきます。 if expand("%:t") =~ ".*\.go" set noexpandtab set tabstop=4 set shiftwidth=4 endif %:tはディレクトリ含まないファイル名。 autocmd使うほうが良いかも。 au BufNewFile,BufRead *.go set noexpandtab tabstop=4 shiftwidt
August 20, 2014 - architecture なんだか、世間的にMicroservicesが次の注目対象になりそうな感じです。 DockerConでも複数のセッションで言及があったり、はてブにもたまに関連記事があがってきたりしてます。 実態はどんなものかイメージしにくかったのですが、最近InfoQで公開されたeMAGが情報としてまとまっている気がしたので、これを読み進めています。 InfoQ eMAG: Microservices 本に含まれている内容 この本は、過去のInfoQ記事や各ブログを再構成したもので、以下の記事タイトルがまとめられています。 Microservices: Decomposing Applications for Deployability and Scalability Microservices and SOA Adrian Cockcroft
August 13, 2014 - golang TL;DR goの構造体につけるタグは、フォーマットが不正だと読み込まれない(当然) json.Marshalは、構造体のjsonタグがあればその値をキーとしてJSON文字列を生成する json.Unmarshalは、構造体のjsonタグがあればその値を対応するフィールドにマッピングする jsonタグがなければ、完全一致もしくはcase-insensitiveなフィールドにマッピングする では、ひとつづつ確認していきます。 goの構造体につけるタグは、フォーマットが不正だと読み込まれない(当然) goの構造体にはタグの機能があって、型の後に特定のフォーマットでアノテーションが記述できます type MyType struct { Hoge string `foo:"1" bar:"2"` } key:"value"をスペース区切りで複数かけ
April 22, 2014 - 雑記 Rebuild Podcast Rebuild はソフトウェア開発、テクノロジー、ガジェットなどの話題を中心に、ゲストと話すギーク、デベロッパー向けのポッドキャスト番組です。 Hosted by @miyagawa http://rebuild.fm/ RSS iTunes mosaic.fm 次世代 Web Podcast Mozaic Hosted by @Jxck_ http://mozaic.fm/ RSS だんごゆっけの平和な話 仲良し三十路男二人。Web業界にいるプランナーとエンジニア。それぞれの日常を平和にまとめあげていきます Hosted by @kamadango, @yusukebe http://dandy.fm/ RSS iTunes 職質テックトーク Hosted by @moznion http://shock-sheet
May 11, 2014 - docker CentOSを使ってて不便なのがruby2系のインストール。 rbenvやruby-buildを使うかソースからインストールするのですが、この場合、環境を構築するたびにビルドすることになり時間もかかるし大変面倒です。 なのでDockerを使ってクリーンな環境でRubyの最新rpmをビルドしてみました。 Dockerを使えばビルド環境がすぐに立ち上げられるので、rpmビルドに必要なパッケージを確認したりするのに最適です。 今回のソースはgithubにpushしてあります。 ReSTARTR/ruby-rpmbuild-container 環境 ゲストOS:Vagrantで起動したUbuntu-14.04 コンテナ:centos:6.4 ファイルの配置 以下ファイルを同一ディレクトリに入れておきます。 Vagrantfile provision.sh
June 28, 2014 - golang DockerCon2014で発表されたlibchanについて調べたことをまとめてみます。 libchanはlibcontainerやlibswarmと共に発表されました。 libswarmはDockerを中心にしたエコシステムにおけるベンダーロックインを回避するためのソリューションであり、libcontainerはDocker 0.9リリースドキュメント日本語訳: Execution driversとlibcontainer導入 - Happy New Worldを参照するのがよいでしょう。 では、libchanとは何なのでしょうか。 READMEにはlike Go channels over the networkとあります。ネットワーク上のgo channel?よくかりませんね。。。 README.mdとPROTOCOL.md、いくつかのテ
April 17, 2013 - python ハマったので。 a = 2 double = lambda x: x*a double(4) # 8 (=4*2) double(10) # 20 (=10*3) a = 3 double(4) # 12 # WTF? double(10) # 30 doubleというクロージャ内の変数aを、クロージャ宣言時のaで束縛したいのです。 対応は2つ。 lambdaのデフォルト引数で束縛する functools.partialで束縛する 1. lambdaのデフォルト引数で束縛する 参考:closures - Python lambda’s binding to local values - Stack Overflow a = 2 double = lambda x, y=a: x*y double(4) # 8 (=4*2) double(10
April 26, 2013 - python, golang 最近Rubyでプロジェクトオイラーを解きながらRubyに慣れようとしてるのですが、ちょっと飽きてきたので息抜きにGoを書いたりしています。 ついでにZeroMQも試してみたかったので、GoとPythonをZeroMQで繋いでみました。 構成はこんな感じで、Python(かGo)clientを起動し、Goで動くmonitorq経由でGoのserverにつながります。PUB/SUBでmonitorからモニタリングできるのがミソです。 +----------------------------------------+ | | +------+ |--------------------------+ +-----+ | |client|--------|9001 monitorq 9002|-----|serv | | |(REQ
April 5, 2013 - python pytestを使い始めました。 pytest: helps you write better programs まだまだ機能は把握しきれていませんが、良いと思ったことは3つ。 テストがコケた箇所のコードがレポート内容に表示される テスト対象を初期化したものの受け渡し方をスマートにできる pytest.vimがなかなか使える 1.テストがコケた箇所のコードがレポート内容に表示される これが巷でよく聞く一番のメリットかとは思いますが、コケたときの情報が全然違います。 pytestはかなり詳細に表示してくれるので、レポートの内容だけでどこをどう直せば良いか把握できます。 unittestの実行結果(-vオプション付き) pytestの実行結果(-vオプション付き) 文字列比較の場合は差分表示してくれたりするので便利です。 2. テスト対象を初期化した
April 2, 2013 - 雑記 ※2013/04/04 更新:会社名を公開しました 3月末付でKauli株式会社を退職しました。 4月1日だと嘘っぽくなるかなと思い、1日ずらしてのご報告です。 2012年01月入社なので、1年3ヶ月という短い間でしたが、これまでで最も充実した1年だったように思います。 大規模な広告配信という技術的に非常に挑戦しがいのある分野で、非常に技術力の高いエンジニアと共にPythonプログラマーとして充実した日々を過ごさせてもらいました。 「大規模なトラフィックを直に感じながらアプリケーション開発に取り組みたい」という希望を胸に入った会社で、 データストアの検証(結果的にRedisを採用) 合計数十台自作サーバーの組立(参考:Kauli自作サーバ組み立てマニュアル) 開発部総出でデータセンターでサーバーラッキング 某社SOAP APIに難儀 開発のベースをgi
March 25, 2012 - python どうも。もうすぐ入社3ヶ月が経って試用期間が終わろうとしている状況な僕です。 すっかり停滞気味のブログですが保守も兼ねて投稿を。 はてダからはてブロTumblrへ とあるブログをはてなダイアリーで書いていたのですが、Tumblrへブログのデータを移行したいという要求が出てきました。ということでpythonで移行スクリプトを書いてみました。 ソースコード 例によってGitHubにて公開しておきます。 https://github.com/ReSTARTR/mt2tumblr python2.6以外はテストしてません( ー`дー´)キリッ 使い方 oauth2に依存しているので、実行前にインストールしておいてください。 pip install oauth2 使い方はREADMEどおりです。いつもどおりのテキトー英文です。 はてなダイアリーの管理画
December 28, 2011 - Scala, python, Webサービス 今月頭にブログ書きましたが、EventStatsという勉強会の参加者の推移が見れるサービスを公開しました。 EventStats - イベントの統計情報が見れます まぁ自分が欲しかっただけなんですけど、使ってみて頂ければ幸いです。 今回はそのサービスの構成とかについて書いてみます。 アジェンダ 全体像 システム構成 Gitリポジトリ MongoDBのPaaS 各イベント管理サービスAPIの違い 開発メモ 1.全体像 開発環境も含めて全体像を図にしてみました。(初Cacooですが超べんりですね!) 赤い線がGit操作で、黒い点線がMongoDBへのアクセスです。 2.システム構成 大きく分けてwebとクローラーの2つです。 webはherokuに、クローラーはさくらのVPSに配置。 まずは優先してデータ蓄積
August 16, 2011 - Scala ScalaのORMとしてSquerylってのがあります。 Squeryl - A Scala ORM for SQL Databases 使い方は上記リンク先を見ればだいたいわかります。 あと、@jugyoさんのブログに導入あたりはまとまっていますし、つまづいたらGoogleGroupで検索すれば何か見つかるかもしれません。 Twiwt:Blog / jugyo : squeryl を試す Twiwt:Blog / jugyo : Squeryl の使い方 - セットアップ, モデルの定義, テーブル作成 Squeryl | Google Groups さて、今回はTwitterっぽいものを想定して機能を試してみたのですが、3つほどハマったところを記しておきます。 環境はScala2.9.0.1、Sbt0.7.7、MySQL5.5、Squer
October 10, 2011 - Scala 第二回 #Playframework 勉強会 in Tokyo #play_ja 第一回は大阪開催だったのとそもそも開催を知らなくて参加できませんでしたが、第二回は有難いことに休日に東京で開催されたので行ってきました。運営の皆様、参加者の皆様、懇親会でお話させて頂いた皆様、どうも有難うございました。 勉強会のまとめ記事 下記ブログにありますのでそちらをどうぞ。 第二回 Playframework 勉強会 in Tokyo やりました #play_ja - 複雑系スパゲティソース(はてな版) まとめ記事へのリンクが最後にあります。 Playframework勉強会#2まとめ(スライド) 発表資料をまとめてあります。 なのでここでは、全体的な話しではなく関心の強いところに関してのみ書こうと思います。 ただの感想文です。 Play!の今とこれから
August 30, 2011 - Scala 2011.08.31 kmizushimaさんから頂いたコメントを元に、下記の記述を修正&追記しました。 Twitterのutil-evalの一時ファイル生成について AkkaのConfigファイルのパース手法について TwitterのOAuthの鍵やDB接続情報など、アプリを書く上で環境によって切り替える設定が大抵の場合あると思います。普段使っているPHPの場合、設定を外部ファイルに書きだす場合、ini,yaml,xml,phpのいずれかを使うことが多いのですが、Scalaの場合、設定ファイルってどうするのか気になりました。 ということで、適当に思いついたライブラリやフレームワークがどのように対応しているのか調査。 ライブラリ propertiesファイル javaの古くから使われている キーと値のみ設定可能 依存関係がないので手軽。 すべ
June 21, 2011 - 雑記 6⁄18(土)に開催されたVarnish勉強会 Tokyo.vcl : ATNDに行ってきました。 初のクックパッドさんオフィス訪問です。 Varnish3のリリースパーティーも兼ねての開催だったようで、ステッカーもいただいてしまいました。 インフラ屋じゃない上に、Varnish触ったのは前日の晩という超初心者だったので結構不安でしたが、 ビアバッシュを含め色々な話しが聞けた実りある良い勉強会でした。 主催の@hmskさんをはじめ登壇者の皆様、ならびにビアバッシュで交流してくださった皆様ありがとうございました。 雑感 Varnishは画像配信の事例が多い HTTPサーバーの前だけじゃなくてSolrのような内部ネットワーク間の通信にも適用できる。 Varnish落ちたときにApacheの負荷を避けるためにSquidが使える。 拡張次第でHTTPサーバーに
※こちらを参考にしました。 Android Dev Phone 1 でMMSを使えるようにするまでの道のり | Yuki Nishijima Blog 2.SoftBankメールをインストール 最新版(2011.05.01時点でv2.1)のSoftBankメールでは送受信に失敗します。 なので、下記ブログ記事よりv1.6の古いバージョンをダウンロード&インストールします。 ※既にAndroidマーケットから最新版をダウンロードしている場合は、そちらを先にアンインストールしておく必要があります。 Softbankメールアプリ1.6を再インストール « デジタルガジェッター日記 端末のブラウザからダウンロードしてインストールするか、android-sdkの入っているPCから adb install jp.softbank.mb.mail-1.6.apk でインストールできます。 あとは、アプリ
May 9, 2011 - Scala dotcloudを必要最低限操作するためのactionをsbtに追加してみました。 sbtのアクション自体はじめてなので作法がよくわかってないので、間違っているかも知れませんが。 使い方 ※scalaファイルは最後に掲載しています。 とりあえず下記を作成するサービス名に置き換えればOKです。 val dotApplicationName = "APPNAME" val dotServiceName = dotApplicationName + ".SERVNAME" あとは、下記を順に実行すればOK(dot_prepareはdot_pushの前に必ず実行されるので省略可能) “sbt dot_create” : サービスの作成 “sbt dot_prepare” : リリース用ディレクトリ作成とwarファイルのコピー “sbt dot_push” :
March 9, 2011 - Scala 前回はCasbahというライブラリを使ってMongoDBへアクセスしてみました。 ScalaからMongoDBへアクセスする ? Casbah編 今回は、Casbahに加えて、Salatというライブラリをを組み合わせて、より便利にMongoDBとScalaとやりとりをする方法について見ていきます。 novus/salat - GitHub Salatは、CasbahのMongoDBObjectとscalaのケースクラスと相互変換してくれる、ORマッパーです。wikiから引用するとこうあります。 Salat is a bi-directional Scala case class serialization library that leverages MongoDB’s DBObject (which uses BSON underneath)
March 7, 2011 - Scala ここ2,3日、ScalaからMongoDBへのアクセスのため、CasbahとSalatをお試し中です。 もともとはAkkaを弄ってたんですが、Akkaに含まれるPersistent(MongoDBなどNoSQLへの接続用)がなくなるらしいので、別のがないかなー、と寄り道したのがきっかけです。 MongoDBを開発している10gen謹製Scalaライブラリです。 Scala製のドライバは他にもLiftのMongoDBや、Liftと組み合わせて使うRogue、mongo-java-driverのラッパーのmongo-scala-driverなどがあります。 一覧は以下に掲載されています。 Java Language Center - MongoDB Rogueについては、Fungoingのbibrostさんのブログが詳しいのでそちらをご覧ください。
February 24, 2011 - hadoop Hadoop conference japan 2011に参加してきました。 Hadoop Conference Japan 2011 - Eventbrite 今回の個人的トピック AWSがHBaseサポート予定 DremelはHadoopの補完的位置づけ DSLとしてのAsakusaの魅力 AmebaのpatriotはRubyDSLで簡単ジョブ記述 MySQLでもMapReduceできるよ HBaseを使うとシステムがシンプルになるよ 以下、メモ書きです。 Hadoop on クラウド / Amazon Elastic MapReduceの真価 * 11:30?12:05 * Amazon Web Services, Jeff Barr ( @jeffbarr ) * EMR removes ‘MUCK’(=ぬかるんだ感じ) fro
次のページ
このページを最初にブックマークしてみませんか?
『blog.restartr.com』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く