はてなキーワード: .NEWとは
8/18追記
vimperator2.0preから;bが実装されたので、本記事は意味をなさなくなりました。
Windows+Firefox3で確認。
hints.jsのprocessHints()に
case "b": liberator.buffer.followLink(elem, liberator.NEW_BACKGROUND_TAB); break;
を追加。7/4のバージョンだと336行目だった。
hints.jsのreturn部のshowメソッドの最初の行にbも含める。
if (mode == liberator.modes.EXTENDED_HINT && !/^[;?asoOtTvVwWyYb]$/.test(minor))
638行目だった。
buffer.jsのreturn部のfollowLinkメソッドを
case liberator.NEW_TAB: newTab = true; break; case liberator.NEW_BACKGROUND_TAB: newWindow = true; newTab = true; break;
のように変更。
これでCtrl+Shift+クリックが可能に。
Macだと新しいバックグラウンドのタブに開くキーバインドが違うからうまくいかないかも。
@see http://www.y-adagio.com/public/standards/tr_dom2_events/events.html のinitMouseEventメソッドの引数の説明。
まあ、Picasaウエブアルバムを使うということなのだが。落ち着いて聞いてくれ。俺はMacなのでWinでできるかどうか知らん。
1.Picasaの利用開始する(GmailやiGoogleを使っていれば簡単)
2.Picasa Web Albums Uploaderをダウンロードインストールする
3.シャンバラなどにいっていつものようにエロ画像をダウンロード
4.Picasa Web Albums Uploaderを起動
5. +ボタンを押す。Photos modified:をToday, Photos in:をComputerを選ぶ
7.New Albumを選び Unlisted Albumを選ぶ(じゃないと公開したことになりとっつかまる)
8.アップロード。Macのダウンロードフォルダを空っぽにしておく
9.落ち着いたらPicasaウエブアルバムを見ながら、キャプションだとかタグだとかを付ける
10.Enjyo!ってやつだ
だれか、オートメータを作ってくれ。
よもや、レスがついてるとは思わなかった。
興味を持ってもらえてサンクスです。
entry = diary.entry('20070712231804')
でエントリー指定してたからなんなんだろうと思って。
editもできるってことなのかな?
書き込んだあとの編集機能はいまんとこなし。
# get entry from id entry = diary.entry('20070712231804') # puts entry title puts entry.title # puts entry content puts entry.content
で、そもそもRubyに詳しくない自分からするとちゃんとした使い方がそれでもわからない。
バカでごめんねなんだけど、どうやって使えばいいの?
たとえば、エントリのタイトル一覧(1ページ目だけだけど)を出力するなら
diary = Masuda::Diary.new diary.entries do |entry| puts entry.title end
こんな感じかな。
新しいエントリを登録するなら
diary = Masuda::Diary.new diary.login('my_id', 'my_pass') diary.post('koko wa title ne', <<EOS) koko ni kizi no honbun wo kaku EOS
とか。
ずらーっと増田らしきものを読み込む。
そりゃそうだわなと思いながら文字化けの山。
文字化けなのは、たぶん増田のエントリ(UTF-8)をそのまんま取得しているせいだと思う。
~$ ruby hoge.rb | nkf -Ws
出力するときにSJISに変換するとか。
require 'rubygems' require 'masuda' require 'kconv' diary = Masuda::Diary.new diary.entries.each do |entry| puts entry.title.tosjis puts entry.content.tosjis end
あと
session[:diary] = diary.raw
diary = Masuda::Diary.restore(session[:diary])
の...って何でしょうか??
Masuda::Diary#rawはインスタンスをシリアライズするメソッド。
ログイン済みのインスタンスをシリアライズしてセッションにつっこんどいて、次のリクエストでも使いまわすとか。
わかりづらい文章で申し訳ない。
これは何をするための?
単にRubyから増田を読み書きするためのライブラリだけど、分かりづらかったかな。。。
バックアップとってくれるのかな?
diary = Masuda::Diary.new diary.login('my_id', 'my_pass') diary.my_entries.each do |entry| open("#{entry.id}.txt", 'w') do |f| f << entry.content end end
とか。
http://rubyforge.org/projects/masuda/
作った。
gem install masuda
require 'rubygems' require 'masuda' diary = Masuda::Diary.new diary.entries.each {|entry| puts entry.content } entry = diary.entry('20070712231804') puts <<EOS #{entry.title} #{entry.content} EOS entry.trackbacks.each {|trackback| puts trackback.snippet } diary.login('my_id', 'my_pass') diary.my_entries.each {|entry| puts entry.content } diary.post('Ruby is ...', <<EOS) A dynamic, open source programming language with a ... EOS session[:diary] = diary.raw ... diary = Masuda::Diary.restore(session[:diary])
本講座ではほかの言語は触ったことがあるが、Ruby未経験者を対象にRailsを触るための最小限のrubyの知識を身につけるためのものである。
と、堅苦しく書いたけど仕事で急いでrailsを触れうようになるための最低限の情報だけをまとめてみたよ。
これを読んだだけではRubyでプログラムを書けるようにはならないと思うけど、Railsを使った開発だといきなり何もできないってことはなくなるはずだよ。
肩の力を抜いて読んでほしいな。
いきなり今まで宣言していない名前を使ってもおこらえないよ。
answer_to_life_the_universe_and_everything = 42 # answer_to_life_the_universe_and_everything ????~A~S??~S????~H~]??~A????~Y??| ??~A~Y??~K??~B
なんて書いても問題ないんだ。
静的言語をやってきた人には型の宣言がないことに違和感を感じる人もいるかもしれないけど、Rubyでは型はあんまり気にしないんだ。
int x = HogeHoge.new;
みたいな書き方では
変数xを用意してそこにHogeHoge.newを代入する。といった説明を受けたと思う。
でもRubyではちょっと違う考え方をするんだ。
x = Foo.new
だとFoo.newの変数を用意して、それを名前に"束縛"するって説明することが多いよ。
ラベルが貼られた箱を用意してそこに何かを入れるか、何かが入った箱を用意してそれにラベルを張るかの違いだね。後者のほうがちょっとだけ柔軟なんだ。
そして、柔らかいほうがRuby流って気がするよ。
でもそんなRubyでもちょっとだけ名前に関するルールがある。
小文字からはじまる名前が局所変数
ってルールだよ。
Railsだったらとりあえず@からから始まる名前にしておけばたいていは問題ないんじゃないのかな。
JavaやC言語ではif文なんかをよく使うよね。Rubyでもほとんど一緒だよ。
if something_condition do_some_thing elsif other_condition do_another_thing else do_something_if_you_wont end
もちろんelsifやelseが必要なければ省略することができるよ。
ほかにもRubyには便利な分岐の書き方があるよ。
so_some_thing if some_condition
みたいに後置でも書けるんだ。
どっちでも好きなほうを使えばいいと思うよ
def func_name ( some_val_names ) do_some_thing end
といった感じでdef..endでくくるだけで簡単に関数を宣言できるよ
そして関数の戻り値は最後に評価した値が自動的に戻り値になるんだ。
def baz 10 end
これは常に10を返す関数の例だよ。
プログラムをしていて非常によく使うデータの型といえば配列(Array)や連想配列(Hash)だよね。
Rubyではそれらを簡潔に使うために専用の文法を用意している。
それが[]と{}だ。
arr = [1,2,3,"A","B","CDE"] #??~M很~W宣訾@ has = {1 => "A",2 => "B", 3 => "C"} #??~O??~C????~CťΣ訾@ puts arr[3] puts has[2]
A B
Ruby,Windows COM APIの知識がそれなりにあることを前提としています。あしからず。
あと、用語の使い方は結構いい加減です。訂正ヨロ。
まずは、GoogleEarthをインストールしよう。http://earth.google.co.jp/ から無料でダウンロードできます。
次に、COM APIの登録。コマンドプロンプトで、GoogleEarthをインストールしたフォルダ(通常は、c:\Program Files\Google\Google Earth)に移動して次のコマンドを実行します(>は入力する必要はありません)。
>googleearth.exe /RegService
これを実行することによりCOM APIを介して外部から操作することが可能になります。
次にRubyの実行環境を整えます。が、説明が面倒なので省きます。ActiveScriptRubyでぐぐれ!
さて、ここから実際にGoogleEarthを動かしてみます。こういうときはirbが便利ですね。ActiveScriptRubyが正しくセットアップされていれば、デスクトップにRuby Consoleというショートカットができているはずです。これを起動すると、Rubyにパスが通った状態でコマンドプロンプトが起動するはずです。そこでirb(Enter)と入力してみましょう。
irb(main):001:0>
というふうに表示されればOKです。
どんどんいきましょう。irbで、
>require 'win32ole'
と入力してください(>は入力しません。プロンプトがでているという意味のお約束です)。これで、COM APIをRuby上で取り扱うことが出来るようになります。
次に、
>ge = WIN32OLE.new('GoogleEarth.ApplicationGE')
と入力しましょう。変数geがGoogleEarthのCOM APIのインタフェースのインスタンスになります。geのメソッドを呼び出すことによりGoogleEarthを操作します。GoogleEarthを起動していない場合、ここで起動されます。
では、いよいよGoogleEarthを動かします。GoogleEarthでは、視点情報をCameraと呼称しています。カメラを移動させるために、カメラ情報へのインタフェースを生成します。
>cam = WIN32OLE.new('GoogleEarth.CameraInfoGE')
この、camのプロパティを設定することによりカメラ情報を設定することが出来ます。
>cam.FocusPointLatitude = 35.0 =>35.0 >cam.FocusPointLongitude = 135.0 =>135.0
実際に入力するのは、1行目と3行目です。Latitude:緯度、Longitude:経度です。緯度は赤道を中心として+90(北方向)から-90(南方向)の値をとります。経度は+180(東方向)から-180(西方向)の値をとります。日本の場合、どちらも+になります。
実際に視点を移動させるには、先ほどのgeのメソッドを呼び出します。
>ge.SetCamera(cam,1)
GoogleEarthでの表示が切り替われば成功です。場所は日本どこかです。岡山のあたりでしょうか。
(つづく?)
http://anond.hatelabo.jp/20070711013155
人待ちの間暇だったから作ってみたよー。
さっくり作ったから無駄が多い気がするけど、とりあえず動いた。
全体が埋まったかどうかの判定をしないでひたすらまわしまくってるし、なんか綺麗な形じゃないけど、とりあえず投稿しちゃうよ!
これ綺麗な形にするの結構難しいんじゃないかな。面白いね。
class Maze class Box WALL = 0 LOAD = 1 def initialize(state = LOAD) @state = state end def is_wall? return true if @state == WALL false end def is_load? return true if @state == LOAD false end def set_wall @state = WALL end def set_load @state = LOAD end end TOP = 10 RIGHT = 11 BOTTOM = 12 LEFT = 13 def initialize(height = 100, width = 60) @height = height @width = width @data = Array.new self.fillbox @counter = 1000 @root = Array.new end def choose_random return rand(@width-3)+1, rand(@height-3)+1 end def choose_direct t = rand(4)+10 return t end def move(x, y, t) new_x = x new_y = y case t when TOP new_y -= 1 when RIGHT new_x += 1 when BOTTOM new_y += 1 when LEFT new_x -= 1 end return new_x, new_y end def make_load?(x, y) return false if x < 0 or y < 0 or x > @width-1 or y > @height-1 return false if @data[x][y].is_load? true end def dead_end?(x, y, t) case t when TOP if make_load?(x-1, y) and \ make_load?(x-1, y-1) and\ make_load?(x, y-1) and\ make_load?(x+1, y-1) and\ make_load?(x+1, y) then return false end when RIGHT if make_load?(x, y-1) and \ make_load?(x+1, y-1) and\ make_load?(x+1, y) and\ make_load?(x+1, y+1) and\ make_load?(x, y+1) then return false end when BOTTOM if make_load?(x-1, y) and \ make_load?(x-1, y+1) and\ make_load?(x, y+1) and\ make_load?(x+1, y+1) and\ make_load?(x+1, y) then return false end when LEFT if make_load?(x, y+1) and \ make_load?(x-1, y+1) and\ make_load?(x-1, y) and\ make_load?(x-1, y-1) and\ make_load?(x, y-1) then return false end end true end def check_all?(stack) for i in TOP..LEFT do return false if !stack.include?(i) end true end def extend(x, y) @data[x][y].set_load check_stack = Array.new loop do t = choose_direct check_stack << t new_x, new_y = move(x, y, t) if enable_new_point?(new_x, new_y) if !dead_end?(new_x, new_y, t) then @root << ["ex", new_x, new_y, t] extend(new_x, new_y) break end end break if check_all?(check_stack) end end def enable_new_point?(x, y) return false if x<=0 or y <= 0 or x > @width-1 or y > @height-1 return false if @data[x][y].is_load? true end def _make x = y = 0 loop do x, y = choose_random break if @data[x][y].is_load? end @root << [x,y] extend(x, y) end def make_goal x = @width - 2 y = @height - 1 for i in 1..@width-3 if @data[x-i][y-1].is_load? then @data[x-i][y].set_load break end end end def make_start for i in 1..@width-3 if @data[i][1].is_load? then @data[i][0].set_load break end end end def make self.fill_all x, y = choose_random @root << [x,y] @data[x][y].set_load extend(x,y) while(!is_fill?) do _make end make_goal make_start self end def is_fill? @counter -= 1 return true if @counter < 0 false end def fillbox for i in 0...@width do @data[i] = Array.new for j in 0...@height do @data[i][j] = Box.new end end end def fill_all for i in 0...@width do for j in 0...@height do @data[i][j].set_wall end end end def output for i in 0...@height do for j in 0...@width do if @data[j][i].is_wall? then print "#" else print " " end end print "\n" end end end Maze.new(30, 30).make.output ## output # ############################ # ## # # ## # # ## ## ## ## # ## ### # ### # ### # # #### ### # # # ## ## ## ### # # # ## ### # # # # #### ## # ### ## ## ## ## ### # ## # # # ### # # #### # ## ## ## # ## # #### # # ### # # # ### # #### # ## # # ## ## ## # # ### ###### ###### ### ####### ### # # ## ### # # # ## # # # ####### # # # # ### ### # # # # ## ## # ## # # ### # ######## ######## # # # ## ## # # ### # ### ## ## ## ## ##### # # ## # # # ### # # # ######## # ##### ## # # ## # ## # # ##### # # # ####### # ## # ## # ## ## # ## ### ### ## ####### # # ## ## ## ## ### ## # # #### ### # # ## # ## # # # ## ## # # ### ###### ## # # # # # # ## # ### # ## ## # # # # # ## ## # # ## ## # # ## # ## # ########################### ##
想定していた回答はこんなの
def setr(a,k,str) a[k-1] = str if a[k-1]==nil && k<=100 end res = Array.new(100) (1..100).each{|i| setr(res,i ,i.to_s) setr(res,i*3 ,"Fizz") setr(res,i*5 ,"Buzz") setr(res,i*15,"FizzBuzz") } print res.join("\n")
http://anond.hatelabo.jp/20070508173455 が気に入ったのでこなたあげます っ(=ω=.)