「ADD」を含む日記 RSS

はてなキーワード: ADDとは

2011-11-08

Thunderbird から Outlook 2007 にメールを移行

やー。面倒でした。

古い情報だと Outlook Express を経由しろと書いてあるので、後継であるらしいWindows Live Mail を経由して(Windows Live Mail からエクスポートする方法で)

Outlook に移行したのだが、どういうわけか宛名が文字列として移行されてしまい、xxx@example.com というメールアドレスの移行ができなかったんです

で eml → msg もしくは pst 形式への変換ソフトを探すのですが、無料ものが見つからなくてあんまり情報もありませんでした。が、ありましたよ!お兄さん。

これなら、msg ⇔ eml の相互変換ができますです

MrMAPI.exe

http://mfcmapi.codeplex.com/

ヘルプはっときますね。

====

MAPI data collection and parsing tool. Supports property tag lookup, error translation,
   smart view processing, rule tables, ACL tables, contents tables, and MAPI<->MIME conversion.
MrMAPI currently knows:
  3916 property tags
   801 dispids
    35 types
    58 guids
   148 errors
    27 smart view parsers

Usage:
   MrMAPI -?
   MrMAPI [-Search] [-Dispids] [-Number] [-Type <type>] <property number>|<property name>
   MrMAPI -Guids
   MrMAPI -Error <error>
   MrMAPI -ParserType <type> -Input <input file> [-Binary] [-Output <output file>]
   MrMAPI -Flag <flag value> [-Dispids] [-Number] <property number>|<property name>
   MrMAPI -Rules [-Profile <profile>] [-Folder <folder>]
   MrMAPI -Acl [-Profile <profile>] [-Folder <folder>]
   MrMAPI [-Contents | -HiddenContents] [-Profile <profile>] [-Folder <folder>] [-Output <output directory>]
          [-Subject <subject>] [-MessageClass <message class>] [-MSG] [-List]
   MrMAPI -ChildFolders [-Profile <profile>] [-Folder <folder>]
   MrMAPI -XML -Input <path to input file> -Output <path to output file>
   MrMAPI -FID [fid] [-MID [mid]] [-Profile <profile>]
   MrMAPI -MAPI | -MIME -Input <path to input file> -Output <path to output file> [-CCSFFlags <conversion flags>]
          [-RFC822] [-Wrap <Decimal number of characters>] [-Encoding <Decimal number indicating encoding>]
          [-AddressBook] [-Unicode] [-Charset CodePage CharSetType CharSetApplyType]

