Ruby

FTP更新チェッカ

30分プログラム、その92。FTPのログを解析して、ごにょごにょするやつ。 id:mzp:20070723:ftpのバージョンアップ版。 使い方 $ ruby ftup.rb地味ですね。 コード #! /opt/local/bin/ruby -w # -*- mode:ruby; coding:utf-8 -*- # # ftup.rb - # # Copyright(…

コマンドラインでTwitterに投稿

30分プログラム、その91。コマンドラインでTwitterに投稿するためのスクリプト。 id:mzp:20070725:notifyの通知をTwitterでやれたら便利じゃね、とid:zyxwvが言っていたので。 使い方 $ twit --username="mzp" --password="xxxx" こんにちは こんにちは ソー…

和暦西暦変換

最近、西暦と平成の変換が必要になることが多いけど、即座にできないのでプログラムを書いてみた。これは、正しい怠惰の使い方ですよね。ただ、seirekiとかsyouwaという変数名を使うのはいやだったので、日本語識別子を試してみる。 日本語識別子は、-Kオプ…

FTPからのダウンロード

30分プログラム、その88。 FTPからファイルをダウンロードするやつ。 #! /opt/local/bin/ruby -w # -*- mode:ruby enconding:utf-8 -*- # # ftp_get.rb - # # Copyright(C) 2007 by mzp # Author: MIZUNO Hiroki <hiroki1124@gmail.com> # http://mzp.sakura.ne.jp/ # # Timestamp:</hiroki1124@gmail.com>…

Filezillaログ解析

