サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
TGS2024
takesy.cocolog-nifty.com
はじめにHTTPのContent-Encoding: gzipにより、アプリ...
この記事はNode.js Advent Calendar 2013 19日目の記事となります。 前書き Push通知のフレームワークとしてSocket.IOがよく使われています。 Socket.IOは、Websocketが使えない環境でもPUSH通信を可能とすることで有名ですが、それ以外にも、namespace機能やroom機能、イベントを自由に使えるなど、直接websocketを使うよりも便利な機能が多くあります。 機能は豊富ですが、書き方にルールを決めずに気軽にあちらこちらでpushを使うと、見通しが悪く保守が大変なアプリになってしまいます。 そこでSocket.ioがベースの、簡単で保守しやすいプログラムが書けるsocket.io-reqevというフレームワークを紹介します。 socket.io-reqevの概要 socket.io-reqevは、pubsub機能 + requstご
PATHの変更は、#(アンカー)が使われます。 アンカーはもともとページ内遷移に使うためのものですが、 Webサーバにアクセスしないという性質と、ブックマークが できるという性質により、Backbone.jsにおいて、ページを
FreeBSDにはJailという簡易仮想マシンを作るコマンドがあるけど、残念ながら Linuxにはない。ただ、chrootという古くからあるunixコマンドで仮想マシンに 近いことができる。 この辺のことについては、Apacheセキュリティ という本に記述されている。 Apacheセキュリティの場合は、root権限を使わないようにしたり、必要最低限の ファイルのみをJail環境に移行することによって、セキュリティを強固にするため に使われている。 私の場合は、自分のプロジェクトのチームが作成しているWebアプリが、/etc配下 の設定ファイルのパスをソースに直で書いてあるため、設定ファイルを書き換え て、Webアプリを同時に2個立ち上げることができなかったためにJail環境を構築し た。そのため、厳密にセキュリティを考慮していないが、悪しからず。 Apacheセキュリティでは、必要な実行フ
Railsを使っている人なら知っているけど、他の言語の フレームワークを使っている人は知らないかもしれない Asset Pipelineについて書きます。 Railsは3.1からSprocketsと呼ばれるライブラリを使って、 Asset Pipelineという仕組みを導入しました。 初めは仕組みがややこしく、デフォルトで導入しなくても よかったんじゃ?と思っていましたが、Backbone.jsを使う ようになって、Backbone.jsユーザにとっては、神機能だと いうことがわかるようになりました。 Node.jsにもmincerというSprocketsのクローンがあります。 (説明はまた後で)
Backbone.js Advent Calendarの16日目です。 新しい技術は興味はあるけど、主流にならない技術も多くて全部覚えるにはお腹いっぱいという皆さん。 私もこれはという技術を身につけて、一生食べて行けれたらと常々思っています。 そしてようやくこれはと思える技術に出会いました。 それが表題のNode.js+WebSocket+Backbone.jsです。 それを使った簡単なサンプルアプリ(backbone-railsのサンプルをrailsではなく Node.jsに置き換え、DBをRedis、データの同期にSocket.ioを使ったもの)のソースは ここにあります。アプリの解説はまた今度します。 今回はなぜこの組み合わせに賭ける気になったのか思ったを述べます。 利点 デバイスを選ばない HTML5の利点でよく言われているようにPCはもちろん iPhone、Androidでも動作
1対1の外部リレーション embedの機能があるMongoDBで1対1の外部リレーションを使いたい場合というのは、そんなにないと思います。 しいて挙げるなら、あまり参照しないがデータサイズが大きいため、毎回読み込むのは避けたい場合ぐらい。 ただ、その場合でもfind時に必要なフィールドのみを取得できるオプション があり、それを使えば1対1で外部リレーションさせた場合と同じ効果が得ら れます。 1対多で他Documentとのリレーション ログ等無限にどんどん増えるデータは、embedには向かないため、外部リレーションの関係になります。また細かい条件で検索したいレコードも 外部リレーションの1対多となります。例えば、10個以上20個未満のアイテムを探したいと思い、 find({:item.num => {"$gte" => 10,"$lte" => 20}})としても、1レコード全体を対象にす
ソーシャルゲームのアプリにMongoDBを使っていて困った点 1. joinがないため、マスタデータの参照が多いページのレスポンスが遅い 2. 複数collectionにまたがって更新が必要な場合に、ShutDown,バグ等により中途半端にコレクションを更新して、データの不整合が発生することがある。 3.集計関数には、MapReduceを使う必要があるが、リアルタイムで行うには負荷が重い。 4. Mongoidがレースコンディションに弱い。 a.条件を指定した更新ができない。 b. incとpushを同時に行うとようなAtomicな操作を行えない。 c. HashやArrayに対して、pushではなく、全体をセットしてしまう。 上記の弱点は、1作目で発覚したため、2作目以降は下記の対応を行った。 1.に関しては、マスターデータをMongoDBに格納するのではなく、Hash形式にしてAmaz
Amazon EC2を使う利点 各種APIが公開されているため、プログラマブルにインスタンスのセットアップができるところにつきると思います。 他のクラウド(もちろんAmazon EC2も)は、Webブラウザ上でインスタンスの増減やロードバランサ等の設定ができますが、手作業が必要なため自動でスケーリングができません。 また、もしデータセンター(amazonではゾーンと呼ばれる)全体が障害に陥いったとしても、セットアップをプログラムで自動化しておけば、ゾーンのURLを書き換えて実行するだけで、同じ環境を違うゾーンに簡単に復元できます。 Amazon EC2 セットアップスクリプト ubuntuの素のOSから、ユーザを作成し、memcachedをインストール設定、起動するまでのスクリプトを書いてみました。 使用しているライブラリは公式のruby sdkではなく、https://github.co
iPhoneのsafariは文字のエンコーディングを指定できることができないので、 文字化けしたサイトを簡単に読めるようにすることができない。 そこで、以前Google App Engineで作ったWeb proxyを活用することを 思いついた。webページをproxyしてくれるwebアプリ iPhoneで下記サイトにアクセスし、URL:となっているtextboxに文字化けした URLを記述し、displayボタンを押下。 webappproxy ちょっとフォーマットが変わるが、うまくいった。 文字化けするWebページ webappproxy適用後
VIMでよく知られている機能にノーマル・モード時に%を入力すると対になった()や{},[]の間をカーソルがjumpできる機能がある。 ただ、この機能はrubyのdo~endやHTMLの<div></div>のようなタグには対応していない。そこで便利なのがmatchit.vimというプラグイン。 実際:help %とヘルプを出すと、下記のように本家本元のヘルプにも記述されているぐらいのお墨つきのプラグインなのだ。 For other items the matchit plugin can be used, see |matchit-install|. matchit.vimのインストール方法 http://www.vim.org/scripts/script.php?script_id=39 から最新のmatchit.zipをダウンロード 1.でダウンロードしたzipファイルを展開し、展開
会社でサーバのファイル郡をAmazon S3にバックアップすることになり、その ためのツールをRubyで作成しました。 会社の了解を得て、オープンソースにしていいことになったので、rubyforgeに 登録しました。ただ、Windowsでは動作しません。 S3Backup:http://rubyforge.org/projects/s3backup/ S3Backupについて 概要 S3Backupツールとは、指定したディレクトリ以下をAmazon S3にバックアップ /リストアするためのツールです。 特徴としては下記があります。 圧縮 Amazon S3にアップロードする際に各ディレクトリを圧縮するため、通信帯域や保存領域を節約することができます。 暗号化 設定によりアップロードするファイルを暗号化させることもできます。 差分バックアップ バックアップが前回バックアップした時と内容が変わ
ここ数年Rubyを使っています。 Rubyこそ最高のスクリプト言語だと思っていました。 Rubyの名前の由来もよりよいPerl (pearlは6月の誕生石、ruby は7月の誕生石 ) という意味を意識してのものです。 そのため、Rubyが盛隆になった今、Perlを使っている人は、Rubyに乗り遅れて、Perlの知識にしばられているだけ。そう思っていました。 でも、その思いは間違っていました。 PerlにはPerlのよさがあり、Rubyにけっして劣っていない。と最近そう確信するにいたりました。 そこで懺悔の意味をこめて、Rubyに比べたPerlのよさを述べたいと思います。 1.参照回数によるオブジェクト破棄のため、破棄時が明確である。 perlは対象のオブジェクトのリファレンスがなくなった時に破棄が実行されるのに対し、rubyはGC(ガベージコレクター)による破棄のため、破棄がいつ行われる
5.FireFoxのアドオンScreengrabを下記URLからインストール https://addons.mozilla.org/ja/firefox/addon/1146 6.下記の内容のRakefileを適当なディレクトリに作成 # cofing: utf-8 require 'rubygems' require 'spec/rake/spectask' task :default => [:spec] Spec::Rake::SpecTask.new do |t| t.warning = true t.rcov = false t.spec_opts << '--color' << '-fs' end require 'date' module SeleniumHelperMethods def startup @captures = {} i=1 date_str=Date.to
昨日Rails勉強会@東京にいってきました。 皆さん、MacBookを徐に開ける中、家族共有の4年くらい前のLavie Lを開くのは 正直勇気がいりました。明らかに一人重そうなPCだし。 いろいろ学ぶことが多かったのですが、今日はもうふぅなので、また次回に熱く書きます。 ただtechnohippyさんから直接rails_on_gae(ついgae_on_railsと間違う)を教えていただけるという多大な幸運に恵まれて、gae_on_railsでhttp://d.hatena.ne.jp/technohippy/20090428#1240939733 のサンプルアプリをgoogleにアップロードできるまでいけたのでその辺りをさくっと記述します。 環境はwindows上にubuntu8.04のvmwareを立ち上げました。 最近rails_on_gaeを入れて、googleアップロードまでを丁寧
vimでよく使う機能としてgrepがある。 最近はwindowsでもそのまま使えて拡張子も指定できるvimgrepをよく使っている。 例えば 現在のディレクトリ配下(サブディレクトリも含む)の拡張子.pyに対して"Spend"を検索 :vimgrep "Spend" **/*.py lifeaccountnote.py|38 col 13| datas = Spending.all().filter('user',user).filter('date >=',fromdate).filter('date < ',todate) lifeaccountnote.py|52 col 7| class Spending(db.Model): lifeaccountnote.py|72 col 3| spending = Spending(user=user, lifeaccountnote.py
ネットワークやセキュリティの試験をする際、送信するパケットのMACアドレスやIPアドレスを自由に設定できる必要がある。 そういう際によく使われるのはsmartbitという機材だが、いかんせんめちゃ高。とても個人で購入できる代物ではない。 そこで、自分のパソコンからsmartbitのように好きなパケットを流すツールがNetwork packet generator (Windows専用)というツールだ。 EthernetフレームからのデータをすべてHEX文字で設定したデータをそのまま流すことができるというスグレものなのだが、いかんせんUDPのデータを送る際にいちいちチェックサムやデータ内容をHEX文字に置き換えるのが大変面倒。 そこでNetwork packet generator用のUDPプロトコルのパケットデータを簡単に作れるrubyのプログラムを2年ぐらい前に作っていた。どうもsipの
vimを使っていて困ることが、他からCopyしてきたプログラムをPasteした時にコメントアウトした後の文章がずっとコメントアウトのままになっていたり、勝手に変なindentをされたりすることだ。 今日やっとその解決方法が用意されていることを知った。 :set paste これだけで、他からのコピーが元通りコピーされる。
function MakeNewWindow() let s:cmdstr = '!start gvim.exe -R "' . expand("%:p") . '" +'. line(".") execute s:cmdstr return endfunction function ExplorerStart() let s:dir = expand("%:p:h") let s:directory=substitute(s:dir,"/","\\","g") execute "!start explorer /e,".s:directory endfunction function Iestart() let url=expand("%:p") execute "!start \"C:\\Program\ Files\\Internet\ Explorer\\IEXPLORE.EXE\
今、体重管理のためのWebアプリをRailsの勉強をかねて、作ろうとしている。 カレンダにその日の体重を表示できるようにしたいのだが、 Rails カレンダでgoogle先生に質問したが、よく解らない回答 だったので、自分で作ってみた。 無保証です。使用により不都合が起きても責任を取りません。 コントローラ側 def list_cal if params[:date] begin indicate = params[:date].split("-") session[:date] = Date.new(indicate[0].to_i,indicate[1].to_i,indicate[2].to_i) rescue flash[:notice] = "Invalid #{params[:date]}" end end unless session[:date] session[:date
このページを最初にブックマークしてみませんか?
『takesy.cocolog-nifty.com』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く