All switches may be shortened if the intended switch is unambiguous.
For example, -T may be used instead of -Type.

   Help:
   -?   Display expanded help.

   Property Tag Lookup:
   -S   (or -Search) Perform substring search.
           With no parameters prints all known properties.
   -D   (or -Dispids) Search dispids.
   -N   (or -Number) Number is in decimal. Ignored for non-numbers.
   -T   (or -Type) Print information on specified type.
           With no parameters prints list of known types.
           When combined with -S, restrict output to given type.
   -G   (or -Guids) Display list of known guids.

   Flag Lookup:
   -Fl  (or -Flag) Look up flags for specified property.
           May be combined with -D and -N switches, but all flag values must be in hex.

   Error Parsing:
   -E   (or -Error) Map an error code to its name and vice versa.
           May be combined with -S and -N switches.

   Smart View Parsing:
   -P   (or -ParserType) Parser type (number). See list below for supported parsers.
   -B   (or -Binary) Input file is binary. Default is hex encoded text.

   Rules Table:
   -R   (or -Rules) Output rules table. Profile optional.

   ACL Table:
   -A   (or -Acl) Output ACL table. Profile optional.

   Contents Table:
   -C   (or -Contents) Output contents table. May be combined with -H. Profile optional.
   -H   (or -HiddenContents) Output associated contents table. May be combined with -C. Profile optional
   -Su  (or -Subject) Subject of messages to output.
   -Me  (or -MessageClass) Message class of messages to output.
   -Ms  (or -MSG) Output as .MSG instead of XML.
   -L   (or -List) List details to screen and do not output files.

   Child Folders:
   -Chi (or -ChildFolders) Display child folders of selected folder.

   MSG File Properties
   -X   (or -XML) Output properties of an MSG file as XML.

   MID/FID Lookup
   -Fi  (or -FID) Folder ID (FID) to search for.
           If -FID is specified without a FID, search/display all folders
   -Mid (or -MID) Message ID (MID) to search for.
           If -MID is specified without a MID, display all messages in folders specified by the FID parameter.

   MAPI <-> MIME Conversion:
   -Ma  (or -MAPI) Convert an EML file to MAPI format (MSG file).
   -Mi  (or -MIME) Convert an MSG file to MIME format (EML file).
   -I   (or -Input) Indicates the input file for conversion, either a MIME-formatted EML file or an MSG file.
   -O   (or -Output) Indicates the output file for the convertion.
   -Cc  (or -CCSFFlags) Indicates specific flags to pass to the converter.
           Available values (these may be OR'ed together):
              MIME -> MAPI:
                CCSF_SMTP:        0x02
                CCSF_INCLUDE_BCC: 0x20
                CCSF_USE_RTF:     0x80
              MAPI -> MIME:
                CCSF_NOHEADERS:        0x0004
                CCSF_USE_TNEF:         0x0010
                CCSF_8BITHEADERS:      0x0040
                CCSF_PLAIN_TEXT_ONLY:  0x1000
                CCSF_NO_MSGID:         0x4000
                CCSF_EMBEDDED_MESSAGE: 0x8000
   -Rf  (or -RFC822) (MAPI->MIME only) Indicates the EML should be generated in RFC822 format.
           If not present, RFC1521 is used instead.
   -W   (or -Wrap) (MAPI->MIME only) Indicates the maximum number of characters in each line in the
           generated EML. Default value is 74. A value of 0 indicates no wrapping.
   -En  (or -Encoding) (MAPI->MIME only) Indicates the encoding type to use. Supported values are:
              1 - Base64
              2 - UUENCODE
              3 - Quoted-Printable
              4 - 7bit (DEFAULT)
              5 - 8bit
   -Ad  (or -AddressBook) Pass MAPI Address Book into converter. Profile optional.
   -U   (or -Unicode) (MIME->MAPI only) The resulting MSG file should be unicode.
   -Ch  (or -Charset) (MIME->MAPI only) Character set - three required parameters:
           CodePage - common values (others supported)
              1252  - CP_USASCII      - Indicates the USASCII character set, Windows code page 1252
              1200  - CP_UNICODE      - Indicates the Unicode character set, Windows code page 1200
              50932 - CP_JAUTODETECT  - Indicates Japanese auto-detect (50932)
              50949 - CP_KAUTODETECT  - Indicates Korean auto-detect (50949)
              50221 - CP_ISO2022JPESC - Indicates the Internet character set ISO-2022-JP-ESC
              50222 - CP_ISO2022JPSIO - Indicates the Internet character set ISO-2022-JP-SIO
           CharSetType - supported values (see CHARSETTYPE)
              0 - CHARSET_BODY
              1 - CHARSET_HEADER
              2 - CHARSET_WEB
           CharSetApplyType - supported values (see CSETAPPLYTYPE)
              0 - CSET_APPLY_UNTAGGED
              1 - CSET_APPLY_ALL
              2 - CSET_APPLY_TAG_ALL

   Universal Options:
   -I   (or -Input) Input file.
   -O   (or -Output) Output file or directory.
   -F   (or -Folder) Folder to scan. Default is Inbox. See list below for supported folders.
           Folders may also be specified by path:
              "Top of Information Store\Calendar"
           Path may be preceeded by entry IDs for special folders using @ notation:
              "@PR_IPM_SUBTREE_ENTRYID\Calendar"
           MrMAPI's special folder constants may also be used:
              "@12\Calendar"
              "@1"
   -Pr  (or -Profile) Profile for MAPILogonEx.
   -M   (or -MoreProperties) More properties. Tries harder to get stream properties. May take longer.
   -No  (or -NoAddins) No Addins. Don't load any add-ins.
   -On  (or -Online) Online mode. Bypass cached mode.
   -V   (or -Verbose) Verbose. Turn on all debug output.

Smart View Parsers:
    1 Additional Ren Entry IDs Ex
    2 Appointment Recurrence Pattern
    3 Conversation Index
    4 Entry Id
    5 Entry List
    6 Extended Folder Flags
    7 Extended Rule Condition
    8 Flat Entry List
    9 Folder User Fields Stream
   10 Global Object Id
   11 Property
   12 Property Definition Stream
   13 Recipient Row Stream
   14 Recurrence Pattern
   15 Report Tag
   16 Restriction
   17 Rule Condition
   18 Search Folder Definition
   19 Security Descriptor
   20 SID
   21 Task Assigners
   22 Time Zone
   23 Time Zone Definition
   24 Web View Persistence Object Stream
   25 Nickname Cache
   26 Encode Entry ID
   27 Decode Entry ID

Folders:
    1 Calendar
    2 Contacts
    3 Journal
    4 Notes
    5 Tasks
    6 Reminders
    7 Drafts
    8 Sent Items
    9 Outbox
   10 Deleted Items
   11 Finder
   12 IPM_SUBTREE
   13 Inbox
   14 Local Freebusy
   15 Conflicts
   16 Sync Issues
   17 Local Failures
   18 Server Failures
   19 Junk E-mail

Examples:
   MrMAPI PR_DISPLAY_NAME

   MrMAPI 0x3001001e
   MrMAPI 3001001e
   MrMAPI 3001

   MrMAPI -n 12289

   MrMAPI -t PT_LONG
   MrMAPI -t 3102
   MrMAPI -t

   MrMAPI -s display
   MrMAPI -s display -t PT_LONG
   MrMAPI -t 102 -s display

   MrMAPI -d dispidReminderTime
   MrMAPI -d 0x8502
   MrMAPI -d -s reminder
   MrMAPI -d -n 34050

   MrMAPI -p 17 -i webview.txt -o parsed.txt

2011-09-23

http://anond.hatelabo.jp/20110923110627

ことがADDADHDにおさまるようには思えない。あんたがADDADHDに線引くのはなんでだい?

2011-08-25

http://anond.hatelabo.jp/20110825222340

まあマジレスすると発達障害(たぶんADDとかじゃないかな)っぽいんだけど、

元増田のケースは元増田会社にも大いに問題がありそうで、「発達障害からしょうがない!」

元増田を納得させてしまうのは不本意なんだよね。

2011-07-26

http://anond.hatelabo.jp/20110726005340

仮にアスペADDだったとしても、そのせいにしちゃいけないよ。

そのせいで自分が駄目、それを追い出したら上手くいくと思う思考自体が、

コミュニケーション能力ビジネススキル以前の問題。

アスペADDを抱えてようが、それが自分の特徴だ長所だと捉えて正々堂々と胸を張ろうよ。

アスペADDでも人と上手く関わりそこそこ上手に世渡りしてる人がいる以上は、

やっぱりそれは単純にアスペADDが問題ってわけじゃないと思う。

2011-07-25

1種の発達障害

前回、このはてなで初めて「好かれない性格」という日記綴りました。

おかげ様でごく一部で反響があり、そこの皆様に「発達障害の1つでは」と言われました。

それは今までで初めて言われたので斬新。

過去には、ADDを患っている方から「たぶん君も同じADDを抱えているよ」と言われた事もあります

(ADDというのは、最近よく聞くADHDの1種で多動性のないものADDなんだそう)

といっても医院等に行って正式に判断されたわけじゃないですけどね。

自分自身としては「そんな所もあるのかもなー。でも自分生活に支障が出るレベルでもないから軽度というか、ほんの少し程度なんだろう」

程度に考えています

ADDなのかな?と自分も思った点(というか指摘された点)

*小さい頃から顔面チック(トゥレット症候群)が頻繁にあった(大人になった今でもある。が、他人の前ではなんとか我慢できる)

言語チックもあった(無意識下ではないが、ほぼ口癖で意味のない言葉を連発したり歌ったりする癖)

*行動チックもあり

*いろんな依存に陥りやすい

時間や金銭計算が不得意

まぁ、一部はADDは関係ないただの駄目な性格なのかもしれませんけれど・・・

これらは小さい頃から、それが自分だと分かってたので特に何とも思ってません。

まぁこれらを兄弟や親戚、友人にネタにされたり笑われた事もありましたが・・・(苦笑)

ところで、「幼少期に抑圧されたから云々」とも言われてましたが、

どちらかといえば自分中学以降はイジメで殻に閉じこもるようになりましたが、

小学生まではかなり自由奔放でわんぱくで元気でした。

家庭環境は、厳しい面もありましたがどちらかといえばのびのびと育てられていた気もします。

(まぁそれらも小学時代までで、中学・高校・卒業となるに連れ、優しかった親も厳しくなり抑圧面は増えましたが・・・)

何が言いたいかというと、発達障害ADDなど言われる割には、そうなるような原因が幼少時にあったとは思えないんです

そもそも「原因」なるものがあるのかどうかわからないけど。

しかしたら前回書いた「好かれない性格」も、煽られた通りに根本的な何かが原因なのかもしれませんね。

はいえ、それを盾にどうこう言うつもりはない。

性格性格なんだから改善の余地もあるだろうし。

とまぁそんな自分ですが、レールから外れた人生は送ってますがあまり辛いとは思ってなく、

世間から見れば壮絶な生き方してますが、数少ない良い交友を大事にしつつ笑顔で生きてます

(そういうのを鈍感というのでしょうかね・・・苦笑)

機会があればもっと詳しく事情を話したいのですが、身バレが怖いのでこの辺にしときます

2011-07-12

今話題になっている「モバツイツイートデコ」をiPhoneデコる方法

モバツイに新機能として搭載された「ツイートデコ」。

対応デバイス・キャリア:フィーチャーフォン(docomoausoftbank・DisneyMobile)

・サービス使用料:無料

てなわけで、せっかくの無料サービスなのにiPhone蚊帳の外・・・。

んなわけで、さっそくのハックです

1.ひとまずガラケーからモバツイへログインする。

この時点でガラケーをお持ちでないフューチャー兄貴は、デスクの隣のマドンナにガラケー借りるべし。

恋が生まれるかも。

2.ログインが成功したらあなた専用のURLが表示される。

専用って響きにウットリしながらクリックすべし。

3.「タイムライン」「@」・・・「ツイートデコ」のツイートデコをクリック

利用規約うんぬんはみなさんの自己責任で。とりあえずこのかわいいデコってみる!!」をクリック

4.とりあえず「タイムライン」をクリックしてみると。

ツイートデコ!」と力強いボタンが表示されてればOK。

5.ガラケーの「機能」または「メニュー」ボタンを押すべし。

こんなメニューが出るはず。そして「iモードメール作成」をクリック

6.URL添付を選択すべし。

ここで仮にデスクの隣のマドンナにガラケーを借りてたら、同時にメアドゲットだぜ!!

7.自分のiPhoneのメールに転送しよう。

とりあえず、言われたとおりメール送信しておこう。別に自力でメモってもいいんだけど・・・。

8.おもむろにiPhoneのAppStoreから「KeitaiEmu」をダウンロード。

無料なので安心しなさい。そして何のためのソフトなのかは気にしない。これお約束

9.そろそろURL送ったメールも届いてるだろうし、クリップボードにURLをコピー!

いや、べ、別に手書きでメモってもいいんだからねっ!!

10.「KeitaiEmu」を起動。

※画面はイメージです。いろんな意味で。

11.「KeitaiEmu」の上のお口にURLをペースト。

下のお口はGoogle検索です

12.無事にモバツイにアクセスできた!けどもっかいパスワードを!

認証方法が違うので、文句を言わずパスワード入れて認証を。

13.おめでとう!!「ツイートデコ」ボタンが表示されてます!

西野カナ並に震えるところです。ほら。さぁ!

14.すかさず右上のブックマークボタンを押して「Add Bookmark」か「Set Default Page」へ

デコレーションする前に、まずは明日のためのことをしよう!

15.何か書いて「ツイートデコ」ボタンを強打!!

すばらしい。すばらしい素材の安定感。往年のマンセルを思い起こさせる。

16.無事にツイートデコ達成!

おめでとうございます!!

次回からは15からでOK。あ、忘れずに「KeitaiEmu」を起動してね。

2011-05-16

id:agricola花岡信昭の死に落ち度があった(嘲」

はてなブックマーク - 政治評論家花岡信昭氏が死去 拓殖大教授、元産経新聞政治部長 - MSN産経ニュース

http://b.hatena.ne.jp/entry/sankei.jp.msn.com/politics/news/110515/stt11051517580003-n1.htm

agricola 死もまた、社会奉仕 だがちょっと待って欲しい心筋梗塞でくたばった花岡氏にも「落ち度」があったのではないか(嘲 2011/05/15

これに、星を付けている皆さん。

Add Star buhikun bogus-simotukare hokuto-hei flagburner osaka06 ragdollsoft Gl17 vanacoral taron Gerard ryo_zin y_arim y_arim susahadeth52623

「死もまた、社会奉仕」というタグを付けて、花岡信昭の死に、落ち度(嘲というagricolaは、そういう姿勢在特会とかを批判しているわけだ。何とかの面に堕ちるというのは、こういう時に言うのだろう。死者に鞭打つagricolaが、はてブシステムが変わったことで目立ちまくってるな。agricolaのような存在が目立つはてブシステムに変えて、はてなはまます阿呆巣窟になっている。

はてながどんどん先鋭化していったら、結局困るのは、はてななのだが、先鋭化したブコメを目立つようにしたはてなは何がしたいのだろうか?一般常識とはかけ離れた路線で突き進みますよということだな。

2011-05-07

ソースコードに変更履歴を入れることが我慢出来ない。

【サンプル】

// --2009.01.05 山田(××) ADD START
sb.append(" WHERE A.CUSTOMER_CODE = B.CUSTOMER_CODE?");
// --2011.04.02 大山(△△) CHANGE START
//sb.append(" AND A.COMPANY_CODE = ?");
//// --2010.07.10 佐藤(○○) ADD START
//sb.append(" AND A.BUSINESS_TYPE = ?");
sb.append(" AND A.COMPANY_CODE IN( ").append.(cList).append(")";
sb.append(" AND A.BUSINESS_TYPE IN( ").append.(bList).append(")";
// --2011.04.02 大山(△△) CHANGE END
// --2010.07.10 佐藤(○○) ADD END
sb.append(" AND EXISTS(");
// --2009.01.05 山田(××) ADD AND

微妙に間違えてるとかの突っ込みはなしで



私の会社ではソースの変更(追加、変更、削除)をソース内に記載する文化があり、こういうソースコードにあふれている。

調査も改修もできやしねえ。。

こんなソースコード見るたびに吐き気がするのは私だけであろうか。。

2011-04-09

私が今のところ取っている、はてブ デザイン変更への対処

ブックマークをする

ブックマークレットを利用する

http://b.hatena.ne.jp/register

こちらにもブックマークレットが複数載っていますが、なじみのはてブ追加ページを使いたいので書いてみました

javascript:window.location='http://b.hatena.ne.jp/はてなID/add.confirm?&url='+escape(location.href);

はてなブックマーク エントリーページからブックマークする

エントリーページからブックマークする方法は二つあります

一つは「追加する」ボタンクリックするもの、

もう一つは「ブックマークしてコメントする」をクリックするもの。

無言ブクマコメントをするだけならば「追加する」ボタンでいいのですが、

タグを付けるのなら二つ目の方法が楽です。私はそちらを使っています。

コメント閲覧

はてなブックマークChrome拡張を使用しています。

タグ芸を見れなくなるのはかなり残念ですが、そうしています。

2011-04-07

はてなブックマークエントリーページ新UIを見やすくするユーザCSS

コメントが3行なのを一行に戻す。

コメントがない行を消す

.nocomment{display:none;}

.bookmark-list span.comment { display: inline; }

.bookmark-list img.profile-image { width:18px; height:18px; }

■参考

http://hatena.g.hatena.ne.jp/hatenabookmark/20110405/1301981564

http://hibari.2ch.net/test/read.cgi/esite/1300432939/23-26

23名無しさんお腹いっぱい。:2011/04/06(水) 11:48:38.71

適当だけど誰かがグリモン作るまでこれで。

/*サイドバー非表示*/

#container .curvebox-body { padding:20px; }

#sidebar { display:none; }

/*アイコン縮小&コメ欄高さ詰め*/

.bookmark-list li { padding-left: 20px; }

.bookmark-list img.profile-image { width:18px; height:18px; }

.bookmark-list span.comment { display: inline; }

/*ブクマ用フォーム非表示*/

#add-bookmark-container { display:none; }

/*人気コメント非表示*/

#scored-bokkmarks { display:none; }

https://gist.github.com/903132 を組み合わせて

ブクマ追加は[B!]アイコンからにするとこれまでに近い表示に。

26 :名無しさんお腹いっぱい。:2011/04/06(水) 11:59:27.60

あ、>>23の一番下たいぽだった。

#scored-bookmarks { display:none; }

2011-03-20

より良いPHPerにならないための20Tips

http://1-byte.jp/2011/03/20/20_tips_you_need_to_learn_to_become_a_better_php_programmer/

良いPHPerだって?そんなものは丸めゴミ箱にでも捨ててしまった方が資源の再利用になる分いくらかマシだ。

つまり俺たちがしなくちゃならないことは「より良いPHPerにならないため」に何ができるかってことなのさ。

それじゃ、始めよう。

1. ?>を使うな

?>なんて使っちゃいけない。そう俺たちはBAD PHPer。

無駄ホワイトスペースの出力に悩まされるくらいなら対称性なんて丸めゴミ箱にでも捨てた方がまだマシだ。非対称性こそが賛美。

2. 設定ファイルPHPで書くな

require_once("config.php");

未だにこんなことやってるやつがいるのかいベイベー。絶対にダメだ。この一行を見たら俺は悶絶する。

ダメだ、早く何とかしないと。

大抵このconfig.phpの中身はこうなっている。見て絶望だ。

$hoge_path = '';
if (!LOCAL) {
    define('FOO_FLAG', 1);
    if (HONBAN) {
        define('HOGE_FLAG', 1);
    }
    else if (TEST) {
        define('HOGE_FLAG', 2);
    }
}
else {
    $hoge_path = '/local';
    define('FOO_FLAG', 2);
    define('HOGE_FLAG', 3);
}

define('HOGE_URL', $hoge_path.'/hoge/');

こういうのが延々と続くわけだ。もういやだ。もう見たくない。

本番環境テスト環境でどういう値の違いがあるのか、ローカル環境だとどうなるのか、まったく把握できる気がしない。

なまじPHPな設定ファイルのせいで処理をついつい書いてしまう。そしてどんどん複雑になってしまう。

やはり設定データは基本的にYAML等のデータしか定義できない形式のもので用意すべきだ。そして環境ごとに設定ファイルを分けるべきである

そうすることで何にどういう違いがあるのかすぐにわかるし、diffすれば一度にすべて把握することができる。

# 本番環境設定ファイル
foo_flag: 1
hoge_flag: 1
hoge_url: '/hoge/'
# テスト環境設定ファイル
foo_flag: 1
hoge_flag: 2
hoge_url: '/hoge/'
# ローカル環境設定ファイル
foo_flag: 2
hoge_flag: 3
hoge_url: '/local/hoge/'

3. コメントを信用するな

そう、あなたはこんな状況に遭遇したことがあるんじゃ?

// ここで後の処理のためにhogeメソッドを呼び出しておく
$q->foo();

// $a['foo']はここに来る時点で真のはず
// 2010-03-10 判定がおかしいので修正
// 2010-06-21 やっぱり値が入ってる方が正しい
if ( !isset($hoge[0]) ) {
}

コメント保守されない。そう、それは真実。こんなコメント発見したら即効削除しよう。コメントは基本信じるな。

俺たちにちょっとしたヒントと大きな損害を与えてくれる、それがコメントの役割なのだ。

4. タブとうまく付き合うしかない

わかる。いいたいはとてもわかる。俺たちはしばしばインデントにスペースを使うはずだ。一方でIDEのしっかりした言語ではタブも使うことがある。しかし悪いことに、両者を混同しているプログラマも一定数いるのだ。

タブを画面上で認識しにくいエディタが世の中には存在する(何とは言わないが)

そして画面上で認識しにくいことを理由にタブを気にしないプログラマがいる。

この二つの条件が重なると、タブとスペースの交じり合ったインデントが完成する。もうぐちゃぐちゃだ。これは永遠に続く戦いだ。

私たちが勝利を掴むためにできることなどせいぜい、常にスペースしか使わない。タブを見つけたらその都度スペースに変換する。そういった地道な活動が明日へとつながるのだ。

5. 変数名に時間をかけるな

われわれがプログラムをするとき、何に一番時間がかかってるか。実は変数の命名なのである。ここで拘り過ぎて時間をかけ過ぎては何も進まない。

御託はイイからさっさと書け、だ。しかしとはいっても変数名は重要。日頃からどういうときにどんな名前を使うかを決めておくといい。

そして変数名に型はまったく必要ない。型宣言のないPHPにおいて、型の変数名をつけること自体ナンセンスだ。

コンパイラ様に保証されてない状態での

$iNumber = 'aaa';

になんの意味もない。コメントを信じるなでも言ったが、これはプログラマを混乱させるだけの害悪なものだ。

6. 変数初期化場所

変数を使う前に初期化するのは、警告を出さないという意味でも良い癖だ。しかし具体的にどこでやるかが問題だ。

$foo = null;
$foo = $q->foo();

こんな初期化意味はない。よくあるのはやはり、if文で値を振り分けるケースだろう

$foo = null;
if ( $hoge ) {
    $foo = 1;
}
else if ( $bar ) {
    $foo = 2;
}

このとき初期化はとても有効だ。もしnullの初期化を忘れたまま$fooを使うと警告が出るが、ちゃんと初期化してるので出ない。基本中の基本だ。

7. 不正なら常に死ね

function getStatus() {
    $bReturn = false;
    if ($i == 2) $bReturn = true;
    return $bReturn;
}

(中略)

もし、何かしらの理由で、あなたの書いたif文が間違っていたら?

この書き方をしていれば、間違った値に対して、常にfalseが返る。

私たちが、PHPでsensitiveなデータを取り扱うなら、正しいデータ入力されるまでは、動かないコードを書くべきだ。

trueとfalseの条件がいまいち明確ではないが、本当に動かないコードを書けというのであれば以下のようにすべきだ

function getStatus() {
    $bReturn = false;
    if ($i == 2) $bReturn = true;
    else if ($i == 1) $bReturn = false;
    else throw new Exception("bad status! $i");
    return $bReturn;
}

中途半端にfalseを返して生存させる必要性はまったくない。今すぐ死ね

8. 連想配列キーアクセスする場合

単なる配列に対して数値をクオートで囲う必要はない。

連想配列キーを指定する場合だけ定数と間違わないようにクオートで囲まなければならない。そして逆に定数を使いたい場合はクオートで囲ってはいけない。

更に後世のプログラマ処理を見たときに、定数が使いたかったのか、文字列が使いたかったのかを明確にした場合はconstantを使うと良い。

// 定数のFOOを使うよということが明確になる
print $a[constant('FOO')];

9. echoよりもprintfを使え

もし、文字列変数の値と一緒に出力するときPHPではコンマの代わりにprintfを使うことが使える。

なぜ?コンマを使うよりも可読性がグッとあがるから

printf( “Hello, my name is %s“, $sName);

以下の代わりに上記のコードを使う。

echoHello, my name is “, $sName;

出力すべき変数が増えれば増えるほど、有効になっていく。とにかく迷ったならば、printfを使え、だ。

10. 三項演算子は一回まで

三項演算子はとても有効だ。しか優先順位に難があるせいで三項演算子ネストしようとすると以下のようなコードになってしま

$n = (($i == 1) ? 2 : (($i == 2) ? 3 :$i));

括弧だらけで読みにくいったらありゃしない。三項演算子を使うなら一回まで。約束守れないやつは丸めゴミ箱にでも捨てちまえ。

11. 真偽値のチェックは生でいけ

if ( $flag ) {
}

仕様をちゃんと把握しているなら真偽値のチェックなどこれで十分。

もし事前にbool型だというのが確定してるのなら「$flag === true」を使えばいい。

12. ++と--の演算子を見極めろ

インクリメント、デクリメント演算子は前に付くか後ろに付くかで意味が変わるので慣れるまでは非常にややこしい

けがからなくなるくらいなら初めから使わないほうが良い。見極められないなら使うな。それがPHPerなのだ。

13. 代入演算子を使え

文句なしだ。これは文句がない。

他にも色々あるので覚えておこう

$a %=  1;
$a &=  1;
$a |=  1;
$a ^=  1;
$a <<= 1;
$a >>= 1;

14. 変数dump関数はより便利に

てっとり早く画面に表示する際にpreはよく使うが、デザインの関係上画面の文字が見えないときがある。

なのでdivを使って以下のようにしとくと便利だろう。

function p($var) {
    echo "<div align='left' style='background-color:white;color:black;'><pre>";
    print_r($var);
    echo "</pre></div>";
}

15. 定数から手を洗え

君らが通常作るアプリケーションなんぞに、定数なんぞ必要ない。いいか、もう一度言う、お前ら程度のもんが、定数使おう何ぞ、おこがましいわ!

大丈夫。なんでもかんでも定数にする必要はない。結局設定ファイルに定数をずらずら作りまくってわけがからなくなってるパターンが多い。

貴様たいなもんに、定数は制御できん。いいか設定ファイルYAML等のデータで持つようにし、その連想配列データ構造を一つ持ってるだけで定数の変わりになる。

このメリットに比べれば、定数だと書き換えられなくて良いという利点などこの歯のカスほどのものだ。そんなものは丸めゴミ箱へ捨ててしまうといい。

認識を改めろ。俺たちはより良いPHPerにならないために努力している。

16. $_GETと$_POSTを生で使うな

できれば何かしら簡単なクラスでもいいのでラップしろ。

class Request {
    private $parameters;
    private $method;
    function __construct () {
        $this->method = $_SERVER['REQUEST_METHOD'];
        if ( strtoupper($this->method) === 'POST' ) {
            $this->parameters = $_POST;
        }
        else {
            $this->parameters = $_GET;
        }
    }
    function param ($key) {
        return isset($this->parameters[$key]) ? $this->parameters[$key] : null;
    }
}

これだけでもいい。たったこれだけでもとても便利だ。ここから拡張してGETやPOSTを明示的に取るメソッドとかも作ってみるといい。自分の手を動かすのだ!

17. 関数だのオブジェクトだのの問題ではな

例が良くない。こんなのは引数20個ある関数からset20回呼ぶオブジェクトに変わっただけではないか

そもそもこの20個の引数はなんなのか。何かのデータ構造なんであれば連想配列にして引数一つとして渡すべきだし、それぞれまったく異なる用途の変数なのであればWindowsプログラミングじゃあるまいし20個も引数取る時点設計が間違えている。

何がいいたいか。別に関数でもオブジェクトでもどっちでもいいということだ。

そんなことで悩んでる暇があったら設計を見直せ。

18. メソッドチェインを愛用せよ

スキあらば自分自身を返せ。スキあらばオブジェクトを返せ。配列はArrayObjectのARRAY_AS_PROPSで返せ。

ひたすらメソッドチェイン。来る日も来る日もメソッドチェイン。とにかくメソッドチェインを使い続けろ。そこに未来はある。

19. コードの汎用化は慎重に

どんなコードも繰り返すな。もし、少しでも同じコードを書いていたなら、それは関数に置き換えてしまえ。

・・・と、いうのはやめなさい。

一見同じように見えた処理でも前後の流れでまったく違うものということが往々にしてある。

まとめ方にも問題があるケースもある。何でもかんでも関数化すると、関数が膨大に増えていく。君は見たことがあるだろうか。common.phpやfunction.phpの恐ろしさを。

かに細かく関数化はされているが、適切に関数化していないのである。結合度が非常に高い。なんでもかんでも盲目的にまとめれば良いという話ではないのだ!

20. 結合度は適切に減らし、適切に結合せよ

あまりに極度に意識しすぎると、プログラムそのものができなくなる。そういう状態に陥る。

気を抜いて。そう気を抜いて。所詮あなたコードなんてすぐに消えてなくなるよ。きっともっと偉い人が作り直すよ。だからまずは思うが侭にやるといい。

結合度を減らすというのは非常に難しい何度何度も失敗し続けて、ようやくここは分けた方が良かったんだなと気付く。次に活かそうと心に決める。そしてまた同じ過ちを繰り返していくわけだ。

まずは実装することだ。これが一番の早道だ。まずはがっつり結合した関数をあえて作るといい。何も考えずに作ろう。

そしてその後に、一部分使いましたいとおもうことがあるはずだ。その時に関数に切り出そう。それを繰り返すといい。そのうち初めから分けた方が良いと気付く。

何事も経験が必要である経験を積まないプログラマ丸めゴミ箱に捨ててしまえ。

さて、先の例で言うならば、私ならadd_result_outputという関数を作ってしまうだろう。だってaddとresultを連続して呼ぶのはめんどくさいんだもん。一連の流れをいつも使うのなら、その流れをやってくれる関数を作ればいいじゃないか

function add_result_output ($iVar, $iVar2) {
    $r = add($iVar, $iVar2);
    echo result($r);
}

もっと言えばクラス化してしまってもいいかもしれない。どんな感じになるかは君の手を動かして確認しよう!

最後

このTipsはとてもわかりにくく、ニッチ過ぎる部分も多いかもしれない。

しかしもう一度タイトルを確認してほしい

あくまでも「より良いPHPerにならないための20Tips」なのだ。

君はこの記事を鵜呑みにしてはならない。PHPPHPと見抜けないPHPerはPHPを使うのは難しい

おまけ

もし、あなたPHPプログラマなら、公式のPHPドキュメントあなたのケツの穴を拭くための紙になるだろう。

私は、それぞれのセクションを眺めて、各関数でどんなことが出来るかなんぞ、歯クソのゴミ程に役に立たないとおもっている。動けばいい。はは。

あなたは、PHPで用意された既製関数で多くのことが実現できることに、(俺の仕事を減らすなと)驚くはずだ。

この記事があなたの役に立たない事を。

どんなコメントでも待ってます

ふざけんな!

個人的な感想

この記事に書かれている内容は、丸めゴミ箱に捨てた方が良いレベルです

もしここまで読んでしまったら、丸めゴミ箱に捨てましょう。

プログラ増田のあなぐら

2011-02-27

心療内科に初めて行った

不眠と、それによる軽い欝と、どうも巷で噂のAD/HDはないかという疑念が覚めないので。

不眠に対してはマイスリーという薬をだしてもらった。

欝に対してはとれという薬をだしてもらった。

AD/HDに対しては、生い立ちみたいなものを延々と語らされ、不注意優勢型のADDか、軽いアスペだろうと診断された。

帰る間際に50問くらいの広汎性発達障害テストをやらされた。

ADHDとか、そういうのに対しては薬はないのだろうか。

どちらにせよ、「睡眠剤」とか「抗うつ薬」ってワクワクするね。中二病を激しく揺さぶる。

手のひらに溢れる薬を陰気な顔しながらカァーッと飲み干すのに憧れる。

これから、俺はどうなるのだろう。

薬漬けのなんちゃってメンヘラになるのか、本当に頭のどこかがやられるのか、はたまた健常者に戻れるのか。

2011-01-27

http://anond.hatelabo.jp/20110127212001

Aと自分が重なって思えて泣きそう。

ADDの症状とよく似ている。

2010-09-16

2ch英語ボキャビルスレから転載

http://logsoku.com/thread/academy6.2ch.net/english/1259371295/

466 :名無しさん英語勉強中 :2010/03/16(火) 18:01:25

名称-----*見出し語---token----word family----type

1.SVL-----12,000--12,000 (11,811)--8,543--11,996 (11,807)

2.LDAE----22,065--24,458 (23,105)--11,658--17,423 (16,116)

3.RHWIED--15,775--16,849 (15,718)--10,631--14,337 (13,259)

4.NVA-----24,055--27,700 (25,030)--12,129--20,186 (17,727)

(   )内はOn List only

Longman Dictionary of American English (LDAE)

Random House Webster's Intermediate English Dictionary (RHWIED)

ニューヴィクトリーアンカー英和辞典 (NVA)

token 延べ語数

個々の語をそれぞれ1語と数える

type (異なり語 (数))

個々の語が2回以上繰り返された場合、1回のみ数える

lemma 基本形+活用形

wait, waits, waited, waiting:1語

society, societies, society’s, societies’:1語

word family 基本形+活用形+派生

leak, leaks, leaking, leaked, leaky, leakiness, leakage, leaker:1語

468 :名無しさん英語勉強中 :2010/03/16(火) 18:09:38

How many words do native speakers know?

At present the best conservative rule of thumb that we have is that up to a vocabulary size of around 20,000 word families, we should

expect that native speakers will add roughly 1000 word families a year to their vocabulary size. That means that a five year old

beginning school will have a vocabulary of around 4000 to 5000 word families. A university graduate will have a vocabulary of around

20,000 word families (Goulden, Nation and Read, 1990).

http://www.fltr.ucl.ac.be/fltr/GERM/ETAN/bibs/vocab/cup.html

ネイティブの語彙力≒2万語(word family)

471 :名無しさん英語勉強中 :2010/03/16(火) 18:23:03

語彙習得速度

native speakers will add roughly 1000 word families a year to their vocabulary size.

ネイティブ 1000語(word family)/年

http://www.fltr.ucl.ac.be/fltr/GERM/ETAN/bibs/vocab/cup.html

2010-06-15

Deliciousタグ付け応用編

Deliciousタグを付ける際の豆知識を紹介しよう。

特定のタグがついているブックマークに新しいタグを加えるには

例えばworldcupというタグがついているブックマーク全てにsoccerというタグを加えたいとする。

これはタグリネームで可能。

Setting→Rename tagsからOld tag(変更対象のタグ)にworldcupを選択しNew Tag(変更後のタグ)にworldcup soccer入力してリネームする。

スペースが入っていると別々のタグとして認識するのでworldcupタグが付いているブックマークsoccerタグが追加されるわけだ。

同様にして2つ以上のタグも追加できる。

2つ以上の特定のタグが付いているブックマークに新しいタグを加えるには

worldcupとSouthAfricaの両方のタグが付いているブックマークにtravelというタグを加えたいとする。

タグリネームを使うやり方はリネームする前のタグを1つしか選択できないため使えない。

どうするかというとまずworldcupとSouthAfricaタグ両方が付いているブックマークを表示する。

そして右上のBulk Editをクリック。Bulk Editとは表示されているブックマークをまとめて編集できる便利機能だ。

Select Allで全てのブックマークにチェックを入れた後Add Tagでtravelタグを追加できる。

ただしここで注意したいのがBulk Editは1ページに表示される分だけのブックマークにしか適用されないこと。

Display Optionで100件表示しておけば100件を1回で編集できるため楽になるはずだ。

変更したいブックマークが1000件ある場合は10回同じ作業を繰り返さないといけないがそんなに頻繁に行う作業ではないため我慢して欲しい。


以上のようにDeliciousは応用次第で柔軟にタグ付けができる。

Deliciousユーザーは覚えておいて損はない。

2010-05-27

同人誌をePub化する作業メモ(メタデータ編)

今後iPadWWWを見る人が増えるかも知れないので、サークルWWWサイトで公開しているパロディ同人誌をsigilでePub化しようかと思ったんだが、メタデータの取り扱いがよくわからないので色々考えてみたメモ

まず前提として、同人誌のePub化を行うにあたり、各種メタデータを書く必要がある。その際、一部同人界隈で使われている、暗喩、符丁、伏字の類は一切使わないこと。それに抵抗があるコンテンツはePub化しないほうがいい。(そもそもそんな内容のものをWWWで公開すんなって話でもある。mixiでやっとけ。pixivは他人に見られることが前提のサービスだからやめとけ。)

メタデータを読むにあたり参考にしたのはこれ http://ryoji.sakura.ne.jp/references/rfc2413-j.txt

何がどこまで決まっているのかさっぱり分からないので、的外れな使い方をしているかも知れない。特に著者名とサークル名の扱いの違い(AuthorとPublisherに分けるべきか、どちらもAuthorにすべきか)と、Rightsが怪しい。

メタデータ登録(必須事項)

Title
同人誌タイトル
Author
著者を書く(サークル名ではない)。合同誌の場合責任を持てる著者を書く。この欄は後で増やせる。
Language
Japanese だと思う。大抵は。

メタデータ登録(Add Basic

Subject
いわゆるキーワードを書く。同人誌場合は Dojinshi, というキーワードを必ず登録するようにしたらいいと思う。Fanjine よりも通りがいいかもしれない。複数登録することが出来るので、元とした作品名とかを書くといいかも。レーティング情報もここに書くべき? pixivにおけるタグのような使われ方をしそうな気がする。
Publisher
サークル名を書くとよいだろう。合同誌の場合は主たる発行サークル名(コミケで見本誌登録しているサークル)のみを書く。
Description
電子書籍の説明(100文字程度)。オリジナルなら問題なく書けるだろう。パロディ同人誌場合、何の二次創作物であるのかをここで示しておくことで、変な誤解を回避出来る。例えば東方場合、お決まりの『この同人誌は、東方Project二次創作物です。』の文言をここに書く。東方以外の場合適当アレンジすること。
Date of publication
書籍の発行日。同人誌なら本誌を発行した日を書く。
Date of creation
ePubを作った日を書く。同人誌をePub化した日になるだろう。
Rights
著作権や各種権利に関する事項を書く。正確には以下のような定義である。

2.2.15: <rights> </rights>

権利に関する表明や、ある権利への参照を表す。本仕様では著作権表示やさらなる諸権利についての説明は直接的に示されるべきである(should)。本仕様ではコンテンツ供給者が、購読権や販売用コンテンツの複製などのライセンス用語を、安全な販売業者に向けて指定する方法を定義していない。

http://lost_and_found.lv9.org/opf/opf_2.0_final_spec_ja.html

完全なオリジナルであれば、堂々と

>(c) 作家(自分の)名 出版

と書けばよい。もっとも、日本場合オリジナルだろうがパロディだろうが、電子書籍としてこれが世に出た時点でメタデータの Title/Author/Date of publication を元に著作権が発生する(無方式主義)ので、わざわざ明記する必要はない気もする。

パロディ同人誌場合、『元の作品タイトル』を書き、それに対応する著作権情報を書くのがやはり礼儀であろう。複数年続いている作品の場合、年は省いて書いたほうがいいのかもしれない。

  1. 漫画小説場合は、オリジナル作品のタイトルと、奥付で(c)表記で示されている著者名などを書く。稀に著作権表示に出版社が入っている場合があるので注意が必要。(c)表記がが無ければ著者と出版社を書いておく。
  2. アニメ場合公式サイトなどで大抵著作権に関する記述が見受けられるので、それを書く。
  3. ゲーム場合公式サイト情報が役に立つ。ゲーム公式サイト、もしくはゲームマニュアルから著作権に関する表示を見つけることが出来るだろう。明記されていない場合ソフトハウス名などを書いておく。
  4. スピンオフ作品や別メディアで展開している作品が対象の場合、準拠した作品の権利関係を書く。
  5. 東方場合、お決まりの『東方Projectは「上海アリス幻樂団」さまの作品です。』をここに書く。
  6. (c)表記がはっきり無い場合でも、東方場合と同様、オリジナル作品のタイトルと、それが本来誰のものかを書いておけばよい。対象が作品ではない(芸能系など)場合権利関係を書くのが大変難しいので、Description:に一体何の本なのかを書いておくべきだ。
  7. 複数の作品をクロスオーバーしている同人誌場合、1作品あたり Rights を1つ使い、複数登録する。

例:『バクマン。』であれば、

バクマン。 (c) Tsugumi Ohba (c) Takeshi Obara

となる。この場合、(c)表記に出版社がないので書かなくてよいだろう。複数連名の場合漏れなく書くこと。

例:『ろりぽ∞』 の場合

ろりぽ∞ (c)仏さんじょ/一迅社

となる。

例:アニメストライクウィッチーズ』の本であれば、

ストライクウィッチーズ (c) 第501統合戦闘航空団

例:『WORKING!!』のアニメ版足湯後日談本などを出した場合は俺に教えてくれ、じゃなくて、

WORKING!! (c)高津カリノスクウェアエニックス・「WORKING!!製作委員会

メタデータ登録(Add Adv.)大量にあるが使いそうなものを挙げる

Author
同人誌を複数の著者が書いている場合、ここで書く。複数登録出来る。合同誌の場合権利関係(責任関係)も対等であると見なせる人はここに書く。必須メタデータの Author と同じ扱いになる。サークル名を書いてもよい(?)
Collaborator
ゲスト原稿を書いてくれた人などはここに書く。合同誌の場合責任を負うところまでいかない場合はここに書く。
Director
編集者がもしいるなら書いておくとよい。昔はそういうサークルもありました。

その他

自分サークルでわざわざePub化するとこなんてほとんどないと思う。どこかが同人誌をePub化するサービスを始めたとき、これらのメタデータがどう使われるのか?にとても興味がある。ツッコミとか、自分とこのブログで取り上げて修正とか自由にやってほしい。誰か規格を作ってくれたらそれに乗っかりたい。

2010-04-26

RubyJavaログ出力を統合する方法

JRuby上で動くRubyJavaログを同じファイルに保存したいときなど

JRuby界隈で何かいい方法ないかな~と探していたけど見つからないので

RubyのLoggerのインターフェースcommons-loggingを使用して実装してみた

使用バージョンは以下

require 'logger'

class CommonsLoggingLogger
  def initialize(name="ruby")
    @progname = nil
    @logger = org.apache.commons.logging.LogFactory.getLog(name)
  end
  def add(severity, message=nil, progname=@progname, &amp;amp;block)
    if message.nil? and block_given?
      message = yield
    end
    
    case severity
    when Logger::DEBUG
      debug(progname){message}
    when Logger::INFO
      info(progname){message}
    when Logger::WARN
      warn(progname){message}
    when Logger::ERROR
      error(progname){message}
    else
      fatal(progname){message}
    end
  end
  def debug(arg0=nil, &amp;amp;block)
    @logger.debug make_log(arg0, &amp;amp;block)
  end
  def info(arg0=nil, &amp;amp;block)
    @logger.info make_log(arg0, &amp;amp;block)
  end
  def warn(arg0=nil, &amp;amp;block)
    @logger.warn make_log(arg0, &amp;amp;block)
  end
  def error(arg0=nil, &amp;amp;block)
    @logger.error make_log(arg0, &amp;amp;block)
  end
  def fatal(arg0=nil, &amp;amp;block)
    @logger.fatal make_log(arg0, &amp;amp;block)
  end
  def debug?
    @logger.isDebugEnabled
  end
  def info?
    @logger.isInfoEnabled
  end
  def warn?
    @logger.isWarnEnabled
  end
  def error?
    @logger.isErrorEnabled
  end
  def fatal?
    @logger.isFatalEnabled
  end
  def level
    if debug?
      Logger::DEBUG
    elsif info?
      Logger::INFO
    elsif warn?
      Logger::WARN
    elsif error?
      Logger::ERROR
    else
      Logger::FATAL
    end
  end
  def level=(lv)
    #do nothing
  end
  def sev_threshold
    level
  end
  def sev_threshold=(lv)
    #do nothing
  end
  def datetime_format
    nil
  end
  def datetime_format=(fm)
    #do nothing
  end
  
  attr_accessor :progname
  
  private
  def make_log(message_or_progname, &amp;amp;block)
    if block_given?
      progname = message_or_progname || @progname
      message = yield
    else
      progname = @progname
      message = message_or_progname
    end
    
    progname_message(progname, message)
  end
  def progname_message(progname, message)
    progname.nil? ? message : "#{progname}: #{message}"
  end  
end

試しにRedmineに設定して動かしてみたところ大丈夫そうだった

2010-03-02

あああああどうしようどうしよう

また怒られる、怒られる

起きると言った時間にまた起きれなかった

あっちが起きる時間までに起きて電話できなかった

くそがき以下、自分コントロールできていない、

これだけ怒られてもまだこれだけのことができないのか

幼稚園児でもできることがなんでできないのか

今度会ったら、しばくと言われた。

一回失敗するごとに、ケツを10回叩くって言われた。

これだけ怒られて、口で言ってもわからないのだから、

お前は脳みそがガキなのだから、体でわかるしかない。

俺も精神的に限界で、それ以外にもう思いつかない。と言われた。

私もそれ意外思いつかなかった。

いっそのことだれかADDですと診断してくれませんか?

そうなったらこの関係も色々終わるんだろうな

ちょっとほっとするのかもしれない

とにかく怒られるのがいやだ

怒られたくない、ごめんなさいごめんなさいごめんなさい。

こんな関係明らかに正常じゃない

怖い。

でも好きだ。

たぶん…。すごく。

2010-02-14

彼女宇野常寛読んでた・・・

別れたい。


ぼく草食だから女性を傷つけてないもん!・・だって?http://anond.hatelabo.jp/20100210111547

kanoseレイプファンタジー」なんてキーワードを出す辺り、書いたのは女性ではないと思った/id:tenkyoin 女性レイプファンタジーなんて用語使って文章書いているの見たことないもんで

tenkyoin id:kanoseさん、宇野常寛さんの読者にはちゃんと女性も一定割合、いますよ。変な印象操作はやめてください。

kanose :add star otsune

id:tenkyoin ブクマでは文字数足りなかったので。

僕が言いたかったのは「女性が書いたものとして批判している人が多いけど、レイプファンタジーという用語を使って男性を批判する文章を書いている女性は見たことないから、これ書いたのは男性だよね」であって「宇野氏の書籍女性読者がいない」ではないですよ。宇野氏が好きなのはわかりますが、転叫院さんこそ、僕が言いたいことをねじ曲げて印象操作しないでください。

http://h.hatena.ne.jp/kanose/9236555986980764011

2010-01-14

http://anond.hatelabo.jp/20100113192313

これで40分。

タイムアタックってことでアルゴリズムは全幅探索で書き上げました。

エラーチェック皆無。

A*ならもう5分ほど延びるかな?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace Maze
{
    class Program
    {
        // 探索用地図
        static int[,] maze;

        // 始点終点
        static Position Start = new Position(0, 0), Goal = new Position(0, 0);

        static void Main(string[] args)
        {
            //////////////////////////// まずは各行のリストとして読み込み
            string[] inMaze;

            using (var fp = new FileStream(args[0], FileMode.Open, FileAccess.Read))
            using (var iStream = new StreamReader(fp))
                inMaze = iStream.ReadToEnd().Split('\n');

            // 迷路幅
            int height = inMaze.Length;

            // 迷路高さ
            int width = inMaze[0].Length;

            /////////////////////////// 読み込んだ迷路を作業用地図に展開
            maze = new int[width, height];
            for (int y = 0; y < height; ++y)
            {
                string line = inMaze[y];
                for (int x = 0; x < line.Length; ++x)
                {
                    maze[x, y] = line[x] == '*'
                        ? -1
                        : 0;
                    if (line[x] == 'S') Start = new Position(x, y);
                    if (line[x] == 'G') Goal = new Position(x, y);
                }
            }

            // 探索実行
            int dist = Search(maze, Start);

            // 探索結果から最短経路を再現
            Position backTracer = Goal;
            while (dist&gt;1){
                --dist;
                backTracer = backTracer.Nearbys.First(pos =&gt; maze[pos.X,pos.Y] == dist);
                maze[backTracer.X, backTracer.Y] = -2;
            }

            //////////////////// 最短経路こみのアスキー地図に変換
            char[,] outMaze = new char[width, height];

            for (int y = 0; y < height; ++y)
            {
                for (int x = 0; x < width; ++x)
                {
                    outMaze[x, y] = maze[x, y] == -2
                        ? '$'
                        : maze[x, y] == -1
                            ? '*'
                            : ' ';
                }
            }
            outMaze[Start.X, Start.Y] = 'S';
            outMaze[Goal.X, Goal.Y] = 'G';


            ////////////////////// 結果は標準出力に。
            for (int y = 0; y < height; ++y)
            {
                for (int x = 0; x < width; ++x)
                    Console.Write(outMaze[x, y]);
                Console.WriteLine();
            }
            Console.ReadLine();
        }

        /// <summary&gt;
        /// 探索する。SG間の道のりを返す(道のり=SGが隣接しているなら1)
        /// </summary&gt;
        private static int Search(int[,] maze, Position Start)
        {
            List<Position&gt; FrontLine = new List<Position&gt;();
            FrontLine.Add(Start);
            int dist = 1;
            for (; ; )
            {
                List<Position&gt; NextFrontLine = new List<Position&gt;();
                foreach (var pos in FrontLine)
                {
                    foreach (var nextPos in pos.Nearbys)
                    {
                        if (nextPos == Goal) return dist;
                        if (maze[nextPos.X, nextPos.Y] == 0)
                        {
                            maze[nextPos.X, nextPos.Y] = dist;
                            NextFrontLine.Add(nextPos);
                        }
                    }
                }
                FrontLine = NextFrontLine;
                ++dist;
            }
        }
    }

    struct Position
    {
        public readonly int X, Y;
        public Position(int x, int y) { X = x; Y = y; }

        public IEnumerable<Position&gt; Nearbys
        {
            get
            {
                return new[]{
                    new Position(X-1,Y),
                    new Position(X,Y-1),
                    new Position(X+1,Y),
                    new Position(X,Y+1),
                };
            }
        }

        public static bool operator==(Position p1, Position p2){
            return p1.X == p2.X &amp;&amp; p1.Y == p2.Y;
        }

        public static bool operator!=(Position p1, Position p2){
            return p1.X != p2.X || p1.Y != p2.Y;
        }
    }
}

2009-11-22

日本と方向性の違うUSのgoogle news

http://news.google.com/

このページの右上に

Add a section » New!」

というのが追加された。

http://news.google.com/news/directory?pz=1&amp;cf=all&amp;ned=us&amp;hl=en&amp;sort=users

どうやらCategoryより細かく「Mobile Technology」や「Space」などをsectionとして追加できる模様。

日本は単純化していくけどUSでは詳細化していくgoogle news

・・・日本の場合せめて「Technology」と「Science」を分けてほしい・・・

2009-10-25

Javaってかわいそう

http://d.hatena.ne.jp/j5ik2o/20091024/1256369305

    // 1.0 - 9 * 0.1
    BigDecimal b1 = new BigDecimal(1.0);
    BigDecimal b2 = new BigDecimal(-9);
    BigDecimal b3 = new BigDecimal("0.1");
    BigDecimal result = b1.add(b2.multiply(b3));	
    System.out.println(result.toString());

を見て悲しくなった。Javaってひどい。0.1は文字列で渡さないと誤差が出るってさ。泣ける。

C#なら

    Console.WriteLine( 1.00M - 9M * .10M );

でOK

2009-10-22

はてな匿名スターとかできないかな。

増田に★付けたいと思ってもID出したくないから付けられない。
付けなきゃ良いじゃんとか言われると、まぁ、そうですね、としか言えないが。

と、ここまで書いて、増田Add starがあるのははてなツールバーのせいだと気付いた。なんて間が抜けてるんだ俺は

2009-10-07

[]Firefox 3.5 コンテキストメニュー ID一覧

使用用途

http://suzumi.boo.jp/adanami/200505/01_2106.php

http://wp.graphact.com/2007/08/19/103

http://blog.livedoor.jp/blankcity/archives/15346691.html

http://puppet.asablo.jp/blog/2009/08/08/4486350

http://browserjs.blog102.fc2.com/blog-entry-600.html

#contentAreaContextMenu

id="spell-no-suggestions"
label="(修正候補がありません)"

id="spell-add-to-dictionary"
label="辞書に追加"

id="spell-suggestions-separator"

id="context-openlink"
label="リンクを新しいウィンドウで開く"

id="context-openlinkintab"
label="リンクを新しいタブで開く"

id="context-sep-open"

id="context-bookmarklink"
label="このリンクブックマーク"

id="context-savelink"
label="名前を付けてリンク先を保存..."

id="context-sendlink"
label="リンクURLメールで送信..."

id="context-copyemail"
label="メールアドレスコピー"

id="context-copylink"
label="リンクURLコピー"

id="context-sep-copylink"

id="context-media-play"
label="再生"

id="context-media-pause"
label="一時停止"

id="context-media-mute"
label="ミュート"

id="context-media-unmute"
label="ミュート解除"

id="context-media-showcontrols"
label="コントロールを表示"

id="context-media-hidecontrols"
label="コントロールを隠す"

id="context-media-sep-commands"

id="context-reloadimage"
label="画像を再読み込み"

id="context-viewimage"
label="画像だけを表示"

id="context-viewvideo"
label="動画だけを表示"

id="context-copyimage-contents"
label="画像コピー"

id="context-copyimage"
label="画像URLコピー"

id="context-copyvideourl"
label="動画URLコピー"

id="context-copyaudiourl"
label="オーディオURLコピー"

id="context-sep-copyimage"

id="context-saveimage"
label="名前を付けて画像を保存..."

id="context-sendimage"
label="画像URLメールで送信..."

id="context-setDesktopBackground"
label="デスクトップの背景に設定..."

id="context-blockimage"
label="google.co.jp画像を表示しない"

id="context-savevideo"
label="名前を付けて動画を保存..."

id="context-saveaudio"
label="名前を付けてオーディオを保存..."

id="context-sendvideo"
label="動画URLメールで送信..."

id="context-sendaudio"
label="オーディオURLメールで送信..."

id="context-back"
label="戻る"

id="context-forward"
label="進む"

id="context-reload"
label="更新"

id="context-stop"
label="中止"

id="context-sep-stop"

id="context-bookmarkpage"
label="このページをブックマーク"

id="context-savepage"
label="名前を付けてページを保存..."

id="context-sendpage"
label="ページの URLメールで送信..."

id="context-sep-viewbgimage"

id="context-viewbgimage"
label="背景画像だけを表示"

id="context-undo"
label="元に戻す"

id="context-sep-undo"

id="context-cut"
label="切り取り"

id="context-copy"
label="コピー"

id="context-paste"
label="貼り付け"

id="context-delete"
label="削除"

id="context-sep-paste"

id="context-selectall"
label="すべて選択"

id="context-sep-selectall"

id="context-keywordfield"
label="この検索キーワードを設定..."

id="context-searchselect"

id="frame-sep"

id="frame"
label="このフレーム"

id="context-sep-properties"

id="context-viewpartialsource-selection"
label="選択した部分のソースを表示"

id="context-viewpartialsource-mathml"
label="MathML のソースを表示"

id="context-viewsource"
label="ページのソースを表示"

id="context-viewinfo"
label="ページの情報を表示"

id="context-metadata"
label="プロパティ"

id="spell-separator"

id="spell-check-enabled"
label="スペルチェックを行う"

id="spell-add-dictionaries-main"
label="辞書を追加..."

id="spell-dictionaries"
label="言語"

id="context-sep-bidi"

id="context-bidi-text-direction-toggle"
label="テキストの方向を切り替える"

id="context-bidi-page-direction-toggle"
label="ページの方向を切り替える"

2009-07-27

渦状言論避難所add star出来なくなったのは、絶対に俺が『ファイナルクリティカルライド爆現w』の記事に調子に乗って星を百個くらいつけたからだと思う。ストーカー加害者になったような、申し訳なさがある。

ログイン ユーザー登録
ようこそ ゲスト さん