2008年 01月 22日

freenode の ChanServ

access #*** add <nick> 10

<cho45> level #*** list
-ChanServ@fn(ChanServ@services.)- -- Access Levels for [#***] --
-ChanServ@fn(ChanServ@services.)- Index Level Type      Description
-ChanServ@fn(ChanServ@services.)- ----- ----- ----      -----------
-ChanServ@fn(ChanServ@services.)- 1     -1    AUTODEOP  Automatic deop/devoice
-ChanServ@fn(ChanServ@services.)- 2     OFF   AUTOVOICE Automatic voice
-ChanServ@fn(ChanServ@services.)- 3     8     CMDVOICE  Use of command VOICE
-ChanServ@fn(ChanServ@services.)- 4     30    ACCESS    Allow ACCESS modification
-ChanServ@fn(ChanServ@services.)- 5     5     CMDINVITE Use of command INVITE
-ChanServ@fn(ChanServ@services.)- 6     30    AUTOOP    Automatic op
-ChanServ@fn(ChanServ@services.)- 7     10    CMDOP     Use of command OP
-ChanServ@fn(ChanServ@services.)- 8     10    CMDUNBAN  Use of command UNBAN
-ChanServ@fn(ChanServ@services.)- 9     15    AUTOKICK  Allow AKICK modification
-ChanServ@fn(ChanServ@services.)- 10    20    CMDCLEAR  Use of command CLEAR
-ChanServ@fn(ChanServ@services.)- 11    25    SET       Modify channel SETs
-ChanServ@fn(ChanServ@services.)- 14    10    TOPIC     Change the channel topic
-ChanServ@fn(ChanServ@services.)- 15    50    LEVEL     Use of command LEVEL
-ChanServ@fn(ChanServ@services.)- -- End of list --

を ChanServ に送ると指定 nick をチャンネルのアクセスリストに加えられる。30 とかやると autoop になる?
一定以上の level は contact じゃないと設定できない 。contact の nick でログインし NickServ で identify していても、 ChanServ に identify しないとだめ。現在の自分の level 未満しか設定できないっぽい。contact は level 50 みたいで、49 までしか設定できない (すなわち 50 になるためには contact にならないといけない?)。help すると mask を設定すると書いてあるけど、http://freenode.net/using_the_network.shtml では registered nick を指定するように書いてある。

デフォルトだと split したあとに level 0 のユーザ (access list にないユーザ) は deop される。


ある nick が登録されているかどうかは /msg NickServ info nick すればいいみたいだ。登録されてない nick を access list に入れるとどうなるんだろう。 Nick [fagaslgol] is not registered みたいにおこられた。


以下ヘルプ転載 (これまとめてあるのどこにあるんだろ……)
ChanServ

<cho45> help
-ChanServ@fn(ChanServ@services.)- ChanServ allows you to register and control various
-ChanServ@fn(ChanServ@services.)- aspects of channels.  ChanServ can often prevent
-ChanServ@fn(ChanServ@services.)- malicious users from "taking over" channels by limiting
-ChanServ@fn(ChanServ@services.)- who is allowed channel operator priviliges.  Any channel
-ChanServ@fn(ChanServ@services.)- which is not used for 120 days will be expired and may
-ChanServ@fn(ChanServ@services.)- be dropped.  ChanServ's commands are listed below.
-ChanServ@fn(ChanServ@services.)- For more information on a specific command, type
-ChanServ@fn(ChanServ@services.)- /msg ChanServ help <command>.
-ChanServ@fn(ChanServ@services.)- 
-ChanServ@fn(ChanServ@services.)-     REGISTER   Register a channel
-ChanServ@fn(ChanServ@services.)-     DROP       Cancel the registration of a channel
-ChanServ@fn(ChanServ@services.)-     IDENTIFY   Identify yourself with your password
-ChanServ@fn(ChanServ@services.)-     SET        Set various channel options
-ChanServ@fn(ChanServ@services.)-     ACCESS     Modify the list of privileged users
-ChanServ@fn(ChanServ@services.)-     AUTOREM    Maintain the AutoRemove list
-ChanServ@fn(ChanServ@services.)-     LEVEL      Change the level required for functions
-ChanServ@fn(ChanServ@services.)-     LIST       Display list of channels matching a pattern
-ChanServ@fn(ChanServ@services.)-     INFO       Display information for a channel
-ChanServ@fn(ChanServ@services.)-     GETKEY     Retrieve the key (+k) to a channel
-ChanServ@fn(ChanServ@services.)-     INVITE     Invite yourself to a channel
-ChanServ@fn(ChanServ@services.)-     OP         Op yourself on a channel
-ChanServ@fn(ChanServ@services.)-     VOICE      Voice yourself on a channel
-ChanServ@fn(ChanServ@services.)-     UNBAN      Unban yourself on a channel
-ChanServ@fn(ChanServ@services.)-     CLEAR      Clear various channel modes
<cho45> help register
-ChanServ@fn(ChanServ@services.)- Syntax: REGISTER <channel> [password]
-ChanServ@fn(ChanServ@services.)- 
-ChanServ@fn(ChanServ@services.)- Registers <channel> in ChanServ's database.  [password] is
-ChanServ@fn(ChanServ@services.)- used via ChanServ IDENTIFY to identify the channel contact
-ChanServ@fn(ChanServ@services.)- for some functions. If no password is specified, only
-ChanServ@fn(ChanServ@services.)- the channel contact nick can use ChanServ IDENTIFY.
-ChanServ@fn(ChanServ@services.)- 
-ChanServ@fn(ChanServ@services.)- Guidelines for running a freenode channel are found here:
-ChanServ@fn(ChanServ@services.)- http://freenode.net/channel_guidelines.shtml Pick someone
-ChanServ@fn(ChanServ@services.)- to register your project channel who is around frequently. 
-ChanServ@fn(ChanServ@services.)- If your channel contact's nick expires,
-ChanServ@fn(ChanServ@services.)- ChanServ will drop their channel when NickServ drops
-ChanServ@fn(ChanServ@services.)- their nick. Consider setting an ALTERNATE (/msg
-ChanServ@fn(ChanServ@services.)- ChanServ HELP SET ALTERNATE) to avoid
-ChanServ@fn(ChanServ@services.)- this situation.
-ChanServ@fn(ChanServ@services.)- 
-ChanServ@fn(ChanServ@services.)- Give channel staffers the ability to maintain
-ChanServ@fn(ChanServ@services.)- your channel via the ACCESS command (/msg ChanServ
-ChanServ@fn(ChanServ@services.)- HELP ACCESS).  Level '10' lets them gain ops,
-ChanServ@fn(ChanServ@services.)- voice and devoice users, etc. Try to ensure your
-ChanServ@fn(ChanServ@services.)- channel has 24-hour coverage.  Staffers should
-ChanServ@fn(ChanServ@services.)- IDENTIFY to NickServ so that their nicks don't expire,
-ChanServ@fn(ChanServ@services.)- and so that ChanServ will recognize them.
-ChanServ@fn(ChanServ@services.)- 
-ChanServ@fn(ChanServ@services.)- If no one on a channel's ACCESS list enters the
-ChanServ@fn(ChanServ@services.)- channel within 120 days, the channel will be
-ChanServ@fn(ChanServ@services.)- considered expired and may be dropped.
<cho45> help drop
-ChanServ@fn(ChanServ@services.)- Syntax: DROP <channel> [password]
-ChanServ@fn(ChanServ@services.)- 
-ChanServ@fn(ChanServ@services.)- Cancels the registration of <channel>.  Only a
-ChanServ@fn(ChanServ@services.)- channel contact may DROP a channel.  Also,
-ChanServ@fn(ChanServ@services.)- the contact must IDENTIFY before using this
-ChanServ@fn(ChanServ@services.)- command, or supply the correct channel password.
<cho45> help identify
-ChanServ@fn(ChanServ@services.)- Syntax: IDENTIFY <channel> [password]
-ChanServ@fn(ChanServ@services.)- 
-ChanServ@fn(ChanServ@services.)- Identifies you as the channel contact for <channel>. 
-ChanServ@fn(ChanServ@services.)- Some ChanServ commands require that you IDENTIFY before
-ChanServ@fn(ChanServ@services.)- using them.
-ChanServ@fn(ChanServ@services.)- 
-ChanServ@fn(ChanServ@services.)- If you are the contact (your master nick is equal to
-ChanServ@fn(ChanServ@services.)- the stored contact nick), you need not use the channel
-ChanServ@fn(ChanServ@services.)- password, otherwise you have to. If there is no channel
-ChanServ@fn(ChanServ@services.)- password, only the contact nick can use this command.
<cho45> help set
-ChanServ@fn(ChanServ@services.)- Syntax: SET <channel> <option> [parameters]
-ChanServ@fn(ChanServ@services.)- 
-ChanServ@fn(ChanServ@services.)- Allows the channel contact or level 25 to set various
-ChanServ@fn(ChanServ@services.)- channel options and other information. All options may
-ChanServ@fn(ChanServ@services.)- be abbreviated, such as:
-ChanServ@fn(ChanServ@services.)- /msg ChanServ set #channel CONT newcontact
-ChanServ@fn(ChanServ@services.)- to set the CONTACT nickname to "newcontact".  For more
-ChanServ@fn(ChanServ@services.)- specific information on each option, type:
-ChanServ@fn(ChanServ@services.)- /msg ChanServ HELP SET <option>
-ChanServ@fn(ChanServ@services.)- 
-ChanServ@fn(ChanServ@services.)- Available options:
-ChanServ@fn(ChanServ@services.)- 
-ChanServ@fn(ChanServ@services.)-     CONTACT     Set the contact of a channel (contact)
-ChanServ@fn(ChanServ@services.)-     ALTERNATE   Set the alternate contact for the channel
-ChanServ@fn(ChanServ@services.)-     PASSWORD    Set the contact password (contact)
-ChanServ@fn(ChanServ@services.)-     MLOCK       Lock channel modes on or off
-ChanServ@fn(ChanServ@services.)-     TOPICLOCK   Restrict topic changes
-ChanServ@fn(ChanServ@services.)-     PRIVATE     Hide channel from ChanServ lists
-ChanServ@fn(ChanServ@services.)-     SECUREOPS   Stricter control of chanop status
-ChanServ@fn(ChanServ@services.)-     SECURE      Activate ChanServ security features
-ChanServ@fn(ChanServ@services.)-     ENTRYMSG    Send a message to users upon entry
-ChanServ@fn(ChanServ@services.)-     EMAIL       Set the channel email address
-ChanServ@fn(ChanServ@services.)-     URL         Set the channel url
-ChanServ@fn(ChanServ@services.)-     GUARD       Have ChanServ join your channel
-ChanServ@fn(ChanServ@services.)-     SPLITOPS    Let anyone keep ops from a netsplit
-ChanServ@fn(ChanServ@services.)-     VERBOSE     Notify chanops on access changes
<cho45> help access
-ChanServ@fn(ChanServ@services.)- Syntax: ACCESS <channel> ADD <mask> <level>
-ChanServ@fn(ChanServ@services.)-         ACCESS <channel> DEL <mask | index>
-ChanServ@fn(ChanServ@services.)-         ACCESS <channel> LIST [mask]
-ChanServ@fn(ChanServ@services.)- 
-ChanServ@fn(ChanServ@services.)- Maintains the channel access list for <channel>.
-ChanServ@fn(ChanServ@services.)- Users matching a hostmask on the access list will
-ChanServ@fn(ChanServ@services.)- have access to various ChanServ commands depending on
-ChanServ@fn(ChanServ@services.)- what level they have (/msg ChanServ HELP LEVEL for
-ChanServ@fn(ChanServ@services.)- how to view and change the level required for each
-ChanServ@fn(ChanServ@services.)- command).  Anyone not on the channel's access list
-ChanServ@fn(ChanServ@services.)- has a default access level of 0.  You may type:
-ChanServ@fn(ChanServ@services.)- /msg ChanServ HELP ACCESS {ADD|DEL|LIST} for more
-ChanServ@fn(ChanServ@services.)- specific information on each command.
<cho45> help autorem
-ChanServ@fn(ChanServ@services.)- Syntax: AUTOREM <channel> ADD <mask> [reason]
-ChanServ@fn(ChanServ@services.)-         AUTOREM <channel> DEL <mask | index>
-ChanServ@fn(ChanServ@services.)-         AUTOREM <channel> LIST [mask]
-ChanServ@fn(ChanServ@services.)- 
-ChanServ@fn(ChanServ@services.)- Maintains the channel autoremove list for <channel>.
-ChanServ@fn(ChanServ@services.)- If a user on the autoremove list attempts to join the
-ChanServ@fn(ChanServ@services.)- channel, ChanServ will ban/remove the user.
-ChanServ@fn(ChanServ@services.)- /msg ChanServ HELP AUTOREM {ADD|DEL|LIST} for more
-ChanServ@fn(ChanServ@services.)- specific information on each command.
<cho45> help level
-ChanServ@fn(ChanServ@services.)- Syntax: LEVEL <channel> SET <type|index> <level>
-ChanServ@fn(ChanServ@services.)-         LEVEL <channel> RESET <type|index|ALL>
-ChanServ@fn(ChanServ@services.)-         LEVEL <channel> LIST
-ChanServ@fn(ChanServ@services.)- 
-ChanServ@fn(ChanServ@services.)- Changes the access level required to be able to execute
-ChanServ@fn(ChanServ@services.)- certain commands.  This allows the channel contact to be
-ChanServ@fn(ChanServ@services.)- able to customize the access level list to the needs of
-ChanServ@fn(ChanServ@services.)- the channel.  For more specific help on each command,
-ChanServ@fn(ChanServ@services.)- type: /msg ChanServ HELP LEVEL {SET|RESET|LIST}
<cho45> help list
-ChanServ@fn(ChanServ@services.)- Syntax: LIST <pattern>
-ChanServ@fn(ChanServ@services.)- 
-ChanServ@fn(ChanServ@services.)- Lists all registered channels that match <pattern>.
-ChanServ@fn(ChanServ@services.)- Channels that have SET PRIVATE ON, will not be
-ChanServ@fn(ChanServ@services.)- displayed.
-ChanServ@fn(ChanServ@services.)- 
-ChanServ@fn(ChanServ@services.)- Example: LIST #*bleh*
-ChanServ@fn(ChanServ@services.)-            Lists all channels that contain bleh
<cho45> help info
-ChanServ@fn(ChanServ@services.)- Syntax: INFO <channel>
-ChanServ@fn(ChanServ@services.)- 
-ChanServ@fn(ChanServ@services.)- Displays information for <channel>, including channel
-ChanServ@fn(ChanServ@services.)- contact, time of registration, topic, and mode lock, if
-ChanServ@fn(ChanServ@services.)- any.
<cho45> help getkey
-ChanServ@fn(ChanServ@services.)- Syntax: GETKEY <channel>
-ChanServ@fn(ChanServ@services.)- 
-ChanServ@fn(ChanServ@services.)- Returns the key to <channel>.  Useful if the channel
-ChanServ@fn(ChanServ@services.)- is set +k.
<cho45> help invite
-ChanServ@fn(ChanServ@services.)- Syntax: INVITE <channel>
-ChanServ@fn(ChanServ@services.)- 
-ChanServ@fn(ChanServ@services.)- Invites the sender to <channel>.  Useful if SET MLOCK
-ChanServ@fn(ChanServ@services.)- is set to +i on the channel.
-ChanServ@fn(ChanServ@services.)- Example:
-ChanServ@fn(ChanServ@services.)-         /msg ChanServ INVITE #channel
-ChanServ@fn(ChanServ@services.)-           ChanServ will invite you to #channel.
<cho45> help op
-ChanServ@fn(ChanServ@services.)- Syntax: OP <channel | ALL> [nicknames]
-ChanServ@fn(ChanServ@services.)- 
-ChanServ@fn(ChanServ@services.)- Gives channel operator status to [nicknames].  If no
-ChanServ@fn(ChanServ@services.)- nicknames are specified, ChanServ will op the nick who gave
-ChanServ@fn(ChanServ@services.)- the command.  Placing a - in front of a nick will
-ChanServ@fn(ChanServ@services.)- deop that nick.  If SECUREOPS is ON, ChanServ will not
-ChanServ@fn(ChanServ@services.)- op nicks who do not have a level of CmdOp or higher.
-ChanServ@fn(ChanServ@services.)- Examples:
-ChanServ@fn(ChanServ@services.)-          /msg ChanServ OP #channel
-ChanServ@fn(ChanServ@services.)-            Ops the nick who gave the command on #channel.
-ChanServ@fn(ChanServ@services.)- 
-ChanServ@fn(ChanServ@services.)-          /msg ChanServ OP #channel nick1 -nick2 nick3
-ChanServ@fn(ChanServ@services.)-            Ops nick1 and nick3, but deops nick2 on #channel.
-ChanServ@fn(ChanServ@services.)- 
-ChanServ@fn(ChanServ@services.)-          /msg ChanServ OP ALL
-ChanServ@fn(ChanServ@services.)-            Ops you in all channels you are currently in, if
-ChanServ@fn(ChanServ@services.)-           you have CMDOP access.
<cho45> help voice
-ChanServ@fn(ChanServ@services.)- Syntax: VOICE <channel> [nicknames]
-ChanServ@fn(ChanServ@services.)- 
-ChanServ@fn(ChanServ@services.)- Gives voice status to [nicknames].  If no nicknames
-ChanServ@fn(ChanServ@services.)- are specified, ChanServ will voice the nick who gave the 
-ChanServ@fn(ChanServ@services.)- command.  Placing a - in front of a nick will
-ChanServ@fn(ChanServ@services.)- devoice that nick.
-ChanServ@fn(ChanServ@services.)- ChanServ will refuse to voice an user who is on the access
-ChanServ@fn(ChanServ@services.)- list as autodevoiced. To disable this, prefix the nick
-ChanServ@fn(ChanServ@services.)- with a +.
-ChanServ@fn(ChanServ@services.)- Examples:
-ChanServ@fn(ChanServ@services.)-          /msg ChanServ VOICE #channel
-ChanServ@fn(ChanServ@services.)-            Voices the nick who gave the command on #channel.
-ChanServ@fn(ChanServ@services.)- 
-ChanServ@fn(ChanServ@services.)-          /msg ChanServ VOICE #channel nick1 -nick2 +nick3
-ChanServ@fn(ChanServ@services.)-            Voices nick1, nick3 even if autodevoiced,
-ChanServ@fn(ChanServ@services.)-            but devoices nick2 on #channel.
<cho45> help unban
-ChanServ@fn(ChanServ@services.)- Syntax: UNBAN <channel> [ALL]
-ChanServ@fn(ChanServ@services.)- 
-ChanServ@fn(ChanServ@services.)- Unbans every ban matching your user@host or user@ip and
-ChanServ@fn(ChanServ@services.)- every gecos ban matching your ircname on <channel>. If
-ChanServ@fn(ChanServ@services.)- you specify ALL, every ban and gecos ban on <channel>
-ChanServ@fn(ChanServ@services.)- will be cleared. You must have CMDCLEAR access to
-ChanServ@fn(ChanServ@services.)- <channel> to use the ALL option.
-ChanServ@fn(ChanServ@services.)- Examples:
-ChanServ@fn(ChanServ@services.)-          /msg ChanServ UNBAN #channel
-ChanServ@fn(ChanServ@services.)-             Clears every ban on #channel matching you
-ChanServ@fn(ChanServ@services.)- 
-ChanServ@fn(ChanServ@services.)-          /msg ChanServ UNBAN #channel ALL
-ChanServ@fn(ChanServ@services.)-             Clears every ban on #channel.
<cho45> help clear
-ChanServ@fn(ChanServ@services.)- Syntax: CLEAR <channel> <option>
-ChanServ@fn(ChanServ@services.)- 
-ChanServ@fn(ChanServ@services.)- ChanServ will clear certain channel modes depending on
-ChanServ@fn(ChanServ@services.)- <option>.
-ChanServ@fn(ChanServ@services.)- 
-ChanServ@fn(ChanServ@services.)- Options:
-ChanServ@fn(ChanServ@services.)- 
-ChanServ@fn(ChanServ@services.)-      OPS       - Deops every channel op
-ChanServ@fn(ChanServ@services.)-      VOICES    - Devoices every voiced user
-ChanServ@fn(ChanServ@services.)-      MODES     - Clears all channel modes
-ChanServ@fn(ChanServ@services.)-      BANS      - Removes all channel bans
-ChanServ@fn(ChanServ@services.)-      GECOSBANS - Remove all channel gecos bans
-ChanServ@fn(ChanServ@services.)-      USERS     - Removes all users from channel
-ChanServ@fn(ChanServ@services.)-      ALL       - Combination of OPS, VOICES, MODES,
-ChanServ@fn(ChanServ@services.)-                      and BANS (does not remove users)

NichServ

<cho45> help
-NickServ@fn(NickServ@services.)- NickServ allows you to "register" a nickname and
-NickServ@fn(NickServ@services.)- prevent others from using it. The following
-NickServ@fn(NickServ@services.)- commands allow for registration and maintenance of
-NickServ@fn(NickServ@services.)- nicknames; to use them, type /msg NickServ <command>.
-NickServ@fn(NickServ@services.)- For more information on a specific command, type
-NickServ@fn(NickServ@services.)- /msg NickServ help <command>.
-NickServ@fn(NickServ@services.)- 
-NickServ@fn(NickServ@services.)-     REGISTER   Register a nickname
-NickServ@fn(NickServ@services.)-     DROP       Cancel the registration of a nickname
-NickServ@fn(NickServ@services.)-     IDENTIFY   Identify yourself with your password
-NickServ@fn(NickServ@services.)-     ACCESS     Modify the list of authorized addresses
-NickServ@fn(NickServ@services.)-     SET        Set various options for your nickname
-NickServ@fn(NickServ@services.)-     LIST       Display list of nicks matching a pattern
-NickServ@fn(NickServ@services.)-     RECOVER    Kill another user who has taken your nick
-NickServ@fn(NickServ@services.)-     RELEASE    Regain custody of your nick after RECOVER
-NickServ@fn(NickServ@services.)-     GHOST      Kill a ghosted nickname
-NickServ@fn(NickServ@services.)-     INFO       Get information for a nickname
-NickServ@fn(NickServ@services.)-     LINK       Link your nickname to another
-NickServ@fn(NickServ@services.)-     UNLINK     UnLink your nickname
<cho45> help register
-NickServ@fn(NickServ@services.)- Syntax: REGISTER <password>
-NickServ@fn(NickServ@services.)- 
-NickServ@fn(NickServ@services.)- This enables you to register your nickname with a
-NickServ@fn(NickServ@services.)- password so only you can use it.  Please try to
-NickServ@fn(NickServ@services.)- use obscure passwords that cannot be easily guessed.
-NickServ@fn(NickServ@services.)- Passwords *ARE* case sensitive.  Once you have
-NickServ@fn(NickServ@services.)- registered a nickname, you can use the SET and
-NickServ@fn(NickServ@services.)- ACCESS commands to configure it.
-NickServ@fn(NickServ@services.)- 
-NickServ@fn(NickServ@services.)- Please IDENTIFY yourself to nickserv when you
-NickServ@fn(NickServ@services.)- connect to the network. Many clients will allow you
-NickServ@fn(NickServ@services.)- to automate this function.  If you don't IDENTIFY
-NickServ@fn(NickServ@services.)- to NickServ for a period of 60 days or more, your
-NickServ@fn(NickServ@services.)- nickname will be considered to be expired and it
-NickServ@fn(NickServ@services.)- may be dropped.
<cho45> help drop
-NickServ@fn(NickServ@services.)- Syntax: DROP <nickname> <password>
-NickServ@fn(NickServ@services.)- 
-NickServ@fn(NickServ@services.)- DROP allows you to cancel the registration of your
-NickServ@fn(NickServ@services.)- nickname, thus allowing others to re-register it.
<cho45> help identify
-NickServ@fn(NickServ@services.)- Syntax: IDENTIFY <password>
-NickServ@fn(NickServ@services.)- 
-NickServ@fn(NickServ@services.)- Most commands require that you identify yourself, in order to
-NickServ@fn(NickServ@services.)- use them.  Also, nicknames which have kill protection will
-NickServ@fn(NickServ@services.)- be killed if the user has not identified within one minute.
-NickServ@fn(NickServ@services.)- If SET AUTOMASK is ON, and you IDENTIFY from a host
-NickServ@fn(NickServ@services.)- which is not on your ACCESS list, the new hostmask will
-NickServ@fn(NickServ@services.)- automatically be added to it.
<cho45> help access
-NickServ@fn(NickServ@services.)- Syntax: ACCESS {ADD|DEL|LIST} [mask]
-NickServ@fn(NickServ@services.)- 
-NickServ@fn(NickServ@services.)- The ACCESS command allows you to modify the list of
-NickServ@fn(NickServ@services.)- recognized hostmasks for your nickname.  If you use a
-NickServ@fn(NickServ@services.)- hostmask that is not on your ACCESS list, you must
-NickServ@fn(NickServ@services.)- IDENTIFY with NickServ.
-NickServ@fn(NickServ@services.)- 
-NickServ@fn(NickServ@services.)- Examples:
-NickServ@fn(NickServ@services.)-     ACCESS ADD *wnder@*underworld.net
-NickServ@fn(NickServ@services.)-        Gives users matching *wnder@*underworld.net
-NickServ@fn(NickServ@services.)-        permission to use your nickname.
-NickServ@fn(NickServ@services.)- 
-NickServ@fn(NickServ@services.)-     ACCESS DEL *wnder@*underworld.net
-NickServ@fn(NickServ@services.)-        Opposite of previous command.
-NickServ@fn(NickServ@services.)- 
-NickServ@fn(NickServ@services.)-     ACCESS LIST
-NickServ@fn(NickServ@services.)-        Displays list of authorized hostmasks for your
-NickServ@fn(NickServ@services.)-        nickname.
-NickServ@fn(NickServ@services.)- 
-NickServ@fn(NickServ@services.)- Type: /msg NickServ HELP ACCESS <option> for more information
<cho45> help set
-NickServ@fn(NickServ@services.)- Syntax: SET <option> [parameters]
-NickServ@fn(NickServ@services.)- 
-NickServ@fn(NickServ@services.)- Configures various nickname options.
-NickServ@fn(NickServ@services.)- Options:
-NickServ@fn(NickServ@services.)- 
-NickServ@fn(NickServ@services.)-     KILL       Turn kill protection on or off
-NickServ@fn(NickServ@services.)-     AUTOMASK   Auto add new hostmasks on IDENTIFY
-NickServ@fn(NickServ@services.)-     PASSWORD   Reset your nickname password
-NickServ@fn(NickServ@services.)-     SECURE     Turn nickname security on or off
-NickServ@fn(NickServ@services.)-     UNSECURE   Set nickname security very low
-NickServ@fn(NickServ@services.)-     PRIVATE    Hide nickname information from LISTs
-NickServ@fn(NickServ@services.)-     MEMOS      Allow memos sent to your nick
-NickServ@fn(NickServ@services.)-     NOTIFY     Turn notification of new memos on/off
-NickServ@fn(NickServ@services.)-     SIGNON     Turn notification of memos on signon on/off
-NickServ@fn(NickServ@services.)-     EMAIL      Associate an email address with your nick
-NickServ@fn(NickServ@services.)-     URL        Associate a url with your nick
-NickServ@fn(NickServ@services.)-     HIDE       Hide information in your INFO reply
-NickServ@fn(NickServ@services.)-     UIN        Set ICQ UIN for this user
-NickServ@fn(NickServ@services.)-     GSM        Set number of mobile phone for this user
-NickServ@fn(NickServ@services.)-     PHONE      Set the phone for this user
-NickServ@fn(NickServ@services.)-     UNFILTERED Allow messages from unregistered users
-NickServ@fn(NickServ@services.)-     MASTER     Reset the master nickname for your link
-NickServ@fn(NickServ@services.)- 
-NickServ@fn(NickServ@services.)- Type /msg NickServ HELP SET option for more information
-NickServ@fn(NickServ@services.)- on a specific option.
<cho45> help list
-NickServ@fn(NickServ@services.)- Syntax: LIST <pattern>
-NickServ@fn(NickServ@services.)- 
-NickServ@fn(NickServ@services.)- Lists all registered nicknames that match <pattern>.
-NickServ@fn(NickServ@services.)- Nicknames that have SET PRIVATE ON, will not be
-NickServ@fn(NickServ@services.)- displayed.
-NickServ@fn(NickServ@services.)- 
-NickServ@fn(NickServ@services.)- Example: LIST *nick*
-NickServ@fn(NickServ@services.)-            Lists all nicknames that contain nick
<cho45> help recover
-NickServ@fn(NickServ@services.)- Syntax: RECOVER <nickname> [password]
-NickServ@fn(NickServ@services.)- 
-NickServ@fn(NickServ@services.)- If someone has stolen your nickname, you can use
-NickServ@fn(NickServ@services.)- RECOVER to get it back.  RECOVER performs
-NickServ@fn(NickServ@services.)- a nick collide on <nickname> and enforces the
-NickServ@fn(NickServ@services.)- nickname until you use the RELEASE command on
-NickServ@fn(NickServ@services.)- it, or just wait until the release timeout.  If
-NickServ@fn(NickServ@services.)- you match a hostmask on <nickname>'s ACCESS
-NickServ@fn(NickServ@services.)- list, and <nickname> has NOT SET SECURE ON,
-NickServ@fn(NickServ@services.)- or if you are identified to a linked nickname,
-NickServ@fn(NickServ@services.)- you do not need to supply a password.
-NickServ@fn(NickServ@services.)- Otherwise, you have to supply the correct
-NickServ@fn(NickServ@services.)- password.
<cho45> help release
-NickServ@fn(NickServ@services.)- Syntax: RELEASE <nickname> [password]
-NickServ@fn(NickServ@services.)- 
-NickServ@fn(NickServ@services.)- If NickServ is enforcing your nickname, as it would
-NickServ@fn(NickServ@services.)- after a RECOVER or if you didn't IDENTIFY
-NickServ@fn(NickServ@services.)- in time, you can use RELEASE to regain control
-NickServ@fn(NickServ@services.)- of your nickname.  If you match a hostmask on
-NickServ@fn(NickServ@services.)- <nickname>'s ACCESS list, and <nickname>'s
-NickServ@fn(NickServ@services.)- SET SECURE is OFF, or if you are
-NickServ@fn(NickServ@services.)- identified to a linked nickname, you do not
-NickServ@fn(NickServ@services.)- need to supply a password.  Otherwise, you
-NickServ@fn(NickServ@services.)- have to supply the correct password.
<cho45> help ghost
-NickServ@fn(NickServ@services.)- Syntax: GHOST <nickname> [password]
-NickServ@fn(NickServ@services.)- 
-NickServ@fn(NickServ@services.)- If you suddenly get disconnected from your isp or
-NickServ@fn(NickServ@services.)- the irc server, sometimes a ghosted client will
-NickServ@fn(NickServ@services.)- be left behind.  This command can be used to
-NickServ@fn(NickServ@services.)- kill the ghosted client so you can get your
-NickServ@fn(NickServ@services.)- nickname back.  If <nickname> has SET SECURE
-NickServ@fn(NickServ@services.)- OFF, and you match a hostmask on <nickname>'s
-NickServ@fn(NickServ@services.)- ACCESS LIST, or if you are identified to a linked
-NickServ@fn(NickServ@services.)- nickname, you do not need to supply a password.
-NickServ@fn(NickServ@services.)- Otherwise, you have to supply the correct
-NickServ@fn(NickServ@services.)- password.
<cho45> help info
-NickServ@fn(NickServ@services.)- Syntax: INFO <nickname>
-NickServ@fn(NickServ@services.)- 
-NickServ@fn(NickServ@services.)- Displays information for <nickname> such as time registered,
-NickServ@fn(NickServ@services.)- SET options, whether they are online, etc.
<cho45> help link
-NickServ@fn(NickServ@services.)- Syntax: LINK <nickname> <password>
-NickServ@fn(NickServ@services.)- 
-NickServ@fn(NickServ@services.)- This command will link your current nickname to
-NickServ@fn(NickServ@services.)- <nickname>, assuming you have supplied the correct
-NickServ@fn(NickServ@services.)- password for <nickname>. Once you have linked nicknames,
-NickServ@fn(NickServ@services.)- your ACCESS list will be deleted, and you will share
-NickServ@fn(NickServ@services.)- <nickname>'s access list. Your memos will also be added
-NickServ@fn(NickServ@services.)- to <nickname>'s memos. Your channel access will be merged
-NickServ@fn(NickServ@services.)- with <nickname>'s access. If <nickname> was previously
-NickServ@fn(NickServ@services.)- unlinked, it will become the master nickname for your
-NickServ@fn(NickServ@services.)- link.
-NickServ@fn(NickServ@services.)- 
-NickServ@fn(NickServ@services.)- When any nickname in your link gives a command to services,
-NickServ@fn(NickServ@services.)- it will be processed as if it came from the master nickname,
-NickServ@fn(NickServ@services.)- with the exception of DROP, UNLINK, SET PASSWORD,
-NickServ@fn(NickServ@services.)- SET EMAIL, and SET URL.
-NickServ@fn(NickServ@services.)- 
-NickServ@fn(NickServ@services.)- The advantage of linked nicknames is whenever you
-NickServ@fn(NickServ@services.)- IDENTIFY for one nick, you will be identified for
-NickServ@fn(NickServ@services.)- every nick in the link. Also, memos sent to any nickname
-NickServ@fn(NickServ@services.)- will all be stored in the master nickname's record, for
-NickServ@fn(NickServ@services.)- any nickname in the link to read. Furthermore, if any
-NickServ@fn(NickServ@services.)- nickname in the link is on a channel's access list, all
-NickServ@fn(NickServ@services.)- nicknames will receive the same access. Also, all
-NickServ@fn(NickServ@services.)- linked nicknames have the same cloak.
-NickServ@fn(NickServ@services.)- 
-NickServ@fn(NickServ@services.)- Example:
-NickServ@fn(NickServ@services.)-         /msg NickServ LINK CoolGuy CoolGuysPassword
-NickServ@fn(NickServ@services.)-           Links your nickname to "CoolGuy".
<cho45> help unlink
-NickServ@fn(NickServ@services.)- Syntax: UNLINK [nickname [password]]
-NickServ@fn(NickServ@services.)- 
-NickServ@fn(NickServ@services.)- This command will unlink your nickname from your current
-NickServ@fn(NickServ@services.)- link. Or, if [nickname [password]] is specified, it will
-NickServ@fn(NickServ@services.)- unlink [nickname] from its current link. When you unlink,
-NickServ@fn(NickServ@services.)- the access list of the master of the link will be copied
-NickServ@fn(NickServ@services.)- to your own. Memos, however, are not copied. The channel
-NickServ@fn(NickServ@services.)- access remains with the other nicks; the unlinked nick
-NickServ@fn(NickServ@services.)- will not have any channel access. If you are unlinking
-NickServ@fn(NickServ@services.)- the master nickname, the next nickname in the link will
-NickServ@fn(NickServ@services.)- become the new master.
-NickServ@fn(NickServ@services.)- 
-NickServ@fn(NickServ@services.)- Example:
-NickServ@fn(NickServ@services.)-         /msg NickServ UNLINK
-NickServ@fn(NickServ@services.)-           Unlinks your nickname from your link.
-NickServ@fn(NickServ@services.)- 
-NickServ@fn(NickServ@services.)-         /msg NickServ UNLINK CoolGuy CoolGuysPassword
-NickServ@fn(NickServ@services.)-           Unlinks "CoolGuy" from whatever link he
-NickServ@fn(NickServ@services.)-           was in.

freenode の umode とか

2008年 01月 21日

ノード生成関数

みじかめで、よさそうなのを書こうとしているけどわりとびみょうだなぁ http://subtech.g.hatena.ne.jp/cho45/20071117/1195309573 をもとにしてj

function $N (str, childs) {
	if (str.nodeType) return str;
	var t, cur, stack = [cur = document.createDocumentFragment()];
	while (str.length) {
		if (str.indexOf("<") == 0) {
			if (t = str.match(/^\s*<(\/?[^\s>\/]+)([^>]+?)?(\/)?>/)) {
				var tag = t[1], attrs = t[2], isempty = !!t[3];
				if (tag.indexOf("/") == -1) {
					child = document.createElement(tag);
					if (attrs) attrs.replace(/([a-z]+)=(?:'([^']*)'|"([^"]*)")/gi,
						function (m, name, v1, v2) {
							child.setAttribute(name, v1 || v2);
						}
					);
					cur.appendChild(child);
					if (!isempty) {
						stack.push(cur);
						cur = child;
					}
				} else cur = stack.pop();
			} else throw("Parse Error: " + str);
		} else if (t = str.match(/^([^<]+)/)) cur.appendChild(document.createTextNode(t[0]));
		str = str.substring(t[0].length);
	}
	var ret = stack.pop();
	if (ret.childNodes.length == 1) ret = ret.firstChild;
	if (childs) for (var i = 0; i < childs.length; i++) {
		ret.appendChild(arguments.callee(childs[i]));
	}
	return ret;
}

