|
|
||||||||||||||||||||||||||||||||||||||||||||||
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週間以内にご連絡いただけない場合は、 大変申し訳ございませんが一旦お取消とさせていただきます。 お客様より何等かのご連絡を頂戴していましたら、うわぁ(;_;