タグ

ブックマーク / shokai.org (18)

  • 橋本商会 » 自動で日記書くようにした

    http://shokai-log.tumblr.com こういうのを毎日自動で書く。何していたかなんとなくわかって良い。 2012年08月11日 01時00分 @sho-virtualbox – 橋障害 gitはadd 5回、commit 5回、pull 4回、push 4回、checkout 3回、tag 3回、mv 2回、clone 2回、reset 2回、init 1回使った git 72回、node 55回、ls 51回、whereami 42回、cd 16回実行しました HDD0.266GB使った。残り10.214GB空いてる しくみ https://github.com/shokai/autodiary これをcrontabで1日1回実行するだけ。 zshのhistoryを24時間分読んでtumblrに投稿する。 ruby autodiary.rb –run で動く。 元ネ

  • 橋本商会 » HerokuのSinatraにバックグラウンドワーカーを詰め込んで節約

    Webアプリと同じプロセスにworker入れてお金節約できる。 Webアプリは “リクエスト来る→サーバーで処理→レスポンス返す” というのを繰り返すわけだが、サーバーでの処理に時間がかかる場合にそこを別のプロセスに任せて、先にレスポンスを返しておいて、あとで結果は取りに来てよ、という実装をする事がある。 時間がかかる処理は2つに大別できる。 動画をエンコードするとか。CPU負荷が高くて時間がかかるのでWebサーバーとは別の場所で動かしたい Twitter APIを10回ぐらい使った結果をまとめて返すとか。CPU負荷は低いけどIO待ちが長い 2の方について、HerokuRuby環境で安く上げる方法をまとめる。 手法 HerokuのcedarスタックでRuby使う時はwebサーバーとしてThinが起動する。 ThinはEventMachineの中で動いてるので、EM::defer等が使え

  • 橋本商会 » プログラムの写経

    プログラミング初心者が写経する時に気をつけると良い事を4つ説明します。 画像はイメージです プログラムを勉強する時に、写経しろ(すでに完成しているプログラムをから書き写せ)とか言われるが、ちょっと意識するとだいぶ違うと思う 1. 外から書け 例えば、1からnまでの数字を全部表示するプログラムがあるとする。 def run(max) 1.upto(max).each do |i| puts i end end run(10) これを写経する時、上から下に1行目から順に書くのではなくて、まず def run(max) end いちばん外側を書いて def run(max) 1.upto(max).each do |i| end end 中を書いて def run(max) 1.upto(max).each do |i| puts i end end こうなる。 上から書かないのが重要。プログ

    橋本商会 » プログラムの写経
  • 橋本商会 » 最近の自宅プログラミング環境

    家に帰ってきたらMacbookAirの上にサブモニタをつける。 デュアルディスプレイは左右に置くとどうしても首が痛くなるし、作業する方のモニタの正面にキーボードを移動させなければならなくて、首が痛くなる。 上下だと首が疲れない。写真のように上画面に半透明のterminalemacsとChromeの開発パネル。下画面(Macbook Air)に Chromeを表示して作業している。1枚の大きなディスプレイになった感じがする。 そろそろボロくなってきたけど、次も首の長さが調節できるモニタを買いたい。

    橋本商会 » 最近の自宅プログラミング環境
  • 橋本商会 » RubyでPhidgets Servoを動かす

    Macに最初から入ってるRubyで、サーボモーターが簡単に動かせるってすごい(^q^) 前:RubyでPhidgets InterfaceKitのセンサーを使う サーボモーターが接続されていたら1.5秒毎にランダムな角度に回す。 回すとon_position_changeイベントが起こるので、そこでサーボの角度を取得して表示してみている。 ffi-servo.rb #!/usr/bin/env ruby require 'rubygems' require 'phidgets-ffi' servo = Phidgets::Servo.new servo.on_attach do |device, obj| puts "#{device.device_class} attached" device.servos[0].engaged = true device.servos[0].type

  • 橋本商会 » Macのsaykanaをhttpから使えるようにした

    saykanaをリモートから使いたかったので作った。Macterminalから喋らせれるアレ。 sinatraで作っていて、http postされた文字列をsaykanaで読み上げる。これが研究室のMacProのpassengerで動いているので、他のマシンからでも研究室のMacしゃべらせれて大変楽しい。 shokai/mac-say-server – GitHub なんか説明書こうかと思ったけどgithubのreadmeに書いたからいいや rb-mecabが必要。saykanaがひらがな・カタカナしか読めないので、漢字をかなに変換するのに使っている。 http-postでsaykanaさせるAPIが使える。/sayにpostパラメータ message で送ればいい / にHTMLで書いたformがあってそこからもsayさせれる。 sayやsaykanaやafplayをsshからログイン

  • 橋本商会 » wavファイルをRubyで編集する

    Rubyでwavファイルのフォーマットを読んだり、データチャンクを編集するためのgemを作った。 ベースは以前作ったやつで、ついでにwavファイル操作のサンプルをたくさん追加してrubygems.orgに登録しておいた。 あくまでサーバーで音を合成して返すようなwebサービスで使う事を想定している物で、マイクからの入力をリアルタイムに音声処理するための物ではない。 ■インストール gem install wav-file ■使う フォーマットとデータチャンクを読む require 'rubygems' require 'wav-file' f = open("input.wav") format = WavFile::readFormat(f) dataChunk = WavFile::readDataChunk(f) f.close puts format するとこんな感じにフォーマット

  • 橋本商会 » chrome extensionの作り方+クロスドメインXMLHTTPリクエストのやり方

    こないだ箱根合宿で学んだ。 単にchrome拡張を作ってみたかったというのと、chromeではgreasemonkeyが実行できるけど、Firefoxと違ってGM_xmlhttpRequestが無いのでクロスドメイン通信ができないのでなんとなくやってみたかった。 自分の見ているページの履歴を全部自分のサーバーに送って保存したい。 まずos0xさんのChrome拡張入門のスライドが勉強になる。 とくに 拡張コンテキスト、コンテントコンテキスト、ページコンテキストの3つのコンテキストが存在し、それぞれは完全に分かれているので、お互いが干渉してしまうことはない。さらに、拡張同士も独立したコンテキストで実行される。 拡張コンテキストはタブ操作やクロスドメイン通信などの特権を実行でき、コンテントコンテキストと通信したり、スクリプトを実行したりといったことができます。 コンテントコンテキスト(Cont

    橋本商会 » chrome extensionの作り方+クロスドメインXMLHTTPリクエストのやり方
  • 橋本商会 » mbed NXP LPC1768を買った

    rain_yukizoraが東京に来ていて、2人でスタバでmbedをいじったりした。 Basic StampやGainerのように、ブレッドボードに刺す事を前提にピンが裏に出ている。でもその時はブレッドボードを持ち歩いて無かったので、基板上のLEDとシリアル通信等を試した。ピンク色の物体は鞄の中でピンが折れないように基盤裏につけてる梱包材。 mbedはエディタとコンパイラがwebサービス側にあり、開発は全てwebブラウザ上で行う。そしてできたバイナリをダウンロードしてマイコンに書き込み、実行させるという謎の16bitマイコンボード。 開発言語はC++。どうやら高価な商用コンパイラとライブラリ群がサーバー側にあるらしい。 例えばHTTPClientのライブラリがあり、DNSなども解決してくれるのでtwitterに認証してtweetするとかが簡単にできたりする。40円ぐらいで売ってるEhter

    橋本商会 » mbed NXP LPC1768を買った
  • 橋本商会 » scansnapと裁断機を買って本を電子化しまくる

    を解体する為にこの裁断機を買った。14000円ぐらい。 大型ペーパーカッター 裁断機 まだ必要ないので買ってないけど、替え刃も発見した。 コピー用紙500枚らくらくカット/人気 商品大型ペーパーカッター用『替え刃』 ジャンプぐらいの厚い雑誌でも切れる。このサイズの裁断機では妙に安い(他の半額程度)だが、そのかわり届いた時点で油でぬるぬるしている。 軍手とぞうきんを用意しておいて、よく拭いた。 刃の部分には茶色い油?が付着しているので、試しにいらないを裁断してみて油の拭き残しが無いか確かめる必要がある。 油がついた。(古ぐらしは新しいのを持っているので、2003年版を試し切りに使った) ■裁断する まずスキャンできるようにをバラバラにする。 表紙を外す しっかり押さえる 切る 切る。裁断機の刃が超鋭いので、あんまり力はいらない。 バラバラにしたをscansnapに入れる iPhon

    橋本商会 » scansnapと裁断機を買って本を電子化しまくる
  • 橋本商会 » Cでgearman workerを書いてRubyのclientから呼び出す

    gearmandをソースからインストールして、Cライブラリのlibgearmanが使えるようになった。 これでC言語でworkerを作ってRubyのclientから呼び出せる。環境はUbuntu9.04とgearmand0.11 ■Cでworkerを書く str_reverseというアビリティを持つworkerを作る。 ほぼAPIドキュメントのままだが、jobの引数を受け取るのと、値を返せるようにがんばった。ジョブ失敗した時とかのエラー処理全然書いてない。たぶんenum gearman_return_tを返せばいいんだろうけど strreverse-worker.c // 文字列をreverseして返すworker #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include 

  • 橋本商会 » Rubyでwavファイルをいじる WavFile.rbを作った

    gemにしました → 橋商会 wavファイルをRubyで編集する ***** Rubyでwavファイルを操作するためにWavFile.rbを作った。スピーカから音を鳴らすのではなくて、wavファイルそのものをいじって合成したりつなげたり、逆再生や左右反転させたりした後ファイルに書き出す為に作った。 packやunpackを使ってRubyでバイナリを読み書きする部分でかなり苦戦したけど、WAVファイル – MoonRock@MoonRock/A mere diary (2002-2)(7年も前に同じような事やってる!)がすごく参考になった。attr_accessorとかも知らなかったから勉強になった。 http://shokai.org/projects/ruby-wavfile/にサンプルを色々置いておく。 例えば、逆再生のwavファイルを作るコードはこう書ける reverseWav.r

  • 橋本商会 » cocoa emacsをインストールした

    carbon emacsを使ってたけど、cocoa emacsに乗り換えた。 動作中にメニューの[Windows]→[Font Panel]でフォントサイズをかんたんに切り替えられるのがうれしい。 macportsでインストールした sudo port install emacs-app-devel 先に持ってたホームディレクトリの.emacs.elや.emacs.d/以下は削除した。 /Applications/MacPorts/Emacs.app から起動。 Command + , で設定画面がでて、フォントなどの設定ができる。 バックスラッシュを打てるようにAlt/Optionキーの割り当てを無くして、かわりにFnキーにMetaを割り当てる これでalt+¥で\が打てるようになった。 背景黒で文字を白にしたいので esc-xして set-background-color black

    橋本商会 » cocoa emacsをインストールした
  • 橋本商会 » Twitterの地名なうbotを全blockするOAuthアプリ

    http://shokai.mag.keio.ac.jp/block_nowbots/から使える。 (8月15日:URL変更しました) とりあえずSinatraとOAuthの組み合わせを試してみたかったので、DBは使わないものを作りたかった。取得したOAuthのtokenなどはその場で捨てている。blockコマンドを送る権限だけを一時的に委譲してもらう。 以下技術的なことのメモ。 ■OAuthアプリの登録 まずhttp://twitter.com/oauth_clientsでアプリを登録し、consumer keyとconsumer secretを取得する。 で、下のコード中のCONSUMER_KEY, CONSUMER_SECRETを書き換える。 ■必要なライブラリ 必要なgemをインストールする。最新版にした。 sudo gem install oauth twitter sinatr

  • 橋本商会 » twitter上で親しい人のタイムラインを動的に生成するYahoo Pipes

    修論を出した後のテンションでまたYahooPipesを作った。 → Pipes: twitter dynamic timeline 親しい人で動的にタイムラインを作るpipes。 しくみは単純で、最近favを付けたり付けられたり、replyしたりされたりした相手でタイムラインを作る。 自分の発言内容やそれに対する相手の反応によってメンバーが動的に入れ替わる。 これの面白いのは、キーワードでの振り分けと異なりごく普通にtwitterを使っているだけでタイムラインが親しいメンツに変わっていく。 一見流動性が無いように見えるが、自分をふぁぼったりreplyしてきた人は入ってくるし、その人にreplyしたりfavし返せばしばらくはdynamic timelineに入り続ける。相手をfollowする必要すらない。 忙しくてtwitter見れない時は、これだけ見ておけば親しい人のpostはだいたいチェ

    橋本商会 » twitter上で親しい人のタイムラインを動的に生成するYahoo Pipes
  • 橋本商会 » moxaでセンサーネットワーク

    xtelのmoxaを使う。 moxaのzigbee無線で距離を測るから距離情報を削って、少しフォーマットを変えただけだが たくさんあるセンサ付きノードの状態を、zigbee無線で一カ所に集めるのが簡単にできる。 8ビットマイコンなのにclassが作れて(厳密にはJavaScript互換なのでクラスではないが)文字列が可変長でString.splitなども使えてArrayもあるので、こういう無線通信プロトコルは簡単に作れる ■ノードのプログラム 定義したsensor_send()関数でデバイス名,センサ名,センサ値を送信する あまり頻繁に送ると受信側が困るので、適度にsleepを入れる var debugMode = false; // trueの時、無線データなどをシリアルポートで確認できる var radio = new Object(); radio.id = 2; radio.cha

  • 橋本商会 » gtalk-sendコマンド

    重い処理が終わったらgoogle talkで通知する – 橋詳解 が便利で、サーバーでの処理が終わったらIM通知するのに使っている。 IMはポップアップして音も鳴るので、Terminalを睨んでなくても良くなる (サーバーで使う物と、自分が普段使うのとでGoogleアカウントが2つ必要) 追記:どうやらtoもuserも同じアドレスを指定して大丈夫らしい 最近使用頻度が上がってきたので、ちょっとなおした。デフォルト送信先を追加した。設定を、ホームディレクトリに設定ファイルとして置けるようにしたいな #!/usr/bin/ruby require ‘rubygems’ require ‘xmpp4r’ require ‘kconv’ user = ‘your-account@gmail.com’ pass = ‘gmail-password’ exit(1) if ARGV.length =

    橋本商会 » gtalk-sendコマンド
  • s.h.log » chumbyで日本語Twitterを読めるwidgetを作った

    chumbyは日フォントが入っていないので日語が表示できないが、Flashの中のダイナミックテキストそのものにフォントを埋め込めば日語が出せる。 Chumby Japan チャンビー・ジャパン: もうすぐ日語表示が可能に? Chumby Widgetで日語表示 – marqs blog ちょうどIMのAPIが動いてなかったので、twitterのfriends timelineを表示するchumby widgetを作ってみた。ただしフォントデータそのものを埋め込んで配布するのはライセンス的にまずそうなので、flaファイルのみの公開になります。自分の環境でコンパイルしてくださいIPAフォントを埋め込んで、swfも公開しました ダウンロード → SourceCode (Flash CS3 / AS2) (AS2が久しぶりすぎてやばかった) ただしこの方法だとファイルサイズが100kb

    s.h.log » chumbyで日本語Twitterを読めるwidgetを作った
    youpy
    youpy 2008/05/13
  • 1