みたいなのにしてみた (innnerHTML は table 関係の要素を扱うとき、補完とかされてかえってめんどうくさい。)

	document.body.insertBefore(
		$N("<div/>", [
			"<p>aaa<em>foobar</em></p>",
			document.createElement("br"),
			"<p><a href=''>foobar</a></p>",
		]),
		document.body.firstChild
	);

みたいにする。文字列だけあつかえてもあんまり嬉しくないので、DOM オブジェクトを混在させてもいいように

ただ、あんまり読みやすくない。jQuery みたいなのはいいんだけど、特殊なオブジェクトをつくって DOM の基本メソッドを全部実装しないといけないから長くなる……

2008年 01月 20日

Ruby の名前空間

orz... Fx3 + Firebug でクラッシュしてから edit ページひらいて送信したら消えてしまった……変なタイミングで入力の復帰が行なわれたようだ……できるかぎり復元してみる

JS かいたり Scheme かいたりしたあと Ruby をかこうとするとなんかハマる。メソッドの名前と変数の名前が分離しているからなんだけど、たまにきもちわるい感じがする (スイッチがきりかわるとそうでもないんだけど……)。

class Foo
end

def Foo
end

ができるということはいいのだけど (Hpricot とか Pathname がやってる)、おなじようなノリで

class Foo
    module Bar
    end
