1 :
デフォルトの名無しさん :
2013/01/20(日) 08:02:06.54
・いつものエディタとターミナルという普段着でお越し下さい ・エディタ初めてならRubyスクリプトをを着色してくれる(できればオートインデントの)エディタ好きなの選べ ・いわゆるIDEはRubyの学習に際しては恐ろしくコスパが悪いのでRubyのためだけに新規導入するのはお勧めしない Q.XXX を使ってるんですが Ruby も覚えたほうがいいんでしょうか? A.好きにしろ ※RubyやRuby使いに対する不満や愚痴などは「Rubyについて」スレや「バトルロワイヤル」スレなどをご利用下さい
いまから勉強する場合Ruby2.0のほうがいいですか?
SublimeText2を使ってる人に質問です 標準だとRubyの補完が弱いのですが、それを補ってくれるプラグインってありませんか?
>>4 ruby 1.9.3がいいとおもいますよ。
一般論として、あたらしいやつは、人柱になる覚悟がいります
わかりました1.9.3から公式のマニュアル見ながらやっていきます
そもそも7以前でもRubyはWindowsには完全には対応していない
ファイル名がうまく扱えないのが致命的なんだよね Dirクラスなんかは1.9.3でだいぶ良くなったけどコマンドラインは昔のまま "マ"を含むファイル名がワイルドカード展開できなかったり UNICODE(SJIS外)が?に置換されてワイルドカード扱いされたり
10 :
デフォルトの名無しさん :2013/01/22(火) 18:51:04.16
なにそれこわい
コマンドラインのファイル名展開とかWindows環境以外は必要ないからなあ
RubyってDLLで拡張するタイプの言語じゃないって認識で良いですか? 基本はGEMで拡張するタイプですか?
なんかめんどくさそうな認識だが、いちおうはそんな感じでよい スクリプトのユーザーが、そのスクリプトに必要なgemライブラリを自力でダウンロードして事前にインストールして設定しておくタイプ
めんどくせーな
Bundler使って使用ライブラリを細かく調整できるのはいい
なにも知らない人にカタマリとしてどーんと渡して速攻ピコーンと動作する、というようなことは苦手 もしそういう、PCスキルが不定な不特定多数の人にも使ってもらいたいソフトウェアを作りたいのなら、Rubyは不向き
HSPからRubyに移行しようと思うのですがRubyを使うメリットとデメリットを教えてください
HSPからRubyに移行するメリット ・ (PC-)Unix系列OS上でよく動く ・ Webサーバで仕事をさせても(負荷と初回起動とメモリが他サーバ稼働言語より多いが)よく動く ・ HSPができますというよりは業務寄りな顔ができる HSPからRubyに移行するデメリット ・ Windowsで効率よく動かない ・ Windowsで効率よく配布できない ・ HSPではなんなく作れたものがRuby単体では作れず、外部ライブラリを駆使しても非効率 結論、HSPを便利に使っている環境にいるのなら、HSPを捨てる理由はなにもない 今までHSPでやってきたことをRubyで置き換えるのは、理屈では可能だが現実的ではない なんかこう、レンタルサーバとか借りたり仮想マシンや別マシンでLinux入れたりしてそこでRubyを別途使ってみるというのが妥当 HSPとRubyの二刀流というのは、それはそれで死角減って結構便利だと思うよ
うん、Windowsでなにかひとつやれって言われて、コマンドプロンプトで用が済まず、なおかつC#に触ると死んでしまう呪いがかかっているのなら、俺はHSPを選ぶ
いや面接に行ったんですよプログラマーやりたくて そしたらスキルシートみたいなのを書かされて言語リストにHSPがなかったわけで 手書きでその他にHSPを書いてきました そしたらHSPって何?と聞かれたのでGUIを作る言語ですっていったんですが 他にできるものはありませんか?ときかれてないですと答えたら気まずい空気になってきて 先ほど不採用通知のメールをいただきました なのでRubyに移行しようかなと思った次第です
とりあえずRubyに移行して18番先生のメリットを勉強していきたいと思います
rubyはAndroidやiOSスマホでも動きますか
23 :
デフォルトの名無しさん :2013/01/23(水) 16:02:22.32
はい
東京で初心者向けのRuby勉強会とかありませんか
ちなみに仕事でやってないのでそういう人でも参加できるとこございませんか
>>20 わざわざRubyに「移行」って書くところが不安でしょうがない
HSPのことを全部忘れるつもりなんだろうか
>>20 そりゃHSPはそういう対象じゃないからな
あれの立ち位置はNScriptとかの仲間であって、いわゆる「プログラミング言語」ではない
というかHSPしか知らないのにマの面接とか勇敢だなお前
ちなみにそこでRubyを選んだ理由は?
HSPからRubyって全然必然性が見えない選択なんだけど
いけませんか?
はい 江戸前寿司屋の板前の募集で「クッキーなら作ったことがあります!」と答えるようなもんだ それは単体ではいいのかもしれんが、働くところとさっぱり関連性がないし、板前の仕事を研究理解してないのではないかという危惧がある
ということでHSP勉強した人間はRubyを勉強してはいけない事になりました
RGSS使いたくてRubyの勉強始めたいと思ったけどネットも書籍もナメてんのか その羅列が意味わかんねーから教えを請いに来たのに例をポンポン載せてもわかる訳ねーだろ 加減乗除すらおぼつかない小学生に因数分解やらせるようなもんだよ
irbからサブirbを起動したいんだけど、 irb(main):001:0> irb を入力すると ArgumentError : wrong number of arguments (0 for 1)というエラーが表示される 原因を教えてください
>>33 引数が足りないみたいやけどバージョンなに?
% ruby -v
ruby 2.0.0dev (2012-12-01 trunk 38126) [x86_64-darwin12.2.0]
% irb
irb(main):001:0> irb
irb#1(main):001:0> irb
irb#2(main):001:0> irb
irb#3(main):001:0>
>>28 いいと思います。
HSPとrubyは使う分野が相当(まったく)異なるので、
都合で転身せざるを得ないのは仕方ない。
>>34 バージョンは1.8.7です
引数は何を入れればいいのでしょうか
37 :
36 :2013/01/24(木) 11:36:36.28
>>34 サブirbでローカル変数とグローバル変数に別の値を代入すると、
メインirbに戻したときにグローバル変数は変更されるが、ローカル変数は変更されないということを
確かめたいのです
例
irb(main):001:0> fruit = 'apple'
irb(main):002:0> $fruit = 'banana'
irb(main):003:0> irb
irb#1(main)001:0> $fruit = 'orange'
irb#1(main)002:0> fruit = 'peach'
irb#1(main)003:0> fg 0
irb(main):004:0> p fruit
=> "apple"
irb(main):005:0> p $fruit
=> "orange"
>>37 うちの1.8.7でも同じエラーになった
リファレンスマニュアルより
> irb(obj)
> 新しいサブ irb インタプリタを起動します。
> オブジェクト obj が指定された時はその obj を self にします。
なので、適当なオブジェクトを生成して渡してやれば良いと思う
irb Object.new
irb self.dup
>>38 調べていただきありがとうございます
自分でも試したところ、上の3行目を
irb(main):003:0> irb self
にすればirb#1(main)になりました
Windows上でワイド文字のコマンドライン引数を取得するにはどうすればいいですか?
GetCommandLine()
CommandLineToArgvWで解析する。
すみません。言葉が足りませんでした。 Windows上で動作するRubyでワイド文字のコマンドライン引数を取得するにはどうすればいいですか?
ARGVに入ってる ARGVはString型の配列で そのString型のエンコーディングは chcp 932 であれば Windows-31J chcp 65001 であれば UTF-8 のように端末のロケールが使われる スイッチによる解析は require 'optparse' してやればいい
45 :
デフォルトの名無しさん :2013/01/25(金) 22:01:04.23
>>44 確かにそうすればARGVはUTF-8になりましたが、
>>9 の症状が出て?に文字化けします。
47 :
デフォルトの名無しさん :2013/01/26(土) 00:03:49.16
Rubyって日本で流行ってるから勉強しようとは思いますが 英語フォーラムってないんでしょうか? なんか日本人だけで勝手に進化してるのか気のせい?
英語フォーラムって、たとえばどんなの? どんな人がどんな話してることを想定?
いろんな国の人の共通言語としての英語です やっぱり日本語わかるRuby開発者は少ないと思うんですよ
51 :
デフォルトの名無しさん :2013/01/26(土) 00:31:24.18
ぞんぶんにruby-coreを購読してくれたまえ
52 :
デフォルトの名無しさん :2013/01/26(土) 13:50:49.29
死ねゴミ共がw 死ねゴミ共がw
phpのhtmlspecialcharsみたいな便利なやつはRubyではなんていうのでしょうか?
54 :
デフォルトの名無しさん :2013/01/26(土) 16:13:37.22
>>53 細かい挙動の差は知らんけど
# require 'erb'
ERB::Util.html_escape # hにエイリアスされている。
# require 'cgi'
CGI.escape_html
なんで逆なんだw
str.encode(:xml => :text)辺りも
>>31 俺はネットとたのしいRubyとツクールのマニュアルで曲がりなりにも素材を公開できるレベルにはなった
つまりお前の言い分の正当性は低い
>>31 プログラミングの基礎が出来てないだけだと思う
SublimeText2使ってるんですけどやっぱりVIM使ったほうが良いですか?
好きなの使ってください。まじで
使ってみて不自由なければメモ帳でもいいよ
UTF-8で書くときってBOMはつけるの?つけないの?
なるほど RubyはBOMを考慮してくれるのかと思ったけど層じゃないんですね
>>31 これを貼れと言われた気がして。
電話サポートでのやりとり。
客「小学生でも判るように説明しろ!」
サポート「判りました。…ボク、お母さんと代わってくれるかな?」
その前にどこがわからないか説明させる機会を与えるべきだろうなー
67 :
デフォルトの名無しさん :2013/01/27(日) 11:34:53.39
UTF-8のBOMは、仕様上はあってもいいことになっている。 Rubyでは、読む時だけはエンコーディングに BOM|UTF-8 を指定することで BOMを読み飛ばせる。
68 :
デフォルトの名無しさん :2013/01/28(月) 15:08:21.31
722:nobodyさん :2013/01/27(日) 22:37:47.20 ID:??? [sage] 我がRuby軍の圧倒的勝利だ! PHPを完膚無きまでに叩き潰したぞ!
このスレの住民が向こうのスレを荒らしてますよ
>>69 はレスがないのを2時間しか我慢できなかったのか
解決したらなら解決方法を書いてください
73 :
デフォルトの名無しさん :2013/01/28(月) 18:43:03.33
RubyInstalerのexeファイルからRuby1.9.3をインストールしたんですが 新しいバージョンが出たのでバージョンアップしたいと思います この場合いま入ってるRubyはアンインストールしてからインストールするべきでしょうか?
あ、はい。
古いほうがもう不要ならアンインストールしてから新規インストール 古いほうがまだ必要なら別のフォルダに新規インストール 既にインストールされているRubyを不要とみなして上書きインストールするようなモードは残念ながらない プログラミング言語本体だしある程度は仕方ないのだけども gemはなにも指定していなければRubyフォルダの中に入るはずなので、アンインストールで全部失われる
77 :
デフォルトの名無しさん :2013/01/28(月) 19:46:41.74
>>75-76 そうします
しかしこれは・・・gemを入れなおすのが面倒ですね
なんとかインストールできましたありがとうございます webrickと比べると速度が速いんですねthin 本当はrainbows!を入れてみたかったんですがkgioが必要らしくてこれはwindows未対応なので残念です
ruby は windos で使うと苦役っぽいよな 楽ができない
>>81 それはなによりです
bundle update rackで二つのエラーとも解決したって感じですか?
何をやってもダメで結局全部最初からいれなおしました
>>72 失礼しました
>>40 はWin32APIでGetCommandLineWを呼び出しました
↑エスパー求む
>>88 ニュース貼り付けるだけのスレ紹介してどうすんの?
レンタルサーバとVPSの違いで話してたつもりだったんですが
ああそうだったね だが板違いであることには変わり無い
11:57:10.90 ↓ 11:57:05.26 何この過去
同時に書き込まれてロックが掛かって後回しにされたんだろうな たまにあるよ
rack枯れてないなぁ。。特にCGIモードで動かしたりするときとか。。
>>82 今時まともな開発者はみんなMacを使っているよ。
>>94 config.ru必須なのが萎える>rack
rackってruby1.9の事を考えていなくて、sjisなCGIを書こうとするとmultibyte周りではまる。。
Rackでsjis(cp932じゃなくて)でCGIとか2chでしかとれない貴重なサンプルだな
rubyの利用って大抵webサイト構築ですよね?
いちばん多い用途を上げると言われたら、自分(の所属組織)が使うパソコンまたはサーバ内で動作する さまざまなメンテナンスまたは便利スクリプトだろうと思う Webサーバでサイト閲覧者のアクセスに対してページを生成して返すというような用途は、 割合としては2番目くらいで、絶対数としても低めなんじゃないかな
Webページが表示するのに使うデータファイルをバックグラウンドで生成しまくる、みたいなスクリプトはRuby ユーザーが触れる表示プログラム自体はPHP がおそらくいちばん楽
その
>>100 先輩の用途で勉強したいと思います
とりあえず
ソースコードを毎日バックアップしたrMysqlのデータをバックアップするスクリプトとかが定番なんでしょうか。そこからはじめてみます
PHPは触った事ないのでわかりませんがJSPでやりたいと思います
予算とか業務効率とかが関わってるんでなけりゃ、全部Rubyでやったって構わんけどね
>>102 RailsでWebアプリケーションを一から作れる開発者と、何か知らないが役に立たないツールを作っている開発者のどちらが評価されると思う?
MySQLのバックアップツール?そんなものはHerokuにやらせれば良いよ。
そう、社内アプリなのでSJISで、ASP.Net や Rails で書くと後任者が引き継げなさそうだから、 zip ball を展開するだけで動作する anhttpd + cgi というショボイ環境に。PHPは嫌いだし
気取ってRack使うものじゃないな、、標準添付CGIライブラリに戻ろうかな
[速報]RubyGemsハッキングされる
2日前にgem update --systemしたんですけどやばいですかね?
いずれかの変数が条件に該当した場合, 該当した変数に指定した処理をする,っていう場合のスマートな書き方はありますか? if a == 1 a == 10 elsif b == 1 b == 10 end とかけばできるのですが,なんかもっとまとめられないのかと思って。
a = 1==a?10 b = 1==b?10
既に恒例行事っぽい感じはするね
>>110 条件による変数代入または変更はきちんと書いてくれ
テクニカルには書けるが、読みにくくわかりにくくなってバグの元だ
たとえばそれは a が 1 じゃなくて b が 1 だったときには a も b も変更されないし、
a と b が共に 1 だったときは a しか変更されないけど、それでいいのかとか
Ruby だと case を使うことが多いような気はする
初心者はムダにスマートを気にする 意味ないのに
その意欲と衝動は得難いものだけどな 向けるべき方向性がちょこっと違う キレイに書くもっとよく書くというのは重要で素晴らしいが、そっちじゃねえ
でも、rubyってスマートに書けるのが売りなんじゃないの?
いい指摘だ それはその通りで、"昔ながら"の言語よりは確実に、"今風"の言語とは同程度に、スマートに処理を記述可能 ただしそれは全部Ruby wayで書くことが許されたときという条件つきのことでしかない 今回のように「排他的に値をチェックしていって該当のときだけなんかしたい」みたいな泥臭い処理の部分だけ切り出されたら、そりゃドロドロ書いてみせるしかないよ もうちょっと広めに聞かれたら、それごともうちょっとよく書けるかもしれないけど a, b = case when a == 1 then [10, b] when b == 1 then [a, 10] end 書けてこんなもんだろうか
>>117 すごい、そんな書き方ができるのか
しかし後で読むとわからなくなりそう
可読性は
>>110 が上(あくまで私レベルで)
実行速度はどうなのだろう
そもそも等価じゃない
>>119 当たり前だ
完全に同じことが起こる完全に同じ負荷の記法なんてのがそうそうあってたまるか
そもそも論理的にも等価じゃない
if a == 1 a == 10 end if b == 1 b == 10 end
if a == 1 a = 10 end if b == 1 b = 10 end
>>117 と論理的に等価なのはこうなるよね?
if a == 1
a = 10
elsif b == 1
b = 10
end
>>117 のほうが、何が起こるのかを明確に記述できてて良いと思うけどな
125 :
デフォルトの名無しさん :2013/02/01(金) 13:43:16.98
Module Hoge class A 処理1 end class B 処理1 end end 処理1をカプセル化したい場合どうすればいい? @Hogeに処理1を特異メソッドとして定義(Hoge::処理1みたいに使う) Ahoge内に新しいクラスを作って処理1をインスタンスメソッドとして定義(class A < Cみたいに継承して使う) B新しいモジュールを作ってクラス毎にinclude C組み込みのクラスに処理1を定義 が考えられるけど @→毎回Hoge::書くのがめんどいダサい A→毎回継承するのがめんどいダサい B→毎回includeするのがめんどいダサい C→何か怖い 何か他にいい方法はないんだろうか?
Aというクラス自体には関係するんだけどAのインスタンスそのものには無関係な処理をメソッドとかにしたい場合、 クラスAのクラスメソッドにするのが妥当であり、そこで変に凝ってあったらむしろ殴る ということで (1) A.hoo と記述するのは別にダサくはない めんどいが
127 :
デフォルトの名無しさん :2013/02/01(金) 14:13:10.86
クラスAとクラスBで同じ処理が必要ってことは二つのクラスは似たようなクラスなの? だとしたら元からクラスCを継承する形になってるだろうからA
ユーティリティモジュールを作ってincludeするのがいちばんいいと思う
名前考えるのめんどくさいんだけど
>>128 機能追加のために継承してはいけない
MIx-inなら多重してもいいのかという話は確かにあるが
130 :
デフォルトの名無しさん :2013/02/01(金) 14:25:10.42
>>128 Aはカプセル化のために拡張用のクラスを作るって意味で元々は存在してない
>>129 >>130 全く違うクラスで同じ処理が必要な場合のイメージ沸かなかったから言ってみたんだ・・・
元々存在してないのであればBだわ
inspectみたいなものならCしたくなるのを我慢して@かな
133 :
デフォルトの名無しさん :2013/02/01(金) 14:37:25.61
ちょっとそれるけどモジュールAがモジュールBをincludeしたら モジュールA内のクラス内でincludeせずにモジュールBのインスタンスメソッドって使えたっけ?
module Hogeの全classに処理1が必要なら@ いくつかで良いならBかな
136 :
デフォルトの名無しさん :2013/02/01(金) 14:54:49.11
>>132 inspectみたいなものだわ
open_uri使って複数のサイトをスクレイピングしてページを解析するアプリなんだけど
ヘッダに文字コード情報ついてない場合はopen_uriがASCII-8BIT返すからその時にNKFとかkconvで適切な文字コードをセットしてやる必要があって
処理1はそのためのもの
137 :
デフォルトの名無しさん :2013/02/01(金) 14:56:01.93
そういうのはuri_read相当のメソッドの中に入れとけ クラスとか関係ねえ
139 :
デフォルトの名無しさん :2013/02/01(金) 15:09:46.13
>>138 煽りとかじゃなくメソッドの中に入れるってどういうこと?
すいません至急
>>109 のアドバイスお願いします!
141 :
デフォルトの名無しさん :2013/02/01(金) 20:00:03.61
まじすか安心していいのですね Windowsの再インストールするべきか悩みました
んなもん知らんがな ちょっと調べりゃ出てくるもんを丸投げしてなんちゅう言い草だ
サクラエディタでシコシコ日本語を含むプラグラム書いていざロードしたらinvalid char云々のエラーが大量に出ました 文字コードだと思いutf-8で保存してプログラムの最初に#! ruby -Ku書きましたが依然として同じエラーがでます どうすればよいでしょうか ruby1.87です
外部エンコーディングじゃないの?
1.87
BOMつきで保存してるんじゃね
RubyInstallerで1.9.3を入れたんですけど ファイルにrequireでtkをインクルードしてもそんなのないよってエラーがでます
>>148 これも定期的にくるな
ActiveTcl((だったかな?)をインストールしてくれたまえ
詳しくはググれ
あれ、最近のRubyInstallerはActiveTcl入れなくても 標準でRuby/Tk使えるはずだよ 現に俺の環境だとActiveTcl入れてなくても require 'tk' ができる (mswin32版では、自分でActiveTcl入れないといけないとかあるけど……) もしかしてmsi(Windowsインストーラ版)を使っていて なおかつインストール時に「Tcl/Tkサポートをインストールする」に チェックを入れなかったのでは? (これにチェックを入れた場合か、もしくはzip版の場合のみTcl/Tkが使える)
RubyってQt使えるんですか?
152 :
デフォルトの名無しさん :2013/02/04(月) 09:34:15.95
馬鹿には無理
equal? についてお伺いします。 以下のコードで、 a.equal? c がtrue になるのはなぜでしょうか。 a = 10 を a="10" b = 10 を b="10" に変えれば、予想通りa.equal? c がfalseになってくれるのですが・・・ ===使ったコード=== a = 10 #aはオブジェクト10を指す b = 10 #bは、オブジェクト10(aが指すのとは別のオブジェクト)を指す c = b #cは、bが指すオブジェクト10を指す print("a==b is " ) puts a==b print("a==c is " ) puts a==c print("a.equal? c is " ) print a.equal? c ===実行結果=== a==b is true a==c is true a.equal? c is true Complete(0)
>>149-150 たぶんインストーラーでそういうのあったかもしれません
どうしましょう!
もうgemとかdevkitとかインストールしたのでまた再インストールとかパネェことできないです
一回案インストールしないでインストーラー使っても大丈夫ですかね?
Rubyでオブジェクト動作の調べ事をするときはその対象に整数を使ってはいけないということはどんな参考書にも書いてあるはず なぜなら、同じ整数値であるならばオブジェクトIDが常に同じという特殊な存在だから (何百万回と整数が呼ばれるたびにいちいち新規オブジェクトを生成なんてしてたら負荷で死ぬわボケという理由による) このへんのこと書いてなかったら、いい機会だからその本捨てろ
RHG 最強ですねわかります
157 :
153 :2013/02/04(月) 16:26:21.79
>>155 ありがとうございます
例外的に、整数値(10)は同じidで管理されるということですね
本は、今のとは別の本を探してみます ありがとうございました
>>144 ですがwindowsでロードするとinvalidchar云々出るんですがubuntu環境では正常にロードできます
どういう問題が考えられますか?
ruby1.8.7でした
なんかわかりませんが一度BOM付きで保存してから再びBOM無しで保存するとロードできるようになりました 最初はBOM付きで保存するのチェック外してたんですけどね すいませんでした
>>157 正確にいうと、整数(Fixnum)、Symbol、nil、true、falseは即値として扱われる
でも、この事実書いてる記事や本ってそんなにあるかなー
俺はリファレンスマニュアルの用語集ぐらいでしか見たことないんだが
>>154 とりあえず試さずに書くけど
zip版を落としてきて、フォルダごと上書きすればいけるんじゃなかろうか
この方法なら少なくとも、一度インストールしたgemとdevkitは
おおむねそのまま残るはず
やる場合は、念のためバックアップをとってからやってね
>>162 了解です
親に怒られるので明日学校終わったら試してみます
>>161 本も書かわずにウェブだけでてきとうに調べて
習得した気になってる俺でも知ってるようなことだし「でも」って言うほどでもない気はする
165 :
157 :2013/02/05(火) 12:28:01.13
>>161 教えて頂き、ありがとうございます。
今使っている本よりもっと詳しい本・ウェブを探してみます
166 :
デフォルトの名無しさん :2013/02/05(火) 13:11:55.06
どなたかMeCab-rubyを使っている方はいらっしゃいますか? MacOSX 10.6.8 ruby1.9.3p374 MeCab0.995 MeCab-ruby0.99 という環境なのですが、途中で停まってしまいます。 irb(main):001:0> require "MeCab" => true irb(main):002:0> str = "¥u592a¥u90ce¥u306f¥u3053¥u306e¥u672c¥u3092¥u4e8c¥u90ce¥u3092¥u898b¥u305f¥u5973¥u6027¥u306b¥u6e21¥u3057¥u305f¥u3002" => "太郎はこの本を二郎を見た女性に渡した。" irb(main):003:0> mecab = MeCab::Tagger.new (irb):3: [BUG] Segmentation fault ruby 1.9.3p374 (2013-01-15 revision 38858) [x86_64-darwin10.8.0] 何か良い方法があれば、ご教授願います。
0 < x < 1の一様乱数を発生させるメソッドは無いの? 0 <= x < 1はあるみたいだけど。
用途がマイナー過ぎるので標準ではついてない
Ruby-mswin32 or ftpの更新が止まっちゃっているんだけど 最新安定版のmswin32バイナリのアーカイブが落とせる所って無いの? ActiveScriptRubyはmsiだし余計な物が一緒になっているみたいだし・・・
>>169 「mswin32版」というところにこだわりがなく、Windowsで使えればよいのであれば
RubyInstallerのzip版がオススメ
導入が楽、ファイルサイズが軽い
devkit導入でネイティブgemがインストールできるといいこと尽くめ
171 :
169 :2013/02/08(金) 06:59:24.27
>>170 レスthx
mswin32を使っている理由はWindows上で実行速度が一番速いためです
・・・自分でビルドするしかないのか?orz
mswin32版よりmingw32版の方が速いよ(マイクロベンチでは) 1998年のVC++6と最新のGCCじゃ最適化能力が違う RubyがGCC向けにコーディングされているとかもあるかもしれないけど ActiveScriptRubyの1.9.2以降はVC++10でコンパイルされてるのでGCCに迫るけど ランタイムライブラリが違ってしまうので、バイナリライブラリの互換性が無い それと、Windows2000以下では実行できない MingwのラインタイムライブラリはVC++6と同じものを使ってるので mswin32とmingw32では(Ruby1.8からは)バイナリライブラリに互換性をもたせている どうしてもmswin32版がよくてVC++6があるのなら自分でビルドするのがいいのでは 今となってはVC++6が入手できないそうなので(有料だし)
The Computer Language Shootout Benchmarksのマンデルブロを引数1000で実行 実行ファイルのロードも含んだ実行時間、単位は秒 たぶん浮動小数点数の計算能力をみるベンチマーク 41.766 ruby 1.8.7 (2010-12-23 patchlevel 330) [i386-mswin32] (う)さんの 32.406 ruby 1.8.7 (2011-06-30 patchlevel 352) [i386-mingw32] 自分でビルド 26.828 ruby 1.9.2p0 (2010-08-18 revision 29036) [i386-mswin32] (う)さんの 15.078 ruby 1.9.3p374 (2013-01-15) [i386-mswin32_100] artonさんの VC++2010製 13.188 ruby 1.9.3p327 (2012-11-10 revision 37606) [i386-mingw32] 自分でビルド 14.453 ruby 1.9.2p0 (2010-08-18 revision 29036) [x64-mswin64_80] (う)さんの VC++2005製 14.313 ruby 1.9.3p327 (2012-11-10) [x64-mswin64_100] artonさんの能楽堂に入っているVC++2010製 09.719 ruby 1.9.3p286 (2012-10-12 revision 37165) [x64-mingw32] Mingw64のサイトにあるやつ 05.578 ruby 2.0.0dev (2012-11-01 trunk 37411) [x64-mingw32] Mingw64のサイトにあるやつ つい最近Windows8(64) を導入したので調子に乗ってマイクロベンチしてみた Ruby2.0 64bit版だけの新機能 Flonumのパワーを見たかった
Rubyってマック専用言語なんですか?
175 :
デフォルトの名無しさん :2013/02/10(日) 22:51:35.92
メインターゲットはUNIX系OSね。 結果的にMacもその一家に。
Matzは、Debian Linuxをつかってるよ
Re: Best Linux Distro for Ruby? Posted by Yukihiro Matsumoto (Guest) on 2011-01-03 03:51 Hi, I use Debian sid, and see no problem developing in Ruby. matz. ww.ruby-forum.com/topic/785744
単にWindowsではそれほど効率的には動作しないという程度の意味しかない Windowsで効率よく動作しないと家族が危険に晒されるというのなら、Rubyを使うべきではない
Ruby使える人って他にも何の言語使える?
perl
haskell
coffeescript
Japanese
モッモル
Cがいいよ
Rubyは、バージョンごとにスクリプトを用意しなければならない
開発者は本当もうすこし互換性を気にしてくれよと思う
あと名前からこれはなにをするのかさっぱりわかんないようなネーミング pとかね
ほう、他には?
UnixとCをある程度知っているという初期の大前提に立つと、…pくらいだろうか あれは「pというメソッドを他人が読むことは絶対にない(デバッグ以外の使い方をしてはならない)」という意図もあるな
>>189 お前がRubyのこと何一つ知らないで書き込んだってことだけは伝わった
一人で組む分には個人的に最高なんだけど 仕事では使えんのよなー
世の中にはソースコードを納品する仕事しか存在しないわけではあるまい
>>194 そゆことっすなー
あらゆることをRubyで行なえないのは、まあ、残念ではあるんだけど、適材適所ということでひとつ
pじゃxmlオブジェクト見えないしデバッグにも使えない
なんのXMLオブジェクトかは知らないがto_s相当のメソッドがあるだろうから それ呼んでpすればいい
>>197 それはそのxmlオブジェクトというもののクラスを作った人が悪いな
Rubyのあらゆるクラスはinspectを適切に定義することということになってる
あるオブジェクトをpで表示してみてなにがなんだかわからない(内部変数丸見えのままの)表示だったら、クラス作成者に文句言うといいぞ
大抵の場合はppがかろうじて読めるレベルにしてくれる
あ、p自身がオブジェクトを解釈して表示してるわけじゃないので、pのほうに文句言わないように p hoge は inspect メソッドを呼んで puts hoge.inspect とほぼ同じ動作をしているだけに過ぎない
処理側は呼ぶメソッドが決まってるというだけで、 実際には引数オブジェクト側というかクラス側がいろいろ用意しなければならないというのがオブジェクト指向的なのかもしれん p は 引数オブジェクトの inspect メソッドを、puts は 引数オブジェクトの to_s メソッドを呼ぶということが決まっている このへんのことを書いていない解説書や解説サイトがあったら今後も役に立たない可能性が大なので投げ捨てろ
>>199 inspectはデバッグ用だからオブジェクトの文字列表現を返すものとはいえ
ある程度は内部状態を見せてくれたほうがユーザは助かるんじゃないかと
to_sと同じもの見せられても嬉しくない
irb(main):002:0> a = Nokogiri::XML("<a>apple</a>")
=> #<Nokogiri::XML::Document:0x55d55c name="document" children=[#<Nokogiri::XML::Element:0x62aa34 name="a" children=[#<Nokogiri::XML::Text:0x629fbc "apple">]>]>
irb(main):004:0> a.to_s
=> "<?xml version=\"1.0\"?>\n<a>apple</a>\n"
irb(main):005:0> require 'rexml/document'
=> true
irb(main):006:0> doc = REXML::Document.new("<a>apple</a>")
=> <UNDEFINED> ... </>
irb(main):008:0> doc.to_s
=> "<a>apple</a>"
>>203 君のXMLの知識はゼロだということがよくわかった
>>179 でもWindowsで効率的に動作しない(というかインストールすらままならない)というのは
大半のコンピュータで効率的に動作しない、というのと同じことでは?シェア的に考えて。
サーバ用途ならそうでもない
シェア的にはもうWindowsが大半っていう状況でもなくなってきたな
え?
macで動けば充分
島根県民専用言語になるのも時間の問題だしな
Windowsがいいにきまってるでしょ。それがわからんのが信じられないよ
Windowsは、オープンソースでない
RubyのWindows用の作業環境を自分で作れないような奴がソフトウェア開発とかするなよ迷惑だから
いつも態度がでかい
windowsならpytonの方が相性良い
0 < x < 1の一様乱数の作り方がわかんない…
0 ≦ x ≦ 1 で生成して、0 と 1 が出たら捨ててやり直しすればいい。 どうせ確率的にはほとんど出ないんだから。
えー…
C, C++ /* generates a random number on [0,0xffffffff]-interval */ unsigned long genrand_int32(void) (中略) /* generates a random number on (0,1)-real-interval */ double genrand_real3(void) { return (((double)genrand_int32()) + 0.5)*(1.0/4294967296.0); /* divided by 2^32 */ } mt19937ar.cpp
>>220 4294967296.0って何?意味わかんない。
どこのトーシロが書いたプログラムだよ…
Pythonのが五倍速いんでしょ?
何ってコメントにも書いてある通り2の32乗だろ
マグニチュードが 0.2 上がると地震の規模は 2 倍になります つまりマグニチュードが 1.0 上がると地震の規模は 2 の 5 乗で 32 倍になります なんとマグニチュードが 2.0 上がるだけで地震の規模は 1024 倍にもなるのです
>>214 他の開発環境がないと構築できないスクリプト言語とか^^;
Rubyはオワコン
他の開発環境ってなんだ?
Rubyに翻訳しろよ CならできるのにRubyでできないの?
>翻訳
アクセス制限ってこういう風に書くしかありませんか? class Test def abc() end private :abc end こうかくと2度もメソッド名を記述しないといけないので効率悪いと思うんですが何故こういう仕様なんでしょうか? private def abc()みたいに書ける方がらくだと思うんです
「ruby private」でググレば出てくると思うが・・・ class Test private def abc() end end
rexmlで空要素が閉じられてないHTMLを読み込むとエラーが出るんですが html5は空要素を<img〜 />って書かなくてもOKなので<img〜>でも取得できたら良いんですが方法ありませんか?
自分の好きなようにXMLを定義すればいい
>>232 そりゃその通りなんだが回答レベルとしてどうよという
rexmlでXMLとして解釈してるんじゃないかね
空要素が閉じられてなくてもいいHTMLのDTDを明示的に指定するとたぶん文句言わないぞ
re = REXML::Document.new(url)
re = REXML::DocType.new('html', PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "
http://www.w3.org/TR/html4/loose.dtd "')
空要素をとじる必要なhtml4のdtdを読み込んでみましたがダメなようでした
そもそもエラーってなんだ 他人に解決求めるならそのへんは勝手に解釈省略すんな
XHTML5は閉じタグ必須だぞ REXMLでXHTMLじゃないHTMLは読めない
>>231 >>236 とかぶるけどHTMLを読みたかったらHTMLパーサを使う
REXMLはXMLパーサでHTMLパーサじゃない
NokogiriはたしかXML/HTML対応だからそっち試してみては
XHTML5ってなんだ?XHTML5なんて存在しないぞ?
3倍でいいのに
known as
HTML5のXMLは互換のために残してるだけ
1度SJISで書いてしまったテキストのエンコードをUTF8に変えるにはどうすればいいのでしょうか 小一時間ほど文字化けが不可避なんですけど全部打ち直しですか?
馬鹿はそうする
SJISで読み込む→エンコーディング変換→UTF-8で保存 でおk
>>244 1.8だとこんなとこ
require 'kconv'
File.open(utf8file,'w'){|f| f.write(File.read(sjisfile).toutf8) }
>>244 たとえば、どの文字が文字化けを生じたの
249 :
244 :2013/02/16(土) 18:06:23.00
色々試したんですが単にコマンドプロンプトではUTF-8での表示ができないだけっぽいですね windowsだけならShiftJISで問題ないんですけど今度はubuntuで実行した時に文字化けしまくるから嫌なんですよね 皆さんはどうしているのでしょうか
あきらめて、ファイルを生成して、そのファイルをエディタでひらきます
251 :
デフォルトの名無しさん :2013/02/16(土) 18:35:41.61
Rubyエンジニアって具体的にどういうコード書いてるの?
俺は、PCを起動したらいつもirbも同時に起動しているよ。 こいつをフロントエンドにして、いろんなことするんだ。
>>249 OSがなんだろうとその上でutf8を扱える同じソフトを使ってれば問題ない。GNUアプリケーション群とかサポートするOSも多くて良い。
ruby1.8.7sw open("hoge.txt", "a"){|f| f.write("hoge")} を実行するときに別のプログラムでhoge.txtを開いているとエラーが出ますが、どのように回避出来ますか?
>どのように回避 こっちのセリフだw 書き込んでしまいたいのかリトライさせたいのか強制終了させたいのかお前の希望をまず言えよ
エラーが出るとプログラムがそこで止まっちゃうので、「書き込みに失敗しました」とか表示でもして次の命令に進んで欲しいですね 書き込んでしまえるのならそっちのほうがいいですが
>>256 別のプログラムでそのファイルをロックしない。
Rubyのこれ探してます 1.定番のテンプレートエンジン 2.PHPのCodeIgniterのような軽量フレームワーク(RoRほど高機能なものは必要ないため) 3.Ruby使うならこれはいれとけっていう定番のgem
>>261 1. 定番はない。まあまあメジャーなのはERB(とその後継のErubis)、次いでHamlあたり
2. Sinatra or Padrino
3. (Ruby 1.9系列であれば)ない。たぶん100人に聞いたら100人とも微妙に回答が違う
個人的にはBundlerは入れるべき
1.8なRailsアプリを維持しています。2.0もでるし、時間がたてばたつほど移行が大変になりそうなので、 さっさと移行計画立てたいのですが、上司は移行コストは無駄だと怒ります。どうすれば上司を説得できるでしょうか。
>>263 移行するって何にですか? 1.8のまま維持するのがなぜ駄目なんですか?
上司に同意だな
>> n=Time.now >> n.year*365+n.month*30+n.day => 734823 という感じの毎日1ずつ増えていく数値が欲しいんですが もうちょっと厳密でまともな書き方あったら教えて下さい
>>266 ぱっと思いつくのはこれくらい
Time.now.to_i / (60*60*24) # 1970年1月1日午前0時から
require 'date'
(Date.today - Date.new(0,1,1)).to_i
>>268 Date.today.jd でいいんじゃ?
いいのかな?いいのかも?よぐわがんね マニュアルのユリウス日の説明見るとスゲー日付が基準になってるからさ 266の目的にあえばいいんじゃないかな
rubyのwindows版にあるコマンドラインのマルチバイト文字を正しく解釈できないバグは2.0では直りますか?
Windows版の1.9.3は日本語を含むパスにあるファイルがrequire出来ない 1.8.xや1.9.2の頃は出来るのに
273 :
デフォルトの名無しさん :2013/02/18(月) 22:01:09.76
>>270 いいんだよ。
通日数が分かればあとは特定の起点に対する相対値にするだけだ。
>>249 Ruby 1.9系なら、プロンプトへの出力時に自動で
適切なエンコーディングに変換してくれるようになっている
WindowsならShift_JIS(Windows-31J)に、UbuntuならUTF-8に、というように
>>263 上司にRails Castのそれ関係のビデオ見せる。
276 :
uy :2013/02/20(水) 07:49:50.11
277 :
uy :2013/02/20(水) 07:54:26.86
>>272 WindowsがUTF8じゃないからだろ
今pcないから感だけど
ソースコードの文字コードをシフトジスにして実行したら読めるんじゃね?
やめたほうがいいけど
278 :
デフォルトの名無しさん :2013/02/20(水) 13:47:09.21
PHPにしとけばいいのに
Goldに受からなければ会社クビだって言われている
Goldってまあまあ難しいけど大丈夫なのか
goldってなんですか
ゴールド!金!
Windows7でrubyを使っていますが少々不便に感じるところがあります。 コマンドプロンプトでスクリプト名を入力してEnterを押すとそのスクリプトが実行され、 エクスプローラーでスクリプトファイルをダブルクリックすると関連付けたエディタで開く というようなことはできないでしょうか?
>>284 たぶんできる
> コマンドプロンプトでスクリプト名を入力してEnterを押すとそのスクリプトが実行され、
環境変数PATHで指定したディレクトリにスクリプトを置く
> エクスプローラーでスクリプトファイルをダブルクリックすると関連付けたエディタで開く
関連付け Win7 でぐぐる
コマンドプロンプトでエンターもエクスプローラーでダブルクリックも そのファイルタイプの規定のアクションが呼び出されるような気がするから それぞれで違う動作は無理かもしれないしできるかもしれない。分からん
答え: 出来ない
>>286 ああそういうことか。PATHとかの問題じゃないね
*.rbはエディタに関連付けるとして
コマンドプロンプトからはruby hoge.rbのようにインタプリタと
スクリプトを陽に指定すればいけるだろうか
ahk使ってExplorerで^eしたら右クリ|編集(&E)を呼び出すことならできる #include ime_func.ahk #IfWinActive, ahk_class CabinetWClass ^E:: ; 選択ファイルを編集する if IME_CHECK("A")=0 { Send,{AppsKey}E } return
290 :
284 :2013/02/21(木) 22:05:55.87
出来ないが結論っぽいですね 皆さんありがとうございました
292 :
284 :2013/02/21(木) 22:29:47.89
ちょうど代替シェル探してたんですよ UNICODEは扱えるのかな
nyaosは使い物になりません 標準入力ができないのでやめましょう
というか、コマンドプロンプトからスクリプト名のみ指定で実行という場面があまり思いつかない どうせ hogehoge.rb って rb まで書かないといけないんだし、俺ならそういうのは特別にbatファイルを作っておくかな エクスプローラからダブルクリックで実行は危険過ぎるので編集に切り替え
sh使って、一行目にrubyのパス書いとけばいいだろ。というかそれが普通だろ?
297 :
291 :2013/02/22(金) 07:56:06.28
>>292 UNICODEは残念ながらムリ
ちなみに293が「標準入力できない」と書いているが
少なくとも俺がみた限りでは普通にできる
はい というか Net::HTTP の get は「最終送信メソッド」であり、それ以前にクエリ文字列は完成されていなければなりません なんか Hash とか配列の配列とかからてきとうにクエリ文字列を作るのは他のライブラリやメソッドの仕事
Goldゲットしたー これでクビにならずに済んだ。ホッ
WindowsでRuby2.0で勉強したいんですけどいつでまうsか?
302 :
デフォルトの名無しさん :2013/02/23(土) 18:16:33.38
ソースは明日リリース予定だから、Windows用バイナリはその 数日あとじゃね?
str.encode('UTF-16','EUC-TW') とかエラーになるけど、encodeの直交性ってどうなってるの?
エラーっていうなエラー名を書け
ncoding::ConverterNotFoundError: code converter not found (EUC-TW to UTF-16)
Windows用バイナリ出たね
ruby2.0でredmineとrailsは動きますか?
pikで1.9と2.0をwindowsに入れる場合rubyinstallerで両方のバージョンをいれると環境変数のpathは壊れませんか?
>>303 RubyはEUC-TWを扱えるけどEncodingによる変換はできない
バグトラッキングに上がったことがあったけど「このへんどうすればいいかよくわからんのでパス」という理由でリジェクトされたはず
※ より正確にはlack of feedback、EUC-TWがどうあるべきかについて詳しい人がいなかった
「本当に」EUC-TWで書かれたテキストが必要なのならIconvを使う
文字エンコード関連をWIkipediaとか見ながら想像で実装するとあとあと酷い目に遭う…
redmine2.3っていつ出ますか?
bundlerでインストールしたgemを全て削除する方法を教えてください
ひとがいない
Ruby2.0とredmine2.2.3で ruby script/rails server webrick -e productionってやると 以下のエラーがでます どう対処したらいいでしょうか? Unable to load the EventMachine C extension; To use the pure-ruby reactor, requi re 'em/pure_ruby' C:/Ruby200/lib/ruby/gems/2.0.0/gems/eventmachine-1.0.0-x86-mingw32/lib/ rubyeventmachine.rb:2:in `require': cannot load such file -- 2.0/rubyeventmachin e (LoadError)
>>309 ありがとう。 iconvは削除されたので、iconvgemを使えということですね。
しかし、Iconvはbig5-UAOとか新しめのはサポートされてない・・・
ここでも条件分けですかね。
>>314 EventMachineのバイナリライブラリがないのじゃなかろうか
2.0は1.9とはバイナリ互換性がないので
別途2.0用にコンパイルされたライブラリが必要になるはず
gem fetch eventmachineってしてダウンロードしてみたら
eventmachine-1.0.0-x86-mingw32.gem には
1.8と1.9用のバイナリしか入ってなかったよ
エラーメッセージで「EventMachineC拡張がロードできないので pure-ruby版を使え」
って言われてるのでeventmachine の代わりにem/pure_rubyをrequireすればいいみたいなので
どこかrequire 'eventmachine'よりも先にrequire 'em/pure_ruby'を書けばいいのだろうけど
Railsはわからん
RubyInstaller Development Kitもインストールすると
2.0用バイナリのコンパイルとか出来るのかな?試さないけど
317 :
291 :2013/02/25(月) 23:31:37.63
まじっすか やっぱ2.0でredmineはあきらめたほうがよさそうですね ひょっとしたらem/pure_ruby書いたら良いかもしれませんがもう何回もRubyを再インストールとgemでupdateしたらbundlerでgem入れるの繰り返しをしてたのでHDDをいためそうなので2.0でredmineするのはあきらめて1.9でやることにします 1日以内に範囲を絞ってググってみても誰もwindowsでruby2.0でredmineを動かす記事書いてないから厳しいですね
初心者スレでRuby2.0インストールする人はほとんどいないんじゃないかな やるとしたら2.0.1だろう
Ruby2.0.0でプログラミング始めようと思ったけど まずcファイルをコンパイル?(ビルド?)できない バイナリ出るまで待とう。。
>>320 ruby 2.0.0のバイナリ、もうRubyInstallerに出てるよ
早く枯れると良いな
そうそう、Ruby2.0を使おうとするのは初心者
初 心 者 ス レ で し た
>>322 1.9よりかは早いと思うよ、あれは変更が大胆で面倒過ぎた
半年もすれば解説なり説明なりが増えて使えるようになるんじゃないかな
俺らはライブラリ作成者とか先っぽの人たちが頑張るのを応援してればいい
なんか似たことをものすごく前にも言った気がするんだが、 とりあえず今は1.9.3を使って、んで2.0の解説が山盛りになってからおもむろに2.0の新機能を勉強するといいぞ 1.9.xの解説なら山のようにある(希望)し、1.9.1で使えて2.0で使えない考え方というのもrequire_relativeを除いてないといっていい require_relativeは1.9.1→1.9.2で唯一激変した「カレントディレクトリにあるrbファイルをbasenameでrequireできない」にまつわるもの もともと筋がよくなかったし、require './hoge.rb' と書く人も当時の時点で多かったから、それほど問題はなかったんだけど 1.9.1対応の解説で、カレントディレクトリの自作rbファイル hoge.rb を require で読みたいときに require 'hoge' と書かれているものがあったら、それは現在の1.9.3および2.0では間違いで require './hoge.rb' とパスつきで書くか require_relative 'hoge' と相対requireしなければなりません 相対パスで書くのは1.9.1でも1.8.7でも(カレントディレクトリさえ妥当なら)動くので、こっちが人気
一方 CoffeeScript は・・・
質問です。rubyのバージョンは1.9.3p125です。 rubyでgetsを使うとコマンドプロンプト上で実行すると大丈夫なのですが、RDEで実行すると入力要求のタイミングがおかしいんですがなぜでしょうか? 例えば puts "あ" b=gets.chomp puts"い#{b}" 実行すると画面に”あ”が表示される前に入力が要求されます
ストリームがフラッシュされないとかじゃない?
それはRDEの設定を弄れば直るものなんでしょうか? もしそうならどう設定すればいいか教えていただきたいです。
まつもとさんに直接質問したらやっぱり怒られますか?
そうだろうね。あの人、瞬間湯沸かし器で有名だから。
それ以前にRDEについて聞かれたって知らんとしか答えられんだろう
res328.ip_addr == res329.ip_addr => true
お、おう
無理やり STDOUT.sync = true puts "input" puts(gets) とかやると"input"までは出力されるけど、改行はつかないね 変なの
RDEはRubyの動作に熟練した人が使う
Ruby初心者は決して使ってはいけない
だからたとえば
>>326 のようなトラブルには絶対に遭遇しないし、誰も直す気もアドバイスする気もない
なぜなら、Rubyでgetsなんて使わないからだ
あるいは、使うとしてもこれにぶち当たった時点でスクリプトの動作を一旦変える
どうせ文字列がどこから来るかの違いなんだし
>>336 了解です、素直にコマンドプロンプトでやります
どうもでした
:piyo-piyoって書きたいのに、 :'piyo-piyo'ってしなきゃダメなのはどういう理由?
:piyo - piyo って解釈されるから
解釈しないようにすれば良いのに 解釈しなきゃいけない理由があるの? Ruby言語的に。
逆に:piyo - piyoって解釈してほしいときと区別が難しいだろ 空白の有り無しとか言い始めるのか 大体の言語で変数名は英数字と_のみじゃないの
LispとかForthとか変なのを除けば、だいたいそうだな
>>338 -のほうが"優先順位"が高いから
演算記号の"優先順位"を低くするというルールを作ると :a-b というシンボルや変数名が一発で書けるようになるが、
そのかわり「:aからbを引く(思いつかないならaからbを引く)」と書きたい場合
「3-2って続けて書けるからa-bって書いたらエラーになった、
そういやこれ変数として解釈されるんだっけ、変数と解釈される要素の前後には空白を【絶対に書かなければならない】のね」
という新しい(そして、明らかに煩雑な)ルールが別途できてしまう
○○すれば良いのに とか言っちゃう奴は何も考えてない奴が多いから参考にならない法則
このへんのパーサやトークン解釈については、自分で疑問持たないと進歩しないので、 なんでこんな動作なんだこっちのほうがいいのに、と思ってもらうこと自体はなにも問題がない、というか思ってもらったほうがいい 納得してもらえるかどうかだけが問題
すいません、今の場合は何も問題ないです 分かってない奴に「すれば良いだけだから簡単でしょ」 と言われ続けたストレスをついここで発散してしまいました
1.9.3 の Zlib::GzipReader ですが、readline() でencoding が指定できず、set_encoding()も 受け付けないのですが、自分で更にラッパーをかけて使っているのでしょうか?
いい加減privateとprotectedの仕様を他の言語に合わせろボンクラ開発者!!!!!!!
それではもうレスもらえないと思う
とまあ、技術的な話題についていけずレスだけ欲しい人がム板にはこびりついています 1週間もすれば自分の身にも振りかかってきてわかってくることではあるけど、 これから入学就職のシーズンでプログラミングに触れる人も増えるだろうし、まったくの新参の人は注意
技術的な話題についていけない人はいつまでもprivateとprotectedに対する議論を避ける傾向にある
>>352 どうでもいい事だからってだけ
まあ確かに紛らわしいのはわかるが
今その辺を変えて、後方互換性が爆死するのは困るから
正直今変えてほしくない
というか誰もアクセス制御なんて使ってないし気にしてないから話なんて振られても困るし、 「誰も気にしてないということがわからないような位置にいる人」が言ってるんだろうという確証になるから余計スルー
誰もというのはどの程度の母集団なんだろうかね 気にしない人って所詮その程度のものなんだろう 君(もしくは少数)の意見が全員一致の意見だと思わないほうがいい
どうせオープンクラスだからどうにでもできちゃうからな
元々Matzは変えようとしてたけど、互換性を大事にする方針になったから、もう変えないでしょ
「_」という変数ってなんか言語的に特別な意味はあるん? それとも、普通の変数と同じで、無名変数的に扱う場合にこうしてるだけ?
Windows版で**/がうまく動きません フォルダ名が日本語のフォルダが無視されます
2.evalby( :Math#sqrt ) => 1.4142135623730951 こういった風にオブジェクトを指定の方法で処理する書き方ってありますか? もちろん上のは Math.sqrt(2) と同じ結果ですが、 someobj.を〇〇する.それを△△する.さらに□□する. といったように加工の順番どおりに記述できないのかなぁということです。
Numericなどを独自拡張するしか無さそうな気がするんだけど
>>363 なるほど拡張ですか
class Object
def evalby(&blk)
blk.call(self)
end
end
2.evalby{|x| Math.sqrt(x)}
=> 1.4142135623730951
2.evalby{|x| Math.sqrt(x)}.evalby{|x| x**2}
=> 2.0000000000000004
見よう見まねで試してみましたが、もっとましな実装方法があれば教えてください
別バージョン class Object def evalby(code) code.call(self) end end 2.evalby(Math.method(:sqrt)).evalby(->x{ x**2}) => 2.0000000000000004 この辺で自分的には満足ですが拡張無しでも出来るのなら知りたいです。
>>361 Dir.glob(**/)なら動かない環境があるよ
367 :
デフォルトの名無しさん :2013/03/05(火) 23:51:06.10
>>365 >> 2.instance_eval(&Math.method(:sqrt))
=> 1.4142135623730951
>> 2.instance_eval(&Math.method(:sqrt)).instance_eval(&->x{x**2})
=> 2.0000000000000004
>>367 ありがとうございます
やはり素人が思いつくような機能は大抵は備わっている感じですなんですなあ・・・
そりゃそうよ、開発効率重視の言語なんだからさ PHPみたいなゴミとは訳が違う
>>362 メソッドチェーンのことだったらRubyでもPHPでもできる
メソッドチェーンが主目的ではなくて objが○○する.成果物が△△する ではなく objに対して(xxxが)○○する.成果物に対して(yyyが)△△する 的な事をしたいという話でした
そういうの前から欲しいと思ってた 2.sqrt ==> x # 代入のつもり x**2.puts(file) みたいな
>>361 RubyをWindowsで使っちゃうひとって
上にも似たようなことがあったが、WindowsでRuby使う人はRubyに慣れてる人なんだよね Linux(いやMacOSXでもいいけど)上では普通に動くのにWindowsではなんか変だな、しゃあないかわりに○○するか、で終了 迂回できる知識があるので「困ってない」、から、いつまでたっても直らない 今回だとDir.globの*はあんまりにも他の部分と動作解釈が違うので、Linux上ですら意図的に避けられていることが多い Dir.entriesを正規表現で掬い上げるとか、そっちのほうが単純確実
初心者や Ruby に慣れてない人や Linux に慣れてない人は、 Windows ではなんか変だな、しゃあないかわりに Python するか、で終了。 なのにね。 なんでわざわざ障害の多い Ruby 使おうとするんだろう。
Windowsがいいにきまってるでしょ
377 :
デフォルトの名無しさん :2013/03/06(水) 17:20:02.85
RubyをWindowsで使っちゃうひとって
LinuxでRuby使っちゃうひとって
最新のハッカーは、Windowsw、だぜ。
380 :
uy :2013/03/07(木) 14:17:09.66
ウィンドウズでルビー使うには最低限パスと文字コードわかってないと無理 それ知らずにルビーONウィンドウズしてるとパンチングマシーンとかで普通に100とかでるようなる
それはどの言語にも当てはまる事でRubyに限った話じゃない
"abcd" を ["a","b","c","d"] にするには?
"abcd".split ""
お恥ずかしい。そんな簡単でしたか・・ しばらく独学します。ありがとうございました
例えば「ruby 文字列 一文字ずつ」とググれば出てくる 自分のやりたいことが何なのかをコードではなくて 日本語で(別に英語でも良いが)表現できれば検索できる
>>386 > これは通常のString#splitの動作とは違う特別に設定されたものだから、マニュアルを見ないと絶対にわからない
そうですよねえ、やっぱり
ゲームでいうと秘密の入口みたいなもの
そういうのだけ集めた裏技集があると便利
文字列をどうにかしたいんだからStringのマニュアル読んで探すのがベストというか唯一解 しょっちゅう言われてるが、StringとArray(Enumerable)とHashのマニュアルは流し読みして、代表的な動作を記憶に留めておくといい(具体的な細かい動作は不要) それ以外のクラスは操作対象になってから読むほうがいい(膨大だし面倒だし忘れちゃうから) 今回だって「文字列を配列にするメソッドはどっかにあったなStringだっけ?」程度の記憶はあって欲しいところ
389 :
385 :2013/03/07(木) 15:41:07.19
そうだよねマニュアル読むほうが教育的だよね余計なこと言ってすいませんでした
時間操作したいと思ったとき、TimeとDateとDateTimeのどこにどんなメソッドがあってどんな動作してたかなんて1ミリも覚えてない ものすごく何度も使っていればそのうち覚えるだろうけど、そんなん無理する必要ないよな 最近やっとstrftimeの綴りを覚えたが、引数をどうやって書くかは覚える気ゼロ
splitはperlの猿真似
392 :
デフォルトの名無しさん :2013/03/07(木) 21:12:50.84
文字単位に分解するなら String#chars を勧めたいが、 配列として得たい場合は 1.9.3までなら "abcde".chars.to_a 2.0以降なら、"abcde".chars としないといけないんだよなー。
393 :
uy :2013/03/08(金) 02:31:20.11
何が?
何で原文の該当箇所にすら飛べないんだ とは思う
>>394 1.9.3と2.0でString#charsの動作が違うということだろ
398 :
uy :2013/03/08(金) 13:26:55.11
もう404になってたから何でもない
399 :
uy :2013/03/08(金) 14:49:44.15
class A attr_accessor :x def initialize @x = 2 end @x = 4 end p A.new.x ruby2.0でもう仕様固めちゃうって事はこういうのもずっとこのままなのかな このネームスペースはやばいと思ってたからいつか整理されて変わるものと思ってた クラスの中にあってメソッドの外にある@xみたいなのの呼び方ってクラスメンバ変数でいいんだっけ? これ使いどころとかあるの?
400 :
uy :2013/03/08(金) 14:50:28.43
なんか貼り付けミスってやばい事になった class A attr_accessor :x def initialize @x = 2 end @x = 4 end p A.new.x
クラスインスタンス変数でしょ。 特異クラスのインスタンス変数だから、インスタンス横断的に情報を共有したいときに使える。
すごく初歩的な質問なんですが… starrubyを利用して画像を表示するウィンドウを作成させます。 そのウィンドウ内をクリックすると外部リンク、例えばgoogleのトップページ をブラウザで開かせるようなコードを考えていますがどうにも手づまりです 具体的にはこのようなコードになっています。 最後のif文に何を入れていいかがさっぱりです…何か良いアイディアはありますか? 不明瞭な内容かと思いますがよろしくお願いします require "starruby" include StarRuby texture = Texture.load("ruby.png") Game.run(640, 480) do |game| game.screen.clear game.screen.render_texture(texture, 8, 8) mouse = Input.keys( :mouse ) mouseLocat = Input.mouse_location() if mouse.include?( :left ) end end
「規定の(関連付けられた)Webブラウザを起動しURLを渡して表示させる」は ・ 動作対象のOS ・ 動作対象のシェル ・ 動作対象のWebブラウザ の3つに依存する WindowsならShellExecuteを呼べばいいんだけど、どっかにメソッドあったっけ? Win32OLEで直書き?
404 :
uy :2013/03/09(土) 00:26:10.99
winだったらstartでいいべ
launchy
407 :
402 :2013/03/09(土) 01:32:02.17
みなさん様々なアドバイスありがとうございます
OSはwindowsになります
元々はインターネットのページ内に
特定のページに飛ぶようなリンクを持たせた画像を埋め込む
という機能を持ったWEBrickを利用したプロキシを作成しようとしていました
しかしリンクを持たせた画像を埋め込む方法がわからず
>>402 のような形になりました…まだまだ勉強不足ですね…
WEBrickをHTTPプロキシにするんならWEBrick側で受けとったHTMLに <a href="..."><img src="..." /></a> を挿入すればいいんじゃない?
409 :
uy :2013/03/09(土) 03:05:04.11
nankaブラウザを別途起動じゃなくて ウィンドウ内にページ表示みたいな話に聞こえる それだったら.NETのほうが簡単
ruby捨ててjavascriptに汁
本当は何がしたいのかってのが見えないからなあ もしかしたら410の言う通りrubyでやる必要ないかもしれないし
プログラミング初心者です まずはじめに簡単だと聞いたRubyを学ぼうと思っているんですけど、おススメの参考書とかありますか?
あなたがWindowsユーザーならRubyはおすすめしません
高枝切りバサミはとても簡単で便利で使いやすいけれど、鼻毛切りには残念ながら向きません なにを作りたいと思っていますか? もしWindows上でのなにかゲームや便利プログラムなのなら、C#かHSPをおすすめします もしブラウザ上でのなにかマウスでやるゲームやスマホなどで遊ぶものなのなら、Flashをおすすめします もしどこかのサーバを借りてユーザーに楽しい体験をさせるサイトを作るのなら、とりあえずはPHPをおすすめします
Flashなんか勧めんなよ 将来性なさすぎるだろ
417 :
デフォルトの名無しさん :2013/03/09(土) 18:51:36.03
高枝切りバサミとして見ても javascriptのがオヌヌメ
418 :
402 :2013/03/09(土) 18:59:07.89
イラネ
>>416 では代替をどうぞ
10年後なんてどうでもいいので、今日明日使えるものをお願いします
実質的規格も対応もバラバラなHTML5でなにか作るなんて自殺行為だな FlashやOCで作って2年後に捨てたほうがマシそうだ
どっちがマシと思うかは人によるだろ決め付けるなよ
HTML5が自殺ならFlashは老衰だな
ブラウザのリッチクライアントは今手を出しても無駄になりそうなので、Androidアプリとサーバサイドに注力してるよ。
427 :
413 :2013/03/09(土) 20:53:36.82
とりあえず漠然とプログラミングがどういうものか体験してみたいので、一番簡単なプログラミング言語を学びたいんですが、やはりRubyはレベルが高いですかね?
>>427 興味あるアプリが何の言語で書かれているかでいいんじゃね。
Rubyは実は初心者向きじゃない
>>427 Windowsで手軽にプログラミングを試したいならVBでいいよ
メモ帳に
MsgBox("hello world!")
て書いてhello.vbsと言う名前で保存して出来たファイルをダブルクリック
後はVBのスレでも探してそっちで聞いてくれよん
431 :
413 :2013/03/09(土) 21:45:32.29
参考になりました ありがとうございます
ブラウザでコンソール開いてJavascript触ってみるとか
>>427
Rubyはプログラマが小さいプログラミングをする場合に割と簡単な言語
RubyはApacheで動かすためには作られてないんですか? WindowsでApacheで動かすためのモジュールってないんですか? なんかRuby用の専用サーバみたいなのをgemで入れてそれをApacheのプロクシモジュールと合わせて使わないといけない漢字で面倒くさいです
>>434 現在、ApacheにRubyのWebアプリを組み込んで動かしたい場合には
Phusion Passengerというモジュールを使うのが一般的
これは別名mod_railsやmod_rackと呼ばれていて
これを使えば、ほとんど面倒な設定なしに、サクッとWebアプリを動かすことができる
ところがこのPhusion Passenger、残念なことにWindowsには対応していない
そのため、あなたは以下のどれかを選択をする必要がある
1. LinuxやMac OSに移行する(推奨)
2. そもそもApacheを使うことを諦める。Apache以外にもWebアプリを動かす方法はいろいろある
3. Windows上でプロキシとか使って頑張る
436 :
435 :2013/03/10(日) 14:45:39.52
ちなみにWindows PC上で、自分のWebアプリが動くかどうかテストしたいだけなら 無理にApacheを使う必要はあんまりない
なるほど、Windowsなんですが、新しいパソコンを買うまでは厳しいです ApacheはあきらめてThinを使います なぜかWindowsだとThin以外のサーバは動かなくて導入が難しいのでこれで作って生きたいと思います
438 :
デフォルトの名無しさん :2013/03/10(日) 16:22:49.03
677:デフォルトの名無しさん :2013/03/10(日) 00:51:40.81 [sage] LLでWEBならPHPを覚えとけばいいんだよ RubyとかPythonとかPerlなんてやめとけよ 678:デフォルトの名無しさん :2013/03/10(日) 01:13:32.81 [sage] そうそうPHPはWeb用では最も完成された言語 他は糞
Rubyを使う場合ってどういうレンタルサーバを利用するんですか? railsってcgiじゃないですよね?
>>439 頑張ればcgiでも動く。遅いけど。
自鯖かVPSなら問題ないだろ。
Railsに関するいろいろなライブラリのインストールや設定変更は通常コマンドラインから行う なんで ・ コマンドラインがユーザーに解放されている ・ Rubyがインストールされているか、上記コマンドラインからインストールが可能である が最低限 んで、前にもあったけどふつうにRailsにページ表示させると遅くてどうにもならないので、普通はmod_railsのようなものを使う これは普通のサーバには入ってないので ・ Webサーバにmod_rails(Passenger)がインストールされ起動しているか、自前で設定可能 を推奨 だもんだから、いわゆるCGIレンタルサーバだと動作しない 1鯖30人程度のプレミアムなレンタルサーバか、それ未満のいわゆる専用サーバが適任 つまり、全部込みで借りるとわりとお高い ふつうはサーバ本体は家や部署に置いて回線と名前だけ買う
さくらでRuby使ったときはcronで静的ページ生成しまくる手で凌いだというか、それで用が足りたので借りた Rubyはメンテナンススクリプトの役目 データを動的にブラウザにだぱあしたければPHP使えばいいのさ
なるほど、ということは100円とか300円で借りられるようなレンタルサーバは無理ですね 公開目的なので専用サーバは高いのでVPSになっちゃいますね VPSか・・・・・ Rubyを使う場合はレンタルサーバの選択肢が狭いのはなんででしょうか
Rubyはユーザーが使いやすいような書き方や動作を重視した結果、スクリプトが使用するメモリやCPUは「ふつう」のスクリプト言語よりも増えた これは普通トレードオフであって、なにかエピックでグレートなパラダイムが生まれない限り両立は不可能(量子コンピュータ?) まあ、つまり、Rubyに対応しても儲からないんよ Perl使わせれば30人賄えるサーバであってもRuby可にすると15人くらいでレッドゾーン突入 サーバあたりの収入が半分になってしまうのならRubyなんてやんねえバーカバーカ、という経営判断はあり
445 :
デフォルトの名無しさん :2013/03/12(火) 00:31:07.89
>>444 単にセキュリティの問題じゃないの。別プロセスで動くcgiと違って、passegerとかは複数ユーザでメモリとか共有された気がする。
だったらRubyをCGIで提供すればよろしがな CGIですら提供されてないとしたらそれはRuby本体が引き起こす問題 これでも一時期に比べたら増えたんだよRuby可能サーバ
これってPythonにも言える話ですか?
django にも mod_python, mod_wsgi, django.cgi がある
sinatraの質問コーナーもここでいいですか?
WebProgのほうが回答もらえるかもしれないけど、ひょっとしたら誰か使ってるかもしれないので駄目もとでどうぞ 知見を元に質問しなおせば誰もマルチだとか言わんので
入門書をきっちり読んだのでごく基礎的な文法のみなら覚えられたと思うのですが これからいろいろ手を出して作ってみたいと考えるにあたり rubyでこんなことができるよ・こんな用途があるよ的な事をサンプルと共に解説してくれるような本などありましたら 教えて頂きたく思います
現時点で作りたいものがないならひとまずRubyは忘れて他のことしなさい 必要になったら戻ってくるといい
>>452 ・ソケット使ってコンソールチャット
・スクレイピング
・ニコ生でコメント取得
・RSSリーダー
>>447 さくらの300円コースはrubyをCGIで提供してたはず。
というか需要が少ないのだろう。何かを公開したいという人でも、お前のようにcgiが何かわかってないどころか、webデザイナーにも及ばない程度の人が大多数だ。そういう人にはhtmlの拡張というイメージのphpの敷居が低いのだろう。
>>453 に一票
プログラミングなんて目的にするもんじゃない
ニートじゃあるまいし
Rubyの文法覚えて次何するかわからないって人は ソフトバンククリエイティブの 「作りながら学ぶRuby入門 第2版」 が良いんじゃないかな。 amazonで初版の中身少し見ることできるから見てみたらいい。 地方の本屋じゃあんまり見かけないけどね
>>456 プログラミングを目的に出来ないような人は、プログラミングをしない方がいいよ。
プログラミングが目的になるのは趣味の奴だけ
プログラミングはただの手段であって道具 それを磨くことは大いに有用だが、それが目的になってはいけない 作りたいもの(または、作らなければならないもの)がないのならプログラミングなんて忘れて他のことに人生を使え ム板には(時々マ板にすら)無職のニートさんや引きこもりさんがいて、プログラミングに"賭け"ている自分を否定されると発狂する人がいる それは資格取得の勉強に似ていて、資格を取るための参考書を買い漁る行為にも似ている 勉強そのものにはなんの意味もないし、おそらくはその先の資格のようなものにもあんまり意味はないのだが
462 :
デフォルトの名無しさん :2013/03/13(水) 12:11:15.97
世の中には 手段の為ならば目的を選ばないという様な どうしようもない連中も確実に存在するのだ つまりは とどのつまりは 我々のような
そもそもこの業界が変なんだよ 命に関わる(あるいはそれに順ずる)プログラムもあるのに 開発するのに資格も免許もなんもいらん 人数水増し土方集めりゃいいと思ってる 最低免許がないと売り物開発出来ないようにするのがいい
>>461 浅はかだねえ。
何でも頭だけで分かった気になって、好きな事に情熱を傾ける事すら出来ないんだね。
実に哀れな人だ。
プログラミングを手段として完全に使いこなせるようになったら
もう一度その言葉の意味を考えてみなよ。
自分の使う道具を使いこなせない、いや愛せない一流のクリエイターがいると思うかい?
日本刀買ったからって試し斬りの相手を探すような行為は避けたいね 解説一通り読んでそれとなく動作と傾向を理解して、それでなお、作れそうなものや作りたいものが思いつかないんなら、 きっと今のあなたにはプログラミングは不要なのだ たとえ趣味にしたいのだとしてもそのまま強制で続けるのはたぶん苦行だろうし、一旦Rubyから離れて別なことするといいぞ 「これちょっと困ったorこんなことしたいけど、これってもしかしたらRuby使ってプログラム作れば解決できそうかも」 と思うことができたらそのとき帰ってくればいい Rubyとわたしたちはいつだってあなたを歓迎しよう(※バージョンアップによる記述非互換を除く)
プログラミングは、たのしい 炊事をしてるときも、お風呂にはいってるときも、道をあるいてるときも アイデアがうかびます
日本刀なんてまず買わないしなあ もうちょっと一般的に例えると包丁を買ってから切るものを探す? まあそーゆー人も居るかもね でも普通は料理する為に包丁を買うよね どんな料理が作れるようになるかは勉強次第だよね
アーミーナイフ(Army Knife ) - Wikipedia
def f; yield; end 10.times { |x| f { puts x break if x > 5 … @ } } @で times のループを break しようとしたのですが、 うまくいきません。どうすればよいのでしょうか?
fのブロックの処理で、times を break する場合には、どうすればいいのでしょうか?
475 :
デフォルトの名無しさん :2013/03/14(木) 00:40:47.20
catch and throw を使うか、require 'continuation' して callcc を使う。
webrickが本番で使ったらいけない理由って何ですか?
require 'tk' button = TkButton.new { text "Hoge"; command->{puts "Foo"}; pack } Tk.mainloop この TkButton.new に与えたブロックはどうやって処理されているのか教えてください pry(main)> show-method TkButton#initialize でRubyソースを見ても &block のような引数も yield文 も見あたりません。 最終的には instance_eval 辺りが評価してると思うんですが、どうやってブロックを引き渡しているのか分かりません。
tkutil.cのtk_s_newでinstance_evalしてるのがそうじゃない?
>>478 ありがとうございます。
これっぽいですね。そういえば initialize は new そのものじゃなかったんでしたね。
tk_s_new(argc, argv, klass)
int argc;
VALUE *argv;
VALUE klass;
{
VALUE obj = rb_class_new_instance(argc, argv, klass);
if (rb_block_given_p()) rb_obj_instance_eval(0, 0, obj);
return obj;
}
ちなみにどうやって調べました? こちらの環境(Macport Ruby20) では
show-method TkButton.new
とやってもCのソースは出てきません
トップレベルでfoo関数、bar関数を定義した時に、foo関数の引数としてbar関数を渡すには どのような記法をすれば良いのでしょうか? def foo (fn) fn.call(1) end def bar (x) 1 + x end irb> foo(bar) ではbarが関数呼び出しと解釈されてしまいました。 barという名前から関数実体を引き出すイディオムは無いのでしょうか?
foo {|x| bar(x)} で、許してもらえませんか?
>>481 を動かすには、
def foo(&fn)
とする必要があるっす
def foo (fnsymbol) send(fnsymbol, 1) end foo( :bar ) とか?
>>480 方法はいくつかある
・method(:bar)を渡す
意味合い的には一番近いが案外面倒くさい
・:barを渡す
fooを呼んだスコープでのbarというより、fooが所属しているオブジェクトのbarを呼ぶ意味合いが強い
・barをprocやlambdaとして生成
barをそもそもデータとして取り回す前提があるならこれ
・ブロックにくるんで渡し、foo側がそれを呼ぶ
俺ならこれ。引数として渡す関数がひとつでいいなら文法的にもサポートあるし。
485 :
480 :2013/03/14(木) 23:27:10.21
>>481 ,483,484
いろいろな方法があるのですね!
foo(method(:bar))が一番しっくりきました。
皆様レスありがとうございました。
だんだんmethodって書くのめんどくさくなってくるに100ペリカ
たったの10円かよ
rubyでカプセル化はあんまり書かないですか?書いてもムダですか?
Rubyは放っておいてもかなりカプセル化をやらかす どっちかというとカプセル化を破るコードを書く人が多い attr_accessorとかpublicとか
ruby test.rb などスクリプトを実行しようとするとロードエラーが発生します。 エラーメッセージは実行ごとに毎回微妙に違っていて、 下のようにファイル名部分が文字化けしているようです。 ファイル名(スクリプト本文も)に日本語は使っていないのですが、何が原因なんでしょうか? 環境は CentOS 6.3, ruby 1.9.3p194 です。 ruby: No such file or directory -- (LoadError) ruby: No such file or directory -- (LoadError) ruby: No such file or directory -- LoadError) ruby: No such file or directory -- k (LoadError) ruby: No such file or directory -- oadError) ruby: No such file or directory -- LoadError) ruby: No such file or directory -- (LoadError)
491 :
デフォルトの名無しさん :2013/03/17(日) 12:47:01.22
>>490 RubyなんかさっさとやめてPHPにしろ
そうすればそんな無駄な時間を使うこともない
>>492 puts 'a'
だけです。
というか、コーディングしてて動かしたら全然動かないので、原因探るうちに実は何も実行できなくなっていました
特に環境いじった覚えもないんですけどね・・・
>>490 LoadErrorならまともに動かんと思うので、ファイルを複製して半分ずつ削っていって原因解明
後半を機械的に削ってみて同じエラーならまた半分削ってみる
1とだけ書いたスクリプトを実行してLoadErrorなら、Rubyコアライブラリファイルのどこかが破損している HDDか物理メモリのどこかがまずいのかもしれない
>>495 >1とだけ書いたスクリプトを実行してLoadErrorなら
LoadErrorになりました。
スクリプト指定せずにrubyだけでエンター押してもLoadErrorになることが判明したので
rubyを再インスコしたところ解決しました。
レス頂いたみなさんありがとうございました。
なんでぶっ壊れたんだろ・・・
とりあえず --disable-gems -v -d とかオプション付けてみて
>1とだけ書いたスクリプトを実行して こんなところにも perl のしっぽが
rubyインタプリタにうまいこと引数が渡ってなかったようにも見える シェルがおかしかったんじゃないか
別に0でもいいし""でもいいしPHPでもいいぞ
501 :
デフォルトの名無しさん :2013/03/17(日) 16:17:04.77
ああ、requireされるファイルの最後に真を返さにゃならんので、 1; と書くんだったな。
いま流行りのソーシャルゲームが腐るほどありますが こういうところのバックエンドはRubyが使われているものですか? PHPとRubyどっちが多いですかね?
前も同じ質問があった 答も同じ 「裏方データメンテ等に使われているかもしれませんが見えないのでわかりません、 ちなみにRubyができるからといってWebゲーム業界に就職できるというようなことは絶対にありえません」
ぱっと思いつくSAPだと、ドリコムが全面Ruby採用だったはず 他にも例はいくらでもあるだろうけど、 もちろんどんな企業でも完全にRubyしか使ってないなんて事はまず無いだろう
>ちなみにRubyができるからといってWebゲーム業界に就職できるというようなことは絶対にありえません 要旨としては「Rubyを勉強すればゲーム業界で働けますか!?」だろうしな はっきり言ってあげたほうが親切
誇り高い我々ルビィストが悪のガチャゲー開発なんかに加担するとでも思ったのかね いくら札束積まれてもお断りだ
>>505 PHPとFlash(「か」じゃなくて「と」)ができてPhotoshopが使えれば及第点だよね
Rubyなんていろんな意味で誰でもできるんだから就職のメリットにはならん
業務で使うなら入社してから1ヶ月なりなんなりで覚えればそれでいいわけで
Rubyを1ヶ月で、か。それなりには覚えられるだろうけどね。それなりには。 誰でもできるとかナメたことをよく言うよな。
できるにもピンキリあるからね
>>508 それなりで充分
既存の社内Rubyスクリプトを使えれば問題ない
コア作成は社内のエンジニアが行う
業務を知らない新入社員の仕事ではない
だからこそ「他のスキルを持ってることが重要」なわけよね Rubyだけできても…という
何のスキルを持っているとよいでしょうか?
新卒新入社員なら体力と文書作成能力と発言伝言スキルがあれば問題なかろう、つまり普通の企業に同じ 新卒でネトゲ会社なんて自殺する気かって感じだけど 既卒やバイトならPHPとJavaScriptとFlashとなにかオーサリングツール(フォトショ、イラレ等)の経験があればいいんじゃね あとは適宜実際に見ていってどんなことまでやれそうかで決めるってことで いっそなくてもなんとかなる 面接でRubyならできますって言うってことはその会社の業務ぜんぜん調べてませんと高らかに宣言するのに近い、分の悪い博打
514 :
デフォルトの名無しさん :2013/03/17(日) 21:57:24.52
ソシャゲのバックエンドはscalaとかも結構あると聞いた。
515 :
デフォルトの名無しさん :2013/03/17(日) 21:59:12.83
>>511 Rubyやる人は、他の言語も一通りこなせた上で、普段使いの
なじんだ道具としてRubyを選んでいる人が多い印象。
5年くらい前まではこう思ってたんだけどね…
516 :
デフォルトの名無しさん :2013/03/17(日) 22:04:51.47 BE:1840980637-2BP(0)
本格的にプログラミング言語学びたいんだけど何から学ぶのが進めなの? 簡単なのを先に学んでおけば,他の言語も吸収しやすくなると思うんだけど。どうかな? もしかして,それぞれの言語は全く別物だったりして… 優しい人教えて!
>>516 言語がたくさんあるのには意味があって、あなたがなににプログラミング言語が必要なのかによる。
>>513 ソフトウェアハウスなら業務内容は案件ごとに違うから技術売るけどね。
ソシャゲは大量の単純な応答を規定時間内に安定して捌くのが重要とかで、 Node.js使ってるとこもあるらしい
nodejs業務で使えるレベルか?
>>516 お察しの通り全く違う概念の言語もあれば
書き方や目的が違うだけで考え方が似てる言語もある
んで今のところ主流は「手続き型」で「オブジェクト志向」を取り入れた言語だと思う
Java、C#とかね、他にも色々ある…というか
「関数型」とか「論理型」みたいな断り書きがなければ
大半が手続き型だからテキトーにプログラミング言語探せば手続き型は見つかる
オブジェクト志向は手続き型を覚えてからでも遅くないが
初めからオブジェクト志向も備えてる言語のほうが
後でオブジェクト志向部分を覚えるのが楽かもな
ちなみにRubyも手続き型でオブジェクト志向の言語だから
Rubyから学んでも構わないが、ちと入門書が少なめな感じはするかな
いちいちURLを短縮するなカス
>>516 理想的には、目的ーー>計算モデルーー>使用言語決めがいいんだけど、最初から独力では難しいと思う。
上記3ステップ中、計算モデルはCTMCP(コンピュータプログラミングの概念・技法・モデル)という本で学習出来るが
これも慣れがいるので、モデルが判っている人に目的(ツール作り、就活、趣味など)を伝えるのがいい。
最も、モデルが判っている人を探すのが難関か。
>>516 Light Weight Languageと呼ばれる軽量言語(≒簡単な言語)を最初に覚えておくと
プログラミングの感覚と楽しさを早く掴めるのでいいと思う。俺もLLから入った。
テキスト処理から、exeのwindowアプリケーションまでこなす流行りのオールラウンダー: C#
お手軽LL言語: Ruby、Python、Perl
オススメの相談回答なら適切なスレを探してそちらでお願いします
ruby をソースから make, make install して、 make uninstall しようとしたら怒られた(´・ω・`)
Rubyで夏時間のある国のタイムゾーンを指定して時刻を表示するっていうのは標準機能でできないですか? gemでそういうのありませんか?
528 :
デフォルトの名無しさん :2013/03/18(月) 23:48:51.47
Timecopってあるじゃないですか これ使う意味ってあるんでしょうか?
Timpocoに見えた・・・
rubygemのサイトっていうのはgithubみたいな感じでなんでも登録して大丈夫でしょうか? それとも審査に通ったものしかダメでしょうか? hello worldを表示するgemを登録してダウンロードできるか確認したいんですが
誰であげられるよ だからテストもろくに書いてないクソモジュールが氾濫してる
むしろ上げたものの削除がめんどくさい ほぼ永遠に残るぞ
RubyってMRIって用語があるよね? Matzなんとかってやつ。 この前コンピューター関連の記事見つけてMRIと機械が〜みたいな英語の記事だったんだけど、開いて見たら医療で使われるMRIと機械についての話だった。 MatzがMRIって最初に名前つける時にあの医療でのMRIの存在しって他はずだよね?面白いと思っても付けたのかなMatzは。 結果はどうだい? 読み手の思考回路を混乱させるミスリードを誘うきっかけを作ってるわけRuby作者は。こんな良い加減なやつが作ったプログラミング言語なんて信頼できないね。 クリスチャンは良く自分がキリストとか救世主の生まれ変わりだと勘違いして全能感に浸り自分は特別だと思っておかしな行動をする事がある。 Matzも同じ事してるんじゃない? クリスチャンを馬鹿にしてるんじゃなくてMatzの様なやつがクリスチャンを馬鹿にされる様な場面を作るきっかけを与えてるといえる。
その主張はともかくMatzがMRIって名付けたかどうかは激しく怪しい
「原作者の実装」という程度の意味だから、確実に第三者命名だな
>>537 第三者から名付けられたら誤解が生まれるリスクは無視っすかwwww
>MatzがMRIって最初に名前つける時に を否定しただけだろう 前提はすべて崩れた
rubyなんてきもい言語まだ使ってるの? あんなの自分以外の人間は解読できないコード書いてオナニー言語じゃん。 PHPのほうがいいよ。Cやった人なら馴染みやすい。
最近、メタプログラミング使いすぎだな ソース読むとき、instance_evalやらmodule_evalやらが出てくると溜め息しかでない
時代はPHP。Rubyは役目を終えた。
メタプロは知性の証
やりすぎるとLispのマクロを返すマクロみたいに 人智を超えた何かになる
ubuntu10.04環境でruby-2.0.0p0を./configure && make && sudo paco -lD "make install" で入れたのですが $ gem list --remote で数分待っても一覧が得られません --debug 付きにすると例外が出ているようです $ gem list --remote --debug *** REMOTE GEMS *** Exception `Errno::EEXIST' at /usr/local/lib/ruby/2.0.0/fileutils.rb:323 - File exists - /home/xxxx/.gem/specs/rubygems.org%80 Exception `Errno::EAGAIN' at /usr/local/lib/ruby/2.0.0/net/protocol.rb:153 - Resource temporarily unavailable - read would block Exception `Errno::EAGAIN' at /usr/local/lib/ruby/2.0.0/net/protocol.rb:153 - Resource temporarily unavailable - read would block Exception `Errno::EAGAIN' at /usr/local/lib/ruby/2.0.0/net/protocol.rb:153 - Resource temporarily unavailable - read would block Exception `Errno::EAGAIN' at /usr/local/lib/ruby/2.0.0/net/protocol.rb:153 - Resource temporarily unavailable - read would block 以下延々と 原因及び対処方法を教えて下さい
547 :
デフォルトの名無しさん :2013/03/20(水) 11:35:03.91
記号を配列に入れる楽な方法ありますか?
そんな説明で伝わると思うような奴にとっての「楽な方法」は無いな
例えば["+", "-", "*", "/"]をもっと楽に書きたいのだったら %w[+ - * /] でオッケー
こういうの a..z こんな感じの
こうゆうことか? Array('a'..'z')
それの記号版ってことか分かんね
そう、それの記号版
1バイトで表示可能なコードすべて(数字、アルファベット含む) (0..255).map{|n|n.chr}.select{|c|/[[:print:]]/===c}
('a'..'q').map(&:to_sym) とか?
(" ".."~").select {|c| c =~ /\W/ }
558 :
デフォルトの名無しさん :2013/03/20(水) 21:30:06.25
ほしい記号丸ごと文字列にしておいてcharsなりsplit(//)なりでいいんじゃねーの。
きめー、きめー、Rubyきめーよ
例えばこういうのとか? (Ruby1.9以降で動作) ("\x00".."\x7f").grep(/[[:print:]]/).grep(/[^[:alnum:]]/) ASCIIコード(0x00〜0x7f)から印字可能かつ英数字以外の文字を拾う Ruby1.8 の場合は、数文字とアルファベット並びの間に分断があるようでうまくいかない・・・ >> ("0".."z").to_a ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
561 :
デフォルトの名無しさん :2013/03/20(水) 21:52:21.35
"9".succ #=> "10" だからどっちも "9" で止まりそうなものだが、 なんで1.9ではまで進むのだろう。 Rangeの作りが違う?
[*?\s..?~] - [*?0..?9, *?A..?Z, *?a..?z]
perlより汚いな
たのしいRubyのp128、特別な変数selfの説明がわからないのですが、教えてください。よろしくお願いいたします。
おれもわからんから、心配ない。selfなんかつかわない
selfはふつうは変数だと意識する機会はないはず 「インスタンスメソッド定義内で自分のクラスのクラスメソッドを呼ぶときにself.をつけて呼ぶ」という認識程度 class C def my_class_method; ... end def hoge self.my_class_method ... ただし、本質的には変数なので、selfという名前のローカル変数を自力でつけた場合には衝突する class C def my_class_method; ... end def hoge ... self = somedata ... self.my_class_method とした場合には、クラスCのクラスメソッドmy_class_methodではなくsomedataの戻り値オブジェクトのインスタンスメソッドmy_class_methodが呼ばれる たぶんsomedataはそんなメソッドは持ってないはずなのでエラーになってナニコレという話になる 読んでないけど、たぶんそんなことが書いてあるはず selfというローカル変数は作らないほうがいいよね、みたいな話のはずだ
567 :
デフォルトの名無しさん :2013/03/21(木) 18:27:14.26
railsを使っているのですが、ハッシュにおけるコロンとダブルコーテーションの違いについて教えてください 例えばsession[:user][:id]とsession["user"]["id"]とでなにが異なるのですか?
REPLにて irb> hoge とした時に ズラ〜 とhogeオブジェクトの表示用の文字列が表示されるのですが、 これはなんという関数が実行されているのでしょうか? to_sではないようでした。
Hashクラスは「あるキーを用いてデータを格納し、同じキーを指定してデータを取り出す」という構造の提供が役目
h = {} # つくる
h['k1'] = 'v1' # いれる
p h['k1'] # だす
格納に使うキーのことはkey、出し入れするデータのことはvalueと呼ぶのが通例
んで、このkeyは実は文字列である必要はなく、「出すときまで不変」であるならなんでもよい
h['k1'] = 'v1' # 文字列
h[:s1] = 'v2' # シンボル
h[3] = 'v3' # 数字、紛らわしくて怒られる例
ということで、session[:user] はHashのkeyをシンボルオブジェクト:userにしたものでしかない
シンボルオブジェクトは(通例)コロンで始める文字で作成し、「ひとつしかないもの」を示すのによく使われる
sessionというHash構造のkeyに:userというシンボルデータを使うのだとしたら、おそらくそのsessionにはユーザーという"欄"がひとつしかありえないのだろう
最初はよくわかんないと思うので、無理して自分からシンボルを使う必要はない。書いてあるのを見てわかれば充分
>>568 ふつうはその(戻り値)オブジェクトのインスタンスメソッドinspectがirbによって勝手に呼ばれて表示されている(irbがやってる)
Rubyには一般的に関数と呼ばれるものがなくてメソッドだけなので、関数と言ったらこいつなにも理解してないって煽られて馬鹿にされるぞ
h['k1'] = 'v1' で入れたものを h[:k1] で参照するとどうなりますか? 逆に h[:s1] = 'w1' で入れたものを h['s1'] で参照するとどうなりますか?
どっちかってと 「いまどきRubyのメソッドのことを関数と呼ぶような解説にぶち当たるなんてお可哀想に…」 みたいな憐みの目で見られるようかん どっかの誰かが公式に関数やメソッドやサブルーチンを機能分類してるわけじゃないけど、 すくなくともRubyではメソッドという名前なんで、それに倣ってメソッドと呼ぶのがやっぱ妥当
>>570 別にどうにもならない
シンボルと文字列は別物で、Hashオブジェクトではまったく特別扱いされない
つまり単に別のキーを指定したとみなされる
ただし、なにかのメソッドの引数内で key1:val1 のように書いた場合は、
key1 はシンボルオブジェクト :key1 と、val1 は文字列 'val1' と解釈されて、 {:key1 => 'val1'} というHashだとみなされる
でもこれHashの機能じゃないからやっぱ気にしなくてもいい
誹謗中傷は本人の鏡って精神科医が良く言うけど本当らしいとここ見て判った
>>569 大変丁寧に教えていただきありがとうございます
>>569 なるほどinspectメソッドが呼ばれていたのですね!
呼び方にも気をつけますね。
ありがとうございました。
576 :
デフォルトの名無しさん :2013/03/21(木) 20:51:34.36
Railsに関しては、文字列とシンボルを同一視する(シンボルが与え られたら裏で文字列に変換している) HashWIthIndifferentAccess と いう曲者がいるので、ハッシュのキーについての理解が初心者には 難しくなっていると思う。
自分自身にメッセージを送るためにselfなのですね。ありがとうございます。
Rubyのことが全く分かっておらず、何をどうググれば良いのかも分からず質問させていただきます。 d.hatena.ne.jp/sugyan/20130227/1361896809 のを動かすにはなにをどうすればよいのでしょうか? 環境はMac10.8でXcodeインストール済み, また、Rubyが使えるレンタルサーバーも契約しております。
>>579 > Rubyのことが全く分かっておらず、
> 何をどうググれば良いのかも分からず質問させていただきます。
それは、ググり方が無力だということにすぎません。
まぁ、"Ruby インストール" で Ruby の使い方を勉強して、
"github" で github の使い方を勉強して、
"Gemfile" で、gem に関することを勉強すれば、
どうにかなると思いますけどw
ということで、ググり方が甘いですw
以上。
selfはコンテキストによって指してるものが違うから、どこで書いてるかを意識すればよい クラス式内に書けば、自分のクラスオブジェクトを指すし、メソッド式内に書けば実行時のレシーバーを指す まあややこしいよ
初心者にはCoffeeScript薦めるよ
pgr
るびいって何ができるの?
なんでもできる
いくぞー!!
ワン・ツー・スリー・フォー! アイウォンチュ〜
洗練されすぎた言語は滅びる 時間をかけるしか能のない馬鹿が威張れないからだ
>>589 rubyとandroidが無いではないか
言語っつってんのにandroidは無いだろ・・・。
すんません、教えてください。phpからの乗り換えです。 溜まった動画ファイルを全部サムネイル作成してかぶっているものを削除するというものをCUIで作ってみてrubyに感動しました。 もうphpに戻ることはなさそうだ、と今まで作って来たwebアプリをrubyへ移植しようとして壁にぶつかっています。
>>592 続き
railsのような大掛かりなフレームワークは初学の妨げになりそうなので
できるだけ素のrubyでwebアプリを作っていきたいと考えています。
apacheのモジュールが見つからなかったため、とりあえずpassengerを入れ、
sinatra上で動かしてみましたが、楽ですが全然素のrubyではないです。
そこで質問なんですが、
phpでいうところのmod_phpのみapacheに追加して後は何のフレームワークも使わず自力で書いていく、というスタイルを
rubyに置き換えるとどのような実行環境になるのでしょうか? 2.0です。
['a'..'z'] で配列にアルファベットが入らなくて Array('a'..'z') って書かないといけないのは何故ですか?
>>593 mod_php的なものを追加する時点で素のrubyではなくなるよ。
素のrubyがいいならcgiとして書くことになるんじゃないかなぁ。
a = [1,2,3] p a.include?(2.0) これがtrueになるのは何故ですか?
Net::HTTPクラスというのはクラスメソッドのことでしょうか。 たとえばArray#[]はインスタンスメソッドのことのように、Net::HTTPも何か特別な表記法なのでしょうか。 教えてください。よろしくお願い致します。
::は単なるネームスペースでRubyの構文の一部 クラスメソッドとは関係ない
602 :
デフォルトの名無しさん :2013/03/24(日) 15:22:12.76
確かにRubyでは定数のネストの区切りにもクラスメソッドも::を使うけど、 C++ ユーザーが親しみのあるstaticメンバー関数を呼び出す クラス::メンバー関数 と同じ記法でRubyでもクラスメソッドが呼べるようにしてあるだけ。 Ruby的にはクラスメソッド=クラスインスタンスの特異メソッドに過ぎない ので、普通のインスタンスメソッドと同様 . で呼ぶのが本来。
>>596 irb(main):002:0> 2 == 2.0
=> true
2と2.0って型としては違いますが何で松本はこういう仕様にしたんですか?
嫌なら Numeric#equal? で比較すればいい。
608 :
デフォルトの名無しさん :2013/03/24(日) 17:09:25.47
リッチーにも聞くといいよ。 #include <stdio.h> main() { printf("%d¥n", 2.0 == 2); }
>>605 むしろそこでfalseにする言語はほとんど無いはず
型を含めて同値性を比較するのは、Common Lispとかにはあった気がするが
あまり一般的だとは言えないだろう
そもそもという話であれば、浮動小数点数を=で比較する局面が
どれぐらいあるのか疑問
610 :
デフォルトの名無しさん :2013/03/24(日) 17:20:07.80
>>594 Rangeインスタンス1つからなる配列を作っておいて
アルファベットが入っていないと文句を言っているということでよろしいか。
[ *'a'..'z' ]
('a'..'z').to_a
Rangeは「叩くと次のが計算されて出てくる軽容量オブジェクト」が売りなので(語弊70%)、 Rangeで済むならRangeのままでよいというか、結構な割合でRangeのまま行ける ('a'..'z').each{|s| p s} p ('a'..'z').map{|s| s.capitalize} 配列にしなければならないことはそう多くないはず
612 :
デフォルトの名無しさん :2013/03/25(月) 09:10:20.43
>>595 ,597,598,603
いろいろありがとうございます。
とりあえずcgiでhelloworld動いたんでfastcgi入れてみようとして1日はまりました。
なんとかfcgiでもhelloworld表示できたのですが、
これってソース書き換える度にapache restartしなきゃ更新されないのですか。
あとrubyのfcgiライブラリに関する情報がほぼゼロでかなりきついです。
phpでいう$_SERVERのようなリクエストに関するものが簡単に取れると思っていたので
そこからphpの$_GET, $_POSTのようなものを作り、
自分でsinatraのようなルーティングを作ろうと思っていたのですが、ぜんぜんそこまで行けません。
fastcgi断念しそうです。
rubyでrailsが流行った理由が判ったわ 他が糞すぎたんだな
判ったと宣言する心境に至ってその程度の感想しか言えんのか 脳味噌に糞でも詰まってんのか
CGIなんて完全に廃れた技術だから今からやる意味なんて無い Rack勉強したほうがいい
>>614 これいつものだから反応してやる必要はない
617 :
デフォルトの名無しさん :2013/03/25(月) 19:54:32.41
>>615 Rackにしました。環境変数が簡単に取れるし、まさにこれでした。
webrickで起動するのが嫌だったのでpassengerを入れapache上で動きました。
ただ問題はリロードです。
皆さん開発中はどうやってソースを再読み込みさせてるんですか?
今のところapache restartするか、tmp/restart.txtをtouchする方法しかありません。
ぐぐっても「touchするだけでOK、カンタン!」なんて書かれてありますが、そのtouchが面倒です。
php ソース修正→ブラウザリロード
ruby ソース修正→touch restart.txt→ブラウザリロード で一手間増えてしまいます。
always_restart.txtを置けばいいということも書かれてあったのですが、同じくrestartされません。
ruby2.0、rack1.5.2、passenger4.0.0.rc5、です。
わかる方教えてください。お願いします。phpに戻りたくありません。
>>617 railsしか使ってないが、デベロップメントモードでwebrickを起動させればオートリロードしてくれるよ
lst = ["taro" 100 "hanako" 200 "jiro" 100 23478 200]の時に [100, 3838, 120, 200]の配列を得るにはどう書くのがruby風でしょうか? lst.select{|name,value| value} で出来たらかっこいいなぁと思ったのですができませんでした。 (本当に欲しいのは100 + 3838 + 120 + 200の値なのですが。)
すみません、試したのはlst.map{|name,value| value}でした。
def group (lst, n) rec = lambda { |lst, acc| rest = lst[n..-1] (rest == [] || rest == nil)? acc + [lst] : rec.call(rest, acc + [lst.slice(0,n)]) } rec.call(lst, []) end lst = ["taro", 100, "hanako", 200, "jiro", 100, 23478, 200] group(lst, 2).reduce(0){|sum,x| sum + x[1]} #=> 600 一旦それぞれの組みを配列にしたらうまくいきましたw
>>619 irb> ["taro",100,"hanako",200,"jiro",100,23478,200].each_slice(2).map{|a| a[1]}.inject(0){|r,x| r+=x}
=> 600
配列に真偽値を入れておいて a = [true,false,true] 要素全てが真の時だけ処理したい時に 論理演算子を全部の要素に適用させて簡単に処理する方法ってありますか?
Ruby風つったらこんな感じじゃねーの lst = ["taro", 100, "hanako", 200, "jiro", 100, 23478, 200] result = 0 flag = false for x in lst do if (flag) result += x flag = false else flag = true end end result #=> 600
>>623 やりたいことがわからない サンプルを書いてくれ
626 :
デフォルトの名無しさん :2013/03/25(月) 20:50:29.65
>>623 「aの要素が全部trueだったら」という条件を書きたい。
では a[0] && a[1] && ... をうまいこと書く方法はないか
という質問?
ぶっちゃけ a.all? でいいんだけど、意図そのまま書くなら
a.reduce{|result,e| result && e}
だろうか。
>>623 10.times do
actions = [rand(2), rand(2), rand(2)]
puts "#{if actions.all?{|result| result.zero?} then 'ALL 0!' else 'failure' end}"
end
628 :
623 :2013/03/25(月) 20:59:55.06
>>624-627 レスありがとうございます。
>>626 all?というメソッドがあったんですね、
まさにこれがしたかったんです、ありがとうございました。
[true, true, true, true, true].inject(:&) ==> true [true, true, true, false, true].inject(:&) ==> false この方が分かり易くない?
630 :
デフォルトの名無しさん :2013/03/25(月) 21:09:40.09
最初は a.reduce(:&&) とか a.reduce(&:&&) とかもできるんじゃないかと 思ったけど、論理演算子はメソッドじゃないから無理だった。
631 :
デフォルトの名無しさん :2013/03/25(月) 21:10:29.62
&ひとつの & はビット演算だからものによってはまずい気がする。 0とか。
でも true/false の場合「ビット演算子」なんかではなくちゃんとしたインスタンスメソッドなんだなこれが 効果は && と同じ だから true.&(true) とか書けちゃう >>TrueClass >>Public Instance Methods >> true & obj → true or false >> And―Returns false if obj is nil or false, true otherwise.
Ruby は true というオブジェクトが返ってくるかどうかの保証が薄いから
634 :
デフォルトの名無しさん :2013/03/25(月) 21:20:38.03
TrueClass#&とFalseClass#&が再定義されているから、 要素が true と false しかないことが保証されているなら大丈夫そう。
>>633 has_foo? みたいなメソッドで真のときに Foo オブジェクトをそのまま返すのだけはやめてほしい
たのしいRubyのp.160 def copy(from, to) src = open(from) #このファイルが開けなかったら begin dst = open(to, "w") data = src.read dst.write(data) dat.close ensure src.close end end コメントに書いた、fromファイルが開けなかった場合、ensure節のsrc.closeは実行されるのでしょうか。 本を読む限り、実行されるようなのですが、begin~endで囲まれてなくても実行されるのでしょうか。
begin〜ensure〜endが存在する場合、beginの前に起こった例外は捕捉されません def内部でbeginとendを書かずにensureだけ書いた場合、捕捉範囲はdef全体になるので、fromのopenに失敗してもしなくてもensureが最後に実行されます def foo ensure puts "foo" end def bar puts "1!" raise ensure puts "ensure!" end foo; bar #=> foo 1! ensure! RuntimeError: openに失敗していたときはsrcと名付けられたIOオブジェクトはensure部分で存在していないので、open失敗に関する例外よりも先にnilに対するNoMethodErrorが出ます > in `ensure in foo': undefined method `close' for nil:NilClass (NoMethodError) というか、openに失敗したときはIOオブジェクトが作成されないので、openできなかったIOのcloseのことを心配する必要はありません
ありがとうございます 違う本探してみよう思います
>>617 俺はSinatraを通してSinatra::Reloaderってのを使ってる
素のRackにもRack::Reloaderってのがあるらしいから
それを使ってみるとどうだろう
(試したことはないので、動くかどうかはわからないが)
> 617 馬鹿には無理
ネットに転がってたコード動かすためにRubyInstallerをインスコしたんだが unable to convert "\x90" from ASCII-8BIT to UTF-8 for ext/RMagick2.so ってエラー吐かれてfileutilsというgemがインスコできない 助けて下さい
>>641 gem install --no-ri --no-doc fileutils は?
うまくいかなければコマンドラインとエラーそのまま貼って
>>642 レス さんくす
C:\Users\PCUser>gem install --no-ri --no-doc fileutils
ERROR: While executing gem ... (OptionParser::InvalidOption)
invalid option: --no-doc
またエラー吐かれました
>>643 ごめーん。--no-rdoc でやってみて
>>646 入れてませんでした
その後もう一度挑戦してみたのですが
You have to install development tools first
と出ました ちなみにdevelopment kitは既にインストールしてあります
development toolsとdevelopment kitは別物なのでしょうか
ImageMagick のヘッダファイルがインストールされてない ImageMagick のインストール時に development headers and libraries に関して聞かれたはずなのでそれ許可して再インストールしろ
>>645 Windows なんかで、Ruby をつかうべきじゃないよ!
class E < Array include Enumerable def each(&b) self.each{|v| if !(Array === v) then p 1 b.call(v) else p 2 v.each(b) end } end end ===> $ irb irb(main):002:0> a = [1,[2,3],4] => [1, [2, 3], 4] irb(main):003:0> a.each(&:p) => [1, [2, 3], 4] 各要素が表示されることを期待したんですが、 そうなりませんでした。どうしたらいいのでしょうか?
651 :
デフォルトの名無しさん :2013/03/27(水) 05:09:40.04
SQLite3から返ってくる文字列をUTF-16LEではなくUTF-8にするにはどのように書けばいいんでしょうか? ひとつひとつ.force_encoding("UTF-8")とするしかないんでしょうか?
>>650 class Eとこの二行には、なんの関係も無いけどその辺は大丈夫?
> a = [1,[2,3],4]
> a.each(&:p)
&:p で要素が表示されないのはこういう感じだから
a.each{|i| i.send(:p) }
「感じ」だからね、この通りじゃないよ
あと、どうしたらいいかは僕にもわかりません
>>651 force_encodingは文字列の持つ文字エンコーディングデータの名称だけを(内容とは無関係に強制的(force)に)書き換える
変換の機能はない
巷で「SQLITE3からの文字列はforce_encodiingしろ」と言われてるのは、単にエンコーディング名称が空っぽで返ってくるからに過ぎない
変換の機能はない
で、一般論として、なにかデータ構造があって、それから文字列を取り出したい場合、
そのデータ構造の取り出しメソッドの作者が気を遣ってくれてない場合はメソッド戻り値文字列に毎回自力でencodeかける必要がある
…executeの戻り値を自動でどうにかしてくれる機能はなさそうだな
自力で毎回String#encodeで変換してくだされ
654 :
デフォルトの名無しさん :2013/03/27(水) 11:45:49.55
Percona Server MySQLを入れてHandlerSocketを有効にした後、 $ gem install handlersocket してHandlerSocketクラスを作成するテストスクリプトを書いて実行したら、 > ruby: symbol lookup error: /root/.rbenv/versions/1.9.3-p374/lib/ruby/gems/1.9.1/gems/handlersocket-0.0.2/lib/handler_socket.so: undefined symbol: _ZN4dena11socket_args3setERKNS_6configE というエラーが出てきます。 解決方法ご存じの方いらしたら助言いただきたいです。 よろしくお願いします!
>>649 Rubyに限らず、ほとんどの開発に向いてないなw
>>654 undefined symbolは誰も解けないと思う
利用するライブラリ(のdevel)が確実に1種類しか呼べない状態で、コンパイルが成功してて、呼び出しに変な記述がなく、
バージョン互換性が保証されてる「完璧」な状況でなおそれが出たなら、バイナリユーザー側からはどうにもならない
というかrootディレクトリにモノ入れるのやめろ
657 :
645 :2013/03/27(水) 15:55:06.79
>>649 同意します 次から次へとエラー吐かれて疲れました
今度はlinuxあたりで挑戦してみて、うまくいかなければ またお世話になるかもしれません
英語読めなくてぐぐる能力ないならOSがなんでも同じ
windowsは最近全然使ってないけど、Rubyも普通に.exeファイルからインストーラ立ちあげてインストールするんでしょ? そんなんでバージョン管理とかどうすんべ
>>658 日本語使ってない人が作ったライブラリに日本語解説がなくて日本語エラーを吐かないという問題は我々にはもうどうしようもないからな
頑張って英語読んでもらうしかねえ
>>659 pik
>>655 WindowserにはVB/VBA/WSH/PowerShellがお似合い
662 :
650 :2013/03/27(水) 18:42:24.70
すいません、v.each(&b)でできました
Rubyのライブラリに標準で添付されているyamlはpythonのpyyamlみたいにyaml公式の使用に追従してますか?
なんだかわかるようなわからないような微妙な表現だけど、libyaml使用以上のものはないよ 強制力はないので、あなたのバージョンのところで動作したYAMLが相手のバージョンのところでも同様に解釈される保証はない
■テスト1 dir = Dir.open('C:/') dir.each {|file| p file } ■テスト2 p dir = Dir.open('C:/Program Files') dir.each {|file| p file } テスト1には . と .. がありません。C:/がトップディレクトリなので .. がないのはわかりますが、 . がないのは何故ですか?
666 :
665 :2013/03/28(木) 22:21:15.61
ついでになんですが . と .. を除外して取得する方法はありませんか?
a = 100 を出力するとき p a + "円" ってやるのと p "#{a}円" PHPの場合はいろんなフレームワークを見ても前者が主流なんですが Rubyの場合はどちらで書くのがいいですか?
Ruby的にはどっちの書き方が気分がいいかという 自分なりの意見を持っていることが重要です
Rubyの+は演算子ではなくメソッドで、a + b は a のクラスのインスタンスメソッド + に引数として b を渡している irb> p 1.+(2) 3 つまり、a + b と書いたとき、オブジェクト a の + メソッドが b というオブジェクトの扱い方を知らなかった場合にはエラーになるし、 b というオブジェクトの扱いにポリシーがあった場合にはそれに沿った(ひょっとしたら意図しない)結果になる irb> p 1 + "2" TypeError: String can't be coerced into Fixnum Rubyの式埋め込み #{} はメソッドを呼んでいて、呼ばれるメソッドは to_s だ (とっさにいい例を思いつかなかったので省略) つまり、 "#{a}" と書いたとき、オブジェクト a の to_s メソッドがうまく定義されてなかったときにはがっかりな表示になる ということで両者は別物だ 最終的に文字列を得たくて、変数のオブジェクトすべてに to_s をしてもらえればそれでいいのなら、式埋め込み #{} を使うのが楽
1.+(2) を 1 + 2 って省略できるってすごいよね。 頭いいな。
詳しい解説ありがとうございました
Ruby業界ではドキュメント生成ツールはRDocが主流でしょうか? phpdocumentorみたいに書きたいのですがRDocに慣れておくべきですか?
条件付きで置き換える場合、 例えば(-3..3)で0以上の時だけ2乗して負はそのまま出力したい場合 num=(-3..3) result = num.select{|x| x>=0 }.map{|x| x**2 } puts result この2行目はもっと短くならないですか?(条件と置き換える値を近くに置きたい) ちなみに、 result = num.map{|x| x**2 if x>=0 } だと負の数を出力してくれませんでした。 else〜は無しでお願いします
>>673 メソッドの引数や戻り値の情報をコメント部分になんとか意味のある書き方で残してマニュアルに反映させたいのならyardoc
>>674 > 0以上の時だけ2乗して負はそのまま出力したい
if x >=0 then x**2 else x end
num.map {|x| x < 0 ? x : x ** 2 } つーか上の例も負の数を出力しないと思うが
677 :
674 :2013/03/29(金) 23:32:07.91
>>676 ありゃ失礼。確かにさっきのも負の数出力しませんでした。
その ? x : の表現は初めて見ました。
できれば条件は反転させたくないけどもともと無理なんかな
if then else がいちばんいいよ 初心者の人ほど変な書き方してあとでわけわからなくなる
679 :
デフォルトの名無しさん :2013/03/29(金) 23:37:52.64
num.map {|x| x >= 0 ? x**2 : x } num.map {|x| if x >= 0 then x**2 else x end }
680 :
デフォルトの名無しさん :2013/03/29(金) 23:38:54.93
>>673 外国勢はrdocを拡張したyardってのを使ってる人が多い気がした。
ary=(-3..3).to_a ary.each_with_index{|x,i|ary[i]=x**2 if x>=0} 長い。。
結果の配列が欲しいだけなら (-3..0).to_a + (1..3).map{|x| x**2} これでもいいね
わかりやすい例を作って提示したら例依存の馬鹿回答が返ってきたでござる
684 :
674 :2013/03/30(土) 00:30:39.50
色々為になります。有難うございました。しばらく勉強しときます
>>678 どっちかっつーとinject厨になりがちな自称中級者ぐらいじゃないか?
>>683 (ASCIIコードで)連番になるのとか、英単語だけとか、数字だけとかを質問の例に使うと逆にめんどくさいことがわかっている
極力バラバラにしておくのが吉
Windowsです require 'readline' while buf = Readline.readline("> ", true) print("-> ", buf, "\n") end こうすると DL is deprecated, please use Fiddle って警告がでます コマンドプロンプトからどうやって文字を入力して取得したらいいですか?
a = Date.new(2012, 1, 1) b = Date.new(2000, 1, 1) p (b - a).to_s これでaとbの日数の差が出ますが こういうのはうるう年なども考慮されてますか?
>>688 考慮されてるかどうか確かめてみたらどうですか?
そんなことは聞いていない
691 :
デフォルトの名無しさん :2013/03/30(土) 12:00:39.76
されてる、というか、内部では暦法関係なく単なるユリウス通日の日数差。
Dateとか未だに使ってるバカいるの?
そんなことは聞いていない
>>687 ただの警告なんで無視していいんだが、警告自体は require 'dl' を require 'fibble' に書き換えないといかんな
書き換えただけで動くかどうかよくわからん
とりあえずは irb 作ってる人のミスなので(Ruby2.0.0ではdlが使えないのを忘れている)、直るの待って欲しい、Ruby 2.0.0でしょ?
a = Date.new(2012, 1, 1) b = Date.new(0, 1, 1) p (b - a).to_s これでaとbの日数の差が出ますが こういうのはグレゴリオ暦なども考慮されてますか?
>>689 環境によって実装が異なるケースがあるのかなと思いますが、自分で確かめてみます
>>691-692 ありがとうございます
>>693 Ruby1.9.3からはDateTimeとの違いはあまりないようなのでDateを使いました
Rubyの逆引き時点みたいなのを作ったらみんな見てもらえますか?
グレゴリオ暦は考慮されてないと可笑しいだろ。
>>31 とりあえず、ぐだぐだ言わずに一回くらい苦労しとけ。
データがあってそれを操作する。これはどの言語もそうなんだからよ。
後は「どのデータをどう操作して、どうまとめてそのまとまりをどう扱うか」しかないんだよ。
便乗ですいません 2001/12/1と2000/12/1の月の差を求めたいのですがこういう場合はどうやるのでしょうか?
www.ruby-lang.orgをipに変換してそこからまたホスト名に変換するとcarbon.ruby-lang.orgってなるんですが これ不正アクセスで書き換えられてるとかそういうのじゃないですよね?
年月日の加減算については日本語用語が確定していない 具体的にどういう値が出て欲しいかを付記しないと誰も回答しないと思う、面倒だから
>>703 >をipに変換してそこからまたホスト名に変換する
出てきて欲しい単語がひとつも出て来てもらえてないな…
ということであなたは勉強不足です
ガソリンに火をつけてみたら爆発したから自動車は危険と言っているようなものです
もーちょっと頑張ってくださいというか、なにしようとしてるのかわかりませんがそれやるのまだちょっと早いです
>>703 基本的なDNSの性質だよ
プログラム技術とはあまり関係のない話なので
詳しくは「DNS設定」についての入門サイトでも見てくるといいかと
707 :
デフォルトの名無しさん :2013/03/30(土) 17:44:04.76
たしか、他にもboronやoxygenもあったね。
基本的なDNSの性質??
>>708 か書いた後で変な表現だとは思ったけどさ?!
いいいんだよ、俺もそんな詳しくないし、い板違いなのは事実だから!
とにかくDNSについて調べて貰えればいいの!だよね???!
>>705 では解説お願いします
知ったかで回答されても困りますしね
こんにちは シンボルはどのような時に使うのでしょうか
712 :
デフォルトの名無しさん :2013/03/31(日) 12:03:26.36
「名前」そのものがほしいとき。
>>710 自分は
>>705 ではないけど、おせっかいで横レスするよ。
DNSの世界では、あるIPアドレスに対して1個の「実名」と複数の「別名」を命名できる。
これら実名と別名は、一般には「ホスト名」と呼ばれている。
またホスト名からIPアドレスを得る操作を「正引き」と呼び、
その逆にIPアドレスからホスト名を得る操作を「逆引き」と呼ぶが、
慣例として逆引きではホスト名に実名を返すのが常識になっている。
で、
>>703 のruby-lang.orgというドメインのケースを以下に解説する。
・carbonというホスト名は実名で、wwwというホスト名は別名。
・wwwというホスト名を正引きすると 221.186.184.68 が得られる。
・このIPアドレスを逆引きすると carbon という実名が得られる。
UNIX系(LinuxやOSX)であれば、ターミナル上で dig www.ruby-lang.org という
コマンドを実行してみなさい。
実行結果の中で、 A を含む行(レコード)が実名で、CNAME を含む行が別名になる。
これらはRubyとは全く無関係な話だよ。
勉強になるわ、ありがたやー。
東京でRubyの勉強会ありますよね こういうのって初心者お断りですか?
>>711 あ、自分からは無理して使わなくていいです
1年くらいしたら「あーこれかもー」みたいにうっすら思いつくんで、それまで気長に待ってください
717 :
デフォルトの名無しさん :2013/04/01(月) 18:56:33.79
2万行の1行ずつに正規表現の書かれたファイルで、7万行のファイルを処理しているのですが、 scriptの実行時間が長く困っています。 実行時間を短くするお知恵をかしてくれませんか。 ソースは以下のものになります。 def replace2 self.swap_lines.each do |sl| self.export_c_lines.each do |el| if(el =~ /#{sl}\s\*\/$/) self.new_export_c_lines << el self.export_c_lines.delete(el) break end end end end
えーと、「NGワード正規表現」が書かれた長大なデータファイルがあって、 それを使って、でっかいファイルに対して、NG表現にマッチした行を消すという処理をしたいと それでいて、正規表現データはまったく整理されておらず、どんなのが入っているかもわからないと 遅いの当たり前だろなめんなあああああああ 短縮できるとすれば「NGデータファイルを読み込んで正規表現オブジェクトにする」の部分だけど、ほとんど誤差だと思う 超絶遅い処理の正規表現が何個か入ってるだけで超絶遅くなるはず どうしようかな、正規表現データに書いてある正規表現ってどのくらい複雑なんだろう、joinできれば速いんじゃなかろうか # 7万行を5周必要 text.each_line do |line| ['aaa', 'bbb', 'ccc', 'ddd', 'eee'].each do |re| skip_line if Regexp.quote(re) =~ line end end # 7万行が1周で済む text.each_line do |line| skip_line if Regexp.quote(['aaa', 'bbb', 'ccc', 'ddd', 'eee'].join('|')) =~ line end
719 :
デフォルトの名無しさん :2013/04/01(月) 19:38:32.11
削除したファイルをもう一度読みに行く必要はないわな
なんかなんとかなりそうなんだけどね 正規表現部分を弄って舐める回数減らすのが一番効果あるかもしれん
A x B x F よりも B x A x F の方が計算量減るんじゃね
なるほど、joinですか それでやってみます。 1行1条件なので、5万の条件のjoinになりますが、一周で済むのは早くなるのかもと思いました。 正規表現部分も工夫してやってみます。
5万じゃなくて2万でした…。
724 :
デフォルトの名無しさん :2013/04/01(月) 20:59:00.50
>>718 Regex.unionというものもあるのよ。
725 :
デフォルトの名無しさん :2013/04/01(月) 20:59:48.46
あう、pが抜けた
migemoって、正規表現の最適化を動的にやってるから、参考になるんじゃないか。
拡張正規表現とかを使ってなければ 全部の正規表現をくっつけるだけでDFAに展開できるので 理屈の上では高速処理できるはず
モジュール配下に定義したクラスの読み込みで質問があります。 カレントディレクトリにtest.rbとutil/helper.rbがあって、それぞれの定義を以下のように書いています。 #test.rb $: << "." require 'util/helper' a = Helper.new #util/helper.rb module Util class Helper end end この状態で ruby test.rb と実行すると `require': cannot load such file -- util/response_hanlder (LoadError) というエラーになってしまいます。 test.rbからutilモジュール配下のHelperクラスにプレフィックスを付けずにアクセスするにはどうすればよいのでしょうか? 初歩的な質問で申し訳無いのですが、よろしくお願いします。
>>728 `require': cannot load such file -- util/response_hanlder (LoadError)
ではなくて、
`require': cannot load such file -- util/helper (LoadError)
でした。失礼しました。
ということは解決ですね
>>730 test.rbに include Util を追加したらエラーが出なくなりました。
モジュール配下のクラスをプレフィックス付けずにアクセスする場合、requireでファイルを読み込んでモジュールをincludeする必用があるのでしょうか?
プレフィックスとはなんぞや Ruby1.9.2以降で「手元」の自作ライブラリ、 具体的には自分と同じディレクトリにあるutilディレクトリに入っているhelper.rbというファイル、 をrequireするにはいくつか方法がある 1) require_relative 'util/helper' 「require_relativeが書かれているファイル」を基準にして相対パスと考えてrequireさせる書き方。Ruby1.9.2以降でしか動作しない。 Ruby1.9.2以降でしか使わないのならこれで書く癖をつけておいてもいい。 2) require File.expand_path(File.dirname(__FILE__) + './app/hoge.rb') なげーよその1。Ruby1.9.2以降では$LOAD_PATHにカレントディレクトリ . を含まなくなったので、フルパスを自分で作ってrequireに渡す。 ふざけてるようだがまだたくさんあるRuby1.9.1上でもきちんと動作するのでそこそこ多数派。自作派テストファイルの先頭とかでよく見る。 3) $LOAD_PATH.unshift('.') # どこかのメインスクリプトの先頭で1回だけ書く require 'util/helper' または require './util/helper' なげーよその2。require_relativeって書いたらRuby1.9.1でエラーになっちゃうじゃん、という人向けの記述。 せっかくカレントディレクトリをオフィシャルで取り除いた親切を無にする行為だが、わかっててやるぶんにはRubyはなにも咎めない。 カレントディレクトリじゃなくてなんかどっかの固定のディレクトリの下にあるファイルをrequireしたいならunshiftの引数をそのディレクトリに。 $LOAD_PATHはRuby実行時に -I オブションでも指定できる。 自作gemライブラリやRailsなんかでは実行時の$LOAD_PATHにいくつか追加されるので、require 'util/helper'と書くだけで動作することもある。 $LOAD_PATHに何が入ってるかは確かめておくとええ
ああ、コピペそのままだった require File.expand_path(File.dirname(__FILE__) + './util/helper.rb')
>>732 回答ありがとうございます。
パス通ってるところからrequireすれば読み込むということが分かりました。
プレフィックスは Util::Helper の Util:: の部分です。
Util::Helper ではなく Helper とだけ書いてアクセスするには include Util も追加する必要があるのかと思いまして。
>>732 すいません、自己解決しました。
たのしいRubyにそれっぽいこと書いてありますね。
test.rb:55:in `+': can't convert nil into String (TypeError) というエラーで詰まっています。 以下コードの抜粋です。 48 res = Array.new 49 resp.each do |row| 50 puts row.class, row if $debug == 1 51 res = row 52 end 53 p res, res[0], res[1],res.class 54 if ((res.class == Array) && (res.empty? == false)) || ((res.class == String) && (res != nil)) then 55 res = '20' + res[0].to_s.gsub!(/-/, ' ').gsub!(/\//, '-') 56 if (res.to_s == posttime.to_s) || (res[2..20].to_s == posttime.to_s) then 以下略・・・という箇所でのエラーなのですが、 53行のデバグ表示では ["13/03/06-17:52:00"] "13/03/06-17:52:00" nil Array このエラー発生時にはこのようにデータが入ってきています。配列resに1個の要素"13/03/06-17:52:00"だけが 入っているということだと理解しています。この1個の要素を取り出して55行にある処理を加えたいのですが 冒頭のエラーで止まってしまいます。ところが、検証用に res = Array.new; res = ["13/03/06-17:52:00"] p res, res[0], res[1],res.class res = '20' + res[0].to_s.gsub!(/-/, ' ').gsub!(/\//, '-') p res 以上のコードをテストしてみると、デバグ表示上は先と同じで、最終的には "2013-03-06 17:52:00" となり、うまい具合に期待通りの出力が返ってきます。 同じオブジェクトと内容、さらには同じ処理でどうして違いが出るのでしょうか? もちろん実行環境は同一です。
すいません、自己解決しました。
738 :
736 :2013/04/03(水) 20:11:30.24
自己解決してません
いたずらする人がいるようなのでトリップ付けて再掲します。万が一自己解決したら このトリップ付きで再度その旨投稿します。 test.rb:55:in `+': can't convert nil into String (TypeError) というエラーで詰まっています。 以下コードの抜粋です。 48 res = Array.new 49 resp.each do |row| 50 puts row.class, row if $debug == 1 51 res = row 52 end 53 p res, res[0], res[1],res.class 54 if ((res.class == Array) && (res.empty? == false)) || ((res.class == String) && (res != nil)) then 55 res = '20' + res[0].to_s.gsub!(/-/, ' ').gsub!(/\//, '-') 56 if (res.to_s == posttime.to_s) || (res[2..20].to_s == posttime.to_s) then 以下略・・・という箇所でのエラーなのですが、 53行のデバグ表示では ["13/03/06-17:52:00"] "13/03/06-17:52:00" nil Array このエラー発生時にはこのようにデータが入ってきています。配列resに1個の要素"13/03/06-17:52:00"だけが 入っているということだと理解しています。この1個の要素を取り出して55行にある処理を加えたいのですが 冒頭のエラーで止まってしまいます。ところが、検証用に res = Array.new; res = ["13/03/06-17:52:00"] p res, res[0], res[1],res.class res = '20' + res[0].to_s.gsub!(/-/, ' ').gsub!(/\//, '-') p res 以上のコードをテストしてみると、デバグ表示上は先と同じで、最終的には "2013-03-06 17:52:00" となり、うまい具合に期待通りの出力が返ってきます。 同じオブジェクトと内容、さらには同じ処理でどうして違いが出るのでしょうか? もちろん実行環境は同一です。
740 :
デフォルトの名無しさん :2013/04/03(水) 21:07:01.61
gsub! は置換が起こらなかったときは nil を返す。 gsub にしろ。
> 配列resに1個の要素"13/03/06-17:52:00"だけが入っている ここが間違い。res[0]はStringクラスじゃないよ。 to_sが返す文字列には'/'が無い。
>>740 指摘としては不適切
「戻り値を利用する場合はString#gsub!を使わない」が妥当
gsub!は「ちょっとずつ置換」しているからメモリを大量に使わないとか考えてる人がいるが、本当にそういう実装になってるんだろうか 最後に中間生成物を速攻GCに回してるだけで、中の動作はgsubと変わらないんじゃないかとか思うんだが、ソース追うのめんどい
trじゃダメなんですか?
Rubyをインストールしたばかりの状態で
gem update --system
gem install mysql2
をしました
require "mysql2"だけのコードを実行するとエラーがでてしまいます。
mysql自体は問題なく動いてますし他の言語から利用できる事も確認できてます。
長くなるので詳細をcodepadに書きました。
どなたかアドバイスお願いします。
http://codepad.org/Tbc5xixN
・ gemパッケージ作者公式で報告があるがまだ直ってない ・ バージョン下げれば動くらしい という情報もあるな gem uninstall mysql2 -v 0.3.11 gem install mysql2 -v 0.3.9 とかやっていって、エラーの出ないバージョンを探すとかやるといいんではないかと なんか0.2.6まで下がらないといけないとか絶望的な話もあるけど、よくわからんな
仮想属性とは何のことでしょうか。教えてください。お願い致します。
749 :
デフォルトの名無しさん :2013/04/05(金) 22:05:59.79
仮想属性? AWDwR 17章の "We even created a virtual attribute that is never stored in the database" のこと?
聞いたこと無いな
プログラミングRuby1.9のp32に載っているのですが、なんのことだかさっぱりで。流してしまっても問題ないでしょうかね。アクセスメソッドあたりの話題なのですが。
752 :
デフォルトの名無しさん :2013/04/05(金) 22:58:54.12
obj.attr と obj.attr= で読み書き出来るものを obj の属性と呼ぶとして、 ふつうはその値はobjのインスタンス変数として持ってるんだけど、 実はそうじゃなくてもインターフェイスさえ属性の読み書きの形になっていれば、 事実上(vurtual) 属性と呼んでもいいよね、という話じゃないのかな。
753 :
デフォルトの名無しさん :2013/04/05(金) 23:25:40.53
virtualだたorz
DataMapperで Data.all(:order => [:value.desc]).to_json みたいに json 形式に変換したいです。どうすれば良いでしょうか?
Ruby大好きです^−^
Windows Ruby1.9.3にthinとrails3.2をインストールしました rails sって打つとサーバが起動するんですがwebrickが立ち上がります rails new myapp & cd myapp &thin start ってやったら >> Using rack adapter >> Thin web server (v1.5.1 codename Straight Razor) >> Maximum connections set to 1024 >> Listening on 0.0.0.0:3000, CTRL+C to stop C://ruby193/lib/ruby/gems/1.9.1/gems/thin-1.5.1/lib/thin/backends/tcp_serve r.rb:16:in `connect': cannot load such file -- thin/connection (LoadError) ってエラーになりました どうやってthinでrailsをうごかすのでしょうか?
ruby1.9.3p392において、requireを呼び出すとLoadError例外が発生するのですが、どのように外部のファイルを読み込めばよろしいのでしょうか。
rubyでGUIを作成するというのはあまり一般的ではないのでしょうか 入門書やらruby関連の書籍をいくつか読んでみたのですがそういうものが乗っていなくて
一般的かどうかで言えば、一般的ではない GUIのなにかを作りたいときは、他の言語を使う Rubyでなければならない理由がなんもないから RubyでGUIアプリケーションを作れるくらいの甲斐性のある人は、他の言語でもうまくGUIアプリケーションを作れる
GUIライブラリで提供されている部品を素のまま使うような GUIがプログラムの補助的な役割でしかないならruby/tkでも十分使える お絵描きソフトだって作れし、多分STGやACTゲームだって作れると思う けどその辺のGUI部品だけでどうにか出来ないGUI用途にrubyはおすすめしない
ツールキットとしてのTkがすごいのであって、Ruby/Tkが特別使いやすいわけでもわかりやすいわけでもない むしろそこだけRubyと相容れない世界であって、素直にTcl/Tkで書いたほうがまだマシだ いちおう警告しておくけど、Rubyを10年使ってるような人の言うことを信じたら駄目 彼らはどこからRubyでどこからRubyでなくてどこまでRubyでやるべきかを既に知っている あなたはRubyのことをなにも知らないし、Rubyとなにが違うのかも知らないし、GUIの標準ツールキットがどんなものかも知らない だったら、GUIには「専用」の言語を使うべき
要約すると、GUIの話題になると765みたいな馬鹿が度々やってくるので注意しろということです
Rubyしか知らないような人の言うことも聞いたら駄目だよね どちらにしても、Windowsでの話ならWindows APIの知識は必須になるので、そっちの勉強からしたほうが結局早い
>>765 >素直にTcl/Tkで書いたほうがまだマシだ
ツールキットとしてのTkがすごいのであって、プログラミング言語としての
tclはレガシー(=遺跡)な設計で、データ型としては文字列しかないから、
少し複雑なデータ構造を扱おうと思うと、可読性の劣悪なコードになるよ。
それなら素直にRuby/Tkで書いたほうがまだマシだ。
>だったら、GUIには「専用」の言語を使うべき
素直にそのGUI専用言語を薦めればいい
>>767 Win32とかの知識は既にあるという前提だろ
じゃないとデバッグすらできん
GUIでなきゃダメなんだっていうから、webappに動くgifを入れてあげたら満足してた客がいたな。
772 :
デフォルトの名無しさん :2013/04/11(木) 08:23:36.81
そういう客は「黒い画面」じゃなきゃなんでもいいんだよ:)
Ruby10年ってよっぽどだなーと思ったけど ピカチュウ本で始めた人はそのくらい経ってることになるんだな こわいこわい
>829 既出だったらスマソ[sage] 投稿日:2007/07/10 01:10:41
>Computer Languages History (preview)
>
http://www.levenez.com/lang/history.html#11 >
> Fortranおばあちゃん 53歳
>Lispおばさん 49歳
>Basicおじさん 43歳
>
>SNOBOLおばさん 40歳
>Pascalおじさん 37歳
>SmallTalkおばさん 36歳
>Iconおばさん 30歳
>
>C(K&R)兄さん 29歳(まだまだおじさんって歳じゃねぇよwww)
>親戚のTcl/Tkお兄さん 19歳(何故かもっと年上に見られる('A`))
> Delphi兄さん たぶん17歳(TurboPascal時代から数えて)
>Java兄さん 16歳(Oak時代から数えて)
>
>長女Perlお姉さん 20歳(成人式おめでとー)
>次女Pythonさん 16歳(平成生れ)
>三女Rubyちゃん 14歳(平成生れ)
>
>お隣りのPHPちゃん 12歳(キャラ設定思い浮ばず orz)
6年ほど前に既に10年は超えてた
というか20年目に突入しつつあると思われる
Rubyユーザーとしてあらゆるコストを許容してでもそれをRubyから使うことに意義がある、みたいなのを初心者スレで勧めるのはちょっと… ウィンドウアプリケーションが欲しいんなら素直にC#やれって言ってあげたほうがいいと思う ある程度Rubyに習熟してる状態での質問じゃなくて、Rubyに全く触れてない状態からの質問なんだろうし
自分が答えられない話題が出ると、すぐ他の言語でやれって言うよな
えっ
Ruby/Tk、Tcl/Tk 8.6に対応してない問題 永井先生によると 「tailcall というコマンドが実装されて ライブラリスクリプトの複数箇所で利用されているのですが, これが現在の tcltklib の処理と相性が悪くて, 〜中略〜 対策を考える必要がありますが,かなり面倒なことになると予想されますから, 短期で解決することはできないと思います.」
新Mac板の macport スレでも話題になってた
433 名前: 431 Mail: sage 投稿日: 2013/02/26(火) 00:43:36.51 ID: ZRUYcOIu0
>>425 遅くなってすみません。さきほど修正をコミットしました。
1時間ほどしたら使えるようになると思います。
動作確認していて気付いたのですが
ruby/tkはtk-8.6にまだ対応していないようです。(ruby-1.9.3のも)
ruby +tkを使用する場合は、先にport:tclとport:tkを8.5に戻す必要があります。
GUIの作成はやろうと思えば出来るといった幹事で主な使い方からは外れてしまうのですね RGSSに興味があり、rubyを勉強していく中でGUI作りも勉強してみようかなと思ったのですが その方面の書籍が調べた限りでは殆ど無かったので質問させて頂きました レスしてくださった方、非常に丁寧なレスをどうもありがとうございました
>>781 wxRubyとかRuby/Gtkとか、何かのbindingで取り組むのってどうですか?
GUIアプリならPythonの方がいいね ツールキットがいろいろ整備されてるしパッケージ化も簡単
784 :
デフォルトの名無しさん :2013/04/12(金) 23:33:35.67
('(゚∀゚∩ へぇー
>>617 まだ解決してない?
4.0.0からファイルの置き場所変わったらしいよ
passenger 4.0.0 always_restartでぐぐってみ
>>785 あー、できました。ありがとうございます。
参考ブログにならってソース読んだらrestart.txtとalways_restart.txtの置き場所が違いました。
if (options.restartDir.empty()) {
restartFile = options.appRoot + "/tmp/restart.txt";
alwaysRestartFile = options.appRoot + "/always_restart.txt";
} else {
restartFile = options.restartDir + "/restart.txt";
alwaysRestartFile = options.restartDir + "/always_restart.txt";
}
おそらく皆さん、confファイルでrestartDirを設定してるからこの問題があまり検索で引っかからないんですかね。
分岐見比べてみても、上のempty側は "/tmp/always_restart.txt"じゃないと変じゃん、と思いました。
(´・ω・`) {foo: :bar}ってなった時にカンマの見栄えがキモ〜ぃ
気持ちはわかるが問題はそれが本当にカンマなのかということだ
Eau de Cologne
コロンにゅ
いじめっ子どもめ(´・ω・`)
Rubyで手書きして初めてのWebアプリケーションを つくろうとおもっています。 手書きでしこしこやってます。 ログイン認証と、クッキー管理による セッション維持のところは書きました。 ただユーザ判別のところがわかりません。 ログインユーザと判別した後、 ユーザ毎のコンテンツ別のアクセス認可については、 どこにキーとなるものを保持するんでしょうか。 クッキーにユーザIDをごにょごにょしたものを 保持しておけばいいのでしょうか。 それとも、IDとパスワードを保存したDBに、 ログイン時に発行したクッキーセッションIDを 保持すればいいのでしょうか?
馬鹿には無理
gem使えば良い
796 :
792 :2013/04/16(火) 10:34:55.98
初心者スレと聞いてやってきたのですが。。 やはりRubyはヲタが集まるところなんですね。 イケメンPythonに引越しします。有難うございました。
だってrubyの質問じゃないし・・・
Pythonとイケメンを結びつけるのは初心者じゃない Python本スレに強制送還が妥当
Rubyも萌え萌えおにゃのこ推しなの?
日経ソフトウェア、10大言語入門特集に rubyがないのはおかしい 会社でお仕事用言語なのかな それならCOBOLが無いのもおかしいし
801 :
792 :2013/04/17(水) 09:01:49.52
>>796 なりすましはやめてください。
Ruby大好きでPythonはお気に召しません。
>>794 やってみることもできるのですが、
セキュリティ的な懸念とかも含めてどちらの
実装がベターのか、または他の実装がいいのか
コメントいただきたいのです。
ぶっちゃけRailsの実装はここにのってるから
これ参考にしろ、とかでもかまいません。
>>801 厶板初めてか
名前欄読んでる馬鹿はいないぞ
名前欄がデフォルト以外だったら非表示で構わない
>>801 セキュリティ的にはクッキーにセッションID以外の情報を入れるのは禁止
セッション情報はセッションIDをキーとするセッションDBに格納しろ
セッションDBにパスワード等のセンシティブ情報を入れるのも禁止
PerlのようにRubyで複数のファイルを配列に読み込みたいのですが、 while (<>) { @array[$i] = $_; $i++; } $ perl test.pl *.c これをRubyで書くにはsystem('ls *.c > hoge')とやって、open('hoge')でファイル名を取得し、それからひとつずつファイルを読んでいくといった方法のほかになにかありますでしょうか。
$ ruby testscript.rb file1.txt file2.txt file3.txt $ cat testscript.rb ARGF.each{ |line| print line; } # これで cat と同じ。 # だから以下のように書けるよ。 $ cat test.rb array = [] ARGF.each{ |line| array << line; } $ ruby test.rb *.c
>>805 ありがとうございます
Cから移行してきた者ですが、なかなかCのような書き方が抜けずにいます
Rubyist目指して頑張ります
>>805 ARGFはEnumerableをincludeしてるので、ARGF.to_aだけでいけるね
初心者にはPerlの例をそのままRuby風に書くとどうなるかを示す方がよさげ array << line よりも array.push(line) の方が分かりやすかった フィルターは ARGF で多くを済ませることができる
>>808 初心者に理解させるには
>>805 でもいいかもしれんが、それはRuby風と言えるのだろうか?
むしろ
>>805 はPerl風と言ってもいいんじゃないかな(特にセミコロンが残ってるところなんか)
Ruby風というのは大クラス主義に基づく豊富なメソッドを使ってこそじゃないかと思う
そういうメソッドをうまく使えたときの快感はRubyistなら分かるはずだ
ARGF.to_a は配列に ARGF の内容が全部一気に入るけど while (<>) は $_ に一行ずつ入るから動作がぜんぜん違うよ 一方 Perl にそのまま直したらこんなのだ lines = [] i = 0 while ARGF.gets lines[i] = $_ i += 1 end
811 :
デフォルトの名無しさん :2013/04/17(水) 23:45:31.00
とは言え、本人も書いてるように @array[$i] = $_; $i +=1; も Perl 的というよりC的だよね。 そもそも Ruby の push は Perl の push を OO風にしたものだし。
今日からRuby始めた超初心者です。 ちょっと質問、というか愚痴。 今日Ruby Installしてnokogiri使って、PostagSQLとの接続はpg使えば良いのか・・・・ なんてやってるんだけど、詳細調査すればするほど、ドキュメントは英語。 俺英語苦手なんだよね。 なんか20年前のUNIX勉強してた頃を思い出す。 日本 発の言語だって話なのに、なんで?
英語とか関係なく、ドキュメントが貧弱なことが多いよ。 結局はソース読むことになるんだよ
日本語しか使えないゴミムシの世話しても幸せにはならんからな
>>812 よく比較されるPythonと比べると圧倒的に日本語情報多いでっせ
>813 ありがとう。そうするよ。 英語も「苦手」なだけで、読めないわけじゃないし。 >814 まあ、そんな感じだね。Rubyに限らず、最近はボランティア精神 でやる人たち少なくなってきた。 これは、多分に景気が影響している。みんな余裕が無いんだよ。 2ch見てても、罵倒するばかりで議論の場になっていないもんね。 >815 ありがとう。Pythonは全然考えてなかった。 今日1日の感想だけど、Rubyって結構面白そうだね。 ちょっとしたBatch的な処理を作ろうと思って、何の言語にしようか 1ヶ月程悩んでたんだけど、始めたらあっという間に1日が終わって しまった。 明日からまた頑張ります。
専門板はほんとに陰湿でどうしようもないな 聞かれたことにだけ答えてろよいちいち皮肉らないとレスもできないのか
818 :
デフォルトの名無しさん :2013/04/19(金) 07:21:34.38
>>815 ところがPythonの方が圧倒的に使いやすいでっせという皮肉
>>803 なるほど、わかりました。
なんとかできそーです。
ありがとーざいました。
while (<>) { if (/ruby_sysinit/) { print "$ARGV\n"; } } このPerlのプログラムをRubyで書くとどうなるのでしょうか。 ARGFの使い方がよくわからないので教えてください。
ruby でも $_ 使えるけど、例には示さないよ。 $ARGV ってなに? $ARGV[0] とかならわかるけど # 一応、ファイル名を表示するならばこう ARGF.each{ |line| if line =~ /ruby_sysinit/ print ARGF.filename end } # do-end を使う方が一般的かも ARGF.each do |line| if line =~ /ruby_sysinit/ print ARGF.filename end end # グレップみたいな出力ならば以下 ARGF.each do |line| if line =~ /ruby_sysinit/ printf("%s:%d: %s", ARGF.filename, ARGF.file.lineno, line) end end
>>820 じゃないけど
$ man perlvar
...
$ARGV Contains the name of the current file when reading from "<>".
>>821 >ARGF.filename
ありがとうございます
簡単なgrepのようなツールを書いてみたくて質問させていただきました
ありがとうございました
unicornってdaemontoolsで制御してる? 他にいい方法が思いつかない
>>817 遅レスだが。
言いたい事は良くわかる。が、直球投げても無駄だよ。
スルーするか、大人の対応するかしかないから。
と言っても、2chはそういう文化になっちゃったから仕方が無いって割り切るしかないと思ふ。
だから真っ当な人は2chから逃げ出しちゃったよね。
勉強に使えるサイトは山ほどあるしね。 個人的には、ここではキーワード拾う位に留めてる。
間違ったスレに無心で投稿してて誘導して頂きました。 先輩方ご助言をお願いします! 今以下の様なスクリプト書いています。これらをJSON形式にて出力したいのですが、 どうにもやり方が分らず苦戦してます。そもそもこれだと無理なのかすら判断が出来ず、 お知恵を貸して下さい! book.items.each do | item| res1 = item.get('ItemAttributes/Title') res2 = item.get('DetailPageURL') res3 = item.get('MediumImage/URL') js = { "title" => res1, "url" => res2, "img" => res3} ans = JSON.pretty_generate(js) puts ans 出力結果(カンマが入らないのと [ ] が付与されない) { "title": "name", "url": "address", "img": "path.jpg" } { "title": "name", "url": "address", "img": "path.jpg" }
>>827 items = books.items.map do |item|
res1 = item.get('ItemAttributes/Title')
res2 = item.get('DetailPageURL')
res3 = item.get('MediumImage/URL')
{ "title" => res1, "url" => res2, "img" => res3 }
end
puts JSON.pretty_generate(items)
>>828 さん
ありがとうございます!ただこのデータ元はxmlで返して来ていて
Amazon::ecsと言うgemを利用しており、res1-res3で該当する箇所を
抜き出しています。
今実行してみたのですが、xmlの内容も一緒に出力されておりました。Orz.
>>828 さん
.eachのままでした。mapで出来ました。
失礼しました!m(_ _)m
ちなみに私はこの様な状態なのですが、今どの辺りを重点的に学習
しておく事でこういった問題を828さんのように解決出来ますでしょうか。
当然eachとmapで見た目が違うのは分りますので後程調べますが、
他にも items = を加えたり等、解説頂けると幸いです。
>>828 さん
引続き試行錯誤しましたが、sinatra経由でerb内で同様のコードを書くと何故か
データが何も取得されなくなる事が解りました。。。LinuxのConsole上では
問題なく意図した形式で返ってくるのですが。
取り敢えず今日はソロソロ寝てまた明日出直します。有り難う御座いました。
>>830 学習するなら Array の each, map, map! あたり
メソッドの動作を理解するには irb で小規模なサンプルを書くのがおすすめ
$ irb
irb(main):001:0> ary = [1,2,3]
=> [1, 2, 3]
irb(main):002:0> ary.each{|n| puts n }
1
2
3
=> [1, 2, 3]
items に代入してる理由は map と map! の違いが理解できればわかるはず
Sinatra の件は
>>831 じゃ情報が少なすぎて答えられない
再現コードかせめて
>>827 みたいな該当箇所のコード片ぐらいは要る
てかsinatraは"Rubyじゃない"ので、Rubyの知識としては答えられない sinatraはRubyの標準環境を逸脱している もしあなたがRubyの初心者なのなら、sinatraは使ってはいけない
入力と出力とエラーを弄っててなおかつサーバ上で動作しブラウザで表示させるライブラリなんてのは鬼門だよね
>>830 リファレンスの Array, String, Enumerable あたりは一度目を通しておくべきだろう
837 :
デフォルトの名無しさん :2013/04/27(土) 12:37:40.65
case when when else end って何故when〜elseまでインデントがcase/endと同じなんでしょうか? endも書き忘れやすいです
hash={'+'=>1,'*'=>2} stack=['+','*'] loop do if hash[stack[-1]] >= hash['+'] stack.pop end end これがNoMethodErrorになるのは何故ですか 教えてくださいよろしくお願いいたします
839 :
837 :2013/04/27(土) 12:56:06.59
スタックが空になっても比較してるからじゃない?
841 :
デフォルトの名無しさん :2013/04/27(土) 19:22:15.39
tes
842 :
デフォルトの名無しさん :2013/04/27(土) 21:08:37.22
slim の書き方を教えてください。 2つの配列があり、↓@onにあるもののみ「class="on"」をつけたいです。 @all = ['a', 'b', 'c'] @on = ['a', 'c'] ---------- ul#test - @all.each do |i| li #{i}です。 - @on.each do |k| if k == i #=> 上のliにclassの付け方がわかりません。 ---------- 理想 <ul id="test"> <li class="on">aです。</li> <li>bです。</li> <li class="on">cです。</li> お願いします。
843 :
デフォルトの名無しさん :2013/04/27(土) 21:35:21.75
@on.include?(i)
844 :
デフォルトの名無しさん :2013/04/27(土) 22:06:31.83
>> 843 できました。ありがとうございます。 書き方なんですが、こんなんでいいんでしょうか? 分岐じゃなくて、@on.include?(i)がtrueならonをくっつける、みたいな書き方ができそうなのですが。 ul#test - @all.each do |i| - if @on.include?(i) li.on #{i}です。 - else li #{i}です。
845 :
デフォルトの名無しさん :2013/04/28(日) 02:14:01.00
そっから先はslimの文法の問題。 Rubyの式( @on.include?(i) )の結果を利用してclassを指定する方法を探してちょうだいな。
>>845 あざっす。こんな感じに書けました。
------
ul#test
- @all.each do |i|
li class="#{@on.include?(i) ? 'on' : ''}" #{i}です。
文字列がアルファベットか判別するisalphaのようなメソッドはありますでしょうか。教えてくださいよろしくお願いします
RubyでPythonのスライシングのように、文字列のコピーを作るにはどうすればよいのでしょうか。教えてくださいよろしくお願いします
>>847 あるかないかで言えば特定の文字群と一致するかを判断するメソッドは無い
任意でいいならString#matchで
class String def isAlpha? self =~ /^[a-zA-Z]+$/ end end 'aaa'.isAlpha? 'aaa123'.isAlpha?
851 :
デフォルトの名無しさん :2013/04/29(月) 09:38:50.12
>>848 [オフセット,文字数] とか [範囲] とか [正規表現] とかいろいろ
"hello, world"[7, 3] #=> "wor"
"hello, world"[3..6] #=> "lo, "
"hello, world"[/,.*/] #=> ", world"
>>850 ^$を使うと、途中に改行があったときにそこまでのマッチで受理されてしまうので¥A¥zで。
>> /^[a-z]+$/ =~ "aaa¥nbbb" #=> 0
>> /¥A[a-z]+¥z/ =~ "aaa¥nbbb" #=> nil
既存の基本/標準/添付なクラスを再オープンしてメソッドを追加するのはあまり感心しない(2.0のはなかったことに) やってもいいけど
853 :
デフォルトの名無しさん :2013/04/29(月) 18:14:56.48
¥p{Alpha} って全角アルファベットにもマッチするんだな。
>>851 なるほど。
>>852 なるほど。
初学者なんですが、こういう場合どう実装するべきか教えてくれませんか?
>>853 エンコーディングがUnicode系の場合はUnicodeカテゴリを使うからそうなるね
Letterカテゴリは全部Alphaに含まれるみたいだから漢字やひらがな、カタカナもAlphaになるはず
質問させてください。 sqlite で dumpしたテキストの insert 文を Rubyの配列に入れたくて INSERT INTO "foo" VALUES(1,'text','text2,comman',2); とあって "1,'text','text2,comman',2" 部分を if text =~ /(\d+),'(.*)','(.*)',(\d+)/ p $1.to_i, $2, $3, $4.to_i end とすれば読み込めたんですが、DBの列の型依存になってしまうので、 もっと汎用的な書き方はできないでしょうか?
>>856 ruby/sqlite系のライブラリを使ってDBを直接操作するのが汎用的だと思うけど
line = 'INSERT INTO "foo" VALUES(1,\'text\',\'text2,comman\',2);'
a = eval('[' + line[/VALUES\((.*)\);$/,1] + ']')
p a
というか特定の"バイナリデータ"を専用ライブラリがエクスポートした形式のテキストを解析するという行為は
なにをどう頑張ってもその特定のエクスポートフォーマット依存になると思うんだがどうだろう
どっちにしても独自エクスポートフォーマットテキストを中間に挟む意義を感じないな
>>857 の言うように操作ライブラリに直接配列にしてもらうのが正解
いじりたいなら配列にしてもらったあとの要素の文字列をいじれ
文法をさらっと確認したいのですが何かしらあまり厚くない書籍などありますでしょうか 手元に持っておきたくて
862 :
デフォルトの名無しさん :2013/05/06(月) 09:24:48.27
オライリーから小さいリファレンス本が出てるけど、古い。 大まかに確認するだけならいいんだろうけど。
gtk2を使って何個か数値を入力して平均値を求めるGUIを作ろうと思うのですが 初めは数値の入力欄が一つで"add"ボタンを押せば入力欄が動的に一つ追加 されるようなものを作りたいのです。 どのようにすれば動的に欄を追加させることができるのでしょうか。
Ruby関係ないと思う GTKの勉強を先にするべきかと
GTK部分のサンプル的にはわかった上で、Rubyで制御して動的に追加する方法を知りたいのではないかと
867 :
デフォルトの名無しさん :2013/05/09(木) 20:30:43.94
ボタンの "clicked" シグナルのコールバックでコンテナにaddしてpackする。
868 :
デフォルトの名無しさん :2013/05/12(日) 13:41:34.31
教えてください。 gemのアップデートとmacなんでbrewのアップデートを一括で行うコマンドを作ってみたのですが、 それぞれ出力が一旦バッファされ、実行終了ごとに一気に出力されてしまいます。 これを直接コマンドを叩いた時と同じようにリアルタイムで出力されるようにはどうしたらいいのでしょうか? [myupdate] #!/usr/local/bin/ruby print `gem update --system` print `gem update` print `brew update` print `brew upgrade` print `brew doctor`
869 :
デフォルトの名無しさん :2013/05/12(日) 14:05:48.68
`...` の用途が間違っている。単にコマンドを実行したいだけのときに使うものじゃない。 system使え。printいらん。 そもそも論として、単純にコマンドを逐次実行するだけならシェルスクリプトで十分。
870 :
デフォルトの名無しさん :2013/05/12(日) 14:22:20.23
>>869 systemにしても出力はバッファされてしまいます。
あとシェルスクリプトで十分とかいう説明はいらんです。
871 :
デフォルトの名無しさん :2013/05/12(日) 15:42:24.67
IO#sync
872 :
デフォルトの名無しさん :2013/05/12(日) 15:43:24.88
=がぬけた。
873 :
デフォルトの名無しさん :2013/05/12(日) 16:02:09.83
>>871 ,872
ありがとございます。ただうまくいかず一気に出力されてしまいます。
ちょっとgemだとわかりづらいんでこんな感じにしました。
[sleep.rb]
STDOUT.sync = true
print "aaa"
sleep 5
print "bbb"
これをターミナルから「$ ruby sleep.rb」とすればまずaaaが表示されて5秒後にbbbと表示されます。
ただ、これを別ファイルから、
[test.rb]
print `ruby /path/to/sleep.rb`
と実行すると、5秒後に一気に「aaabbb」と表示されます。
これを直接ターミナルで実行した時と同じような挙動にするにはどうすればいいのでしょうか?
874 :
デフォルトの名無しさん :2013/05/12(日) 17:33:55.35
`...` は、サブプロセスの出力を全部読み込んでそれをStringとして返すためのものなので、 `...` を使う限りはその挙動は変わらない。
875 :
デフォルトの名無しさん :2013/05/12(日) 18:04:42.59
>>874 バッククォーテーションがそういう挙動ってことなんですね。バッファすると。
じゃあ、どう書けばいいんでしょうか?
876 :
デフォルトの名無しさん :2013/05/12(日) 18:26:53.78
文字列として受け取る必要がないなら system で。 1行ごとに文字列として読み取って何かしたい、みたいなことは IO.popen ただ、呼んだプロセス自分でバッファリングを効かせるように再設定していたら どうしようもないかもね。
このへんは標準出力とコンソールについての一般的な知識があったほうがいいな ひとつひとつ「コマンド」を手探りで試していってもマジで行き当たりばったりにしかならないのでどーにもならん
878 :
デフォルトの名無しさん :2013/05/16(木) 20:07:02.38
1.8.xに対応したスクリプトを書くには1.8系の最新版で開発するのがベストと思いますが DL先に行ってみたら最新は2.0とのこと。 1.9のときに1.8からだいぶ変わったとききましたが、 2.0で1.8と互換性のある開発は可能でしょうか?
可能だけど、ほぼ別のバージョンを並行して開発するのと同じような労力になるよ ちょこっとの書き換えや条件分岐でなんとかなるものではない
880 :
878 :2013/05/16(木) 20:48:57.03
>>879 ありがとうございます。なんとなく状況が浮かんできます・・・
るびま見てたら1.9系から2.0への移行はほとんど問題ないような記述もあったんですが、
今回は素直に1.8系をインストールしてやってみますm(_ _)m
881 :
デフォルトの名無しさん :2013/05/16(木) 20:59:05.85
1.8系は、来月いっぱいでセキュリティ修正とかなくなるので覚悟しとこうぜ。
printf "%10.5f", num の出力の末尾の連続するゼロを同数のスペースに置換するにはどうすればいいでしょうか
printf "%10.5f", num の出力の末尾の連続するゼロを同数のスペースに置換したらいいんじゃないかな?
gsub
もう2ちゃんはダメだな
すみません、Activerecordを利用してて以下の様なコードを使っておりますが 日本語が文字化けする原因が分からずに苦戦しております。。。 result1 = search.find_by_person_name(code) result2 = search.find(:all, :conditions => { :person_name => code }) result1.person_name -> 文字化けせずにブラウザ上でも確認可能 result2.to_json -> 日本語名のみが文字化けして表示されている (…文字制限の為以下に続きます…)
result1の方のDBはperson_name1つに対して1レコードの対です。 result1の方は該当するレコードが基本1行のみなので1レコードを抽出します。 result2の方のDBはperson_nameに対して複数レコードが存在しています。 result2の方は該当するレコードを全部抽出したいと考えております。 to_jsonをしてる事がいけないのはわかるのですが、 根本的なところでそもそも何かが理解出来てない事がありものすごく些細な ところで引っかかってる気がしています。どなたかアドバイスお願いします。。。
888 :
デフォルトの名無しさん :2013/05/19(日) 09:19:24.06
JSONエスケープのことを文字化けと言っているわけではないんだろうね?
>>888 ごめんなさい、調べたのですがいまいち良く分かってません。。。
文字化けしてるというのは日本語が数字で表示されているのでもなく
全て「?」で表示されています。
result1.person_name.to_json とするとどうなりますか?
そもそも文字化け云々のときにブラウザで確認するな コンソールに出力しろ 不可能ならそこだけ適当なファイルに書き出せ あとRailsというかActiveSupportが自動付加するto_jsonはなんなのかさっぱりわからんので明示的に別なの使うのを推奨
892 :
デフォルトの名無しさん :2013/05/20(月) 10:38:03.85
文字化けするときはファイルに書き出してバイナリチェックが基本 コンソールに出そうとしてそこでもう一回文字化け発生したら 何のデバッグしてんのかわからなくなるぞ
ブラウザよりはわかりやすいけどな というかどうせpだろ、と思ったがRuby1.9からは進数表示されないのか
皆様 有り難うございます。 コンソール出力でも以下の様な感じになっております。 result1.person_name.to_json "¥"������¥"" 何か別の方法で試してみます、、、うむぅ、、、
895 :
デフォルトの名無しさん :2013/05/20(月) 20:57:17.75
ということは日本語の文字はエンコードされないんだね…
皆さん有り難うございます。度々失礼します。 今95%位解決出来そうな状態になってきています! matome = result2.map do | list | a = list.person_name.force_encoding("UTF-8") b = list.title.force_encoding("UTF-8") c = list.url res1 = {"keyword" => a,"title" => b,"url" => c,"image" => d} res2 = JSON.pretty_generate(@res1) end こんな具合で処理させたら日本語が表示される様になりました。 ですが、JSONの最初と最後の[ ]や、複数の時の区切り , が抜けてまた詰まりました。Orz. ただ根本的にやり方間違っていてやり直しが出そうな何か嫌な予感がしています。。。
皆さん有り難うございました! 解決出来ました、いやー嬉しいです。 matome = result2.map do | list | a = list.person_name.force_encoding("UTF-8") b = list.title.force_encoding("UTF-8") c = list.url d = list.image res1 = {"keyword" => a,"title" => b,"url" => c,"image" => d} end matome.to_json これで全てが解決しました。Orz 長い道のりでしたが良かったです。。。
898 :
デフォルトの名無しさん :2013/05/20(月) 23:03:40.03
force_encoding (バイト列を変えずにエンコーディング情報だけを付け替える) が必要ということは、DBの文字コードがUTF-8になってないような気がする。
>>898 返信ありがとうございます!DB側は以下の様な感じで特に問題ないと思ってました。
Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8
と言うのは
>>886 でresult1の時は文字が���こんな感じにならなかったので…
ただ根本的な原因は未だ分かってないのも事実です。
Sequelとかもそうなんだけど DBアクセスライブラリの場合、とってきた文字列のエンコーディングが 常にASCII-8BITとして設定されてしまう場合がある (実際にはUTF-8のデータが取得できているにもかかわらず) オプションか何かで、エンコーディングの指定を変えることができれば解決するんだが それができなければどうしようもない
なのでたぶん、DBの設定的には問題ない 問題があるとすればDBアダプタ側だろう
メリケンピーポーな人がメリケンピーポーなデータを出し入れしてメリケンピーポーなスクリプトで利用している限りは問題起こらんのだよな ファックメリケンピーポー
903 :
デフォルトの名無しさん :2013/05/22(水) 22:29:39.90
黙れヤポンスキー
ruby秋田
905 :
デフォルトの名無しさん :2013/05/25(土) 17:03:32.60
Rubyリファレンスマニュアル刷新計画 パッケージ版をダウンロードして ruby server.rb で起動した後にブラウザで localhost:10080 を表示してもただの真っ白な画面になってしまいます。 皆さんは普通に表示できてますか? こちらは Max OS X 10.8 ruby 1.8.7 mac標準のもの って環境です。
906 :
デフォルトの名無しさん :2013/05/25(土) 19:29:47.39
Rubyは国産だから調べやすいよといわれたんだけど RubyGemsは英語で書かれているし いくつかのモジュールのサイトも英語だった・・・なんだこれは!
海外で評価・改良されて見直されたのが今の地位 まあそれでなくとも隅々まで日本語化されてるなんてことはありえない
プログラミングを本格的にやるなら、英語くらい読めたほうがいいんじゃないの?
デスヨネ
910 :
デフォルトの名無しさん :2013/05/25(土) 21:15:29.02
911 :
デフォルトの名無しさん :2013/05/26(日) 02:01:05.23
逆輸入だから日本語はあきらめろってことだろ
いちいちサーバ立てさせて毎回変換させるあのやり方はあまり好きではない
というかあれは管理の都合であってユーザーの都合じゃねえ
RubyとサーバとHTTP/HTMLの知識があることが前提だし(つまり初期のRubyユーザーが前提)
>>906 それを実現させるためには
「ライブラリを書いたら日本語で説明をつける」「解説サイトを作ったら日本語ページが必須」「Rubyの質問は日本語で」
あたりを徹底しなければならない
それはおそらく「日本人しか使ってはいけないプログラム言語」になる
言いたいことはわかるんだけども
913 :
デフォルトの名無しさん :2013/05/26(日) 02:25:40.39
早く日本が世界征服出来ると良いね
914 :
デフォルトの名無しさん :2013/05/26(日) 18:04:55.46
>>906 Pythonやってみるのオススメ
rubyの調べ物がいかに楽なのかよくわかるから
またはHSPにでも鞍替えするとか
なでしことかでもない限りプログラムに英語は付き物だから、簡単な単語拾うくらいからでも英語に慣れといたほうがいいよ
まあ国産をうたうならせめてエラーメッセージくらい日本語で出してほしいわな
国産にこだわるのは、エセだから。
>>905 server.rbが入ってるパッケージ版はお勧めできない
あれは使い方が初心者向けじゃないので
ブラウザから見るか、chm版(HTMLヘルプファイル版)を落としたほうがよい
ブラウザから見るのであれば「サクサク引けるRubyリファレンスマニュアル」
chm版で見るのであれば「chm版リミックス」がオススメ
918 :
905 :2013/05/26(日) 22:40:34.63
>>917 どうもありがとうございます!サクサク〜を使うことにしました。
初心者向けじゃなかったんですね・・・
920 :
デフォルトの名無しさん :2013/05/27(月) 07:48:50.74
>>915 Ruby エラー
でググれば、エラーの見方教えてくれる日本語サイトがすぐ見つかるのはラッキーだよな
Argument Errorとかはわかりにくいとは言われてはいるな ArgumentError: wrong number of arguments (3 for 2) さて「引数3が正しいのに2個だった」と「引数2が正しいのに3個だった」のどちらでしょう。答はfor ネイティブな人にもネイティブじゃない人にも既存のコンピュータメッセージに慣れた人にも不自然さが少ない簡潔な表現が理想ではある
>>915 それは「国産プログラミング言語は英語を使うべきではない」と同じだ
それがどれだけ歪んでいるかおわかりだろうか
なでしこって歪んでんのか?
バカばっか
>>921 >ネイティブな人にもネイティブじゃない人にも
世界の言語は英語と日本語だけじゃないんだが。
おっと勘違い 国産じゃなくて日本発を謳っているんじゃないか 日本人に使われることは想定していないんだろう ならば、正しい
レシピ本は「303の技」と「逆引きハンドブック」でどっちが良さげですか? テンプレに前者は載ってますが。。。 Rはそれなりに使えますが、テキスト処理/ファイル処理用にRubyも覚えておきたいです。
929 :
デフォルトの名無しさん :2013/05/27(月) 21:49:32.83
独自の外部イテレータの作り方がわかりません(ruby1.8.x)
例えば次のようなHash構造(を列挙するための独自のイテレータ)に対してeachを呼んだとき
h = {
'a' => ['a',false],
'b' => ['b',false],
'c' => {'a'=>['ca',false], 'b'=>['cb',false]}
}
最初に必ず'b'が来るとか、値(配列)2番目の要素がfalseのときだけ列挙する(列挙の後でtrueに変更)
'c'のように値がHashであればこのHashを順に列挙する、などとしたいと思っています。
Pythonでは独自にnext()を定義した単純クラスの定義から始めるため(次に何を返すかをnext()に定義する)
考え方としてそこから抜け出せないところもあるのですが
Enumerable::Enumerator(ruby1.8.x)の利用を考えたとき
同じようにnext()を拡張したり、独自の機能を加えて使えるものなのか、わかりません。
http://doc.ruby-lang.org/ja/1.8.7/class/Enumerable=3a=3aEnumerator.html どのようなコードを書くようになるのでしょうか?
とっかかりとなるヒントをいただけるとうれしいです
930 :
デフォルトの名無しさん :2013/05/27(月) 22:48:04.53
>>929 「要素の列挙の仕方を定義する」方法を尋ねているのなら、それはeachを定義するということ。
hはHashなので、もともと持っているHash#eachをhについて上書きすることになる。
yieldを調べるといいよ
932 :
929 :2013/05/28(火) 13:26:51.26
>>930-931 ありがとうございます。今にしてみると質問時点でrubyには当てはまらない部分もあった気がしますが
ヒントをいただきました。まだ詰めきれてないので簡単ですが、こんな感じで↓
# Enumeratorでの列挙に利用されるmy_each()を定義
# hはMyHashインスタンスに
class MyHash < Hash
def my_each; /*次の値返す*/; end
end
# nextやeachでmy_eachが呼ばれるよう指定して外部イテレータを生成
iter = h.to_enum(:my_each)
ただ、my_eachの中で結局eachなど(内部イテレータ)を使って値を返すと
混在してあまり気持ちよくない感じのコードになる気がします。
Arrayだとインデクスのインクリメントなどでも書けるので
HashのキーをArrayに保持しておくとかするのが良さそう。
あと例えば↓のようにするとチグハグになってしまうみたいです
iter.next #=>最初の値
iter.each{...} #=>列挙状態と無関係に最初から順に値が帰る(内部イテレータと変わらない)
iter.next #=>保持されている列挙状態により2番目の値が返る
自分の場合、たまたまデータ構造が列挙済みかどうかのフラグを持ってるので対応できるのですが
Enumerable::Enumeratorのマニュアルにも"外部イテレータとして「も」使えます"とあるように
each(内部イテレータ)とnextなど(外部イテレータ)で分かれていて
意識してどちらか一方に統一して使うことが前提になってるんですよね、たぶん。
マニュアルで見る限りですが、ruby1.9では外部イテレータの機能が強化されてるみたいですし
古い話をしてたらすみませんm(_ _)m
933 :
929 :2013/05/28(火) 14:22:32.32
>>932 のmy_each()の定義で「値を返す」ってしてるけど
「ブロックに渡す(yield)」ですね
934 :
デフォルトの名無しさん :2013/05/28(火) 15:09:02.84
きっと心に深い闇を抱えているのでしょう
(´・ω・`) / `ヽ. お薬増やしておきますねー __/ ┃)) __i | / ヽ,,⌒)___(,,ノ\
>>936 変なのかは知らないが、プレゼン能力ゼロだなと俺は感じた
>>932 >next メソッドによる外部列挙の状態は他のイテレータメソッドによる 内部列挙には影響を与えません。
>ただし、 IO#each_line のようにおおもとの列挙メカニズムが副作用を 伴っている場合には影響があり得ます。
>>929 で引用したページにこう書いてあるが
939 :
デフォルトの名無しさん :2013/05/29(水) 11:58:06.08
GMOペイメントのカード決済を埋め込みでやりたいんだけど、 知ってる人いますか?
nextで何個か飛ばしてからeachで回したい eachを中断した後、中断箇所からnextやeachで再開したい
>>941 eachで回さずにloopとnextで回せばいいと思うが
eachで回したい積極的な理由が何かあるの?
もしあるならそれを書いて欲しいなって思う
>>932 (
>>929 )
だいぶ遅くなったけど、単純なツリー構造ライブラリを書いてみた。(約250ステップ)
http://play.island.ac/codepaste/code?id=1526 ライブラリ実装の特徴を挙げると、Rubyは純粋オブジェクト指向言語である、
言い換えると「あらゆるすべてがオブジェクトである」から、
(1) ツリーを(Hashではなく)Compositeパターンによるオブジェクトで表現した。
(2) (Stringだけでなく)以下のメソッドを提供しさえすれば、任意のオブジェクトを
要素としたツリーを構築できる。(いわゆるダックタイピング)
to_s, hash, eql?, <=>
(3) コンテナとしてSet(順序無&重複無)とArray(順序有&重複有)のどちらも利用できる。
外部イテレータのサンプル実装も含めてあるので、参考まで。
944 :
943 :2013/05/30(木) 12:09:36.59
カキコが遅くなったイイワケをば.... Rubyの組み込みクラス Enumerable::Enumerator だけど、いまいち汎用的じゃない。 (もちろん each の代わりに each_xxx が使えるという設計意図は満足してるけど....) 具体的には、列挙条件をイテレータメソッドとして定義するのではなく、 列挙時にパラメタとして指定したいなぁと考える。 たとえばソートを伴なう列挙(each_with_sorting)であれば、 enum = h.to_enum(:each_with_sorting) { |x, y| f(x) <=> f(y) } # (1) とか、仕様でブロックが渡せないのであれば、代わりにラムダ式をパラメタにして、 enum = h.to_enum(:each_with_sorting, lambda { |x, y| f(x) <=> f(y) } ) # (2) みたいに....。更にこれ(=この妄想)を一般化すると、each へ列挙条件をハッシュで オプションパラメタとして渡せればいい。 enum = h.to_enum(:each, # (3) :filter => lambda { |body| body == 'b' ), :sorter => lambda { |x, y| f(x) <=> f(y) } ) 残念ながら現状の(Enumerable::Enumeratorの)実装だと、 パラメタを文字列(String)へ変換し、それを列挙時に評価(eval)しているみたい。 だから、ラムダ式(2)やハッシュ(3)では列挙条件を指定できない。(Ruby 1.8.7 で確認)
>>944 sortやfind_allしてからto_enumするだけじゃダメってこと?
946 :
943 :2013/05/30(木) 22:08:55.53
>>945 多くのケースは、それでイイと思うよ。
言い換えると、ツリーを列挙オブジェクトへ変換(to_enum)しさえすれば、
その後は豊富なEnumerableaメソッドを組み合わせることで自在に加工できる。
ただしこの話、ツリーの親子関係を前提とするソートに関しては当てはまらない。
h.to_enum(:each_with_sorting).to_a
# => ["h", "a", "b", "c", "ca", "cb", "cba", "cbb", "cbc", "cc"]
h.to_enum.sort
# => ["a", "b", "c", "ca", "cb", "cba", "cbb", "cbc", "cc", "h"]
これを解決するには、ブロック(あるいはラムダ式)でソート条件を渡すしかないと考える。
つまり、ソートしてから加工ではダメで、ソートする時に計算できればイイ。
たとえば逆順にソートしたいなら、以下のようなコードになる。
h.to_enum(:each_with_sorting) { |x, y| (x <=> y) * -1 }
更には、今回のケース(
>>929 )だとツリー要素は単純型のStringであったけれど、
これがレコードのような複合型であった場合、ソート条件として各メンバーについて
昇順/降順や優先順位を指定したいという要求は必然であるはず。これにもパラメタ渡しは役立つ。
だから、Enumerable::Enumerator へは任意のパラメタを渡せることが「望ましい」と思う。
(少なくとも、リファレンスにはパラメタ(args)に関する制限事項を記述「すべき」)
ソートする時点でそれはEnumerableというよりはArrayではなかろうか
948 :
929 :2013/05/30(木) 23:06:31.18
>>942 すいません、eachにこだわるわけではなくloopで問題ありませんでした。
それをeachと書いてしまったのが
>>932 の「rubyに当てはまらない部分」でした。
pythonでは通常forループ(rubyのfor/inループみたいな)なんですが、
これに外部イテレータ(pythonではジェネレータ)を渡すと
内部的にnext()の呼び出しと、StopIteration例外が捕捉される動作に切り替わりまして
コード自体は変わらないんです。
それでubyではeachという風に、単純に置き換えて書いてしまった次第です
>>929 この思い込みから、違いに気づくのが遅くなりました。
>>943 ありがとうございます!
これはちょっとすぐに読み下せないので、勉強させていただきますm(_ _)m
エキサイトしてきました^^
949 :
943 :2013/05/30(木) 23:11:58.52
>>949 EnumerableはEnumerableとして動作するから意味があるのであって、Arrayにするのなら
to_aしちゃえばいいだけじゃないのかな
951 :
943 :2013/05/30(木) 23:39:03.02
>>950 単純にto_aしちゃうと、ツリーの親子関係が崩れちゃいますよ。
もちろん親子関係よりも大小関係が大切と考えるのであれば単純にto_aしちゃえばいいけど、
自分は「ツリーに関するソートの定義」として、
親子関係を維持したまま子同士の大小関係でソートするのが自然であると考えました。
以下の例(
>>946 から引用)について、
>>950 はどちらが自然な結果だと考えますか?
> h.to_enum(:each_with_sorting).to_a
> # => ["h", "a", "b", "c", "ca", "cb", "cba", "cbb", "cbc", "cc"]
> h.to_enum.sort
> # => ["a", "b", "c", "ca", "cb", "cba", "cbb", "cbc", "cc", "h"]
Enumerableは枚挙以上の意味はないからな 枚挙メソッドの実行のたびに順番が違うと困るならそれはEnumerableではなくArray Enumerable#sortではなくArray#sortなのはそのせい
>>952 [蛇足]
枚挙は、いとまがない時以外ではほとんど使わないよ。
普通は、列挙って言うよ。
俺が学生のころは数え上げっていってたな
Enumerableなんだからenumerateでいいんじゃないかみたいな感じもする まあどっちにしても「数えられる」という程度の意味しかない 順番つけはArrayの仕事
956 :
943 :2013/05/31(金) 22:37:07.53
>>943 のツリー構造ライブラリを更新しています。
http://play.island.ac/codepaste/code?id=1527 == 主な変更点
* 以下のイテレータメソッドを新規追加。
・each_tree -- ツリー要素(body)ではなく、ツリーそのものを返す
・each_with_lineage -- ツリー要素と素性(ルート要素から親要素へのArray)を返す
* イテレータメソッド each_if について、ノードの選択条件をパラメタ指定できるようにした。
* ライブラリ固有の例外について、それぞれをクラスとして明示的に定義した。
なお、子要素を保持するコレクションクラスとして集合を選ぶ場合、
ライブラリ固有のクラス Tree::Set の代わりに、標準ライブラリ set が提供するクラスである
Set(一般的な集合)とSortedSet(ソートされた集合)も利用できます。
http://doc.ruby-lang.org/ja/1.8.7/library/set.html 固有クラス Tree::Set と標準クラス Set とは、要素間で重複が発生した時の振る舞いに差異があります。
前者は例外 Tree::Exception::Duplication が発生するのに対し、
後者は新旧のいずれかを選んでツリーを構築します。お好みで選んで下さい。
(新旧のどちらが選ばれるかについて、リファレンスでは明記されていません)
sinatraを使ってミニアプリを作ろうとしているのですが、うまくいきません
http://codepad.org/lo5RHO7t 具体的にはまず404エラーと表示されます。(ブラウザから確認するとちゃんと存在するアドレスなのに)
いろいろ調べてるとなぜか begin endで囲むとこれが治るのですが今度はまたいろいろと問題が出てきて……
何がまずいのでしょうか?
ではひとつ質問です 「それをsinatraを使わずに書くとどうなりますか?」 sinatraは上級者が手を抜くために使うライブラリであって、初心者が手を抜くために使うライブラリではありませぬ sinatraがどういう動作をしてsinatraにどういう動作をさせているのかがわからない人は使ったらいかんです
RubyではlowerCamelCaseは全く使われない 誰があなたにそれを教えたのか知らないが、そんな本があるなら今すぐ安全なところで燃やせ
スネークケースだってそんなにクールでもないけどな… こればっかりは文化の選択みたいなもんで理屈ではどうにもなんないわ Rubyの変数とメソッドは全部小文字でアンダースコア区切りが「普通」だと言うしかない
>>960 ,961
そうなんですか どの本で見たとかじゃなくなんとなくやってました
普通に則って書いていきます
まあ統一されてりゃいいけどね でrubyは標準のライブラリがスネークケースで書いてあるから普通はそっち
Sinatraの罠に嵌ってる初心者の人はたまに見るな 誰が勧めてるのやら
何が罠だよ。何もわかってないくせに
罠だよ 「(規格の基礎知識を持っていて類似ライブラリの経験があれば)簡単で便利」の カッコの中を省略されていることに気付けないのは罠 万人向けではないものを万人向けであるかのように紹介解説するのは悪意 そんな解説はないほうがマシ
みんながUNIXシステムコールとC言語を知っていたRuby1.2くらいの頃の感覚が抜けない人がいまだにいるのですごめんなさい MLとかしか読んでない人が陥る病気です
sinatraは初心者向けの懇切丁寧な解説ページがあれば 初心者向けになり得ると思うんだけどねー それがない現時点では、初心者からすればRackを素で使った方が早い
え?どうかんがえてもsinatraのほうが簡単でしょ 入門になるページもあるし
970 :
デフォルトの名無しさん :2013/06/02(日) 12:02:40.39
どこ?
もしかして、sinatraだけで検索してないかw
「Sinatra 入門」で検索したらいろいろ出てくるんだな 少し前に検索したときに全然出なかったから、今もないものかと思ってた 適当なことを書いて申し訳ない あとオライリージャパンもSinatraの本を出してることにちょっと驚いた
974 :
943 :2013/06/02(日) 17:00:42.95
>>956 のツリー構造ライブラリを更新しています。
更新の目的は、
>>944 で述べた組み込みクラス Enumerable::Enumerator への不満の解消です。
http://play.island.ac/codepaste/code?id=1528 == 主な変更点
* ツリー構造クラス Tree::Abstract は列挙可能(enumerable)では無くなりました。その代わりに
ツリー列挙モジュール Tree::Enumerator を新規追加しています。
* 上記変更により、ツリー構造クラスからは以下の列挙メソッドが削除され、
each, each_tree, each_with_lineage, each_with_sorting, each_if
その代わりに列挙オブジェクト を生成するメソッド to_enum が追加されました。
* メソッド Tree::Abstract#to_enum(opts = {}) の引数はSymbolをキーとするHashです。
:reply_keys => [ .... ]
値はSymbolのArrayであり、そのSymbolは以下のいずれかを指定します。
この指定は、列挙ブロックへ渡される引数リストの仕様を示しています。
:body, :cond, :children -- それぞれ、ツリーオブジェクトの属性
:tree -- ツリーオブジェクトそのもの
:lineage -- ツリーの素性(ルート要素から親要素へのArray)
:filter => lambda { |tree| .... }
値はラムダ式で引数はツリーオブジェクトです。(Enumerable#select も参照)
:sorter => lambda { |x, y| .... }
値はラムダ式で各引数はツリーオブジェクトです。(Enumerable#sort も参照)
清々しいほどにRuby関係ないような気がします なにをどういうやりかたで通信してるかRubyはそんなこと知りませんので資料見て実装してください ただ、それくらいになるとgemで誰か作ってそうではある 探すと見つかるかもしれない
978 :
943 :2013/06/03(月) 01:26:41.66
>>976 どちらかといえば、「ネットワークプログラミング相談室」スレ向きの話題だね。
受信ソケットからのバイト列をいかに解釈するかという話は、何度となくQ&Aされている。
で、リンク先の文書を軽く読んでみたけど、その p53 には以下の記述がある。
通知を送信した結果、APNsがその通知を誤った形式、あるいはその他の
理解できない形式であると認識すると、APNsは切断の前にエラー応答パケットを返します
(エラーがない場合はAPNsは何も返しません)。図 5-3にエラー応答パケットの形式を示します。
質問は、この「エラー応答パケット」を受信する方法でいいのかな?
もしそうだとしたら、このパケットは常に6バイト固定みたいだから、
以下の手順でいいのではないかと思う。
(1) 拡張形式の通知パケットを(SSLソケット sock へ)送信
(2) response = sock.read(6) でエラー応答パケットを受信
(3) SSLソケット(sock)をクローズ
(4) メソッド String#unpack で各フィールド(command, status, identifier)を取り出す
(5) 各フィールドの値を確認する
補足1: (2)の受信で、(多重待ちやタイムアウト監視といった)必要に応じて select を使う
補足2: (5)の確認について、以下の条件が「すべて」成立した場合に限り、通知処理成功と判断する
(a) 応答パケット長(response.size)が6バイトである
(b) コマンド値が8である
(c) ステータス値が0である
(d) 通知識別子が通知パケットで指定した値と等しい
979 :
943 :2013/06/03(月) 19:02:09.87
>>978 に自己レスで訂正を入れる。
まず最初はオバカなミス。
X: (a) 応答パケット長(response.size)が6バイトである
O: (a) 応答パケット長(response.bytesize)が6バイトである
次に、リンク先の文書を読み直すと、APNsはエラーが発生すると応答パケットを送信した後で
TCPコネクションを閉じると書かれているけど、エラーが未発生だった場合の振る舞いが
明記されていない。これは正常であれば接続は維持されると解釈すべきだろうから、
このままでは
>>978 にある手順(2)の受信処理が無限待ちに陥る可能性がある。
従って、select(あるいは signal)を使ったタイムアウト監視が必須になるだろう。
更に、この箇所を真面目に設計するならば、通知トランザクションが発生する度に
対応する子スレッドを生成し、その子スレッドで(上記の訂正を含む)手順(1)..(5)を実行すべきだろう。
あるいは、(いわゆる)「非同期I/O処理」として手順(3)のソケットを閉じずに起動元へ制御を戻した後、
select で応答パケット受信を待つという実装でもかまわない。ただし、この場合には
適切なエラー処理ができるようにする為、通知パケットと応答パケットの対応付けが必須になる。
具体的には、たとえば通知識別子をキーとし通知パケットを値とするハッシュで対応を管理する。
なお、プロバイダをRailsのようなWebアプリとして設計する場合にはまた別の実装になるが、
非同期の考え方は同じなので、参考になると思う。
なお、ネットで検索するとRuby実装コードはいくつか見つけたけど(たとえば Apns4r)、
基本通知パケットを利用するか、あるいは拡張通知パケットを利用していても応答パケットを
無視しているものばかりだった。自力で真面目に実装するには、上段で書いたようにスレッディングや
非同期I/Oといったテクニックが必要になるが、できれば
>>976 には茨の道を切り開いてもらいたい。
>>977-979 返信が遅れてしまいました。
ありがとうございます。
何とか無事に動くものを作ることができました。。。
細かい内容まで本当にありがとうございます。
スクレイピングを使ったアンテナサイトを作成中です。 具体的には、芸能人ブログの画像を羅列するといったものなのですが、画像と記事URLを結び付けたいのですがむずかしいです。 ハッシュを使うにもキーを記事URLとすると同じキーがいくつも出来てしまいますし、二次配列もいまいちわかりません。 データベースを使うにも40行ほどのプログラムですこし大げさかな、とおもいます。 どうするのがベストでしょうか
どうするもなにも「その画像がどのサイトのものか」を知ってるのはあなただけなのだから、そのようにデータベース化すればいい 「このサイトから取ってきた画像」だったら「このサイト」の「画像」でいいんじゃないの Rubyには多次元配列のようなものはなくて、単に入れ子になった配列やHashに過ぎないから気楽にネストしていいぞ 配列やHashをファイルに保管するときは(テキストエディタで編集ができなくていいなら)pstoreがおすすめというか実質これしかねえ どういう構造にするかについての議論は、こればっかりは手探りで慣れて頂くしかないわ [ { :title => 'ブログ1タイトル', :url => 'ブログ1トップURL', :articles => ['post001.php','post002.php',...], images => {'post001.php'=>[], 'post002.php'=>['syame1.jpg']}, ...}, { :title => 'ブログ2タイトル', :url => 'ブログ2トップURL', ...}, ... ] みたいなブログごとのでっかいHashを配列に入れてeachで回して探すようにするのがとりあえずなんも考えずに済んで楽だろうと感じる これでダメな場合は別な構造を試す
>>982 気にせず多次元配列使っていいんですね
……配列の中に動的にハッシュを作って追加するほうほうがわからない……
>>983 逆とは?
>>984 「動的に」の意味が分からんがpushじゃダメなん?
>>985 ブログ - エントリー - 画像
- 画像
- エントリー - 画像
- 画像
というツリー構造にしたいのです。
動的にというのはRSSで取得したら随時 配列を作っていくということです
>>986 まずは
>>982 が例示してくれた
要素としてハッシュを持つような配列
値として配列を持つようなハッシュ
をそれぞれ理解してみようか?
>>986 h = {a: [1,2]}
たとえばこの[1,2]の部分を[1,2,3]に
したかったらどうしたらいいかな?って考えてみよー^ο^
>>989 それくらいは自分で試してみようか・・・
991 :
943 :2013/06/06(木) 09:59:00.26
992 :
デフォルトの名無しさん :2013/06/06(木) 10:32:14.78
rubyでsnsを作りたいのですが、作り方がのっているサイト教えてください
994 :
943 :2013/06/06(木) 11:12:05.64
自己レスでミスを訂正。 X: ブログ(Blog)へ動的に写真(Photo)を追加していく操作(add_images!)も含まれているので、 O: ブログ(Blog)へ動的に写真(Photo)を追加していく操作(add_photos!)も含まれているので、 それから写真クラス Photo について、現状では組み込みクラス String のほうが (簡潔だから)望ましいのだけれど、将来的に写真クラスへ様々な属性が追加される事を想定して、 あえて明示的に新規クラスとして定義している。たとえば(Googleの写真検索結果ページのように) 属性として写真のサイズを追加したい場合には、以下のようになる。 class Photo attr_reader :url, :width, :height def initialize(url, width, height) .... end .... end
>>990 はい……
>>991 ,994
ありがとうございます!
クラスはすごい流し読みをしたので使うことが億劫でした
じっくり読んでモノにします
996 :
943 :2013/06/06(木) 16:57:32.49
>>991 のコードを更新しました。
http://play.island.ac/codepaste/code?id=1531 ここまで(
>>991 ,994)、
>>981 ,986で提示された「お題」について、
アンテナサイト開発に必要なデータ構造とそれらへの基本操作をモデルとして書きました。
今回の更新では、それらの基本操作を組み合わせたアンテナサイト向けの応用操作を追加しています。
まず最初に、想定するアンテナサイトの処理概要を以下に示します。
* 初期化 -- 空のblogオブジェクトを生成する
* 更新 -- blogサイトからRSSを取得して解析し、その結果を元にblogオブジェクトを更新する
* 参照 -- blogサイトに関連した全写真を一覧にして返す
続いて、主な変更点です。
* 以下のメソッドを追加
* Blog#update!(other) -- (おそらくはRSS解析処理の結果である)別のblogオブジェクトで自身を更新
* Blog#each -- 関連したすべての写真オブジェクトを列挙
埋め
1000 :
デフォルトの名無しさん :2013/06/06(木) 17:04:29.35
ありがとうございました
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。