レールがレールから外れました:CoffeeScriptでArcheopteryxを書き換える理由

あなたは仕事の友達と大学の友達がしゃべらないパーティーに行ったことがありますか?



Facebookには絶対に投稿しないビデオをTumblrに投稿しました。





これは、SkrillexのBangarangの下でアニーリングするギタリストです。



翻訳者から:

元のテキストは著者の個人ブログに投稿されたものであり、その後の翻訳を目的としたものではありません。 それは非常に自由なスタイルで書かれており、軽度の冒とくを含め、私はそれを再現しようとしました。 その結果、翻訳はかなり文学的なものになったため、 原文を英語で読むことを強くお勧めします。

著者はメイントピックから逸​​脱することもあり、少しPRですが、この記事はHabrにふさわしいと感じました。



そして、はい、この記事は、長引く導入にもかかわらず、本当にRailsについてです:)


Facebookにはこの動画を投稿しませんでした。Facebookには大学の友人(Spotifyで判断して、Skrillexを聴いています)と、サンフランシスコに住んで以来レイブシーンの友人がいるからです。 私は彼らのSkrillexに対する意見を本当に知りませんが、彼らは喜んではないと思うことができます。彼らの一部は、 本物のテクノ純粋主義者であり、実際にSkrillexの数年前にダブステップを知っていたポップミュージックに耐えられない音楽的なヒップスターだからです 実際、2000年にロンドンで非常に初期のプレステップ録音を聞いたことがあり、おそらくこれを聞いたこの友人グループの唯一の人ではありませんでした-つまり、少なくとも一部の人はSkrillexの10年前にダブステップを知っていました。



私の古いレイブシーンのヒップスターの友人は、おそらく大学の私の音楽的に素朴な友人がそれを好むのと同じ理由でこのビデオを吐き出すでしょう:Skrillexはスタイルのために単純に驚異的な成功を達成しました。これは本質的に列を描くサマリーテーブルですロックとレイブテーブルから。 Facebookにこのようなものを投稿することは、正反対の味と私が何年も見ていなかったという事実にもかかわらず、額の間に2つの異なるグループを押し込むことを意味するようです。 時間の無駄。



それはなぜラッキースティフからの古い引用を思い出しました:



何も作成しないとき、あなたの好みはあなたの能力ではなくあなたを決定します。 あなたの好みはあなたの社交界を狭め、人々を追い払うだけです。 作成します。



LA RubyConfで素晴らしいプレゼンテーションを見たので、これを思い出しました。その唯一の欠点は、Rubyを除くほとんどすべての言語の方向に悪意のある障害が多数あったことです。 私の意見では、唯一の例外はSmalltalkであり、これはいつものように、Smalltalkについて話しているルビーから尊敬の標準的な部分を受けました。 私もSmalltalkが好きでしたが、偶像崇拝は好きではありません。 私はかつてロサンゼルスのルビスタから古いMac Miniを購入しました。彼はテクノの歴史家のように見える古いコンピューターのゴミをたくさん集めました。 彼のコレクションの展示の1つは、退屈で退屈なIBM Smalltalkマニュアルでした。これは、私の人生で見た中で最も味のない企業文書の1つです。 さらに、「スモールトークは世界で最もクールなものでした」と呼ばれるカルト主義者の叫びに対する良い反論です。



数年前、RailsはSkrillexと同じくらい素晴らしいものでした。 しかし、2012年の中庭とハッカーニュースでは、この投稿が登場しました。



Node.JS / Express.JSまたはRuby on Railsをさらに深く学ぶ必要がありますか?



多くの仕事にはRailの知識が必要ですが、野田は近い将来、Web開発のパイの一部を食い物にするつもりです。



言い換えれば、就職活動を簡素化する支配的なテクノロジーを学ぶべきでしょうか、それとも新しいファッカーを信頼するべきでしょうか?



私たちは皆、新しいファッカーの正反対を知っています。





実際、ハッカーニュースのそのトピックには次の答えがあります。

レールは昨日です。 これは太いメタフレームワークであり、理解するには膨大な量の周辺知識が必要です。



