|
![]() |
||||||||||||||||||||||||||||||||||||||||||||||
Range: bytes=0-499これを ruby の code で表すとこうなります。
def fetch(url, first = nil, last = nil) uri = URI.parse(url) header = Hash.new header['User-Agent'] = 'RangeFetcher/1.0' if(first || last) header['Range'] = "bytes=#{first}-#{last}" end http = Net::HTTP.new(uri.host) result = http.get(uri.path, header)[0] result.body end
location = 'http://localhost/~katsuwo/scryed/01_Alter.mp3' body = fetch(location) printf "Case of no Range: %d\n", body.size body = fetch(location, 0, 499) printf "Case of Range 0 to 499: %d\n", body.size body = fetch(location, 10000) printf "Case of Range 10000 to end: %d\n", body.size body = fetch(location, nil, 500) printf "Case of Range last 500 bytes: %d\n", body.sizeこういう test code を書いてみて、実行してみると
evergreen:~/work/work>ruby test.rb Case of no Range: 1613450 Case of Range 0 to 499: 500 Case of Range 10000 to end: 1603450 Case of Range last 500 bytes: 500のように正しく動いているようです:)
Accept-Ranges: bytesを返します。
% telnet localhost www Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. HEAD /~katsuwo/scryed/01_Alter.mp3 HTTP/1.1 Host: localhost HTTP/1.1 200 OK Date: Mon, 01 Oct 2001 16:00:45 GMT Server: Apache/1.3.20 (Unix) Debian/GNU mod_gzip/1.3.19.1a mod_ruby/0.9.3 Ruby/1 .6.5 Last-Modified: Wed, 26 Sep 2001 17:59:29 GMT ETag: "a5b47-189e8a-3bb21781" Accept-Ranges: bytes Content-Length: 1613450 Content-Type: audio/mpeg
% telnet www.google.com 80 Trying 216.239.33.100... Connected to www.google.com. Escape character is '^]'. GET /robots.txt HTTP/1.0 HTTP/1.0 200 OK Date: Tue, 02 Oct 2001 05:43:15 GMT Server: GWS/1.11 Connection: close Set-Cookie: PREF=ID=20c7b88e3287e253:TM=1002001395:LM=1002001395; domain=.google.com; path=/; expires=Sun, 17-Jan-2038 19:14:07 GMT Cache-Control: private Content-Length: 314 Content-Type: text/plain Last-Modified: Thu, 12 Jul 2001 05:10:15 GMT User-agent: * Disallow: /search Disallow: /groups Disallow: /images Disallow: /imgres Disallow: /keyword/ Disallow: /u/ Disallow: /univ/ Disallow: /cobrand Disallow: /custom Disallow: /advanced_group_search Disallow: /advanced_search Disallow: /googlesite Disallow: /preferences Disallow: /setprefs Disallow: /swr Connection closed by foreign host.
% convert -geometry foo.bmp to_phs.bmpあとはこれを添付したメールを phs に向かって送るのみ。
identify to_phs.bmp to_phs.bmp BMP 130x129 DirectClass 8-bit 49kb 0.0u 0:01
connection = RobotHTTP.new(address, port, agentname, proxy_addr, proxy_port) begin result, = connection.get(path) rescue Net::RobotHTTP::AccessDeniedError puts "access denied by robots.txt" endとか
begin RobotHTTP.start{address, port, agentname, proxy_addr, proxy_port) do |http| result, = http.get(path) end endとか。名前は適当だけど。
[adsl-modem] | [gateway] - [hub] - [client]という風な network を組みたいのだけど、これって可能なのかなぁ??
5.50.4134.0600 Internet Explorer 5.5 5.50.4522.1800 Internet Explorer 5.5 Service Pack 1 5.50.4807.2300 Internet Explorer 5.5 Service Pack 2という風に対応します。
def fetch(url, range = nil) uri = URI.parse(url) request = Net::HTTP::Get.new(uri.path) request['User-Agent'] = 'RangeFetcher/2.0' request.range = range if(range) http = Net::HTTP.new(uri.host) result = http.request(request) result.body end確かにこの方が ruby らしくて良いような気がしますね。
チビゲイツが、ホームページつくりの 基本(きほん)、ウラワザをおしえてくれるよ!子供向けのコンテンツに見えるけど、
デフォルト値を持つ引数が次のように増えてしまうと、 順番を覚えるのが難しいし、気持ちが悪い。ので、それを回避するために引数を hash にしてしまうことで
def foo(argument = {}) p argument end foo(:foo => 100, :bar => 200) foo()で、こっちが実行結果。
{:foo=>100, :bar=>200} {}ここでは、hash の key に symbol を使ったけど、ほかのものでも当然よい。
foo("use string to hash key" => 300)書きづらいし、読みづらいので本末転倒でしょうが。
def foo(argument = Hash.new([])) p argument endとかやったら、かなり tricky だろうなぁ。bug の温床になること請け合い(;_;
実際、「コンピューターをデバッグする」という言いまわしは、 1947年にハーバード大学の研究員たちが、『エイケンMark IIリレー式計算機』 のリレー式スイッチの間に蛾が挟まっているのを発見したことに由来する。とは。そのままだったのですねぇ。
●自社のシステム構築に関する力を見極め,無理のない計画を立てる ●複数のインテグレータを比較し,最も自社の業務に精通している業者を選ぶ ●経営トップが先頭に立って,システム導入の指揮をとり, 全社の理解を得ながら社員をプロジェクトに巻き込む ●要件定義や設計など上流工程に時間をかけ,要件が確定後はみだりに変更しない ●開発の進み具合を自社で把握できる力を身に付ける ●検収とテストに時間をかけ,安易に検収しない ●インテグレータとやりとりする社内の責任者を明確に決める ●システムが稼働するまであきらめず,あらゆる手段を講じる ●インテグレータと有償のアフター・サービス契約を結び,保守体制を整える ●インテグレータを下請け扱いしたり,開発費をむやみに値切ったりしない
また、先人の作った Keepalive の null パケット発信機能は、 元々は firewall 越しの接続が切れてしまうことを防止するのが 目的だったようです。 IPマスカレードやNAT、firewallを介した telnet や SSH の接続が、操作の手を休めている(1〜2時間)と 切れてしまうことがあります。 ssh に追加される Heartbeat 機能 は、こんな場合にも有用です。なんてうれしい効果も。
「でぶあん不徹底入門 2001 冬号 - くだらない質問だ。コレ、最強。-」というのは狙ってますね(爆笑)
stream = open('sample.xml') dom = XML::SimpleTreeBuilder.new.parse(stream) stream.close
# original extention for XML::DOM::NodeList module XML module DOM class NodeList # ruby like accessor. include Enumerable def join(str = '') collect{|x| x.to_s}.join(str) end end end endというのを加えている。
% apt-cache search dhis dhid - Dynamic Host Information System (DHIS) client perspic-texts - Some pre-indexed texts for perspic
% apt-cache search dns | grep -i dynamic | grep -i server gnudip - Scripts to enable a server to provide dynamic IP to name mappings ddt-server - Dynamic DNS Tools Server.なんてのも見つかった。
DDT stands for Dynamic Dns Tools. The goal of the project is to provide an open and free (in the GPL-sense) set of tools that will permit the deployment of secure and reliable dynamic DNS services.と書いてあるので、こっちの方が向いてそうにも思える。
aaa bbb ccc dddというのを見つけたら、
aaa bbb ccc dddのように先頭の white space をそろえて欲しいだけなのだけど〜。
<foo> class String def trim # :p end end </foo>は
class String def trim # :p end endと取りたいよねぇ。
class String def trim # :p end endこれじゃ全然うれしくない。
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkStation\Parameters] "EnablePlainTextPassword"=dword:00000001こんな感じ。
class String def trim! [" ", "\t"].each do |space| size = scan(/^#{space}+/).compact.collect{|x| x.size}.min gsub!(/^#{space}{#{size}}/, '') if(size && size.nonzero?) end end def trim (str = clone).trim! str end end
尚本日より1週間以内にご連絡いただけない場合は、 大変申し訳ございませんが一旦お取消とさせていただきます。 お客様より何等かのご連絡を頂戴していましたら、うわぁ(;_;