はてなキーワード: ADDとは
やー。面倒でした。
古い情報だと Outlook Express を経由しろと書いてあるので、後継であるらしいWindows Live Mail を経由して(Windows Live Mail からエクスポートする方法で)
Outlook に移行したのだが、どういうわけか宛名が文字列として移行されてしまい、xxx@example.com というメールアドレスの移行ができなかったんです。
で eml → msg もしくは pst 形式への変換ソフトを探すのですが、無料のものが見つからなくてあんまり情報もありませんでした。が、ありましたよ!お兄さん。
====
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
前回、このはてなで初めて「好かれない性格」という日記を綴りました。
おかげ様でごく一部で反響があり、そこの皆様に「発達障害の1つでは」と言われました。
それは今までで初めて言われたので斬新。
過去には、ADDを患っている方から「たぶん君も同じADDを抱えているよ」と言われた事もあります。
(ADDというのは、最近よく聞くADHDの1種で多動性のないものがADDなんだそう)
といっても医院等に行って正式に判断されたわけじゃないですけどね。
自分自身としては「そんな所もあるのかもなー。でも自分は生活に支障が出るレベルでもないから軽度というか、ほんの少し程度なんだろう」
程度に考えています。
*小さい頃から顔面チック(トゥレット症候群)が頻繁にあった(大人になった今でもある。が、他人の前ではなんとか我慢できる)
*言語チックもあった(無意識下ではないが、ほぼ口癖で意味のない言葉を連発したり歌ったりする癖)
*行動チックもあり
*いろんな依存に陥りやすい
まぁ、一部はADDは関係ないただの駄目な性格なのかもしれませんけれど・・・
これらは小さい頃から、それが自分だと分かってたので特に何とも思ってません。
まぁこれらを兄弟や親戚、友人にネタにされたり笑われた事もありましたが・・・(苦笑)
ところで、「幼少期に抑圧されたから云々」とも言われてましたが、
どちらかといえば自分は中学以降はイジメで殻に閉じこもるようになりましたが、
家庭環境は、厳しい面もありましたがどちらかといえばのびのびと育てられていた気もします。
(まぁそれらも小学時代までで、中学・高校・卒業となるに連れ、優しかった親も厳しくなり抑圧面は増えましたが・・・)
何が言いたいかというと、発達障害やADDなど言われる割には、そうなるような原因が幼少時にあったとは思えないんです。
もしかしたら前回書いた「好かれない性格」も、煽られた通りに根本的な何かが原因なのかもしれませんね。
とまぁそんな自分ですが、レールから外れた人生は送ってますがあまり辛いとは思ってなく、
世間から見れば壮絶な生き方してますが、数少ない良い交友を大事にしつつ笑顔で生きてます。
(そういうのを鈍感というのでしょうかね・・・苦笑)
・対応デバイス・キャリア:フィーチャーフォン(docomo・au・softbank・DisneyMobile)
・サービス使用料:無料
てなわけで、せっかくの無料サービスなのにiPhoneは蚊帳の外・・・。
んなわけで、さっそくのハックです。
この時点でガラケーをお持ちでないフューチャー兄貴は、デスクの隣のマドンナにガラケー借りるべし。
恋が生まれるかも。
専用って響きにウットリしながらクリックすべし。
3.「タイムライン」「@」・・・「ツイートデコ」のツイートデコをクリック
利用規約うんぬんはみなさんの自己責任で。とりあえずこのかわいい「デコってみる!!」をクリック。
こんなメニューが出るはず。そして「iモードメール作成」をクリック。
ここで仮にデスクの隣のマドンナにガラケーを借りてたら、同時にメアドゲットだぜ!!
とりあえず、言われたとおりメール送信しておこう。別に自力でメモってもいいんだけど・・・。
8.おもむろにiPhoneのAppStoreから「KeitaiEmu」をダウンロード。
無料なので安心しなさい。そして何のためのソフトなのかは気にしない。これお約束。
9.そろそろURL送ったメールも届いてるだろうし、クリップボードにURLをコピー!
12.無事にモバツイにアクセスできた!けどもっかいパスワードを!
13.おめでとう!!「ツイートデコ」ボタンが表示されてます!
14.すかさず右上のブックマークボタンを押して「Add Bookmark」か「Set Default Page」へ
すばらしい。すばらしい素材の安定感。往年のマンセルを思い起こさせる。
16.無事にツイートデコ達成!
はてなブックマーク - 政治評論家の花岡信昭氏が死去 拓殖大院教授、元産経新聞政治部長 - 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のような存在が目立つはてブのシステムに変えて、はてなはますます阿呆の巣窟になっている。
はてながどんどん先鋭化していったら、結局困るのは、はてななのだが、先鋭化したブコメを目立つようにしたはてなは何がしたいのだろうか?一般常識とはかけ離れた路線で突き進みますよということだな。
【サンプル】
// --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
私の会社ではソースの変更(追加、変更、削除)をソース内に記載する文化があり、こういうソースコードにあふれている。
調査も改修もできやしねえ。。
http://b.hatena.ne.jp/register
こちらにもブックマークレットが複数載っていますが、なじみのはてブ追加ページを使いたいので書いてみました。
javascript:window.location='http://b.hatena.ne.jp/はてなID/add.confirm?&url='+escape(location.href);
もう一つは「ブックマークしてコメントする」をクリックするもの。
無言ブクマやコメントをするだけならば「追加する」ボタンでいいのですが、
タグを付けるのなら二つ目の方法が楽です。私はそちらを使っています。
・コメントが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
#scored-bookmarks { display:none; }
http://1-byte.jp/2011/03/20/20_tips_you_need_to_learn_to_become_a_better_php_programmer/
良いPHPerだって?そんなものは丸めてゴミ箱にでも捨ててしまった方が資源の再利用になる分いくらかマシだ。
つまり俺たちがしなくちゃならないことは「より良いPHPerにならないため」に何ができるかってことなのさ。
それじゃ、始めよう。
?>なんて使っちゃいけない。そう俺たちはBAD PHPer。
無駄なホワイトスペースの出力に悩まされるくらいなら対称性なんて丸めてゴミ箱にでも捨てた方がまだマシだ。非対称性こそが賛美。
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/'
// ここで後の処理のためにhogeメソッドを呼び出しておく $q->foo(); // $a['foo']はここに来る時点で真のはず // 2010-03-10 判定がおかしいので修正 // 2010-06-21 やっぱり値が入ってる方が正しい if ( !isset($hoge[0]) ) { }
コメントは保守されない。そう、それは真実。こんなコメントを発見したら即効削除しよう。コメントは基本信じるな。
俺たちにちょっとしたヒントと大きな損害を与えてくれる、それがコメントの役割なのだ。
わかる。いいたい事はとてもわかる。俺たちはしばしばインデントにスペースを使うはずだ。一方でIDEのしっかりした言語ではタブも使うことがある。しかし悪いことに、両者を混同しているプログラマも一定数いるのだ。
タブを画面上で認識しにくいエディタが世の中には存在する(何とは言わないが)
そして画面上で認識しにくいことを理由にタブを気にしないプログラマがいる。
この二つの条件が重なると、タブとスペースの交じり合ったインデントが完成する。もうぐちゃぐちゃだ。これは永遠に続く戦いだ。
私たちが勝利を掴むためにできることなどせいぜい、常にスペースしか使わない。タブを見つけたらその都度スペースに変換する。そういった地道な活動が明日へとつながるのだ。
われわれがプログラムをするとき、何に一番時間がかかってるか。実は変数の命名なのである。ここで拘り過ぎて時間をかけ過ぎては何も進まない。
御託はイイからさっさと書け、だ。しかしとはいっても変数名は重要。日頃からどういうときにどんな名前を使うかを決めておくといい。
そして変数名に型はまったく必要ない。型宣言のないPHPにおいて、型の変数名をつけること自体ナンセンスだ。
$iNumber = 'aaa';
になんの意味もない。コメントを信じるなでも言ったが、これはプログラマを混乱させるだけの害悪なものだ。
変数を使う前に初期化するのは、警告を出さないという意味でも良い癖だ。しかし具体的にどこでやるかが問題だ。
$foo = null; $foo = $q->foo();
こんな初期化に意味はない。よくあるのはやはり、if文で値を振り分けるケースだろう
$foo = null; if ( $hoge ) { $foo = 1; } else if ( $bar ) { $foo = 2; }
このときの初期化はとても有効だ。もしnullの初期化を忘れたまま$fooを使うと警告が出るが、ちゃんと初期化してるので出ない。基本中の基本だ。
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を返して生存させる必要性はまったくない。今すぐ死ね!
連想配列のキーを指定する場合だけ定数と間違わないようにクオートで囲まなければならない。そして逆に定数を使いたい場合はクオートで囲ってはいけない。
更に後世のプログラマが処理を見たときに、定数が使いたかったのか、文字列が使いたかったのかを明確にしたい場合はconstantを使うと良い。
// 定数のFOOを使うよということが明確になる print $a[constant('FOO')];
もし、文字列を変数の値と一緒に出力するとき、PHPではコンマの代わりにprintfを使うことが使える。
printf( “Hello, my name is %s“, $sName);
以下の代わりに上記のコードを使う。
echo “Hello, my name is “, $sName;
出力すべき変数が増えれば増えるほど、有効になっていく。とにかく迷ったならば、printfを使え、だ。
三項演算子はとても有効だ。しかし優先順位に難があるせいで、三項演算子をネストしようとすると以下のようなコードになってしまう
$n = (($i == 1) ? 2 : (($i == 2) ? 3 :$i));
括弧だらけで読みにくいったらありゃしない。三項演算子を使うなら一回まで。約束守れないやつは丸めてゴミ箱にでも捨てちまえ。
if ( $flag ) { }
仕様をちゃんと把握しているなら真偽値のチェックなどこれで十分。
もし事前にbool型だというのが確定してるのなら「$flag === true」を使えばいい。
インクリメント、デクリメント演算子は前に付くか後ろに付くかで意味が変わるので慣れるまでは非常にややこしい。
わけがわからなくなるくらいなら初めから使わないほうが良い。見極められないなら使うな。それがPHPerなのだ。
文句なしだ。これは文句がない。
他にも色々あるので覚えておこう
$a %= 1; $a &= 1; $a |= 1; $a ^= 1; $a <<= 1; $a >>= 1;
てっとり早く画面に表示する際にpreはよく使うが、デザインの関係上画面の文字が見えないときがある。
なのでdivを使って以下のようにしとくと便利だろう。
function p($var) { echo "<div align='left' style='background-color:white;color:black;'><pre>"; print_r($var); echo "</pre></div>"; }
君らが通常作るアプリケーションなんぞに、定数なんぞ必要ない。いいか、もう一度言う、お前ら程度のもんが、定数使おう何ぞ、おこがましいわ!
大丈夫。なんでもかんでも定数にする必要はない。結局設定ファイルに定数をずらずら作りまくってわけがわからなくなってるパターンが多い。
貴様みたいなもんに、定数は制御できん。いいか設定ファイルはYAML等のデータで持つようにし、その連想配列のデータ構造を一つ持ってるだけで定数の変わりになる。
このメリットに比べれば、定数だと書き換えられなくて良いという利点などこの歯のカスほどのものだ。そんなものは丸めてゴミ箱へ捨ててしまうといい。
認識を改めろ。俺たちはより良いPHPerにならないために努力している。
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を明示的に取るメソッドとかも作ってみるといい。自分の手を動かすのだ!
例が良くない。こんなのは引数が20個ある関数から、setを20回呼ぶオブジェクトに変わっただけではないか。
そもそもこの20個の引数とはなんなのか。何かのデータ構造なんであれば連想配列にして引数一つとして渡すべきだし、それぞれまったく異なる用途の変数なのであればWindowsプログラミングじゃあるまいし、20個も引数取る時点で設計が間違えている。
何がいいたいか。別に関数でもオブジェクトでもどっちでもいいということだ。
そんなことで悩んでる暇があったら設計を見直せ。
スキあらば自分自身を返せ。スキあらばオブジェクトを返せ。配列はArrayObjectのARRAY_AS_PROPSで返せ。
ひたすらメソッドチェイン。来る日も来る日もメソッドチェイン。とにかくメソッドチェインを使い続けろ。そこに未来はある。
どんなコードも繰り返すな。もし、少しでも同じコードを書いていたなら、それは関数に置き換えてしまえ。
・・・と、いうのはやめなさい。
一見同じように見えた処理でも前後の流れでまったく違うものということが往々にしてある。
まとめ方にも問題があるケースもある。何でもかんでも関数化すると、関数が膨大に増えていく。君は見たことがあるだろうか。common.phpやfunction.phpの恐ろしさを。
確かに細かく関数化はされているが、適切に関数化していないのである。結合度が非常に高い。なんでもかんでも盲目的にまとめれば良いという話ではないのだ!
あまりに極度に意識しすぎると、プログラムそのものができなくなる。そういう状態に陥る。
気を抜いて。そう気を抜いて。所詮あなたのコードなんてすぐに消えてなくなるよ。きっともっと偉い人が作り直すよ。だからまずは思うが侭にやるといい。
結合度を減らすというのは非常に難しい。何度も何度も失敗し続けて、ようやくここは分けた方が良かったんだなと気付く。次に活かそうと心に決める。そしてまた同じ過ちを繰り返していくわけだ。
まずは実装することだ。これが一番の早道だ。まずはがっつり結合した関数をあえて作るといい。何も考えずに作ろう。
そしてその後に、一部分使いまわしたいとおもうことがあるはずだ。その時に関数に切り出そう。それを繰り返すといい。そのうち初めから分けた方が良いと気付く。
何事も経験が必要である!経験を積まないプログラマは丸めてゴミ箱に捨ててしまえ。
さて、先の例で言うならば、私ならadd_result_outputという関数を作ってしまうだろう。だって、addとresultを連続して呼ぶのはめんどくさいんだもん。一連の流れをいつも使うのなら、その流れをやってくれる関数を作ればいいじゃないか。
function add_result_output ($iVar, $iVar2) { $r = add($iVar, $iVar2); echo result($r); }
もっと言えばクラス化してしまってもいいかもしれない。どんな感じになるかは君の手を動かして確認しよう!
このTipsはとてもわかりにくく、ニッチ過ぎる部分も多いかもしれない。
あくまでも「より良いPHPerにならないための20Tips」なのだ。
君はこの記事を鵜呑みにしてはならない。PHPをPHPと見抜けないPHPerはPHPを使うのは難しい。
もし、あなたがPHPプログラマなら、公式のPHPドキュメントはあなたのケツの穴を拭くための紙になるだろう。
私は、それぞれのセクションを眺めて、各関数でどんなことが出来るかなんぞ、歯クソのゴミ程に役に立たないとおもっている。動けばいい。はは。
あなたは、PHPで用意された既製関数で多くのことが実現できることに、(俺の仕事を減らすなと)驚くはずだ。
この記事があなたの役に立たない事を。
ふざけんな!
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)
Longman Dictionary of American English (LDAE)
Random House Webster's Intermediate English Dictionary (RHWIED)
token 延べ語数
個々の語をそれぞれ1語と数える
type (異なり語 (数))
個々の語が2回以上繰り返された場合、1回のみ数える
lemma 基本形+活用形
wait, waits, waited, waiting:1語
society, societies, society’s, societies’:1語
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
471 :名無しさん@英語勉強中 :2010/03/16(火) 18:23:03
語彙習得速度
native speakers will add roughly 1000 word families a year to their vocabulary size.
http://www.fltr.ucl.ac.be/fltr/GERM/ETAN/bibs/vocab/cup.html
例えばworldcupというタグがついているブックマーク全てにsoccerというタグを加えたいとする。
Setting→Rename tagsからOld tag(変更対象のタグ)にworldcupを選択しNew Tag(変更後のタグ)にworldcup soccerと入力してリネームする。
スペースが入っていると別々のタグとして認識するのでworldcupタグが付いているブックマークにsoccerタグが追加されるわけだ。
同様にして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回同じ作業を繰り返さないといけないがそんなに頻繁に行う作業ではないため我慢して欲しい。
今後iPadでWWWを見る人が増えるかも知れないので、サークルのWWWサイトで公開しているパロディ同人誌をsigilでePub化しようかと思ったんだが、メタデータの取り扱いがよくわからないので色々考えてみたメモ。
まず前提として、同人誌のePub化を行うにあたり、各種メタデータを書く必要がある。その際、一部同人界隈で使われている、暗喩、符丁、伏字の類は一切使わないこと。それに抵抗があるコンテンツはePub化しないほうがいい。(そもそもそんな内容のものをWWWで公開すんなって話でもある。mixiでやっとけ。pixivは他人に見られることが前提のサービスだからやめとけ。)
メタデータを読むにあたり参考にしたのはこれ http://ryoji.sakura.ne.jp/references/rfc2413-j.txt
何がどこまで決まっているのかさっぱり分からないので、的外れな使い方をしているかも知れない。特に著者名とサークル名の扱いの違い(AuthorとPublisherに分けるべきか、どちらもAuthorにすべきか)と、Rightsが怪しい。
2.2.15: <rights> </rights>
諸権利に関する表明や、ある権利への参照を表す。本仕様では著作権表示やさらなる諸権利についての説明は直接的に示されるべきである(should)。本仕様ではコンテンツ供給者が、購読権や販売用コンテンツの複製などのライセンス用語を、安全な販売業者に向けて指定する方法を定義していない。
http://lost_and_found.lv9.org/opf/opf_2.0_final_spec_ja.html
完全なオリジナルであれば、堂々と
と書けばよい。もっとも、日本の場合はオリジナルだろうがパロディだろうが、電子書籍としてこれが世に出た時点でメタデータの Title/Author/Date of publication を元に著作権が発生する(無方式主義)ので、わざわざ明記する必要はない気もする。
パロディ同人誌の場合、『元の作品タイトル』を書き、それに対応する著作権情報を書くのがやはり礼儀であろう。複数年続いている作品の場合、年は省いて書いたほうがいいのかもしれない。
例:『バクマン。』であれば、
>バクマン。 (c) Tsugumi Ohba (c) Takeshi Obara
となる。この場合、(c)表記に出版社がないので書かなくてよいだろう。複数連名の場合漏れなく書くこと。
となる。
例:アニメ『ストライクウィッチーズ』の本であれば、
>ストライクウィッチーズ (c) 第501統合戦闘航空団
例:『WORKING!!』のアニメ版の足湯回後日談本などを出した場合は俺に教えてくれ、じゃなくて、
>WORKING!! (c)高津カリノ/スクウェアエニックス・「WORKING!!」製作委員会
自分のサークルでわざわざePub化するとこなんてほとんどないと思う。どこかが同人誌をePub化するサービスを始めたとき、これらのメタデータがどう使われるのか?にとても興味がある。ツッコミとか、自分とこのブログで取り上げて修正とか自由にやってほしい。誰か規格を作ってくれたらそれに乗っかりたい。
JRuby上で動くRubyとJavaのログを同じファイルに保存したいときなど
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;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;block) @logger.debug make_log(arg0, &amp;block) end def info(arg0=nil, &amp;block) @logger.info make_log(arg0, &amp;block) end def warn(arg0=nil, &amp;block) @logger.warn make_log(arg0, &amp;block) end def error(arg0=nil, &amp;block) @logger.error make_log(arg0, &amp;block) end def fatal(arg0=nil, &amp;block) @logger.fatal make_log(arg0, &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;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
あああああどうしようどうしよう
また怒られる、怒られる
起きると言った時間にまた起きれなかった
これだけ怒られてもまだこれだけのことができないのか
幼稚園児でもできることがなんでできないのか
今度会ったら、しばくと言われた。
一回失敗するごとに、ケツを10回叩くって言われた。
これだけ怒られて、口で言ってもわからないのだから、
お前は脳みそがガキなのだから、体でわかるしかない。
俺も精神的に限界で、それ以外にもう思いつかない。と言われた。
私もそれ意外思いつかなかった。
いっそのことだれかADDですと診断してくれませんか?
そうなったらこの関係も色々終わるんだろうな
ちょっとほっとするのかもしれない
とにかく怒られるのがいやだ
怒られたくない、ごめんなさいごめんなさいごめんなさい。
こんな関係明らかに正常じゃない
怖い。
でも好きだ。
たぶん…。すごく。
別れたい。
ぼく草食だから女性を傷つけてないもん!・・だって?http://anond.hatelabo.jp/20100210111547
kanose 「レイプファンタジー」なんてキーワードを出す辺り、書いたのは女性ではないと思った/id:tenkyoin 女性がレイプファンタジーなんて用語使って文章書いているの見たことないもんで
tenkyoin id:kanoseさん、宇野常寛さんの読者にはちゃんと女性も一定割合、いますよ。変な印象操作はやめてください。
僕が言いたかったのは「女性が書いたものとして批判している人が多いけど、レイプファンタジーという用語を使って男性を批判する文章を書いている女性は見たことないから、これ書いたのは男性だよね」であって「宇野氏の書籍に女性読者がいない」ではないですよ。宇野氏が好きなのはわかりますが、転叫院さんこそ、僕が言いたいことをねじ曲げて印象操作しないでください。
http://h.hatena.ne.jp/kanose/9236555986980764011
これで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>1){ --dist; backTracer = backTracer.Nearbys.First(pos => 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> /// 探索する。SG間の道のりを返す(道のり=SGが隣接しているなら1) /// </summary> private static int Search(int[,] maze, Position Start) { List<Position> FrontLine = new List<Position>(); FrontLine.Add(Start); int dist = 1; for (; ; ) { List<Position> NextFrontLine = new List<Position>(); 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> 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 && p1.Y == p2.Y; } public static bool operator!=(Position p1, Position p2){ return p1.X != p2.X || p1.Y != p2.Y; } } }
このページの右上に
「Add a section » New!」
というのが追加された。
http://news.google.com/news/directory?pz=1&cf=all&ned=us&hl=en&sort=users
どうやらCategoryより細かく「Mobile Technology」や「Space」などをsectionとして追加できる模様。
日本は単純化していくけどUSでは詳細化していくgoogle news。
・・・日本の場合せめて「Technology」と「Science」を分けてほしい・・・
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
使用用途
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="ページの方向を切り替える"