end

def Foo::bar
end

みたいなのはもちろんできない。やるとしたら

module Foo
	module Bar
	end


	def Bar
		:a
	end

	def self.Bar
		:b
	end
end

p Foo.Bar    #=> :b
p Foo::Bar() #=> :b

include Foo
p Bar        #=> Foo::Bar
p Bar()      #=> :a

みたいになるけど、(わざとやっているとはいえ) きもい><

JSDeferred 重い処理を自動で分割する。

JSDeferred の loop 関数は軽かろうが重かろうか一回ずつ setTimeout はさむんで効率わるいので、for ループと loop 関数の間ぐらいの関数をてきとうに書いてみた。

	function aloop (n, f) {
		var i   = 0;
		var end = new Object;
		var ret = null;
		return Deferred.next(function () {
			var t = (new Date()).getTime();
			try {
				do {
					ret = f(i)
					i++;
					if (i > n) throw end;
				} while ((new Date()).getTime() - t < 100)
				log("Devided: " + ((new Date()).getTime() - t) + "msec.");
				return Deferred.call(arguments.callee);
			} catch (e) {
				if (e == end) {
					log("End");
					return ret;
				} else {
					throw e;
				}
			}
		});
	}

	aloop(100, function (n, o) {
		var dummy = 0;
		log(n);
		for (var i = 0; i < n * n * n; i++) {
			dummy++;
		}
	});