もちろん、Hacker Newsで読んだものすべてをフィルターする必要があります(まったく真剣に考えている場合)が、Railsが「昨日」になるとはどういう意味ですか? Railsをフレームワークとして見た場合、このステートメントはナンセンスですが、すべてが適切に収まるので、Railsをファッショナブルなジョークとして見るべきです。 レールは数年前に流行の頂点にありましたが、最近はすでに過去のものです。



人々はファッションがデザインに与える影響を軽視していますが、それほど単純ではありません。 アランケイ(Smalltalkの作成者)が言ったように:「 教育よりも速く開発しているものがある限り、私たちは常にポップカルチャーを持ちます。」



レールは古くて鈍く、Node.jsは新しいファッカーです。 しかし、人々は過度の「ノイズ」のためにNode.jsを嫌います。 個人的には、Node.jsの主な話題はNodaが嫌いな人から来ているので、面白そうに見えます。



野田の大胆さについての話には驚かない。 Railsがその時代にいたとき、彼らは大胆でした。 RailsConf 2007では、膨大な量の優れた技術レポートがありましたが、それに加えて、ナルシシズムのバカが非常に多く集まりました。 それから、できる限り、私はこのナルシシズムを無視しようとしました。そして今、私はあなたに野田と同じことをすることを勧めます。 そして、ここに理由があります。



威厳のある大胆なRailsには、Javaの世界の高齢者を制御する3つの主要なポイントがありました。設計パターン、JVMの起動時間が長い、シンプルでモダンなWebアプリケーションの開発要件を満たさないコードを書くあまりにも儀式的なアプローチです。 今日、Railの起動時間は非常に長いため、コミュニティはSporkを作成する必要がありました。Sporkは、テスト間でRail環境を存続させる特別なgemです 。 そうでなければ、RailsでTDDを使用することは困難です。 Railsでのテストの実行には非常に時間がかかるため、終了する頃には、一般的に今や自分の名前を書いていることを忘れてしまうかもしれません。 Railのコミュニティが今日の野田の時代にあったとき、彼らはデザインパターンをからかいました。 しかし、ActiveRecord :: Baseの実装を見てください。これは、「継承」をオーバーライドします。



class User < ActiveRecord::Base; end
      
      



本当に意味する

 User = ActiveRecord::Base.new
      
      



または言い換えれば

 User = Struct.new(:username)
      
      





ClassMethodsモジュールとInstanceMethodsモジュールをActiveRecord :: Baseにアタッチするには、奇妙でわかりにくいメカニズムを使用する必要があります。これを継承しようとすると、継承者が純粋な形式で取得されないためです。 実際、ActiveRecord :: Baseを使用して作成された新しいクラスを取得します。 ご覧のとおり、ActiveRecord :: Baseは実際には非表示のActiveRecordClassFactoryファクトリです。



あまりにも儀式的なコードについては、私の卵について教えてください。 私は実際に卵を掻くための熊手を持っています。 ある人は、本当のプログラマーは必ず股間を掻くためのコードを書かなければならないと私に言った。そして私はそのような問題に真剣に取り組んでいる。 私のコードでは、シリアルポートを使用してArduinoを制御しています。 Arduinoには、足場が取り付けられたサーボドライブがあります。 このメカニズム全体は、ベルトのレベルで、私のテーブルの下の棚にあります。



文字通り、ボールをスクラッチするたびに「バンドルエグゼクティブ」と書かなければなりません。 そして、ボールをスクラッチするために毎回「バンドルエグゼクティブ」を書かなければならないことに興奮していません。 タスクを「ボール」と呼んで、「すくい玉」を書くことができるようにしました。これは、ボールを掻くため「ボールをすくい上げるため」-約 )であり、Bundlerは私の美しい構文をすべて破壊します。 私が不平を言っていると思いますか? 自分の卵をひっくり返そうとするたびに「バンドルエグゼクティブ」を書く必要があるということは、ユーザーとして私に信じられないほどの慈善を示すことを意味するという事実に注意を向けようとしていると思いますか? 最終的に、プログラマーの作業を容易にするように設計された言語で記述しているため、rakeを正確に使用しています。 しかし、もちろんそうではありません。建設的なものではなく、役にも立たないので、私はそのようなことを言いません。



