はてなキーワード: Asciiとは
http://b.hatena.ne.jp/entry/http://blog.goo.ne.jp/ikedanobuo/e/9ad59f1a7f3069cac4c09a84652fccbf
「サイバーリバタリアン」の第2回は、永遠のテーマ「実名・匿名」論争である。当ブログでこういうテーマを扱うと、はてなブックマークがいつも大騒ぎになる。そこに群れるお子様たちは、匿名で悪口を書ける(しかも反撃されない)おもちゃを取り上げられるのがいやなのだ。既得権にしがみついて自立できない古い日本人の卑しさを、彼らも受け継いでいるわけだ。
「お子様」とか「古い日本人の卑しさ」とかの文言は、煽りでしょう。
エントリーの後半でgooIDでの自ブログのコメントを是認されているのなら、はてなIDでのはてブコメントも是認されるはずでしょうに。それなのになぜ、asciiの記事のようにはてブ叩きをされるのか。
池田氏のはてブ叩きって、以前も似たようなことを読んだことあって、それから議論が進んでいないので、定期的なルーチンワークに思える。
エキスパートCプログラミング―知られざるCの深層 (Ascii books)
このへんどうよ。両方とも出てすぐ読んだからよく覚えてないけど、かなりいい本で感動したということだけは覚えてる。今読んでも感動できるかどうかは知らんけどな。
それにしても今時「プログラミング言語C」と書いた君の誠実さに乾杯。「C言語」とか言い出したのって誰なんだろう。Wikipedia でも「Java (プログラミング言語)」の記事名を「Java言語」にしようなんて馬鹿げた議論がなされていたのを思い出した。
寝るよ。疲れた。おいらの睡眠時間を返せ…。寝る前にみるんじゃなかった。
http://www.maid-robo.com/masda/mairo.php
完成しなかったよ。
迷路のロジックは多分そこらへんをぐぐればいっぱいあるとおもうが
あえて独自で車輪の再発明をしてみた。
うんこくさいプログラムになってしまった。洗練さのかけらもない。
しかも完成していない。
誰か完成させておいて。
なにか二次元配列をつかいたかったのだけど、phpの配列ってよくわからないや。
んー。いけてないなーーー。。。。
これが俺の限界か…。
おやすみ。。。
<pre> <?php /** http://anond.hatelabo.jp/20070711013155 迷路を作成するプログラムを書いてみましょう。 1BIT/PIXEL のビットマップで道と壁の幅は1PIXEL。 任意の解像度で出力できること。 入り口と出口があること。 実行毎に異なる迷路が生成されること。 それをASCIIテキストで出力すること。 ソースコードとテキストで出力した迷路を増田に投稿すること。 言語問わず。 期限無し。 出力例) ########## ..#...#... #.#.#.##.# #...#..#.# #####.##.# #...#.#..# #.#.....## ########## ***/ define("MAP_X" ,10); define("MAP_Y" ,10); define("MAP_WALL" ,"■"); define("MAP_LINE" ," "); // 塗り。 for ($y = 0 ;$y < MAP_Y ; $y++) { for ($x = 0 ;$x < MAP_X ; $x++) { $map[$y][$x] = MAP_WALL; } } // start pointの設定 if (rand(0,1)%2) { $start_x = rand(1,MAP_X-2); $start_y = (MAP_Y-1)*rand(0,1); } else { $start_x = (MAP_X-1)*rand(0,1); $start_y = rand(1,MAP_Y-2); } $map[$start_x][$start_y] = MAP_LINE; $i=0; $giveupcnt = 0; $now_x = $start_x; $now_y = $start_y; while ($i < 40) { if ($giveupcnt > ((MAP_X-1)*(MAP_Y-1))) { break; } if (rand(0,1)%2) { $rnd_x = rand(-1,1); $rnd_y = 0; } else { $rnd_x = 0; $rnd_y = rand(-1,1); } $tmp_x = $now_x + $rnd_x; $tmp_y = $now_y + $rnd_y; // 壁だったらパス if ($tmp_x <= 0 || $tmp_x >= (MAP_X-1) ) { $giveupcnt++; continue; } if ($tmp_y <= 0 || $tmp_y >= (MAP_Y-1) ) { $giveupcnt++; continue; } /** print("@".($tmp_x) . "," . ($tmp_y)."<br>"); print(($tmp_x + $rnd_x) . "," . ($tmp_y + $rnd_y)."<br>"); print(($tmp_x + -1*$rnd_x) . "," . ($tmp_y + -1*$rnd_y)."<br>"); print(($tmp_x + -1*$rnd_y) . "," . ($tmp_y + -1*$rnd_x)."<br>"); ***/ // そこを掘ることにより他の壁とつながってしまうのであればパス if ($tmp_x > 0 && $tmp_x < (MAP_X-1) && $tmp_y > 0 && $tmp_y < (MAP_Y-1) ) { if ($map[$tmp_x + $rnd_x][$tmp_y + $rnd_y] == MAP_LINE || $map[$tmp_x + $rnd_y][$tmp_y + $rnd_x] == MAP_LINE || $map[$tmp_x - $rnd_y][$tmp_y - $rnd_x] == MAP_LINE ) { $giveupcnt++; continue; } } // 適当なマス数掘り進んだところで壁際まできれてばゴールをつくる // 未実装 $now_x = $tmp_x; $now_y = $tmp_y; $map[$now_x][$now_y] = MAP_LINE; $i++; } // 4方壁のところを起点に同じルールで通路をつくる foreach ($map as $key => $value) { $value = join("",$value); print($value."<br>"); } //print_r($map); ?> </pre>
'/** Requestオブジェクトから受信したデータを取り出します。 ' * @return byte配列を格納した連想配列を返します。 ' */ Function getRequestItem() If Request.TotalBytes <= 0 Then getRequestItem = Null Exit Function End If Dim data Dim separator Dim dataArray Dim buffer Dim filePath Dim fileName Dim ix Dim stringIndex Dim myCrLf Dim items Dim itemName myCrLf = convertAsc(vbCrLf) Set items = Server.CreateObject("Scripting.Dictionary") data = Request.BinaryRead(Request.TotalBytes) data = LeftB(data, UBound(data) - 3) & myCrLf separator = MidB(data, 1, InStrB(1, data, myCrLf) + 1) dataArray = SplitB(data, separator) For ix = 2 To UBound(dataArray) Step 1 '1行読み込み buffer = MidB(dataArray(ix), 1, InStrB(1, dataArray(ix), myCrLf) - 1) 'アイテム名の取得 stringIndex = InStrB(1, buffer, convertAsc("name=")) If stringIndex > 0 Then itemName = convertUnicode(MidB(buffer, stringIndex + 6, InStrB(stringIndex, buffer, ChrB(34)) - stringIndex)) Else itemName = "" End If 'ファイル名の取得 stringIndex = InStrB(1, buffer, convertAsc("filename=")) If stringIndex > 0 Then filePath = MidB(buffer, stringIndex + 10, InStrB(stringIndex, buffer, ChrB(34)) - stringIndex) fileName = RightB(filePath, LenB(filePath) - LastInStrB(0, filePath, convertAsc("\"))) Else fileName = "" End If 'データ部の取得、改行コードの切り捨て buffer = RightB(dataArray(ix), LenB(dataArray(ix)) - InStrB(1, dataArray(ix), myCrLf & myCrLf) - 3) buffer = LeftB(buffer, LenB(buffer) - 2) items.Item(itemName) = parseBytes(buffer) Next Set getRequestItem = items Set items = Nothing End Function '/** 文字列の最後尾から指定文字を検索します。 ' * @param Start 検索する開始文字位置を指定します。 ' * @param String1 検索対象の文字列を指定します。 ' * @param String2 検索する文字列を指定します。 ' */ Function LastInStrB(ByRef Start, ByRef String1, ByRef String2) Dim ix Dim lastIndex Dim searchLength searchLength = LenB(String2) lastIndex = LenB(String1) - searchLength + 1 If Start > 0 And Start < lastIndex Then lastIndex = Start End If For ix = lastIndex To 1 Step -1 If MidB(String1, ix, searchLength) = String2 Then LastInStrB = ix Exit Function End If Next LastInStrB = 0 End Function '/** アスキー文字列に変換します。 ' * @param String 対象の文字列を指定します。 ' */ Function convertAsc(Byref String) Dim ix Dim ascii ascii = "" For ix = 1 To Len(String) Step 1 ascii = ascii & ChrB(AscB(Mid(String, ix, 1))) Next convertAsc = ascii End Function '/** Unicode文字列に変換します。 ' * @param AscString 対象のアスキー文字列を指定します。 ' */ Function convertUnicode(Byref AscString) Dim ix Dim unicode unicode = "" For ix = 1 To LenB(AscString) Step 1 unicode = unicode & Chr(AscB(MidB(AscString, ix, 1))) Next convertUnicode = unicode End Function '/** バイナリ対応版Split関数です。 ' * @param String 対象の文字列を指定します。 ' * @param Delimiter 区切り文字を指定します。 ' */ Function SplitB(Byref String, Byref Delimiter) Dim ix Dim lastIndex Dim searchLength Dim start Dim datas() Dim dataIndex dataIndex = 1 start = 1 delimiterLength = LenB(Delimiter) lastIndex = LenB(String) - delimiterLength + 1 '最初から1文字ずつ繰り返します。 For ix = 1 To lastIndex Step 1 'データを比較します。 If MidB(String, ix, delimiterLength) = Delimiter Then 'データを取り出せたら配列に格納します。 ReDim Preserve datas(dataIndex) datas(dataIndex) = MidB(String, start, ix - start) dataIndex = dataIndex + 1 start = ix + delimiterLength End If Next SplitB = datas End Function '/** Byte配列を返す関数です。 ' * @param data 対象のデータを指定します。 ' */ Function parseBytes(Byref data) Const adLongVarBinary = 205 Dim recordset If LenB(data) <= 0 Then parseBytes = CByte(0) Exit Function End If Set recordset = Server.CreateObject("ADODB.Recordset") recordset.Fields.Append "UpLoadBinary", adLongVarBinary, LenB(data) recordset.Open recordset.AddNew recordset.Fields("UpLoadBinary").AppendChunk data recordset.Update parseBytes = recordset.Fields("UpLoadBinary").Value recordset.Close Set recordset = Nothing End Function
*{ margin : 0 }はもう古い!? | Emotional Web
はてなブックマーク - *{ margin : 0 }はもう古い!? | Emotional Web
はてなが酷い。
base.cssとかcommon.cssとかを書いて読み込ませるのは、何のためだったか考えてみよう。古い新しいの問題じゃないと気づくだろうか。少なくとも、レンダリング時間なんて完全に後付けだと洞察できるはずだ(あなたたちはjs大好きだよね)。
さて、真っ新なとこからCSS書いてくとき、どんなデザインにしろほぼ毎回指定する要素が出てくる。a img{border:none;}とかhtml,body{margin:0; padding:0;}とかだ。それなら始めにa img{border:none;}とかを羅列したファイルを用意しておけば、余計な手間が省けるじゃないか。たぶん根本の動機はこんなとこだろう。
それがいつの間にかデフォルトで適用されるスタイルをキャンセルするっていう方向へ迷走し、*{margin:0; padding:0;}なんて表現が生まれた。この指定は言うまでもなく有害で、著名なのはフォームのボタンが縮こまったり、liのネストが判別できないなどの副作用が生まれる。あまりにもすべてがキャンセルされるため、わざわざひとつずつ要素のスタイルを定義しなければならなくなって、ファイルサイズは増え可読性は下がり、冒頭で言うようにレンダリングにも時間が掛かるようになる。FireBugがない時代、この要素のスタイルはどのファイルのどの部分で指定されてるのか調べるのは本当に大変だった。*.cssをgrepしたとしても、単にul li{}とか書かれてるのがカスケーディングしてたらお手上げ。
これらのデメリットを認識したとき、はて*{margin:0; padding:0;}のメリットはなんだろうと考える。あ、特にないよね。じゃあやめよ。←いまここ
こんなのは実際にCSSを書いてたら気づくことだ。海外とか時代とか関係ない。元記事の趣旨は「*{margin:0;}は古い」じゃなくて「どんなCSSが効率的か Part2」だ。レンダリング重いから*{margin:0;}やめようなんてコピペ脳丸出しじゃ、いつまで経っても効率的なCSSなんぞ書けんよ。
*原理主義者が「(例えば数十年後にリリースされた)UAがどんなスタイルを適用するかわからないので、最初にリセットするのは永続性完全性の観点から意味がある」と言うけども、未知のUA(というかデフォルトスタイル)まで考えてCSSを書くのはあまりに大変だ。それに、そんなことになれば、たぶん、compat.user.cssみたいなのが流行るはず。デフォルトスタイルに頼った表現がしょせん実装依存なのは認めるけど、ちょっと非現実的すぎるので、考慮から外させてもらう。俺はいま実務の話をしたいんだ。
で、元記事では、じゃあどんなCSSがいいのかって点がついで程度にしか触れられていないので、俺なりに考えてみた。
これは外せない。aの中のimgにborder付けたいってほうがイレギュラーなので、わざわざa.logo img{border:1px solid #333;}なんて書き直すのも苦にならない。例外には手作業でもって対応すべき。
ほとんどの場合、隙間を空けたいよりも隙間を空けたくない。キャンパスはフルに使いたい。
印刷時にはそうでもないので、@media print {body{padding:1cm;}}なんてのがあってもいいけど、それはまた別の話。あとそういうのは印刷するユーザー側で指定すべきだとも思う。理想論だけど。
lang="ja"な文章において斜体は不要。どうせあなたはemとかaddressとかにfont-style:normal;付けるんだから。
preやcodeがsans-serifだとイラっと来ますよね。
やられるとイラっとくるもの。個人的。
俺はページをメイリオやヒラギノやM+ FONTやVLゴシックで見たいんだよ! お前の趣味を押しつけんな! あと最後に一般名(sans-serifとか)くらい書け!
でもpre.2ch-ascii-art{font-family: "MS Pゴシック";}なんてのはやさしさが溢れていてとても好ましいと思う。部分的にfont-family指定するのは別にいいけど、全体のデフォルトフォントをいじられるのは不愉快でしかない。
まあ仕方ないのはわかる。解決法も知らない。けどホイールでスクロールしてるとき興味のないサンプルコードで引っかかるのはとてもムカつくんだ。俺は君のサイトが崩れてるかどうかより、いつも通りのスクロールに関心がある。
pre以外にグラフィック目的でoverflow:auto;を指定するのは論外。
「CSSは個々人のスタイルを反映してるということでしかないんじゃないの」
「そうですね」