関数一回の処理に 100msec 以上かかってしまったら、一度ブラウザに処理をかえす。

この例だとこんなふうになります

Firebug has been disabled for www.google.com

Enable Firebug
Enable Firebug for this web site
http://lowreal.net/Test: 0
http://lowreal.net/Test: 1
http://lowreal.net/Test: 2
http://lowreal.net/Test: 3
http://lowreal.net/Test: 4
http://lowreal.net/Test: 5
http://lowreal.net/Test: 6
http://lowreal.net/Test: 7
http://lowreal.net/Test: 8
http://lowreal.net/Test: 9
http://lowreal.net/Test: 10
http://lowreal.net/Test: 11
http://lowreal.net/Test: 12
http://lowreal.net/Test: 13
http://lowreal.net/Test: 14
http://lowreal.net/Test: 15
http://lowreal.net/Test: 16
http://lowreal.net/Test: 17
http://lowreal.net/Test: 18
http://lowreal.net/Test: 19
http://lowreal.net/Test: 20
http://lowreal.net/Test: 21
http://lowreal.net/Test: 22
http://lowreal.net/Test: 23
http://lowreal.net/Test: 24
http://lowreal.net/Test: 25
http://lowreal.net/Test: 26
http://lowreal.net/Test: 27
http://lowreal.net/Test: 28
http://lowreal.net/Test: 29
http://lowreal.net/Test: 30
http://lowreal.net/Test: 31
http://lowreal.net/Test: 32
http://lowreal.net/Test: 33
http://lowreal.net/Test: 34
http://lowreal.net/Test: 35
http://lowreal.net/Test: 36
http://lowreal.net/Test: 37
http://lowreal.net/Test: 38
http://lowreal.net/Test: 39
http://lowreal.net/Test: Devided: 109msec.
http://lowreal.net/Test: 40
http://lowreal.net/Test: 41
http://lowreal.net/Test: 42
http://lowreal.net/Test: 43
http://lowreal.net/Test: 44
http://lowreal.net/Test: 45
http://lowreal.net/Test: 46
http://lowreal.net/Test: 47
http://lowreal.net/Test: Devided: 116msec.
http://lowreal.net/Test: 48
http://lowreal.net/Test: 49
http://lowreal.net/Test: 50
http://lowreal.net/Test: 51
http://lowreal.net/Test: 52
http://lowreal.net/Test: Devided: 109msec.
http://lowreal.net/Test: 53
http://lowreal.net/Test: 54
http://lowreal.net/Test: 55
http://lowreal.net/Test: 56
http://lowreal.net/Test: Devided: 113msec.
http://lowreal.net/Test: 57
http://lowreal.net/Test: 58
http://lowreal.net/Test: 59
http://lowreal.net/Test: Devided: 103msec.
http://lowreal.net/Test: 60
http://lowreal.net/Test: 61
http://lowreal.net/Test: 62
http://lowreal.net/Test: Devided: 119msec.
http://lowreal.net/Test: 63
http://lowreal.net/Test: 64
http://lowreal.net/Test: 65
http://lowreal.net/Test: Devided: 137msec.
http://lowreal.net/Test: 66
http://lowreal.net/Test: 67
http://lowreal.net/Test: Devided: 103msec.
http://lowreal.net/Test: 68
http://lowreal.net/Test: 69
http://lowreal.net/Test: Devided: 112msec.
http://lowreal.net/Test: 70
http://lowreal.net/Test: 71
http://lowreal.net/Test: Devided: 122msec.
http://lowreal.net/Test: 72
http://lowreal.net/Test: 73
http://lowreal.net/Test: Devided: 133msec.
http://lowreal.net/Test: 74
http://lowreal.net/Test: 75
http://lowreal.net/Test: Devided: 144msec.
http://lowreal.net/Test: 76
http://lowreal.net/Test: 77
http://lowreal.net/Test: Devided: 158msec.
http://lowreal.net/Test: 78
http://lowreal.net/Test: 79
http://lowreal.net/Test: Devided: 168msec.
http://lowreal.net/Test: 80
http://lowreal.net/Test: 81
http://lowreal.net/Test: Devided: 182msec.
http://lowreal.net/Test: 82
http://lowreal.net/Test: 83
http://lowreal.net/Test: Devided: 194msec.
http://lowreal.net/Test: 84
http://lowreal.net/Test: Devided: 103msec.
http://lowreal.net/Test: 85
http://lowreal.net/Test: Devided: 106msec.
http://lowreal.net/Test: 86
http://lowreal.net/Test: Devided: 110msec.
http://lowreal.net/Test: 87
http://lowreal.net/Test: Devided: 114msec.
http://lowreal.net/Test: 88
http://lowreal.net/Test: Devided: 118msec.
http://lowreal.net/Test: 89
http://lowreal.net/Test: Devided: 122msec.
http://lowreal.net/Test: 90
http://lowreal.net/Test: Devided: 126msec.
http://lowreal.net/Test: 91
http://lowreal.net/Test: Devided: 131msec.
http://lowreal.net/Test: 92
http://lowreal.net/Test: Devided: 135msec.
http://lowreal.net/Test: 93
http://lowreal.net/Test: Devided: 140msec.
http://lowreal.net/Test: 94
http://lowreal.net/Test: Devided: 144msec.
http://lowreal.net/Test: 95
http://lowreal.net/Test: Devided: 148msec.
http://lowreal.net/Test: 96
http://lowreal.net/Test: Devided: 153msec.
http://lowreal.net/Test: 97
http://lowreal.net/Test: Devided: 158msec.
http://lowreal.net/Test: 98
http://lowreal.net/Test: Devided: 166msec.
http://lowreal.net/Test: 99
http://lowreal.net/Test: Devided: 171msec.
http://lowreal.net/Test: 100
http://lowreal.net/Test: End