ボールをスクラッチするたびに「バンドルエグゼクティブ」を印刷する必要があるのは、2005年から2007年にかけてRailsが発言した過度に儀式的なコードの擬人化です。 コミュニティレールは、それ自体が面白がっているすべてのものに変わりました。 それにもかかわらず、彼らはWeb開発を根本的に変えることができました。 また、Rubyだけでなく、他のほぼすべての言語でも使用できます。 Railsが最初に登場したとき、彼らはほぼ毎日他の言語で咲くクローンの波を立ち上げました。 Railが古くなるにつれて、他のプラットフォームも成熟しました。 今日、2006年のように毎週火曜日に登場するRailの新しいクローンは見当たりません。 しかし、Community Railがコードジェネレーター、構成前の規則、およびコンフォートゾーンを離れるたびにきちんとしたルーターを作成する方法を確認します。 たとえば、CoffeeScriptはRubyとRailの両方からインスピレーションを受け、不動産の幸せを最優先事項にしました。



だから、野田の周りの誇大広告を聞くのは馬鹿だと思う。 神経細胞を費やす価値はありません。 誇大広告は、支持者と反対者の間の空の議論につながります。 それは無意味で、ただハンマーです。 それが発展するにつれて、野田は変化し、すべての批判を吸収します。 やがてRailsのように。 それまでの間、多くの興味深い研究が行われています。 人々は素晴らしいものを作成し、ブラウザは、野田が少し成長する頃にはWeb開発の原則が大きく変わるようなペースで開発されています。





Railsでも同じことが起こりました。 Railsが馬に乗っている間、Railsの下で書くことがとても楽しかったのはそのためです。 そして、それが今日のRailsが強力で便利なツールである理由です。 しかし、単なるツールです。



しかし、Why the Lucky Stiffからの引用に戻ると、Railsが以前ほどファッショナブルでないことを嫌うことは意味がありません。 もちろん、Railsは時代遅れの恐竜として見ることもできますが、Railsをさまざまな作品を作成するための便利なツールとして見る方がはるかに建設的です。 しかし、ここでも、いくつかの問題が待ち受けています。 Railsの昨日の議論を忘れましょうが、Hacker Newsのコメントに戻りましょう。



Rails-...これは脂肪のメタフレームワークであり、理解するには膨大な量の周辺知識が必要です。



このことを思い出す最初のことは、Railsと「頭にパンツをはいて」を比較する無意味な詰め物です。 この批判のほとんどは公式ドキュメントがRailsの使用を勧める方法にのみ適用され、厳しく、有名な選択されたRails開発者がそれらを使用する方法には適用されないため、この観点に同意することはできません(もちろん、 DHH)。 「膨大な周辺知識」についての議論がブルズアイに当たったと思います。 そして、この周辺の知識の中で最も重要なことは、公式のRailドキュメントが教えていることと、開発者が実際に行動する方法との違いを理解することです。



たとえば、DHH以外の誰かとおそらく2、3人のRail開発者がRails自身が推奨する方法で実際にレールテストを使用したとは想像できません。 DHH以外の誰か、そしておそらく他の2人のRail開発者が、一般的にテストに対するRailの公式アプローチを真剣に受け止めているとは思いません。 レール単体テストは実際には単体テストではなく、レール統合テストは実際には統合テストではなく、レール機能テストは機能しません。 ほとんどの開発者は、単に「spec」ディレクトリを作成し、RSpecをインストールし、他のすべてのものから地獄を捨てます。 そのため、レールに対する紛争でそのような議論をすることは時間の無駄です。



「レールは古くて馬鹿げている」という議論では、「古い」部分は無視できます。 「オールドファッカー」とは「クラシック」を意味します。 しかし、「ダム」はあなたが注意を払うべきものです。なぜなら、Railsには本当に十分な馬鹿げたことがあるからです。 Gemfileの最初の行に「source:rubygems」を置くのを忘れた場合に何が起こるかを示してください。



  Gemfile     .         'source :rubygems'
      
      





冗談でしょ?



Googleの提案「Bandlerチームによって開発された場合、「念頭に置いていたかもしれない」と思われるものは次のとおりです。



翻訳:おそらくあなたはブリトニースピアーズを意味しました。 次に、検索クエリを正しく入力してください。