30分プログラム、その87。 FileZillaのログを解析して、最近更新されたやつのリストを出力する。 $ ruby ftp_recently.rb log/* Recent Updates ============================================================ 2007/07/21 --------------------------------…

CEAN - Emacs Lisp インストーラ

id:mzp:19000201にまとめました。

Emacs-Lispインストーラ

30分(?)プログラム、その86。いや、1時間かかってるし、まだ完成してませんけどね。 家のPCと大学のPCとノートPCにEmacsLispをインストールするのが面倒になったので、自動インストーラを作ろう。たぶん、誰かやってるけどな。 るびマに載っていたDSLも使い…

FTPリスト

30分プログラム、その85。FTPのファイル一覧を取得するプログラム。 FTPサーバにいっぱいファイルがあるなぁ どれが更新されたか分りづらいなぁ 更新情報を自動生成したら、おもしろいかな ファイルリストを生成して、diffでいいな という動機。本当に稼動す…

ピラミッド その2

30分プログラム、その85。うー、日付をつけ間違えた。 id:mzp:20070714:pyramidoをRubyでやりなおしてみる。多少、表示を変えてたりする。 $ ruby pyramido.rb 6 * *** *********** ********* ********* *********** *** * $ ruby pyramido.rb 10 * *** ****…

拡張子ごとのファイルリスト

30分プログラム、その84。 拡張子ごとにファイル数を数えるプログラム。そこはかとなく、パイプでlsとかを繋げばできる気がしてる。ファイルを整理するごとに、拡張子だけを取り出して確認したがったので。 $ ruby -w ext.rb * * :[================= ] (bib…

_(アンダーバー)

るびマ出張版より。_という変数名を使うと、関数型言語の人には分りやすくなりますよ、という話。たとえば、連想リストから検索するコードはこう書いてた。 array = [['foo','bar'],['hoge','hage']] p array.find{|a,b| # bは使わない a == 'hoge' } でも、…

はてなとdel.cio.usの同期

30分プログラム、その80。プログラムしてないけど。はてブの内容を、del.cio.usに投稿してみる。 - module: RSS::load config: url: http://b.hatena.ne.jp/mzp/rss - module: reverse - module: Filter::deduped config: path: /tmp/pragger - module: Publ…

JRuby with Swing

30分プログラム、その74。JRubyで遊ぼう。 require 'java' include_class 'javax.swing.JFrame' include_class 'javax.swing.JLabel' frame = JFrame.new('hello') frame.add JLabel.new('Hello,world!!') frame.setSize 200,100 frame.setVisible true loop…

Publish::movable_type

30分プログラム、その67。 id:mzp:20070617:mtをPraggerでやってみよう。 require 'movabletype' def movable_type(config,data) url = config['url'] blogid = config['blogid'] username = config['username'] password = config['password'] title = conf…

Publish::Bookmark

30分プログラム、その66。http://www.nslabs.jp/bookmark.dtd.htmで出力するプラグイン。はてブの一部をSafariのブックマークに登録したかったので作っていみた。使いかたはこんな感じ。 - module: RSS::load config: url: http://b.hatena.ne.jp/mzp/rss?ta…

FuseFS

30分プログラム、その64。FuseFSで遊んでみる。 準備にだいぶ時間がかかった。 準備 MacFUSE Coreを入れる FuseFSを入れる。 ただし、FuseFSはgemには登録されていないので、手動でインストールする必要がある。 さらに、Mac版は上記とは別に用意されている…

自分自身を出力するプログラム

http://www.agusa.i.is.nagoya-u.ac.jp/person/mzp/hiki/?exercise#l23より。 自分自身を出力するプログラムを書け。 できるわけないだろうがっ。 open(__FILE__){|io| io.read.display } こんなのでお茶をにごしておく。

S式計算式

30分プログラム、その62。S式計算機。ちょっとさきの勉強会のネタ。本番は、OCamlで作ったのを持っていくつもりだけれども、とりあえずRubyでも作ってみる。 > 1 1 > (+ 1 2) 3 > (* (+ 2 3) 1 3) 15require 'strscan' require 'readline' def call(name) la…

Hikiハック

30分プログラム、その53。Hikiをちょっとだけ改造しよう。内輪Wikiで、TODO管理をしていたら、誰かから『sageでやれ』と怒られた。いい機会なので、sageでやりやすいように改造しよう。 sage自体は「タイムスタンプを更新する」チェックボックスをはずせばい…

MCXI文字列(ACM)

30分プログラム、その51。id:zyxwvのマネをして、ACMの問題を解いてみよう。http://www.acm-japan.org/past-icpc/domestic2005/C/C_ja.html大事なところだけ、引用すると 文字 "m","c","x","i" は,それぞれ 1000,100,10,1 を表し, 数字 "2",...,"9"…

ぼかし

30分プログラム、その47。普通のぼかし(blur)。普通じゃないぼかしは、ガウスぼかしとか。教材は、フルスクラッチによるグラフィックスプログラミング入門。 require "sdl" def map_surface!(surface,&f) surface.lock (0...surface.h).each do|y| (0...surf…

非決定計算

30分プログラム、その43。id:Gemmaさん出題によるラグランジェの4平方定理。id:zyxwv:20070531に対抗してみる。ある自然数nが与えられた場合、 という等式を満す非負の整数a,b,c,dをすべて求める問題。(微妙にオリジナルと変えました)まず、callccで非決定計…

bezier.rb

30分プログラム、その39。ベジエ曲線。ごぞんじの通りベジエ曲線は、4つの制御点をもとに曲線を書くための手法。各制御点をそれぞれ、(x0,y0),(x1,y1),(x2,y2),(x3,y3)とすると という式のtに0.0,0.1,...,1.0という値を代入して、得られる点を順にプロットし…

observable.rb

30分プログラム、その35。Observableモジュールを試してみよう。 $ ruby observable.rb 44 DigitObserver:44 GraphObserver:******************************************** 27 DigitObserver:27 GraphObserver:*************************** 27 DigitObserver…

pdf.rb

30分プログラム、その31。PDFをRubyで生成してみよう。インストールにとても手間取った。gemでcolor-toolsとtransaction-simpleを入れたあと、pdf-writerに日本語パッチを当てて手動でインストールする。 # -*- encoding:euc-jp -*- require 'pdf/writer' pd…

fizzbuzz.rb 3つ

30分プログラム、その27。眠いので、適当。今回は、最近話題のFizzBuzz問題。 1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリ…

擬似ハッシュ

30分プログラム、その26。そろそろ初めてから一ヶ月になるのか。今回は、Perlで実験的に取り入れられている疑似ハッシュ(Pseudo Hash)のRubyによる実装。 疑似ハッシュは、 {:age=>47,:eyes=>'brown',:weight=>60} のようなハッシュを、 [{:age=>1,:eyes=>2,…

rawk.rb

30分プログラム、その22。RubyによるAWKっぽいプログラム。次のようなls.rawkを用意する。 BEGIN{ $sum = 0 $count = 0 puts "BYTES\tFILE" } rule {|*vals| unless vals[0] == 'total' $sum += vals[4].to_i $count += 1 print vals[4],"\t",vals[8],"\n" e…

my_struct.rb

30分シリーズ、18。 Sturctクラスっぽいものを自前で作ってみよう。このマニュアルから使い方を引用すると、 Dog = Struct.new(:name, :age) fred = Dog.new("fred", 5) fred.age=6 printf "name:%s age:%d\n", fred.name, fred.age とすると、"name:fred ag…

xgrep.rb

30分シリーズ、その14。XML用grep、xgrep.rb。 TypingManiaの歌詞ダウンロードに使おうと思ったら、XMLがvalidじゃなかったので使えなかった可哀想な子。 <musicinformation> <musicinfo id="0" xmlpath="XML/Memorability.xml" musicpath="mp3/Memorability.mp3"> <musicname>Memorability</musicname> <artist>緋火流</artist></musicinfo></musicinformation>