実際つかうならハードコードされてるところをましにしたりしないといけないかな。

2008年 01月 19日

shipit.rb

使ってみてハマりそうなポイントにチェックをいれて他の人が使っても大丈夫なようにしてる。定数をハードコードしてるのは、Rakefile 側で代入しなおせばいいだけなので (影響が多いのもあって) 変えない。

2008年 01月 18日

GreaseMonkey の GM_xmlhttpRequest を順番に(略)

http://d.hatena.ne.jp/drgqst/20080110/1199976698

JSDeferred だとこんな感じかなぁ

	function parseJSON (d) {
		// unsafe
		return eval("("+d.responseText+")");
	}

	next(function () {
		return xhttp.get("http://twitter.com/statuses/public_timeline.json").next(parseJSON);
	}).
	next(function (d) {
		var id = d[0].user.screen_name;
		GM_log(id);
		return xhttp.get("http://twitter.com/users/show/" + id + ".json").next(parseJSON);
	}).
	next(function (d) {
		GM_log(uneval(d));
	}).
	error(function (e) {
		alert(e);
	});
2008年 01月 16日

RAW のメモ

5D の CR2 (13MB) のサムネイルサイズは 2496 x 1664 jpg (約半分サイズ)。とりだすと 1.3MB ぐらい。このサムネイル JPG はカメラ設定で RAW のみを選択しても必ず現像される (現像パラメータはピクチャスタイル?)。たぶん撮影後の拡大してみる機能のためにある? これは dcraw -e で高速にとりだせる (CR2 は TIFF なので TIFF よめれば簡単にとりだせそう)。