Bundlerは、以前と比べて依存関係管理を非常に単純にしますが、「source:rubygems」はデフォルトでは有効になっていないため(Bundlerは有効にする必要があることを知っていますが)、Bundlerは規則の適用に完全に失敗しています設定前。 そして、私は「それが良くなるかもしれない」という意味ではなく、「あなたは数えます、あなたはしません、あなたは2年目に留まる」という意味です。 それは、「衣服に少しこだわる」ことと同じで、頭に着ている下着だけで、そして汚れたものでも働くようになりました。



バンドラーだけが問題ではありません。 Rails 3の登場により、レールはレールから外れました。





翻訳:Rails 3は新しいアプリケーションの作成を容易にします:...



このリンクは皮肉であり、アプリケーションの作成を開始する前に行うべきことのリストを含む巨大なページにつながります。





翻訳:バージョン0.6についてRailsを学び始めたとき、Ruby + railsをインストールする1つの実行可能ファイルがありました。 1つのコマンドを入力し、コーディングを開始しました。



この議論をチェックしてください:



翻訳:

@topfunky:Rails 3は、必要なものだけで「小さなレールを組み立てる」機会を約束しました。 誰も本当にこれをしますか?

@jashkenas:@topfunky私はそうは思わない。 私見、Merge Mergeの結果-これまでのところRailsに起こった最も悲しいこと。

@ j3:@jashkenasはもっと詳細に可能ですか? / cc @topfunky

@jashkenas:@ j3すべての進歩は2年間停滞し、3つ目のRailsは2つ目より*まだ*遅く、Bundlerは悪夢であり、Node.jsが勝ちました。



必要に応じて、ここで残りを読むことができます 。 いくつかの文章を紹介します。





翻訳:@tomdaleわかりました。 アプリケーションをゼロから作成する場合は、おそらく野田を選択します。 Railsが実際に過去3年間に開発された場合、おそらくすべてが異なったものになっていたでしょう。





翻訳:

@jashkenas:@tomdaleすべての点に同意します。 原則として、私は3番目のRailsが2番目のRailsより質的に良く見えないことにただ動揺しています。 同じ機能、異なるAPI。

@josevalim:アプリケーション開発者の観点からのみRails 3を評価する場合は@jashkenas @tomdale、それからはい。 しかし、サードレールは常にプラグイン開発者のコ​​ミュニティに向けられています。



Joseを言い換えると、Rails 1とRails 2はアプリケーション開発者向けでした。 Rails 3は、既存のアプリケーションをサポートするプラグイン作成者およびプログラマー向けです。 それはすべて素晴らしいことですが、アプリケーションの開発者を主な対象読者として無視しながらアプリケーションフレームワークを作成することは、Railsが2006年にJavaでrid笑したことの1つにすぎません。 JoseはRailの主要な開発者の1人であり、3番目のRailの新しいモジュラーAPIの信じられないほどのパワーを説明する素晴らしい本を書きましたが、本よりもツイートの音が大きい場合があります。





翻訳:「Node.jsはサーバーアプリケーションの未来」@wardcunningham #nodepdx



ワードカニンガムはとても強い議論です。



Hacker NewsのNodaとRailsのどちらを教えるべきかという質問に対する私の答えは、Jeremy Ashkenas( CoffeeScriptの著者-およそTransl。 )から得たものと同じです :Teach Noda。 (実際、私はジェレミーの代わりに話すことができないので、むしろ両方を教えますが、ノードにもっと注意を払います)。 パーティーに参加するのは楽しいこともあります。隣の音楽がもっと楽しくなりました。 今日、Node.js、CoffeeScript、およびBackboneを学ぶことがより重要です。これらのコミュニティで活発に行われている作業がパラダイムを変えるからです。 Railsの現在の作業は、Railsが一度に変更したパラダイムを組み合わせることです。ただし、3つ目のRailsは、削除した数だけ鋭いコーナーを追加しました。



ところで、鋭い角について。 ブラウザがオペレーティングシステムに変わります。 Chromeの新しいバージョンをお持ちの場合は、ブラウザのドラムマシンフィルター、コンプレッサー、シンセサイザーで既にプレイできます。 もちろん、現時点ではブラウザのクラッシュで終了するかもしれませんが、すぐにすべてが素晴らしいものになります。 また、モバイルアプリケーションと比較して、Webアプリケーションは時代遅れに見える可能性が非常に高く、 NodeにとってはRailsを使用するよりもこの利点を活用しやすいでしょう。



