ライブラリ
- ビルトイン (1410)
- bigdecimal (2)
-
cgi
/ core (44) -
cgi
/ session (55) -
cgi
/ session / pstore (11) - csv (341)
- e2mmap (12)
- fiddle (99)
- fileutils (11)
-
irb
/ input-method (11) - json (44)
- logger (35)
- monitor (27)
-
net
/ http (33) -
net
/ imap (11) -
net
/ telnet (8) - objspace (33)
- openssl (396)
- optparse (495)
- prime (33)
- pstore (11)
- psych (99)
- rake (154)
-
rake
/ loaders / makefile (11) -
rake
/ packagetask (33) -
rdoc
/ context (11) -
rdoc
/ generator / json _ index (11) -
rdoc
/ markdown (11) -
rdoc
/ parser (11) -
rdoc
/ parser / c (11) -
rdoc
/ parser / ruby (11) -
rdoc
/ parser / simple (11) - resolv (11)
- rexml (11)
-
rexml
/ document (165) -
rexml
/ parsers / pullparser (11) -
rexml
/ parsers / sax2parser (11) -
rexml
/ parsers / streamparser (11) -
rexml
/ parsers / ultralightparser (11) -
rinda
/ tuplespace (11) - ripper (11)
-
ripper
/ filter (11) -
ripper
/ sexp (22) -
rubygems
/ command (11) -
rubygems
/ dependency _ installer (11) -
rubygems
/ installer (11) -
rubygems
/ package (11) -
rubygems
/ package / tar _ input (11) -
rubygems
/ package / tar _ output (11) -
rubygems
/ package / tar _ reader (22) -
rubygems
/ package / tar _ writer (33) -
rubygems
/ requirement (33) -
rubygems
/ security (11) -
rubygems
/ server (11) -
rubygems
/ source _ index (11) -
rubygems
/ uninstaller (11) -
rubygems
/ user _ interaction (44) -
rubygems
/ version (110) - shell (6)
-
shell
/ builtin-command (6) -
shell
/ command-processor (6) -
shell
/ filter (24) - socket (99)
- stringio (336)
- tempfile (30)
- thread (8)
-
webrick
/ cgi (11) -
webrick
/ httpresponse (44) -
webrick
/ httpserver (22) -
webrick
/ httpservlet / abstract (33) -
webrick
/ httpservlet / filehandler (11) -
webrick
/ httpversion (33) -
webrick
/ log (11) -
win32
/ registry (55) - win32ole (66)
- zlib (154)
クラス
- Array (27)
- BasicSocket (11)
- BigDecimal (2)
- CGI (22)
-
CGI
:: Session (22) -
CGI
:: Session :: FileStore (11) -
CGI
:: Session :: MemoryStore (11) -
CGI
:: Session :: NullStore (11) -
CGI
:: Session :: PStore (11) - CSV (286)
-
CSV
:: Table (22) -
Encoding
:: Converter (99) -
Encoding
:: UndefinedConversionError (11) - Enumerator (11)
- Exception (44)
- Fiber (5)
-
Fiddle
:: Closure (11) -
Fiddle
:: Closure :: BlockCaller (11) -
Fiddle
:: Function (77) - File (44)
-
Gem
:: Command (11) -
Gem
:: DependencyInstaller (11) -
Gem
:: FileOperations (11) -
Gem
:: Installer (11) -
Gem
:: Package :: TarInput (11) -
Gem
:: Package :: TarOutput (11) -
Gem
:: Package :: TarReader (22) -
Gem
:: Package :: TarWriter (11) -
Gem
:: Package :: TarWriter :: BoundedStream (11) -
Gem
:: Package :: TarWriter :: RestrictedStream (11) -
Gem
:: Requirement (33) -
Gem
:: Security :: Policy (11) -
Gem
:: Server (11) -
Gem
:: SourceIndex (11) -
Gem
:: Uninstaller (11) -
Gem
:: Version (99) - IO (708)
-
IRB
:: StdioInputMethod (11) - Integer (11)
-
JSON
:: Parser (11) -
JSON
:: State (33) - Logger (22)
-
Logger
:: Application (1) -
Logger
:: LogDevice (11) - Method (11)
- Monitor (5)
-
Net
:: HTTP (11) -
Net
:: HTTPGenericRequest (22) -
Net
:: IMAP (11) -
Net
:: Telnet (6) - Object (11)
-
OpenSSL
:: PKCS12 (11) -
OpenSSL
:: PKCS7 (22) -
OpenSSL
:: PKey :: DH (33) -
OpenSSL
:: PKey :: DSA (44) -
OpenSSL
:: PKey :: RSA (55) -
OpenSSL
:: SSL :: SSLContext (44) -
OpenSSL
:: SSL :: SSLSocket (22) -
OpenSSL
:: SSL :: Session (11) -
OpenSSL
:: X509 :: CRL (22) -
OpenSSL
:: X509 :: Certificate (22) -
OpenSSL
:: X509 :: Extension (22) -
OpenSSL
:: X509 :: ExtensionFactory (55) -
OpenSSL
:: X509 :: Request (22) - OptionParser (484)
- PStore (11)
- Prime (22)
-
Psych
:: Emitter (11) -
Psych
:: Nodes :: Document (33) -
Psych
:: Stream (11) -
Psych
:: Visitors :: YAMLTree (11) -
RDoc
:: Context :: Section (11) -
RDoc
:: Generator :: JsonIndex (11) -
RDoc
:: Markdown (11) -
RDoc
:: Options (11) -
RDoc
:: Parser (11) -
RDoc
:: Parser :: C (11) -
RDoc
:: Parser :: Ruby (11) -
RDoc
:: Parser :: Simple (11) -
REXML
:: Child (11) -
REXML
:: DocType (11) -
REXML
:: Document (33) -
REXML
:: Formatters :: Pretty (11) -
REXML
:: Formatters :: Transitive (11) -
REXML
:: Instruction (33) -
REXML
:: NotationDecl (11) -
REXML
:: Parsers :: PullParser (11) -
REXML
:: Parsers :: SAX2Parser (11) -
REXML
:: Parsers :: StreamParser (11) -
REXML
:: Parsers :: UltraLightParser (11) -
REXML
:: XMLDecl (22) -
Rake
:: Application (11) -
Rake
:: FileList (88) -
Rake
:: InvocationChain (44) -
Rake
:: MakefileLoader (11) -
Rake
:: PackageTask (33) - Regexp (33)
-
Resolv
:: DNS :: Resource :: IN :: SRV (11) -
Rinda
:: TupleSpace (11) - Ripper (33)
-
Ripper
:: Filter (11) -
RubyVM
:: InstructionSequence (33) - Shell (6)
-
Shell
:: AppendIO (6) -
Shell
:: CommandProcessor (6) -
Shell
:: Filter (24) - SignalException (33)
- Socket (55)
-
Socket
:: Option (11) - StopIteration (11)
- String (11)
- StringIO (325)
- Tempfile (30)
- Thread (109)
-
Thread
:: Backtrace :: Location (44) -
Thread
:: ConditionVariable (33) - TracePoint (17)
- UDPSocket (11)
- UNIXServer (11)
-
WEBrick
:: BasicLog (11) -
WEBrick
:: CGI (11) -
WEBrick
:: HTTPResponse (44) -
WEBrick
:: HTTPServer (22) -
WEBrick
:: HTTPServlet :: AbstractServlet (33) -
WEBrick
:: HTTPServlet :: FileHandler (11) -
WEBrick
:: HTTPVersion (33) -
WIN32OLE
_ PARAM (11) -
WIN32OLE
_ TYPE (22) -
WIN32OLE
_ TYPELIB (33) -
Win32
:: Registry (55) -
Zlib
:: Deflate (33) -
Zlib
:: GzipReader (22) -
Zlib
:: GzipWriter (33) -
Zlib
:: Inflate (11)
モジュール
-
CGI
:: QueryExtension (22) - Exception2MessageMapper (12)
- FileUtils (11)
-
Gem
:: DefaultUserInteraction (44) - Kernel (46)
- Marshal (44)
- MonitorMixin (11)
- ObjectSpace (33)
- Psych (22)
- Rake (11)
- Zlib (33)
キーワード
-
$ stdin (11) -
1
. 6 . 8から1 . 8 . 0への変更点(まとめ) (11) - < (6)
- <=> (22)
- == (11)
- === (11)
- =~ (11)
- > (6)
- >> (6)
- Application (1)
-
BEST
_ COMPRESSION (11) - CSV (11)
- Complex (12)
- ConditionVariable (22)
- DEFAULT (11)
-
DEFAULT
_ COMPRESSION (11) -
DEFAULT
_ VERSION (11) - ExtensionFactory (11)
- Fail (6)
- Float (6)
- GzipReader (11)
- GzipWriter (11)
- Instruction (11)
- Integer (6)
- Location (11)
-
MAJOR
_ VERSION (11) -
MINOR
_ VERSION (11) -
NEWS for Ruby 2
. 0 . 0 (11) -
NEWS for Ruby 2
. 1 . 0 (11) -
NEWS for Ruby 2
. 2 . 0 (10) -
NEWS for Ruby 2
. 3 . 0 (9) -
NEWS for Ruby 2
. 4 . 0 (8) -
NEWS for Ruby 2
. 5 . 0 (7) -
NEWS for Ruby 2
. 6 . 0 (6) -
NEWS for Ruby 2
. 7 . 0 (5) -
NEWS for Ruby 3
. 0 . 0 (4) -
NEWS for Ruby 3
. 1 . 0 (3) -
NO
_ COMPRESSION (11) - NotationDecl (11)
- OptionParser (11)
- ParseException (11)
- Raise (6)
- Rational (22)
- STDCALL (11)
- Stream (11)
- StringIO (11)
- Telnet (2)
- Thread (11)
- UndefinedConversionError (11)
- Version (11)
- abi (11)
-
abort
_ on _ exception (11) -
abort
_ on _ exception= (22) -
absolute
_ path (11) - accept (22)
-
accept
_ nonblock (11) -
add
_ loader (11) -
alias
_ extension (11) -
allocation
_ sourcefile (11) -
allocation
_ sourceline (11) - append (11)
- application= (11)
-
backtrace
_ locations (33) -
base
_ label (11) - body= (11)
-
body
_ stream (11) -
body
_ stream= (11) - broadcast (11)
- bump (11)
- bytes (14)
- call (11)
-
cgi
/ session (11) - closed? (11)
- compile (22)
-
compile
_ option= (11) - configure (11)
-
connect
_ nonblock (11) - content (11)
-
content
_ length (11) -
content
_ length= (11) - crl= (11)
- csv (11)
-
default
_ argv (11) -
default
_ argv= (11) - deflate (11)
-
destination
_ encoding (11) - display (11)
- disposition (11)
-
do
_ OPTIONS (11) - dump (44)
- each (88)
-
each
_ byte (22) -
each
_ char (22) -
each
_ line (88) - egrep (11)
- environment (11)
- eof (11)
- eof? (11)
-
error
_ char (11) - exception (11)
-
excluded
_ from _ list? (11) - existing (11)
- existing! (11)
- ext (11)
- fiddle (11)
- filter (33)
-
for
_ fd (11) - foreach (22)
- generate (11)
-
generate
_ line (11) -
get
_ instance (11) - getbyte (22)
- getc (22)
- getopts (44)
- gets (55)
- gsub! (11)
- header (11)
- help (11)
-
http
_ version (11) - import (11)
- inspect (22)
- instance (22)
-
instruction
_ sequence (6) - io (11)
-
irb
/ completion (11) - isatty (11)
-
issuer
_ certificate= (11) -
last
_ error (11) - lineno (11)
- lineno= (11)
- lines (14)
- link (11)
- load (22)
-
major
_ version (22) -
marshal
_ dump (11) -
marshal
_ load (11) - member? (11)
- merge (11)
-
minor
_ version (22) - mount (11)
- multipart? (11)
- name (11)
- new (1178)
-
new
_ cond (16) -
new
_ session (11) -
next
_ values (11) -
on
_ head (11) -
on
_ tail (11) - open (174)
- optional? (11)
- order (44)
- order! (22)
- out (29)
- pack (16)
-
package
_ files (11) -
package
_ files= (11) - params (11)
- parse (55)
- parse! (11)
-
parse
_ csv (11) -
parse
_ line (11) -
parse
_ stream (11) - path (2)
- permute (22)
- permute! (11)
- pipe (88)
- popen (154)
- pos= (11)
- preprocess (2)
- prerelease? (11)
-
previous
_ sibling= (11) -
prime
_ division (33) -
primitive
_ convert (44) - print (22)
- priority (11)
- priority= (11)
-
program
_ name (11) -
program
_ name= (11) - ptr (11)
- puts (11)
- raise (5)
-
raised
_ exception (11) - read (11)
- readbyte (11)
- readchar (22)
- readline (55)
- readlines (22)
-
recvfrom
_ nonblock (11) - reject (22)
- release (22)
-
renegotiation
_ cb= (11) - reopen (55)
-
report
_ on _ exception (16) -
report
_ on _ exception= (16) - resolve (11)
- result (11)
- rewind (44)
- rss (11)
-
ruby 1
. 6 feature (11) -
ruby 1
. 8 . 2 feature (11) -
ruby 1
. 8 . 3 feature (11) -
ruby 1
. 8 . 4 feature (11) -
ruby 1
. 8 . 5 feature (11) -
ruby 1
. 9 feature (11) -
rubygems
/ specification (11) - run (11)
-
satisfied
_ by? (11) -
search
_ convpath (11) - seek (11)
- separator (11)
-
session
_ new _ cb (11) -
session
_ new _ cb= (11) -
set
_ dictionary (22) - setsockopt (11)
- sexp (11)
-
sexp
_ raw (11) - shift (11)
- signal (11)
-
source
_ location (11) -
ssl
_ version= (22) - string (11)
-
subject
_ certificate= (11) -
subject
_ request= (11) - summarize (22)
-
summary
_ indent (11) -
summary
_ indent= (11) -
summary
_ width (11) -
summary
_ width= (11) - sync= (22)
- table (11)
- target (11)
-
tcp
_ server _ loop (22) -
test
/ unit (1) -
to
_ a (11) -
to
_ csv (22) -
to
_ io (11) -
to
_ path (2) -
to
_ s (66) -
trace
_ object _ allocations (11) - transaction (11)
- truncate (11)
- tty? (11)
- ui= (22)
- ungetbyte (11)
- ungetc (22)
- unix (22)
- uptodate? (11)
-
use
_ ui (22) - ver (11)
- version (44)
- version= (11)
- write (22)
- yaml (11)
- スレッド (11)
- セキュリティモデル (11)
- 制御構造 (11)
検索結果
先頭5件
-
Ripper
. sexp _ raw(src , filename = & # 39;-& # 39; , lineno = 1) -> object (18.0) -
Ruby プログラム str を解析して S 式のツリーにして返します。
...Ruby プログラム str を解析して S 式のツリーにして返します。
@param src Ruby プログラムを文字列か IO オブジェクトで指定します。
@param filename src のファイル名を文字列で指定します。省略すると "-" になります。
@param lineno......a) nil end")
# => [:program,
# [:stmts_add,
# [:stmts_new],
# [:def,
# [:@ident, "m", [1, 4]],
# [:paren, [:params, [[:@ident, "a", [1, 6]]], nil, nil, nil]],
# [:bodystmt,
# [:stmts_add, [:stmts_new], [:var_ref, [:@kw, "nil", [1, 9]]]],
# nil,
#... -
Socket
. tcp _ server _ loop(host , port) {|sock , addr| . . . } -> () (18.0) -
TCP/IP で host:port で待ち受けるサーバ側のソケットを作成し、 新しい接続を受け入れるごとにブロックを呼び出します。
...表す Addrinfo オブジェクトが渡されます。
ブロックの実行が終わってもソケットは close されません。
アプリケーション側が明示的に close する必要があります。
このメソッドはブロックを逐次的に呼び出します。
つまりブ......アントした取り扱えない
require 'socket'
Socket.tcp_server_loop(16807) {|sock, client_addrinfo|
begin
IO.copy_stream(sock, sock)
ensure
sock.close
end
}
# スレッドを使った echo サーバ
# 同時に複数のクライアントを取り扱える......る)ことに注意
require 'socket'
Socket.tcp_server_loop(16807) {|sock, client_addrinfo|
Thread.new {
begin
IO.copy_stream(sock, sock)
ensure
sock.close
end
}
}
内部的には Socket.tcp_server_sockets で
生成したソケットを Socket.accep... -
Socket
. tcp _ server _ loop(port) {|sock , addr| . . . } -> () (18.0) -
TCP/IP で host:port で待ち受けるサーバ側のソケットを作成し、 新しい接続を受け入れるごとにブロックを呼び出します。
...表す Addrinfo オブジェクトが渡されます。
ブロックの実行が終わってもソケットは close されません。
アプリケーション側が明示的に close する必要があります。
このメソッドはブロックを逐次的に呼び出します。
つまりブ......アントした取り扱えない
require 'socket'
Socket.tcp_server_loop(16807) {|sock, client_addrinfo|
begin
IO.copy_stream(sock, sock)
ensure
sock.close
end
}
# スレッドを使った echo サーバ
# 同時に複数のクライアントを取り扱える......る)ことに注意
require 'socket'
Socket.tcp_server_loop(16807) {|sock, client_addrinfo|
Thread.new {
begin
IO.copy_stream(sock, sock)
ensure
sock.close
end
}
}
内部的には Socket.tcp_server_sockets で
生成したソケットを Socket.accep... -
Thread (18.0)
-
スレッドを表すクラスです。スレッドとはメモリ空間を共有して同時に実行される制御の流れです。 Thread を使うことで並行プログラミングが可能になります。
...は Ruby VM は Giant VM lock (GVL) を有しており、同時に実行される
ネイティブスレッドは常にひとつです。
ただし、IO 関連のブロックする可能性があるシステムコールを行う場合には
GVL を解放します。その場合にはスレッドは......レッドの実行も終
了します。ブロックの終了は正常な終了も例外などによる異常終了も含みます。
===[a:exception] 例外発生時のスレッドの振る舞い
あるスレッドで例外が発生し、そのスレッド内で rescue で捕捉されなかっ......例外が再度
発生します。
begin
t = Thread.new do
Thread.pass # メインスレッドが確実にjoinするように
raise "unhandled exception"
end
t.join
rescue
p $! # => "unhandled exception"
end
また、以下の 3 つの方法により、いず... -
スレッド (18.0)
-
スレッド スレッドとはメモリ空間を共有して同時に実行される制御の流れです。 Ruby ではスレッドはThread クラスのインスタンスとして表されます。
...は Ruby VM は Giant VM lock (GVL) を有しており、同時に実行される
ネイティブスレッドは常にひとつです。
ただし、IO 関連のブロックする可能性があるシステムコールを行う場合には
GVL を解放します。その場合にはスレッドは......レッドの実行も終
了します。ブロックの終了は正常な終了も例外などによる異常終了も含みます。
===[a:exception] 例外発生時のスレッドの振る舞い
あるスレッドで例外が発生し、そのスレッド内で rescue で捕捉されなかっ......例外が再度
発生します。
begin
t = Thread.new do
Thread.pass # メインスレッドが確実にjoinするように
raise "unhandled exception"
end
t.join
rescue
p $! # => "unhandled exception"
end
また、以下の 3 つの方法により、いず... -
セキュリティモデル (18.0)
-
セキュリティモデル RubyにはCGI等のプログラミングを安全に行うことを助ける為に、セキュリティ 機構が備わっています。
...$SAFEの値は0
* 各スレッドは作られた時点での親スレッドの$SAFEの値を引き継ぐ
//emlist[][ruby]{
$SAFE = 0
th = Thread.new{
p $SAFE # => 0
$SAFE = 1
}
th.join
p $SAFE # => 0
//}
* $SAFE の値を現在の値より小さく変更する事はできない
//emlist{......はレベル2でも行えません。
==== レベル 0
デフォルトのセーフレベルです。
===== 汚染されるオブジェクト
* IOや環境変数、コマンドライン引数(ARGV)から得られた文字列
$ ruby -e 'p ARGV[0].tainted?' hoge
true
環境変数......汚染された文字列を引数とした以下の操作
* Dir, IO, File, FileTest のメソッド呼び出し
//emlist{
$ ruby -e '$SAFE = 1; open(ARGV[0])' hoge
-e:1:in `initialize': Insecure operation - initialize (SecurityError)
from -e:1
//}
*......$SAFEの値は0
* 各スレッド固有ではなくなったので必要に応じて ensure で戻す
//emlist{
$SAFE = 0
th = Thread.new do
p $SAFE # => 0
$SAFE = 1
ensure
$SAFE = 0
end
th.join
p $SAFE # => 0
//}
* $SAFE の値を現... -
Array
# pack(template) -> String (13.0) -
配列の内容を template で指定された文字列にしたがって、 バイナリとしてパックした文字列を返します。
...であり、n, N, v, V
のサイズは常にシステム依存ではない(!をつけられない)ことに注意してください。
つまり、IO#ioctl などで C の構造体を渡すときのように、
システム依存のサイズとエンディアンに合わせる必要があるとき......(つまり最上位ビットはどこまでデータがあ
るかを示している)。
ISO/IEC 8825-1:1995 : Information technology−ASN.1 encoding rules : Specification of Basic Encoding Rules(BER) に定められる整数の符号化方法。
//emlist[][ruby]{
[0].pack("w") # =......Ruby"
[82, 117, 98, 121].pack("c*") # => "Ruby"
s = ""
[82, 117, 98, 121].each {|c| s << c}
s # => "Ruby"
[82, 117, 98, 121].collect {|c| sprintf "%c", c}.join # => "Ruby"
[82, 117, 98, 121].inject("") {|s, c| s << c} # => "Ruby"
//}
: 文字列を数値(文字コード)の配列に... -
CSV
# inspect -> String (12.0) -
ASCII 互換文字列で自身の情報を表したものを返します。
...ASCII 互換文字列で自身の情報を表したものを返します。
//emlist[例][ruby]{
require "csv"
csv = CSV.new("header1,header2\nrow1_1,row1_2")
csv.inspect # => "<#CSV io_type:StringIO encoding:UTF-8 lineno:0 col_sep:\",\" row_sep:\"\\n\" quote_char:\"\\\"\">"
//}... -
Enumerator
# next _ values -> Array (12.0) -
「次」のオブジェクトを配列で返します。
...StopIteration 例外を発生させます。
このメソッドは、
yield
と
yield nil
を区別するために使えます。
next メソッドによる外部列挙の状態は他のイテレータメソッドによる
内部列挙には影響を与えません。
ただし、 IO#each_line......ニズムが副作用を
伴っている場合には影響があり得ます。
//emlist[例: next と next_values の違いを][ruby]{
o = Object.new
def o.each
yield
yield 1
yield 1, 2
yield nil
yield [1, 2]
end
e = o.to_enum
p e.next_values
p e.next_values
p e.next_values
p e.next_valu......[1] 1
# yield 1, 2 [1, 2] [1, 2]
# yield nil [nil] nil
# yield [1, 2] [[1, 2]] [1, 2]
//}
@raise StopIteration 列挙状態が既に最後へ到達しているとき
@see Enumerator#next, Enumerator#peek, Enumerator#peek_values... -
Net
:: Telnet # preprocess(string) -> String (12.0) -
ホストから受け取った文字列の前処理をします。
...telnetコマンドの検出をします。
通常は Net::Telnet#waitfor から呼びだされます。
"Telnetmode" を利用している場合、
IO#sysread などで直接ホストからのデータを読みこんだ場合にのみ
このメソッドを呼ぶ必要があるでしょう。
前処......理の内容は Net::Telnet#telnetmode や
Net::Telnet#binmode によって変わります。
@param string 前処理対象の文字列
@return 変換後の文字列
@see Net::Telnet.new, Net::Telnet#telnetmode, Net::Telnet#binmode... -
Object
# display(out = $ stdout) -> nil (12.0) -
オブジェクトを out に出力します。
...ject
def display(out = $stdout)
out.write self
nil
end
end
//}
@param out 出力先のIOオブジェクトです。指定しない場合は標準出力に出力されます。
@return nil を返します。
//emlist[][ruby]{
Object.new.display #=> #<Object:0xbb0210>
//}
@see $stdout... -
REXML
:: DocType # write(output , indent = 0 , transitive = false , ie _ hack = false) -> () (12.0) -
output に DTD を出力します。
...に DTD を出力します。
このメソッドは deprecated です。REXML::Formatter で
出力してください。
@param output 出力先の IO オブジェクト
@param indent インデントの深さ。指定しないでください。
@param transitive 無視されます。指定しな......い。
@param ie_hack 無視されます。指定しないでください。
//emlist[][ruby]{
require 'rexml/document'
doctype = REXML::Document.new(<<EOS).doctype
<!DOCTYPE books [
<!ELEMENT book (comment)>
<!ELEMENT comment (#PCDATA)>
<!ATTLIST book
author CDATA #REQUIRED
ti...