メタデータは現像パラメータより

Filename: IMG_6483.CR2
Timestamp: Wed Jan 16 14:07:04 2008
Camera: Canon EOS 5D
ISO speed: 400
Shutter: 1/664.0 sec
Aperture: f/4.0
Focal length: 50.0 mm
Embedded ICC profile: no
Number of raw images: 1
Thumb size:  2496 x 1664
Full size:   4476 x 2954
Image size:  4386 x 2920
Output size: 2920 x 4386
Raw colors: 3
Filter pattern: RGGBRGGBRGGBRGGB
Daylight multipliers: 2.224558 0.928662 1.164364
Camera multipliers: 1796.000000 1024.000000 1759.000000 1024.000000


メタデータよむために http://www.exiv2.org/ をためしてみる (MakerNote に対応していそうなので)。ただ ubuntu LTS のパッケは古いっぽいのでソースからインストール。というか最後のリリースが 10-Jan-2008 とかですばらしい。ruby-exiv2 という binding が rubyforge にあるみたいだけどコンパイルできなかった。

めんどいのでコマンドラインたたいてみると CR2 もちゃんとメタデータ見れる。すばらしい。サムネイル展開するには

$ exiv2 -e t extract IMG_6483.CR2  

とかすればいいみたいだ。と、おもったら、これでとれるサムネイルは dcraw でとれるサムネイルとは違う。21KB のもっと小さいサイズのサムネイルだった。

メタデータは

$ exiv2 print -p t IMG_6483.CR2

するとデータ型もふくめて全部 dump される。http://www.exiv2.org/sample.html

2008年 01月 15日

gerry

昼ごろから胃がいたくて、一度寝たらなおったとおもったのだけれど、夕食食べたらすごいゲリった

2008年 01月 13日

CocProxy の Mongrel 版

WEBrick は素晴しいのですがいかんせん遅いので Mongrel 使って書いてみました。Proxy の実装は WEBrick からパクっています。

1.8.4 でしか動かしてないです。キャッシュ機能はつけるのが若干めんどいのでついてません。あとクッキー関係でちょっとおかしいけど、用途的にあんまり困らないかな。