何か新しいことを学ぶとき、あなたはそれが楽しいことを望んでいます。 レールはまだ便利ですが、起動しなくなりました。 彼らは素晴らしいものでいっぱいですが、空気はまた、あらゆる種類の「一体何?」で満たされています。 彼らはどう思いましたか?!」 このたわごとを掻き集めるのは楽しい喜びではありません。 楽しいものを使いたい場合は、Clojure、Scala、またはNode.jsを試してください。 ClojureとScalaはJavaに基づいて動作します。Javaの記憶により、夜は静かに眠ることができません。Node.jsは、頻繁に愚かさにもかかわらず、書くのが楽しい言語を意味します。 CoffeeScriptは理想とはほど遠いですが JavaScript WATファクターを許容レベルのバックグラウンドノイズに減らすので、それを書くのは良いことです。



Railsは未来ではなく、過去です。



http://www.youtube.com/watch?v=WM1RChZk1EU



Nodes.jsで良い仕事を見つける方が、Railsで良い仕事を見つけるよりも簡単だと思います。 しかし、個人的には、私は自分のプロジェクトに取り組むことにもっと興味があり、同じ方法で野田を楽しんでいます。 そこで、音楽の作成を使用してNode、CoffeeScript、Backbone、Socket.io、そして最も重要なことであるjasmine-node( Node.jsのJasmine Javascript BDDライブラリポート)を教える一連のビデオを準備しています 。 jasmine-nodeを使用すると、ほとんどの場合、サーバーで仕様を実行できます(または、一般的に、これらのビデオで詳細を説明します)。



ブラウザで仕様を実行するのは好きではありませんでした。 コマンドラインでそれらを即座に実行することは大きな喜びです。なぜなら、それらを継続的な統合にプッシュできるからです。ただし、原則としてどこでもUnixリターンコードを使用します。 真剣に、2012年には、TDD / BDD javascriptを記述しない言い訳はありませんでした。



javascriptドラムマシンのテーマに戻り、ArchaeopteryxというRubyのライブラリを作成しました。 これは、MIDIインターフェイス、ドラムマシン、および確率論的なブレイクビートの即興演奏者の組み合わせです。 CoffeeScriptで書き直し始めました。 新しいバージョンはClydeと呼ばれ、そのコードはずっときれいになりました。







また、いくつかの本当に面白いハックも用意しました。







クライドという名前を選んだ理由の1つは、Archeopteryx(Archeopteryx)の発音方法について多くの質問を受けたが、主に伝説的なドラマーClyde Stubblefieldに敬意を表して-クールなドラマーだけでなく、クールなドラマー James Brownが歌った-ちなみに、今年はマディソンRubyConfのスピーカーになります。 これは、JavaScriptをテストする必要はないというフレーズの後、昨年私が就職したカンファレンスと同じです。 私がどれほど興奮しているかさえわかりません。



公平を期して、Ari RussoはUnimidiと呼ばれる素晴らしいRuby MIDIライブラリを作成しました。 部分的には、Rubyにではなく、この言語に時間を投資するほうが有益だと思うからです(特に、Rubyで既に行ったことと同じことを繰り返すからです)、そして部分的には、その技術的優位性を信じているからです。



ところで、ポイントは、Clydeが発音しやすいというだけではありません。 多くの人々は、始祖鳥が読みにくいと不平を言っています。 Clydeは活発に開発されているという事実にもかかわらず、そのソースはすでにはるかに読みやすくなっています。 まず、Topher Cyllの著名なPractical Ruby Projectsという本から、Archeopteryx用の低レベルMIDIインターフェイスをたくさんポップする必要がありました。 (Ben Bleythingは後でそれらを書き直し、 MIDIatorと呼ばれるよりクリーンなインターフェースライブラリを作成しました)。 一方、MIDIサポートをClydeに追加するには、 優秀なNode.jsライブラリをインストールして、簡単なコードを書くだけでした。 Archeopteryxコードのすべての部分は、setTimeout()に相当するjavascriptを実装し、ラムダをLにコピーして、オブジェクトにメソッドを自由に割り当てることができるようにします。 JavaScriptに関数を渡す方法と同様です。



