タグ

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

  • 橋本商会 » coffeeからES6(babel)に少しずつ書き換える

    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系を使うようにバージョンを指定した

  • 橋本商会 » flux.DispatcherのwaitForの実装

    Promiseもコールバックも使ってないのにDispatcherのwaitForで順番の制御ができる。どういう事なのか気になったので調べた。 Reactはなんとなく使えるようになった気がしたので、fluxでやろう、StoreとかActionとかどう書くんだと調べてて、とりあえずflux npmというFacebookの中の人によるfluxアーキテクチャの説明とDispatcherが一つだけ入っているnpmを見ていた。 Dispatcherは使ってみた感じ、イベント名が無いEventEmitterみたいな感じで、登録順に実行される。 flux = require 'flux' Dispatcher = new flux.Dispatcher Dispatcher.register (action) -> console.log "1 - #{JSON.stringify action}" Di

  • 橋本商会 » 895円の超小型Ardunoクローン DigiSparkを買った

    とにかく小さくて安いのに、ほぼArduinoとして使える。 そしてズボンのコインポケットに入れて持ち歩けるので電車内hackに便利。 Digispark購入ページ DigiSpark wiki ソースコードはここに置いておいた。 デジタル出力・アナログ出力・アナログ入力・Mac上のRubyとのUSB通信を試した。 https://github.com/shokai/digispark-study 「webサービスと連動したちょっとしたハードウェア」にはArduinoはオーバースペックだと思うので、DigiSparkちょうどいいと思う。 普通のArduinoとの違い 詳しくは digispark:tutorials:basics [Digistump Wiki] 多少制限はある。 IOピン数が6PCとUSB通信する場合は4しか無い プログラムを書き込めるメモリ領域が6Kbyteしかない

    橋本商会 » 895円の超小型Ardunoクローン DigiSparkを買った
  • 橋本商会 » Rackミドルウェアの作り方を勉強した

    今スイスにいる。 行きの飛行機の中での勉強用にこのページを保存しておいて、Rack middlewareの作り方を学んだ。 第25回 Rackとは何か(3)ミドルウェアのすすめ:Ruby Freaks Lounge|gihyo.jp … 技術評論社 というのもSinatra::RocketIOをRack::RocketIOにしたいからなんだけど、Rack Hijack APIがよくわからない。(hijackについてはそのうち書く) ソースコードはgithubに全部置いてある。 github.com/shokai/rack-plugin-study Sinatra/Rails/Padrino等のRuby製webアプリケーションフレームワークと、 webrick/thin/mongrel/unicorn等などのRuby製webサーバーを接続するしくみがRackです。 Webアプリフレームワーク

    橋本商会 » Rackミドルウェアの作り方を勉強した
    komlow
    komlow 2013/10/07
  • 橋本商会 » 信用出来ないRubyスクリプトを安全にevalしたかった

    たぶん大丈夫だと思うんだけどヤバかったら教えて下さい。 (皆様からの温かいトマホーク(2)(3)によるとやっぱダメなようです) 要件 – ブラウザでRubyのコード書かせて、サーバーに保存してサーバーで実行したい – 危険な事はされたくない。ファイルへのアクセスやコマンドの実行、やたら時間のかかる処理など – 安全に実行できたらコードの返り値を取得したい。コードが危険だったらエラーを取得したい。 – 危険な事されても、コード実行しているプロセスは終了しないでエラーをブラウザに返したい。 – コードはWebサーバーと同じプロセスで実行したい 調査 ということで調べていたらsafelevelを使えばいいらしい – Programming Ruby: The Pragmatic Programmer's Guide – Rubyのセーフレベル4環境とその使い方 – ¬¬日常日記 $SAFEに0〜

    komlow
    komlow 2013/06/17
  • 橋本商会 » Sinatra RocketIOというプラグイン作った、これでWebSocketとCometが使える

    nodeのSocket.ioっぽい物のRuby版を作った。 https://github.com/shokai/sinatra-rocketio 依存 EventMachineが有効なWebサーバー(thinとか)と、jQueryが必要。 Rubyは1.8.7〜2.0.0まで動く。 Sinatraで使う インストール gem install sinatra-rocketio ブラウザとか回線に応じてWebSocketとCometの使える方が自動的に選ばれる。 切断されても定期的に再接続を試みるようになってる。 sinatraに読みこむだけで使える。sinatraのプロセス内にwebsocketサーバーも組み込まれる。 require 'sinatra' require 'sinatra/rocketio' modular styleではclass内でregisterすればok class

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

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

  • 橋本商会 » Sinatra用のcometプラグインを作った

    追記:RocketIOに統合されました → 橋商会 » Sinatra RocketIOというプラグイン作った、これでWebSocketとCometが使える ****** 作った Sinatra Comet I/O インストール gem install sinatra-cometio 通信を意識せずに、サーバー側からクライアントの関数、クライアント側からサーバーの関数を呼び出せる。 サーバーからクライアントへプッシュする例 サーバー側 Ruby require 'sinatra' require 'sinatra/cometio' CometIO.push :chat, :name => "shokai", :message=> "hello work!!" クライアント側 HTML <script src="//ajax.googleapis.com/ajax/libs/jquery/

  • 橋本商会 » Node.jsのEventEmitterをRubyに移植した

    ものすごい必要だったので作った。 rubygemsに登録しておいたので gem install event_emitter で使える。 ドキュメントはここ Ruby EventEmitter バグ、機能要望などは githubのissueかtwitterかメールでお願いします EventEmitterとは Node.jsのコアライブラリ。lib/events.jsにある。 nvmでnodeをインストールすると ~/.nvm/src/node-v0.8.14/lib/events.js とかにある。 どんなオブジェクトにでも一発でonとemitという関数を追加できて、 obj.on(‘イベント名’, コールバック)でコールバック登録して obj.emit(‘イベント名’, 引数)でイベントを発火させる。 nodeの全てのライブラリがイベント駆動するためによく使ってる機能。 addEventL

  • 橋本商会 » Rubyで文字列のレーベンシュタイン距離を計算する

    文字列同士がどれだけ似ているかを計算できると便利。 例えば “uri” と “url” の距離は1というふうに計算できるので、名前を間違えた時の候補のサジェストとかに使える。 編集距離とかでググるとみんながんばってRubyで計算してるけど、levenshteinというgemを使ったら簡単だった。 gem install levenshtein require 'rubygems' require 'levenshtein' p Levenshtein.distance("erik", "veenstra") p Levenshtein.distance("shokai", "shokai") p Levenshtein.distance("ahokai", "shokai") p Levenshtein.distance("shokai", "ahokai") p Levenshtein.

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

    プログラミング初心者が写経する時に気をつけると良い事を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 こうなる。 上から書かないのが重要。プログ

    橋本商会 » プログラムの写経
  • 橋本商会 » HTML+JavaScriptをArduinoに直結できるシリアルポートサーバーを作った

    SerialPort Serverを使うと、HTMLとJSをArduinoに直結できる。JavaScriptを少し書くだけでArduinoに「カーテン開けろ」とか「部屋の明るさよこせ」とか命令を送れるわけだ。 Web系の技術とハードウェアの技術を同時に使うには、間に「つなぎ」が必要なので、必要な機能を全部入れたサーバーを作ってみた感じです。 (github pagesでプロジェクトページ作ってみたんだけど楽でいいですね) こういうこと。 シリアルポートサーバーはrubygemsでインストールできる。 gem install serialport-server which serialport-server serialport-server --help serialport-server /dev/tty.デバイス名 –helpでヘルプが出る。デバイス名を引数にして起動できる。 Mac

  • 橋本商会 » いかにしておっぱい画像をダウンロードするか〜2012 をRubyで書いた

    元ネタ:いかにしておっぱい画像をダウンロードするか〜2012 – ゆーすけべー日記 昔、yusukebeさんとは大学で同じ研究室だった。 俺がまともにプログラムを書けるようになったのは、研究室に入った時に新入生向けのyusukebeサブゼミに入って、Flashで実装されたRSSリーダーのソースコードを見せてもらったあたりがきっかけだった気がする。 俺も高校生が(Rubyで)プログラミングをはじめるきっかけになりたいので、Ruby版を作ってみました。 Rubyもこういうwebクローラーを作るのに向いている言語だし、最近のMacなんかには最初からインストールされているので試してみると良いよ。 まずjson gemをインストールする。 sudo gem install json oppai.rb #!/usr/bin/env ruby require 'rubygems' require 'op

    komlow
    komlow 2012/03/02
  • 橋本商会 » Sinatra+Haml+jQuery入門

    研究室の後輩にSinatraとhamlとjQueryを教えるために作ったテンプレートについて、ここにも書いておく ソースコード https://github.com/shokai/sinatra-template 実際動いているもの http://masui.sfc.keio.ac.jp/sinatra-template/ git clone git://github.com/shokai/sinatra-template.git ■Sinatraを何に使うか Sinatra+haml+jQueryが便利。 Railsと似てるけど、ちょっと違う。 個人的には RailsHTMLのページをいっぱい作るのに便利 Sinatra → 画面遷移あまりしなくて、同じURLのままjsonのAPIをjQueryのajaxで取得して動的に表示を変えるwebページを作るのには便利 に感じる。 でもSi

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

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

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