サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
衆院選
route477.net
■ [ruby] Ruby 2.0のRange#bsearchが無限区間の二分探索に対応している件 range.cのrdoc見てたら衝撃のサンプルコードが… (0.0...Float::INFINITY).bsearch {|x| Math.log(x) >= 0 } #=> 1.0 0からFloat::INFINITYまでの間を二分探索する…だと? 実際にirbで試してみた。 irb(main):003:0> (0.0...Float::INFINITY).bsearch {|x|p x; Math.log(x) >= 0 } 1.4999999999999998 1.305209627960036e-154 1.403377390202847e-77 4.59177480789956e-39 8.300922883092142e-20 3.528839442878961e-10 2.3
■ [ruby] メソッドチェーンをinjectで書く https://twitter.com/moro/status/318962669908545536 https://gist.github.com/moro/5290187 http://qa.atmarkit.co.jp/q/2826 このへんを見て。 obj.foo(1).foo(2).foo(3) みたいのってうまくmapとかでまとめられないけど、これは (( obj.foo(1) ).foo(2) ).foo(3) という左畳込みの形なので、injectを使って [1,2,3].inject(obj){|sum, item| sum.foo(item)} と書ける。というメモ。
■ [ruby] Ruby 2.0のbsearchについて調べてみた メモ Array#bsearchとRange#bsearchがある 条件にあう要素を二分探索で探し出す (Arrayの場合は、事前にソートしておかなくてはならない) 条件にあう要素がなかった場合はnilが返る 例 $ cat junk.rb ary = 10000.times.map{ rand }.sort p ary.bsearch{|x| x > 0.5} $ ruby junk.rb 0.5002038714292806 配列の中から、0.5を超える最初の数を探す。二分探索なので速い。配列の中身はソートされていなければならないのに注意。 Range#bsearchの方も同様に使える (検索対象がrng.to_aになったような感じ)。 $ cat junk.rb rng = (1..10000) p rng.bse
■ [ruby] RubyでUTF8-MACをUTF-8に直す プレビュー.appからMacVimにコピペしたら、「はじめに」が「はし゛めに」みたいになってしまって困ったので、 Rubyのワンライナで直してみた。 $ ruby -e 'print File.read(ARGV[0], encoding: "utf8-mac").encode("utf-8")' a.txt > b.txt Ruby(>= 1.9)便利。 ■ [ruby] RubyでMagic commentが必要なファイルを列挙する Ruby 2.0からスクリプトエンコーディングのデフォルトがUTF-8になったので、文字列リテラルに日本語を使うときもマジックコメントを書かなくて良くなりました。 …というのは嬉しい変更なんですが、そうすると今度は「手元のRuby 2.0では動いてるけど、サーバのRuby 1.9.3で動かした
■ [book][prog] 型理論・型システムの定番の入門書「TAPL」の日本語版が発行されるぞ Types And Programming Languages、通称TAPLの日本語版が発行される。 発売日は今月26日なのだが、すでにTwitter(の一部)で話題になって いたり、発売記念トークショーが予定されていたり(予約受付中)、あげくAmazonのランキングでニンジャスレイヤー4巻と並んだりと、専門書の発売とは思えない盛り上がりを見せている。 4274069117 TAPLといえば、大学のソフトウェア関係の研究室で輪講の題材として使われたりする、型理論の定番の入門書だ。 型理論(Type Theory)とは、静的型付け言語、特にHaskellやOCamlといった関数型言語の型チェックや型推論の基礎になっている理論だ。関数型言語に興味のある人なら、目次の中の「ラムダ計算」「多相型」「
■ [ruby] UXを重視したプログラミング言語 Rubyが生まれたのは今から20年前のことだ。Rubyの肩書きは「オブジェクト指向スクリプト言語」であるが、実のところRubyにしかない特徴的な機能というものは特になく、いろんな言語から良いところを寄せ集めてきたというのはまつもとさんも各所で書かれている通りだ。 その代わり、Rubyはプログラムの書きやすさを常に念頭に置いてデザインされてきた。 それはプログラミング時の脳の負担を最小にする、と表現されることもあるし、楽しくプログラミングできる、のように表現されることもある。 人によっては、プログラミング言語にとって構文は本質的ではない、という向きもあるだろう。それに対して、 構文やメソッド名を工夫することはプログラミング言語の使用感に結構な影響を与えるし、「触りごこちの良さ」は重要なことである、というのがRubyの思想である。 最近、UI
■ [ruby] MOGOKでSinatraを動かす方法 弊社も実装に関わっているRuby用PaaSのMOGOKは、現段階(オープンβ)では公式にサポートしているのはRailsのみですが、 実はSinatraアプリを動かすこともできます。 Sinatra使いたいという記事を見たので方法を書いてみます。以下の記事を参考にしました。 MOGOKへのOctopressインストールメモ - Satoshi GUNJI's Another Blog といっても、要するにGemfileに source :rubygemsgem "rails", ">= 3.0.0"gem "sinatra", "1.3.4" って書いて、あとはconfig.ruをいつものように require './app.rb'run Sinatra::Application のように書いて、app.rbに require 'si
■ [ruby][prog] なぜRubyMotionは「半分オープンソース・半分プロプライエタリ」なのか というところが特に面白かった。 Pat Shaughnessy「rubymotionクリエータに一問一答(前編)」 - 以下斜め読んだ内容 RubyMotionはRubyでiOSアプリを書けるシステムだが、このように需要とチャレンジのしがいがあるが、フルタイムに近い作業量が必要となるプロジェクトを遂行するにはどうすれば良いか。仕事の片手間にOSSとして開発するのでは、何年もかかってしまうだろう。一方でスポンサーを募って開発を行う方法だと、スポンサーがいなくなったタイミングでまた新しいスポンサーを探す必要が突如として発生する恐れがある。 そこで、RubyMotionはコンパイラとランタイムの部分はクローズドソースで、2万円弱/年という値段で販売している。 (年額といっても1年で使えなく
■ [ruby] Rubyのpデバッグは「p x: x」のようにすると良い Rubyプログラムのデバッグ中はpメソッドで変数の値を表示したりしますが、普通に「p x」とか書くと、画面に 3 とだけ表示されたりして、何が3なのか分からなくなってデバッグが進まない…みたいなことありますよね。 そこで、Ruby 1.9から導入されたハッシュの記法を使って p x: x みたいに書くと、これは p({:x => x}) と同じ意味なので、デバッグ出力が {:x => 3} みたいになって、ああ変数xに3が入ってるんだなと分かりやすくなります(かつタイプ数もそれほど増えない)。*1 変数が複数のときは p x: x, y: y みたいにします。
■ [git] github上のリポジトリ内をコード検索する方法 github上のソースを、cloneせずにgit grepできたら便利なのに…と思っていたら、検索欄に「repo:ruby/ruby」みたいに書くことで特定リポジトリ内を検索できるらしい。 例: https://github.com/search?q=alias_native+repo%3Aopal%2Fopal&type=Code&ref=searchresults ■ [mac] Thunderbolt経由での有線LANが繋がらない(認識されない) 再起動したら直った。 Thunderboldのドライバが落ちたままになってたとか?
■ [esolang] 今年見つけたEsoteric Language関係の記事 Esolang Advent Calendar 2012 9日目の記事です。 昨年同様、今年ブクマしたesolang関係の記事を見返してみようと思います。 Visual Brainf**k Brainf**kの高機能なIDE。 Magic: the Gathering is Turing Complete カードゲーム「Magic: the Gathering」を使ってチューリング・マシンをエミュレートするという話。仕事中に「いまペアプロ中です」と称してカードゲームをできる可能性が? 平面上を移動してプログラミングする言語「Explore」作った - 厨二病患者のプログラミング入門 二次元言語としてはPietやBefungeなどがありますが、入力をcsvとすることでエクセルをIDEとして使うことが可能に。仕事
■ [rumcoke] RumCokeという言語を作っています altjs Advent Calendar 6日目の記事です。 「altjs」とは、JavaScriptにコンパイルされる or JavaScriptで実装された言語(処理系)のこと。 僕自身もBiwaSchemeというaltjs処理系を作っていますが、 秋のILC参加中に「もしCoffeeScriptがS式ベースだったら...?」というアイデアを思いついて、RumCokeというLisp風のaltjs言語を作り始めました。 例 Hello Worldです。 (define util (require "util"))(util.puts "Hello, world!") あと、処理系自身がRumCokeで書かれているので、いまのところそれが一番大きな例です。 このプログラムが、このように変換されます。 RumCokeの特徴 J
■ [altjs] CoffeeScript、TypeScriptにおけるthisのスコープ問題への対処 JavaScriptでは「this」はダイナミックなスコープをもつ。このことはたまにバグの原因になる。例を挙げよう。 var Animal = function(name){ this.name = name; $("#animal").click(function(){ $(this).text(this.name); } }; 問題になるのは4行目の「$(this).text(this.name)」で、このfunctionが呼ばれる際にはthisはDOM要素を指しているため、「this.name」でAnimalの名前を取ることはできない。 解決策としては、以下のように_thisとかselfのような適当な変数を作って、外側のthisにアクセスできるようにしなければならない。 var
■ [sinatra] Sinatraでなんかつくるときのテンプレート的なものを作った Sinatraで何か小さなものをさくっと作りたいときに、Gemfile書いてディレクトリ作って…とかするのが面倒なので、 テンプレ的なものを作りました。 https://github.com/yhara/sinatra_project_template ビューはSlim、CSSはSassを使うようになっています。ここらへんは単純に好みです。 最初のリポジトリをcloneすると、とりあえずrackupでアプリが動く状態になっているので、動作を見ながら作業を始めることができます。 forkして、自分の好きなGemを入れておくと良いでしょう。 で、これを使って作ってみたのがこちら: https://github.com/yhara/advent_finder 先日のAdvent Calendar 2012まと
■ [ruby] Enumerable#lazyでTwitterの過去の発言を検索してみた 所用でこのツイートの前後の会話を見たかったので、Twitter gemでトライしてみた。 Ruby 2.0のEnumerable#lazyを使うと、API経由でネットワーク越しにやってくる過去のツイートの列も普通のEnumerableと同じインターフェイスで操作することができる。 https://gist.github.com/3436168 (1..Float::INFINITY).lazy .flat_map{|page| sleep 1 p page:page Twitter.user_timeline(count: 200, page: page, trim_user: true) }.drop_while{|tweet| tweet.created_at > Time.new(2012,
■ [ruby] 円周率を頭から順に計算するやつをRuby 2.0に移植してみた Island Life - Unbounded spigot algorithm Ruby 2.0に入る予定のEnumerable#lazyを使って移植してみた。*1 def stream(nxt, safe, prod, cons, seed, strm) Enumerator.new{|yielder| loop do y = nxt[seed] if safe[seed, y] seed = prod[seed, y] yielder << y else seed = cons[seed, strm.next] end end } end def extr(a, x) q, r, s, t = *a return (Rational(q) * x + Rational(r)) / (Rational(s
■ [mac] Homebrewでperl 5.14を入れる Homebrewは「Macに標準で入っているソフトウェアは提供しない」という方針なので、brew install perlはできなくなっている。 その代わり、https://github.com/Homebrew/homebrew-dupes というリポジトリがあって、そこのパッケージ定義が使えるみたいだった。 こんな感じでインストールした。 $ brew update ... $ brew search perl adamv/alt/perlbrew homebrew/dupes/perl $ brew info homebrew/dupes/perl Error: No available formula for perl Please tap it and then try again: brew tap homebrew
■ [ruby] ズッ友のソーシャルグラフ メロスゎ走った…… セリヌンティウスがまってる…… でも……もぅつかれちゃった…でも…… あきらめるのょくなぃって…… メロスゎ……ぉもって……がんばった……でも……ネイル…われて……イタイょ……ゴメン……まにあわなかった……でも……メロスとセリヌンゎ……ズッ友だょ……!! [拡散性ズッ友メロス - Togetterより引用] 最近Twitterでこのようなコピペが流行しているので、Twitterを「ズッ友」で検索して「AとBはズッ友だょ」のA及びBを抜き出し、graphvizでグラフにしてみた。 その結果が…これだ! UTCで5月9日に該当する24時間のツイート、実に81105個。「ズッ友」だけでこれなんだから日本人はTwitterやりすぎである。 ソースと拡大画像: https://gist.github.com/2651392 分かったこと
■ [ruby] NHKのテレビ取材を受けました "ITの宝石"Rubyで輝くまち - 放送内容 - NHK総合 弊社にもテレビカメラが入って、前田さんがEnumerator::Lazyの話をするシーンとかを撮っていかれました。 カメラが回ってると、なんとなく意識してしまいますね(笑) ■ [ruby][javascript] TANITAの体重計の出力をJSでグラフにした 「体重計の出力」って何だよと思われるかもしれませんが、SDカードにCSVでデータを記録してくれる体脂肪計というのがあるんです。 B003I05L8K 最上位機種だと無線LAN対応らしいけど、まあそこまででなくていいかなと。 実装 JSのライブラリについては、「javascript graph」で検索して、データ可視化のためのグラフ描画JavaScriptライブラリ20選 から適当にdygraphs JavaScript
■ [ruby] 例のリファレンスマニュアルのやつ いまこんな感じになってます。 http://blazing-ice-2849.herokuapp.com/ja/Array/%2B 右上のセレクトボックスで英語と日本語を切り替えられます。 検索ボックスはまだダミーです。 内容はまだいろいろバグってます。 デザインはmiyamaeさんのchm風のやつをとても参考にしています。 何をやろうとしているのか 英語・日本語のリファレンスマニュアルが両方見れるWebサイトを作ろうとしています。 Rubyのリファレンスも、php.netみたいに言語を切り替えて表示できるべきじゃね? そしたら日英以外の言語へ翻訳するモチベも上がるんじゃね?っていう話です。 Rubyのリファレンスは、歴史的経緯で、日英が全然別のツールで書かれてるんですよね。英語は、Rubyのソースコード中にrdoc形式で埋め込まれている
■ [ruby] rvmからrbenvに乗り換えた RubyのインストールはWindowsならASRやRubyInstaller、Macならport/brew install、Linuxならaptitude install等が定番であるが、 Ruby1.9.2と1.9.3を両方インストールしておきたいなどの特殊な用途向けに、rvmやrbenvというツールがある。 機能の違い rvmはいろいろ機能が多い。gemsetといって、使うRubyGemsのセットを動的に変更できるとか。このためにrvmを使う人もいたが、現在はBundlerがあるから有難みが薄い。 rbenvはシンプル志向。rbenv本体にはRubyのビルド機能すらなくて、別途ruby-buildというツールを利用している。 端的な例を挙げると、rvmはプロジェクトごとのRubyバージョンを管理するのに.rvmrcというファイルを使う
■ [ruby] myrurema 0.3.0をリリースしました 最新のbitclustで動かないというレポートをいただいたので(ありがとうございます)直しました。 https://github.com/yhara/myrurema あとrefeでは「refe Ar i」でArray#indexなどが検索できるというのを知った(思い出した?)ので、それにも対応しました。 /Users/yhara $ rurema Ar ind (1)Array#index (2)Array#indexes (3)Array#indices which one? > ■ [ruby] gem生成ツールをJewelerからBundlerに乗り換えた BundlerはRubyGemsの依存関係をメンテナンスするツールだけど、実はJeweler等のようにgemを生成するための機能もある。 bundle gemコマ
■ [ruby] 簡単にRuby/Rails界隈の「事情通」になる方法 ブログを読んでいる人から、どこでRuby関係の情報を仕入れているのかと聞かれることが(希に)ありますが、最近の大きな情報源はこれです。 http://rubyweekly.com/ RubyInsideの中の人でもあるPeter Cooper氏のやっているメーリングリストで、登録するとこんな感じのメールが週一で届きます。 あとはタイトルをざっと見て、面白そうなのがあればクリックすると。 日本人で読んでる人まだそんなに多くなさそうなので、ここを情報源に日本語の解説記事なんか書くとけっこう喜ばれるんじゃないかと思います。 ちなみに同じ運営者のJavaScriptWeeklyというのもあって、こっちも面白いです。 (1/13追記:トップページを見たら、HTML5 Weeklyというのもやっているそうです。あと、今日Statu
■ [rails] Rails3.1を使ってみた、あとRails 3.2とRails 4について TL;DR: Rails3.1ではjs/cssが一級市民になったよ、あともうRails4の予定まであるらしいけどRails3ほどのbig changeではないらしいんで安心したよ BiwaScheme BlackboardをRails 3.1で実装したので、社内勉強会でその話をしました。 情報源 RailsGuides ( http://guides.rubyonrails.org/ ) Rails3のことはここ読めばだいたい分かる Riding Rails ( http://weblog.rubyonrails.org/ ) Rails公式ニュース Rails 3.0 (おさらい) Big rewrite Rails2とMerbが合体してRails3になった 設計が見直され、よりすっきりした
■ [biwascheme] ブラウザ上でSchemeを書いて遊べるWebサイトを作りました ブラウザ上でSchemeのコードを書いて、実行したり、保存したりできるBiwaScheme Blackboardというサイトを作りました。 要するにwonderfl、jsdo.itの(Biwa)Scheme版です。 http://blackboard.biwascheme.org/ 昔「BiwaScheme Hackerthon」であったらいいねとは言ってたのですが、実現するまでにこんなにかかってしまいました。ソースはgithubに置いています。Rails 3.1 + slim + sass + twitter-bootstrapです。 メリークリスマス! 160 https://www.google.co.jp/ 23 http://t.co/HQwzaSey 21 http://reader.
■ [ruby][event] Rubyの次世代リファレンスマニュアルを構想する会をやりました 参加者のみなさまありがとうございました。 http://partake.in/events/eb5eeeff-8d60-406d-a4e5-ac3c479a4b88 以下は議論のメモです。(まだぜんぜん整理できてなくて混沌としていますが…) とりあえず1/31が「中間報告」なので、それまでに何か動いて見せられるようなものを作りたいと思います。ソースはgithubに置きます。 ゴール 1. 日英以外への翻訳をやりやすくしたい * 何から始めれば良いかわかること * 一時的に翻訳して終わりではなく、最新版に追従していくのを助ける手段があること * 成果物が便利な形で利用できること(web, cli等) 2. 日英版を「統一」したい * 現状は、リファレンスサイトに何か機能を追加する場合に (例えば、
■ [ruby] gistを使って小さなgemを公開する方法 http://jeffkreeftmeijer.com/2011/microgems-five-minute-rubygems/ 「bundlerがあれば、rubygems.orgにアップロードしなくても公開gitリポジトリさえあればgemとしてインストールできる」 「gistにはgitコマンドでファイルをチェックアウトする機能がある」 1.2.より、gistを使えばrubygems.orgにアップロードしなくてもgemを公開できる という話。 サンプルはこちら:https://gist.github.com/1232884 Gemfileに以下のように書けば、bundle installでこのgemがインストールされる。 gem 'bang', :git => 'git://gist.github.com/1232884.gi
■ [javascript] Webページを開いたときに自動的にJavaScriptを実行してくれるdotjsを使ってみた dotjsはWebページ (例えばgoogle.com) を開いたときに、自動的に$HOME以下に置いたJavaScriptファイル (例えば~/.js/google.com/js) を実行してくれるソフトウェアだ。 greasemonkey等に似ているが、ローカルにJSファイルを置くだけという手軽さが魅力だ。 公開されたのはけっこう前だが、最近使いたい場面があったのでインストールしてみた。 http://defunkt.io/dotjs/ https://github.com/defunkt/dotjs 現在のところ、インストーラの都合でMacのみ対応している(技術的にはwin/linuxでも動かせそうだが)。 ブラウザはChromeがメインだが、Firefox/S
次のページ
このページを最初にブックマークしてみませんか?
『https://route477.net/』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く