大まかに言えば、ArcheopteryxはRubyをJavaScriptのように機能させるためだけに多くのハックを使用するため、JavaScriptはこのタイプのプロジェクトにより適しています。 また、JavaScript自体はかなりねじれていますが、CoffeScriptは非常に美しいため、Rubyが不自然に見えることがあります。





翻訳:

@gilesboatboy:見るたびに| foo |少しオタクが殺したいので目を覚ます。 それを何と呼ぶか​​? ザドロトグネ? 「do」は完全に不要な文字だからです:-p

@judsonlester:Rubyに本物のマクロがあれば、これらの文字は必要ありません。

@topfunky:Ruby用のCoffeeScriptはどこにありますか?! 無駄なdo-endの代わりに、全員が書き込むインデントをコンパイラに使用させます。



Clydeをプレイした人たちは、Garagebandとのシンプルな統合も気に入っていました。つまり、Macユーザーなら誰でも簡単にClydeを手に入れることができ、Archeopteryxをコンピューターにインストールしようとすると多くの人が困惑しました。 著者のマシンでのみ動作するオープンソースプロジェクトは役に立たない。



私は自分のビデオのアイデアが好きです。なぜなら、彼らは楽しく興味深い例で高度な技術を教えるからです。 実際には、最新のJavaScript開発を学ぶための最良で最も楽しい方法になります。 私の意見では、ソフトウェア開発のトレーニングが楽しいことは重要です。なぜなら、私たちは自分が最も集中していることを覚えているからです。 私たちのハッカー言語にはこの考えが浸透しています。新しい技術を学ぶとき、私たちはそれを使っていると言います。 明日の午後、私は最初のビデオを無料で投稿するので、金曜日にこちらでご覧になれます( ここでは-約です。 )。



このブログ投稿はある程度これらのビデオの広告であり、真実は広告において重要なので、私は実際に卵を掻くためのすくいの仕事がないことを認めなければなりません。 それでも、卵を掻くたびに「バンドルexec」を印刷する必要があるという印象を受けましたが、このゴミはUnixのパスと環境変数に関する最小限の知識で回避できたはずです。 (Bundlerについてもう少し言います:「bundle && foo」と書くと、決してfooになりません。Bundlerは戻りコードをまったくサポートしていないようです)。



グローバルな問題に戻ると、Railsは間違いなく軌道から外れました。 クリーンでモジュール式のAPIは重要な目標ですが、開発のスピード、最新の機能セット(Ajaxをサポートするために使用されているRailsがまだHTML5をサポートしていないのはなぜですか)ほど重要ではありません。そして何よりも、プログラマーの幸福です。 Merbの統合は、わずかなメリットしかもたらさなかった目標からの巨大で時間のかかる離脱であり、新機能の追加を拒否する理由について2冊の本を書いたDHHは、これらのイニシアチブを削減する必要がありました。 それでも、私はRailsを引き続き使用します。それらはまだすばらしいフレームワークのままであるからです。しかし、Rails 3はRails 2に比べて一歩後退しており、Bundlerは、それがどれほど有用であっても、理想からはほど遠い。 彼らはバージョン1.0に達したと言っていますが、私は誰もこれを真剣に受け止めているとは思いません。



更新 :Bundler and Railの開発者の1人であるYehuda Katzが、この便利なコードを送ってきました。



 ~/Code/ember.js ‹ruby-1.9.3› ‹master*› $ bundle && echo "fuck you giles" Using rake (0.9.2.2) Using confparser (0.0.2.1) Using multi_json (1.0.4) Using execjs (1.2.13) Using libxml-ruby (2.2.2) Using faster_xml_simple (0.5.0) Using httpclient (2.2.4) Using json (1.6.5) Using nokogiri (1.5.0) Using net-github-upload (0.0.8) Using github-upload (0.0.2) Using rack (1.4.1) Using thor (0.14.6) Using rake-pipeline (0.6.0) from https://github.com/livingsocial/rake-pipeline.git (at master) Using rake-pipeline-web-filters (0.6.0) from https://github.com/wycats/rake-pipeline-web-filters.git (at master) Using sproutcore (0.0.1) from https://github.com/wycats/abbot-from-scratch.git (at master) Using uglifier (1.0.4) Using bundler (1.1.rc.7) Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed. fuck you giles
      
      






All Articles