「Shift_JIS」を含む日記 RSS

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

2024-04-26

これ何の意味があるのか教えてほしい

いろんなアプリケーションメンテ(バグ取りとか細かい機能追加とか)を何度か経験してきた。

主にテキストファイルとかCSVファイルとかExcelファイルとかを入出力するものばかりだったんだが、その大半がファイル拡張子グローバル変数化していた。

こんな感じ

const TxtFileExt = ".txt";
const CsvFileExt = ".csv";
const ExelFileExt = ".xlsx";

なので、読み書きするファイル名の指定時は、

outFileName = 〇〇 + ×× + "ABCDEFG" + TxtFileExt;

みたいな指定をしなきゃならない。

これ何の意味があるのかよく分からんのだけど、誰かわかる?

あと、プログラム言語標準的メソッドのあらゆる引数も全部変数定義されてて、そのまま渡すのは禁止、みたいな規約になってる。

たとえば引数が三種類(truefalse(未指定時のデフォルト値)、任意の数値(ただし当該プログラムでは0、10、25以外指定不可))しかないやつはこんな感じ。

const 〇〇ParamTrue = true;
const 〇〇ParamFalse = false;
const 〇〇ParamIntMin = 0;
const 〇〇ParamIntMid = 10;
const 〇〇ParamIntMax = 25;

文字コードなんかもこんな感じで定義されてる。

const charCodeSJIS = "Shift_JIS";
const charCodeUtf8 = "UTF-8";

以前関わった改修内容に「××の処理は開始時と終了時にそれぞれUTF-8(BOMなし)形式ログを出力する」みたいなのがあって、普通に文字コード指定する部分に「UTF-8」で直に書いたら、規約に従ってないからとコードレビューで指摘されて差し戻されたんだけど、そもそもこういう規約って何の意味があるの?

2024-04-19

anond:20240419133414

うちの会社場合だと、社内全体的には誰も使っていない

自分個人的作業軽減のためにVBAマクロで使ったりする/した(過去形

ExcelVBAマクロの中で CreateObject("DBドライバかなんか") みたいな事やって

DBからレコードを取得してシートのセルに表示させたりとか

ドライバちょっと切り替えるだけで、SQLServerでもOracleでもPgsqlでも対応できて便利

今はOleDBの方がメジャーなんだっけか

本当に最近OracleODBCドライバを試してみた事があったけど、Shift_JIS対応してないようで使えなかった。。。

OleDBドライバ(っていう言葉でいいんだろうか?)を使って事なきを得た

2024-03-21

いまだに機種依存文字を使うなとか言ってくるシステム

納品先の情シス子会社、頭に苔が生えてて絶望してる。

わざわざ機種依存しないことが身上UTF-8エンコードしてるのに「機種依存文字なのでほかの文字に変えてください」って言ってくる。

今じゃ丸付き数字だろうが半角カナだろうが使い放題なのよ。

むかしみたいにShift_JIS使ってるわけじゃないか大丈夫なのよそこは。

原因そのものがなくなってるのに、対策ルールけがゾンビのように生き残ってるんだろうね。笑える。いや笑えない。

で、そのルールができた大元理由文字化けの防止)が忘れ去られているもんだから、あろうことか画像の中の描き文字にまで言ってくる。

「このイラストの鍵括弧とナカグロは幅が狭いです。半角カナ使用しないでください」

半角だったらなんなんだ。それは画像だ。画像には文字化けの心配はない。前世からない。

ていうかイラレデータ上でもそこは全角だ、カーニング文字間隔を詰めてるだけだ、そういうデザインだ。

馬鹿なのか。

2022-12-14

anond:20221213142526

VenturaになったらShift_JISでも正常にクイックルックできた

 ← これが正しい解決策の方向性だよね。(かく言う俺のMacはいまだにMonterey)

2022-12-13

anond:20221213142526

windows環境で、CSV出力されたファイルは、だいたいExcel で開くパターンが多く、

Excel は、Unicode を処理できず、Shift_JISしか読めないという...

anond:20221212192725

関係ないっちゃないけどw

あちこちクレカとか電気ガスとか電話とかのWebサイトCSV形式の明細書ダウンロードって機能が、いまだに邪悪Shift_JISエンコーディングで出してくるの、いい加減にヤメろや!

WebサイトHTMLとかは、ほぼほぼ100%ちかくunicode(UTF-8)なのに。

ちょっと前まで、MacクイックルックでそのCSV化け化けで見づらくてしょうがなかったんで、数10年ぶりにAppleScript書いてフォルダアクション文字コード変換仕込んだりするハメになったやんかw VenturaになったらShift_JISでも正常にクイックルックできたけどww

2022-10-28

長文ツーイトする人に言っておきたいこと

長文ツイートを書く時、カタカナをすべて半角カナで書いているツイッタラーがたまにいます

おそらく、1ツイート140文字という制限があるツイッターで一文字でも多く詰め込みたい気持ちの表れだろうと思います

でもちょっと待って! これ、完全に無意味であるばかりか、ほぼほぼ逆効果になるので注意が必要です。

しかにいくつかの文字コードでは全角カナと半角カナではデータの扱いが異なり、全角カナは1文字2バイト、半角カナは1文字1バイトを消費します。

実際、Shift_JISが優勢だった10年ほど前のインターネッツ(主にガラケー向けの掲示板など)では、カタカナや英数字自動的に半角文字に変換するなどして転送量の削減を図ったりしていたものです。

でもそれも昔の話。

ツイッターにおけるツイート文字数は、全角だろうが半角だろうが1文字を1文字とカウントします。

カタカナ」も4文字だし「カタカナ」でも4文字です。

今どきのモダンなWebアプリはふつう文字エンコードにユニコードを用いますが、それと関係あるかはわかりません(ちなみにユニコードでは全角カナも半角カナも1文字2バイトを消費します)。

まりカタカナを半角に直してツイートすることには、文章を読みにくくする以上の意味はありません。

それどころか、半角カナは濁音や半濁音は2文字使わないと表現できません。

たとえば朝青龍さんの本名ドルゴルスレン・ダグワドルジは全角カナなら14文字ですが、半角カナでドルゴルスレン・ダグワドルジと書くと20文字になってしまます

濁音や半濁音を含むカタカナ語はありふれていますから、多くの場合文字数が増えてしまうのです。

まり半角カナ化を「ツイートの文字節約」のためにやっているといるとしたら、とんだ逆効果なのです。

おわかりいただけましたか

それでは今日はこのへんで。また明晩、お会いいたしましょう。

2021-11-30

Windows10/11日本語UTF8対応は使う人が増えないとずっとベータのままなんじゃないか

Windows10/11日本語ロケールShift_JISからUTF8に変更するのはだいぶ前から可能になっている。

けど、設定項目には「ベータ」という注釈が入っている。

コマンド指定して実行」とか検索窓で「intl.cpl」を実行してウィンドウ上部の「管理」タブを開いて画面下側の

システムロケールの変更(C)」を押して「ベータワールドワイド言語サポートUTF-8仕様(U)」のチェックを入れてOKで閉じて再起動すれば

日本語コードページが65001(UTF8)になる。

業務PCとかで設定するのは勇気いるだろうから、せめて過去資産なんぞどうにでもなる個人PCぐらいは

この設定を入れてみよう。OS自体バグを見つけたら潰そう。

そうしないと使用人口が減っていく一方の日本語サポートなんてMSの中ではどんどん優先順位落ちていくんじゃないかな。

2019-01-07

anond:20190107110853

ウチ、Shift_JISなんで大丈夫ですよね?とか言う奴増えそうな話だ

もしくは元号マスタあるんで大丈夫ですよね?とか

ちゃうねん、お前んとこのショボいシステムじゃないんだ。もっとメジャーなのも変わるんや、それこそOfficeもな、OSもな。それが全部動いて他に影響ないか確認せなあかんのだ

ggg年号出るワーイ!じゃないんや

2018-07-03

anond:20180703163232

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">

<head>
	<meta http-equiv="content-type" content="text/html; charset=Shift_JIS">
	<title>


  

2018-05-07

Shift_JISもしかして・・・・・・UTF-8私たち……」

二人「蜈・繧梧崛繧上▲縺ヲ繧具ス橸シ?シ」

2017-09-05

特に意味はないが

2ちゃんねるには2つある

この2つだ(今はGoogleも「こいつらケンカしてるだけだ」とわかったのかだいたい等価だ、しか.netサーバ移転元のスレを止めないという間抜け処理をしたため検索有利性が木阿弥に)

で、おそらくはscのほうに書き込んだのだろう

sc書き込み収集するまとめサイトってのはそんなにないか

2017-03-21

<META name="GENERATOR" content="IBM WebSphere Homepage Builder V6.0.0 for Windows">

これを見るとお腹いっぱいになっちゃ

しか

<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">

とかな

2015-08-13

物書きのモバイル環境

ノートパソコン

 Windowsノートを1台だけ持ってる。

 マックでも良いけど、惰性で窓。

 デスクトップとか、他の機器は持っていない。

 理由データの取り違え、同期ミスがあると厄介だから

 どこ行っても書くから、軽量(1kg未満)・小型(11.6インチ)なやつ。

 小型でもキーピッチ18.5mmは死守。キーボードは大切。

 タブレットや2 in 1みたいな、キーボード本体Bluetooth接続するのはダメ

 遅延、不安定な接続ストレスフル。

テキストエディタ

 サクラエディタ使ってる。特にこだわりがあるわけじゃない。

 ただ、リッチテキストダメ。重い。互換性に問題ある。

 UTF-8のプレーンテキストが望ましい。Shift_JISは亜種あって困る。

 どうしてもリッチドキュメント必要な時はOffice Online、Google Document使う。

 PDFはプレーンテキストからFoxit使って生成する。

 縦書で出力する時はVerticalEditor使ってる。

ストレージバックアップ

 ローカルは64GBのSSD。扱うファイルほとんどプレーンテキストからこの容量で済む。

 執筆中の原稿は1日に最低1回はバックアップ取る。

 バックアップ先はクラウドストレージ

 物理メディアUSBメモリ、外付けHDD)より、大手各社が運用するサーバーの方が相対的信頼性高い。

 ローカルクラウドの2箇所に同じデータがあるようにしている。

 本当は3箇所(ローカルクラウド2つ)に保存しておくと安全だけど面倒だからやってない。

IME

 Google 日本語入力使ってる。

 ATOKユーザー多いけど、あれ賢くないよ。

辞書

 電子版の日本語シソーラス使ってる。

 類語辞典ではたぶんこれが一番語彙豊富

 無料類語辞典も悪くないけど、イマイチ力不足

 国語辞典無料goo辞書とか。今のところ困ってない。

 英和・和英もALCで十分だな。

2015-01-21

いちいち言うべきか否か

今朝のスッキリで手巻きピザが紹介されたせいで、ピザーラサイト一時的アクセス集中でエラーになった

おそらく503エラーと思われるが、httpヘッダがshift_jisなのに、aspxのデフォ設定がUTF-8のままっぽくてエラー文がutfで吐き出されてた。

IEならこれでも表示できちゃうんだろうけど、firefoxとかだとおもいっき文字化けする

なので、まあ一応報告しとくかーと思ってピザーラメールした

返ってきた文章は、「今はエラーも出ずにちゃんと見れてますので確認してみてください。エラーの設定は影響範囲が広いので考えさせて」といったもの

まあそんなもんだろ。通常あるべき姿でないときに表示されるメッセージ不具合があったところで、誰も困るわけじゃない。

そもそもエラーメッセージすら出ずに白紙になるサイトなんてゴマとある。至極まっとうな返事かもしれない。

おたくのお店、停電したとき壁に変な模様が出ますから直したらどうですか?」って言ってるようなものだ。そもそも停電なんて普通起こらない。そこに金かけるかと。

こう来るのは分かってたんだけどねえ。じゃなんで問い合わせしたんだろ。問い合わせないと気がすまなかったのか。

言われる側としては迷惑な話じゃないのか。他人のアラにばかり目が行ってテメエの会社サーバーはどうなんだおい、と。

まあそんなことを考えさせられました

2013-11-28

エロサイトを立ち上げた引きこもり~魂の物語エピソード4

エロサイトを立ち上げた引きこもり~魂の物語エピソード4

---------------------------------------------------------------------------

動画 エロサイト←これが僕の作ったサイトです

---------------------------------------------------------------------------

前回の続き

エロサイトのコンセプトを「誰もがオナニーライフを充実できるように多くのカテゴリを持つ総合エロ動画サイト

に決めた僕。

さて、稼げるかどうかは、どういう広告をどう貼るかが問題なんだけど、ちょっと難しいので、

これは、もう少し後で、紹介します。

今回は、実際のエロサイトをどうやって作るかです。

サイトの作り方

コンセプトは決まったものの、実際の作り方が全く分からない。 

さっそくgoogle先生にお願いしてみた。

何度もお呼び立てして申し訳ございません。

私、webサイトのwの字も存知上げません。

どうかこの愚生をご引導ください。

先生が言うにはどうやらWEBサイトhtmlというもので作られているらしい。

えいちーてぃーえむえる?

サミュエル・L・ジャクソン

とにかくhtmlwebサイト作りの基本だそうです。

他にもphpcgiなどのプログラミング言語作成もできるらしい。

現在は、php猛勉強してサイトに反映してあります。)

詳しくはここ⇒HTMLクイックリファレンス

http://www.htmq.com

ふむふむ、google先生によるとWEBサイトはどんなものでもhtmlソースが見れるらしい。

フフフ、先生

僕はあなたの全てが見たいんです!!

とりゃー!

ソース表示中・・・

は?

へべ?

もぎょぶ?

ナンナンダ!コレハ!

英文字しかない・・・

みんなこんな訳わからん英文字を駆使して

ホームページ作ってたのか!

html>まではい

<head>もなんとなくわかる気もする。上の方ね。頭の方って事ね。(違うけど)

<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">で完全に思考停止

知らない事が多すぎる。

なんだかまた不安になってきた。

知らないって超こわーい


「おいら、上に立つ人間っていうのは完全に孤独じゃなきゃいけないって思う」

500G師匠

振り返ると、備え付けハードディスクに入った500G師匠が僕を見つめていた。

普段無口な師匠言葉が僕の魂を強く揺さぶる。

よし勉強するぞ!htmlがなんだ!やってやる!

師匠ありがとうございます。僕がんばります

僕が意気込みを見せると、500G師匠ちょっと照れくさそうに頭を掻いた。

「あんちゃんが売れたら、おいら使ってくれよな」

つづく


関連記事

2013-11-11

Writebox便利

 Chrome拡張機能テキストエディタ

 書いたファイルDropboxGoogle driveにプレーンテキスト(UTF-8)として保存する。

 上記オンラインストレージへのオートセーブ機能はないが、データローカル自動保存されるため、ブラウザクラッシュしても大丈夫

 欲を言えば、Shift_JISでの保存にも対応してほしい。Chrome環境じゃ無理か。Unicodeデフォだもんな。

2010-01-13

http://okajima.air-nifty.com/b/2010/01/post-abc6.html

少し遅れた感があるけど、解いてみた。

出力がテキストでないけど・・・。

仕事の合間を使ってやったものの、昼前に始めたのが5時頃にようやくできる程度。

これを25分とは尋常じゃないな、大口叩くだけあってよっぽど優秀なんだろう。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"&gt;

<html&gt;

<head&gt;
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis"&gt;
<meta http-equiv="Content-Language" content="ja"&gt;
<meta http-equiv="Content-Script-Type" content="text/javascript"&gt;
<meta http-equiv="Content-Style-Type" content="text/css"&gt;
<style type="text/css"&gt;
<!--

pre {
  font-family: monospace;
}

--&gt;
</style&gt;
<script type="text/javascript"&gt;
<!--

window.onload = function() {

  var q = new Map();
  q.load("maptest.txt");
  q.search();

  var answer = document.getElementsByTagName("pre").item(0);
  var answerText = "\r\n";
  for(var ix = 0; ix < q.route.length; ix++) {
    answerText += q.route[ix].join("") + "\r\n";
  }
  answer.firstChild.data = answerText;

  alert("終了しました。");
};

/** マップオブジェクト
 */
function Map() {
  this.ymap = [];
  this.route = [];
}

//マップの読み込み
Map.prototype.load = function(filePath) {
 //ファイルシステム
  var fileSystem = new ActiveXObject("Scripting.FileSystemObject");

 //ファイル読み込み
  var file = fileSystem.OpenTextFile(filePath);
  while(!file.AtEndOfLine) {
    var fileBuffer = file.ReadLine();
    this.ymap.push(fileBuffer.split(""));
  }
  file.Close();

  fileSystem = null;
};

//マップの探索
Map.prototype.search = function() {

  var that = this;

 //マップコピー
  var ymap = this.ymap.concat();
  for(var y = 0; y < ymap.length; y++) {
    ymap[y] = ymap[y].concat();
    for(var x = 0; x < ymap[y].length; x++) {
      if(ymap[y][x] == "S")
        var start = new MapNode(y, x);
      if(ymap[y][x] == "G")
        var goal = new MapNode(y, x);
    }
  }

  var openList = [];
  var closeList = [];

  start.costf = start.distance(goal);
  openList.push(start);

 //経路探索
  while(openList.length &gt; 0) {
    var node = openList.shift();
   //探索終了
    if(goal.equal(node)) {
      createRoute(node);
      break;
    }
    closeList.push(node);

   //隣接ノードの作成
    var tonari = [];
    if( ymap[node.positionY][node.positionX - 1] == " "
     || ymap[node.positionY][node.positionX - 1] == "G" )
      tonari.push(new MapNode(node.positionY, node.positionX - 1, node));
    if( ymap[node.positionY - 1][node.positionX] == " "
     || ymap[node.positionY - 1][node.positionX] == "G" )
      tonari.push(new MapNode(node.positionY - 1, node.positionX, node));
    if( ymap[node.positionY][node.positionX + 1] == " "
     || ymap[node.positionY][node.positionX + 1] == "G" )
      tonari.push(new MapNode(node.positionY, node.positionX + 1, node));
    if( ymap[node.positionY + 1][node.positionX] == " "
     || ymap[node.positionY + 1][node.positionX] == "G" )
      tonari.push(new MapNode(node.positionY + 1, node.positionX, node));

   //隣接ノード検索
    for(var tx = 0; tx < tonari.length; tx++) {
      var openIn = false;
      var closeIn = false;
      tonari[tx].cost = node.cost + 1;
      var costf = tonari[tx].cost + tonari[tx].distance(goal);
      tonari[tx].costf = costf;

     //オープンリストから検索し入れ替える。
      for(var ox = 0; ox < openList.length; ox++) {
        if(tonari[tx].equal(openList[ox])) {
          openIn = true;
          if(costf < openList[ox].costf) {
            openList.splice(ox, 1);
            push(openList, tonari[tx]);
          }
          break;
        }
      }
     //クローズリストから検索し、オープンリストへ移す。
      for(var cx = 0; cx < closeList.length; cx++) {
        if(tonari[tx].equal(closeList[cx])) {
          closeIn = true;
          if(costf < closeList[cx].costf) {
            closeList.splice(cx, 1);
            push(openList, tonari[tx]);
          }
          break;
        }
      }
     //どちらにもない場合、オープンリストへ追加する。
      if(!openIn &amp;amp;&amp;amp; !closeIn)
        push(openList, tonari[tx]);
    }
  }

 //適切な位置に追加する。
  function push(array, item) {
    for(var ix = 0; ix < array.length; ix++) {
      if(item.costf < array[ix].costf) {
        array.splice(ix, 0, item);
        return;
      }
    }
    array.push(item);
  }

 //ルートマップの作成
  function createRoute(lastNode) {
    var node = lastNode.parent;
    while(node.parent) {
      ymap[node.positionY][node.positionX] = "$";
      node = node.parent;
    }
    that.route = ymap;
  }
};

/** マップノード
 */
function MapNode(y, x, parentNode) {
  this.positionY = y;
  this.positionX = x;
  this.parent = parentNode;
  this.cost = 0;
  this.costf = 0;
}

//同一ノードかチェックする。
MapNode.prototype.equal = function(targetNode) {
  if( this.positionY == targetNode.positionY
   &amp;amp;&amp;amp; this.positionX == targetNode.positionX )
    return true;
  return false;
};

//直線距離を求める。
MapNode.prototype.distance = function(targetNode) {
  sabunY = this.positionY - targetNode.positionY;
  sabunX = this.positionX - targetNode.positionX;
  return sabunY ^ 2 + sabunX ^ 2;
};

// --&gt;
</script&gt;
<title&gt;経路探索:A*</title&gt;
</head&gt;
<body&gt;

<pre&gt;&amp;nbsp;</pre&gt;

</body&gt;
</html&gt;

2009-12-28

http://anond.hatelabo.jp/20091228215032

メイリオ」は同じ字体に見えるけど、「MS P ゴシック」にすると後者ゲジゲジした(なんだそれ)感じに見える。

前者がFULLWIDTH TILDE(utf8:ef-bd-9e)、後者WAVE DASH(urf8:e3-80-9c)かな。

このようにWindowsは、Shift_JIS 0x8160(WAVE DASH、波ダッシュ)を、本来割り当てるべき U+301C WAVE DASH(波ダッシュ)ではなく、U+FF5E FULLWIDTH TILDE(全角チルダ)に割り当てている。

これだろうね。

2009-03-18

公明党都議選重視?

コピーして、test.htaのような拡張子HTAで保存

HTAプログラム

 ↓

<html&gt;

<head&gt;

<style type="text/css"&gt;dt{float:left;clear:left;width:10em;}</style&gt;

<meta content="charset=Shift_JIS"/&gt;

</head&gt;

<body&gt;

<script type="text/javascript"&gt;</p&gt; <p&gt;window.onload = init;</p&gt; <p&gt;var url = [</p&gt; <p&gt; "<a href="http://www.senkyo.metro.tokyo.jp/h19sangiin/san_kekka/h19san_hkai.html"&gt;http://www.senkyo.metro.tokyo.jp/h19sangiin/san_kekka/h19san_hkai.html</a&gt;",</p&gt; <p&gt; "<a href="http://www.senkyo.metro.tokyo.jp/h17shugiin/sokuhou/7kaijyo_s.htm"&gt;http://www.senkyo.metro.tokyo.jp/h17shugiin/sokuhou/7kaijyo_s.htm</a&gt;",</p&gt; <p&gt; "<a href="http://www.senkyo.metro.tokyo.jp/h17togisen/sokuhou/2kaijyo_s.htm"&gt;http://www.senkyo.metro.tokyo.jp/h17togisen/sokuhou/2kaijyo_s.htm</a&gt;",</p&gt; <p&gt; "<a href="http://www.senkyo.metro.tokyo.jp/data/h16san_hkai.html"&gt;http://www.senkyo.metro.tokyo.jp/data/h16san_hkai.html</a&gt;",</p&gt; <p&gt; "<a href="http://www.senkyo.metro.tokyo.jp/data/h15shu_hkai.html"&gt;http://www.senkyo.metro.tokyo.jp/data/h15shu_hkai.html</a&gt;",</p&gt; <p&gt; "<a href="http://www.senkyo.metro.tokyo.jp/data/data01_01_03.html"&gt;http://www.senkyo.metro.tokyo.jp/data/data01_01_03.html</a&gt;",</p&gt; <p&gt; "<a href="http://www.senkyo.metro.tokyo.jp/data/data01_02_05.html"&gt;http://www.senkyo.metro.tokyo.jp/data/data01_02_05.html</a&gt;",</p&gt; <p&gt; "<a href="http://www.senkyo.metro.tokyo.jp/data/data03_04.html"&gt;http://www.senkyo.metro.tokyo.jp/data/data03_04.html</a&gt;",</p&gt; <p&gt; "<a href="http://www.senkyo.metro.tokyo.jp/data/data01_05_05.html"&gt;http://www.senkyo.metro.tokyo.jp/data/data01_05_05.html</a&gt;"</p&gt; <p&gt;];</p&gt; <p&gt;var base = "<a href="http://www.senkyo.metro.tokyo.jp/data/tokuhyo_23ku/"&gt;http://www.senkyo.metro.tokyo.jp/data/tokuhyo_23ku/</a&gt;";</p&gt; <p&gt;var file = ["chiyoda","chuou","minato","shinjyuku","bunkyo",</p&gt; <p&gt; "taitho","sumida","koutho","sinagawa","meguro",</p&gt; <p&gt; "ohta","setagaya","shibuya","nakaono","suginami",</p&gt; <p&gt; "toshima","kita","arakawa","itabashi","nerima",</p&gt; <p&gt; "adachi","katushika","edogawa"];</p&gt; <p&gt;for(var i=0; i<23; i++){</p&gt; <p&gt; url.push(base + file[i] + "\.html");</p&gt; <p&gt;}</p&gt; <p&gt;var id = [</p&gt; <p&gt; "2007 参院比", "2005 衆院比", "2005 都議会", "2004 参院比", "2003 衆院比",</p&gt; <p&gt; "2001 参院比", "2001 都議会", "2000 衆院比", "1998 参院比", "1997 都議会"</p&gt; <p&gt;];</p&gt; <p&gt;var ku = [</p&gt; <p&gt; "千代田","中央","港","新宿","文京",</p&gt; <p&gt; "台東","墨田","江東","品川","目黒",</p&gt; <p&gt; "大田","世田谷","渋谷","中野","杉並",</p&gt; <p&gt; "豊島","北","荒川","板橋","練馬",</p&gt; <p&gt; "足立","葛飾","江戸川"</p&gt; <p&gt;];</p&gt; <p&gt;var regexku = new RegExp("(" + ku.join("|") + ")区");</p&gt; <p&gt;var iframe = [];</p&gt; <p&gt;var data = {};</p&gt; <p&gt;var parse = [ function(){</p&gt; <p&gt; var d = iframe[0].contentWindow.document;</p&gt; <p&gt; var td = d.getElementsByTagName("td");</p&gt; <p&gt; for(var i=0, l=td.length; i<l; i++){</p&gt; <p&gt; if(regexku.test(td[i].firstChild.nodeValue)){</p&gt; <p&gt; for(var j=0, e=td[i]; j<10; j++){</p&gt; <p&gt; e = e.nextSibling;</p&gt; <p&gt; }</p&gt; <p&gt; data[RegExp.$1 + "0"] = e.firstChild.firstChild.nodeValue.replace(/\.\d+/,"");</p&gt; <p&gt; }</p&gt; <p&gt; }</p&gt; <p&gt; show();</p&gt; <p&gt;}, function(){</p&gt; <p&gt; var d = iframe[1].contentWindow.document;</p&gt; <p&gt; var nobr = d.getElementsByTagName("nobr");</p&gt; <p&gt; for(var i=0, l=nobr.length; i<l; i++){</p&gt; <p&gt; if(regexku.test(nobr[i].firstChild.nodeValue)){</p&gt; <p&gt; for(var j=0, e=nobr[i].parentNode; j<4; j++){</p&gt; <p&gt; e = e.nextSibling;</p&gt; <p&gt; }</p&gt; <p&gt; data[RegExp.$1 + "1"] = e.firstChild.nodeValue;</p&gt; <p&gt; }</p&gt; <p&gt; }</p&gt; <p&gt; show();</p&gt; <p&gt;}, function(){</p&gt; <p&gt; var d = iframe[2].contentWindow.document;</p&gt; <p&gt; var nobr = d.getElementsByTagName("nobr");</p&gt; <p&gt; for(var i=0, l=nobr.length; i<l; i++){</p&gt; <p&gt; if(regexku.test(nobr[i].firstChild.nodeValue) &amp;&amp; nobr[i].parentNode.tagName == "SPAN"){</p&gt; <p&gt; for(var j=0, e=nobr[i]; j<6; j++){</p&gt; <p&gt; e = e.parentNode;</p&gt; <p&gt; }</p&gt; <p&gt; var e2 = e.nextSibling.nextSibling.firstChild.childNodes[2].firstChild;</p&gt; <p&gt; var k = 0;</p&gt; <p&gt; data[RegExp.$1 + "2"] = 0;</p&gt; <p&gt; while(e2){</p&gt; <p&gt; if(e2.firstChild.firstChild.nodeValue.indexOf("公明党") != -1){</p&gt; <p&gt; data[RegExp.$1 + "2"] += parseInt(e2.parentNode.nextSibling.childNodes[k+2].firstChild.nodeValue.replace(",",""), 10);</p&gt; <p&gt; }</p&gt; <p&gt; e2 = e2.nextSibling;</p&gt; <p&gt; k++;</p&gt; <p&gt; }</p&gt; <p&gt; data[RegExp.$1 + "2"] = int2str(data[RegExp.$1 + "2"]);</p&gt; <p&gt; }</p&gt; <p&gt; }</p&gt; <p&gt; show();</p&gt; <p&gt;}, function(){</p&gt; <p&gt; var d = iframe[3].contentWindow.document;</p&gt; <p&gt; var td = d.getElementsByTagName("td");</p&gt; <p&gt; for(var i=0, l=td.length; i<l; i++){</p&gt; <p&gt; if(regexku.test(td[i].firstChild.nodeValue)){</p&gt; <p&gt; for(var j=0, e=td[i]; j<19; j++){</p&gt; <p&gt; e = e.nextSibling;</p&gt; <p&gt; }</p&gt; <p&gt; data[RegExp.$1 + "3"] = e.firstChild.firstChild.nodeValue.replace(/\.\d+/,"");</p&gt; <p&gt; }</p&gt; <p&gt; }</p&gt; <p&gt; show();</p&gt; <p&gt;}, function(){</p&gt; <p&gt; var d = iframe[4].contentWindow.document;</p&gt; <p&gt; var td = d.getElementsByTagName("td");</p&gt; <p&gt; var regexku2 = /(大田|世田谷|練馬|足立|江戸川)/;</p&gt; <p&gt; for(var i=0, l=td.length; i<l; i++){</p&gt; <p&gt; if(regexku.test(td[i].firstChild.nodeValue)){</p&gt; <p&gt; data[RegExp.$1 + "4"] = td[i].nextSibling.nextSibling.firstChild.nodeValue.replace(/\.\d+/,"");</p&gt; <p&gt; continue;</p&gt; <p&gt; }</p&gt; <p&gt; if(regexku2.test(td[i].firstChild.nodeValue)){</p&gt; <p&gt; data[RegExp.$1 + "4"] = (data[RegExp.$1 + "4"] || 0) </p&gt; <p&gt; + parseInt(td[i].nextSibling.nextSibling.firstChild.nodeValue.replace(",","").replace(/\.\d+/,""));</p&gt; <p&gt; }</p&gt; <p&gt; }</p&gt; <p&gt; for(var j=0; j<5; j++){</p&gt; <p&gt; data[ku[[10,11,19,20,22][j]]+"4"] = int2str(data[ku[[10,11,19,20,22][j]]+"4"]);</p&gt; <p&gt; }</p&gt; <p&gt; show();</p&gt; <p&gt;}, function(){</p&gt; <p&gt; var d = iframe[5].contentWindow.document;</p&gt; <p&gt; var td = d.getElementsByTagName("td");</p&gt; <p&gt; for(var i=0, l=td.length; i<l; i++){</p&gt; <p&gt; if(regexku.test(td[i].firstChild.firstChild.nodeValue)){</p&gt; <p&gt; for(var j=0, e=td[i]; j<10; j++){</p&gt; <p&gt; e = e.nextSibling;</p&gt; <p&gt; }</p&gt; <p&gt; data[RegExp.$1 + "5"] = e.firstChild.firstChild.nodeValue.replace(/\.\d+/,"");</p&gt; <p&gt; }</p&gt; <p&gt; }</p&gt; <p&gt; show();</p&gt; <p&gt;}, function(){</p&gt; <p&gt; var d = iframe[6].contentWindow.document;</p&gt; <p&gt; var td = d.getElementsByTagName("td");</p&gt; <p&gt; for(var i=0, l=td.length; i<l; i++){</p&gt; <p&gt; if(regexku.test(td[i].firstChild.firstChild.nodeValue)){</p&gt; <p&gt; for(var j=0, e=td[i]; j<7; j++){</p&gt; <p&gt; e = e.nextSibling;</p&gt; <p&gt; }</p&gt; <p&gt; data[RegExp.$1 + "6"] = e.firstChild.firstChild.nodeValue.replace(/\.\d+/,"").replace("-","0");</p&gt; <p&gt; }</p&gt; <p&gt; }</p&gt; <p&gt; show();</p&gt; <p&gt;}, function(){</p&gt; <p&gt; var d = iframe[7].contentWindow.document;</p&gt; <p&gt; var td = d.getElementsByTagName("td");</p&gt; <p&gt; for(var i=0, l=td.length; i<l; i++){</p&gt; <p&gt; if(regexku.test(td[i].firstChild.firstChild.nodeValue)){</p&gt; <p&gt; for(var j=0, e=td[i]; j<9; j++){</p&gt; <p&gt; e = e.nextSibling;</p&gt; <p&gt; }</p&gt; <p&gt; data[RegExp.$1 + "7"] = e.firstChild.firstChild.nodeValue;</p&gt; <p&gt; }</p&gt; <p&gt; }</p&gt; <p&gt; show();</p&gt; <p&gt;}, function(){</p&gt; <p&gt; var d = iframe[8].contentWindow.document;</p&gt; <p&gt; var td = d.getElementsByTagName("td");</p&gt; <p&gt; for(var i=0, l=td.length; i<l; i++){</p&gt; <p&gt; if(regexku.test(td[i].firstChild.firstChild.nodeValue)){</p&gt; <p&gt; data[RegExp.$1 + "8"] = int2str(td[i].nextSibling.firstChild.firstChild.firstChild.nodeValue);</p&gt; <p&gt; }</p&gt; <p&gt; }</p&gt; <p&gt; show();</p&gt; <p&gt;}, function(n){ return function(){</p&gt; <p&gt; var d = iframe[n+9].contentWindow.document;</p&gt; <p&gt; var td = d.getElementsByTagName("td");</p&gt; <p&gt; data[ku[n]+"9"] = 0;</p&gt; <p&gt; for(var i=0, l=td.length; i<l; i++){</p&gt; <p&gt; if((((td[i].firstChild || 0).firstChild || 0).nodeValue || "").indexOf("公明") == 0){</p&gt; <p&gt; data[ku[n]+"9"] += parseInt(td[i].parentNode.lastChild.firstChild.firstChild.nodeValue.replace(",",""));</p&gt; <p&gt; }</p&gt; <p&gt; }</p&gt; <p&gt; data[ku[n]+"9"] = int2str(data[ku[n]+"9"]);</p&gt; <p&gt; show();</p&gt; <p&gt;}}];</p&gt; <p&gt;function init(){</p&gt; <p&gt; for(var i=0; i<23; i++){</p&gt; <p&gt; var dl = document.createElement("dl");</p&gt; <p&gt; dl.appendChild(document.createTextNode("\n【" + ku[i] + "区における公明票】\n"));</p&gt; <p&gt; for(var j=0; j<10; j++){</p&gt; <p&gt; var dt = document.createElement("dt");</p&gt; <p&gt; var dd = document.createElement("dd");</p&gt; <p&gt; dt.innerText = id[j];</p&gt; <p&gt; dl.appendChild(dt);</p&gt; <p&gt; dl.appendChild(dd);</p&gt; <p&gt; }</p&gt; <p&gt; document.body.firstChild.appendChild(dl);</p&gt; <p&gt; }</p&gt; <p&gt; for(var i=0; i<32; i++){</p&gt; <p&gt; var e = document.createElement("iframe");</p&gt; <p&gt; iframe[i] = e;</p&gt; <p&gt; e.style.display = "none";</p&gt; <p&gt; if(i<9) var f = parse[i];</p&gt; <p&gt; else var f = parse[9](i-9);</p&gt; <p&gt; e.attachEvent("onload", f);</p&gt; <p&gt; e.src = url[i];</p&gt; <p&gt; document.body.appendChild(e);</p&gt; <p&gt; }</p&gt; <p&gt;}</p&gt; <p&gt;function show(){</p&gt; <p&gt; for(var i=0; i<23; i++){</p&gt; <p&gt; var dl = document.body.firstChild.childNodes[i];</p&gt; <p&gt; for(var j=0; j<10; j++){</p&gt; <p&gt; var dt = dl.childNodes[j*2+1];</p&gt; <p&gt; dt.innerText = id[j] + " " + (data[ku[i]+j] || "");</p&gt; <p&gt; dt.nextSibling.innerText = bar(data[ku[i]+j], j);</p&gt; <p&gt; }</p&gt; <p&gt; }</p&gt; <p&gt;}</p&gt; <p&gt;function int2str(num){</p&gt; <p&gt; return new String(num).split("").reverse().join("").replace(/(\d{3})/g,"$1,").split("").reverse().join("");</p&gt; <p&gt;}</p&gt; <p&gt;function bar(str, flag){</p&gt; <p&gt; str = str || "";</p&gt; <p&gt; if(str == "" || str.length < 5) return "";</p&gt; <p&gt; var num = parseInt(str.match(/\d+/)) + 1;</p&gt; <p&gt; var arrow = (flag == 2 || flag == 6 || flag == 9) ? " ←" : "";</p&gt; <p&gt; var _bar = new Array(num).join("|") + arrow;</p&gt; <p&gt; return _bar;</p&gt; <p&gt;}</p&gt; <p&gt;</script&gt;

</body&gt;

</html&gt;

2008-10-29

http://anond.hatelabo.jp/20081029124038

うん。「Expires」は日付。百歩譲って、RFCに「0の場合は特別扱いしろ」とかいてあるので0はありだと思うが、「-1」は論外。

つぎに「JSESSIONID」のSet-Cookieルートディレクトリコンテンツに対する要求なのに「Path=/cs」がついてる。ありえん。っていうか他のページも行くたんびに同じSet-Cookieがでてる。ぱっと探してみたところ「/cs」のパスを持つコンテンツはないので、なんかの設定ミスだろうな。

「SS_X_JSESSIONID」のSet-Cookieは見ての通り。

あとはcharsetWindows-31J。IANA的には全く問題ないんだが、MSIEがこれを認識できないバグを持っているので、Shift_JISを使うのが常道。一部のサーバーソフトShift_JISだと問題を起こすんでWindows-31Jにしてるんだろうけど、この問題を回避する方法は有名。知らないのはモグリ。

あと、「サーバーが超混雑しててつながりにくくてしょうがない」という状況で、KeepaliveのTimeoutがデフォルトの15秒のままってのもなー。3~5秒でいいよ。

ヨドバシ・ドット・コム」がリニューアル後おかしくなってるそうな

どうしたんかいな、とネットワークトレースをとってみた。そしたら、トップ画面の要求に対してこんな応答が返っていた。

GET / HTTP/1.1
Host: www.yodobashi.com
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ja,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive

HTTP/1.1 200 OK
Date: Wed, 29 Oct 2008 02:02:31 GMT
Server: Apache
Pragma: no-cache
Cache-Control: private
Expires: -1
Set-Cookie: JSESSIONID=FAE13F42154EB566479E047B57CBF2EA; Path=/cs
Set-Cookie: SS_X_JSESSIONID=AFA6E52B61BCC8A2C2704B1F60B98B6A; Path=/
Set-Cookie: SS_X_JSESSIONID=AFA6E52B61BCC8A2C2704B1F60B98B6A; Path=/
Set-Cookie: SS_X_JSESSIONID=AFA6E52B61BCC8A2C2704B1F60B98B6A; Path=/
Set-Cookie: SS_X_JSESSIONID=AFA6E52B61BCC8A2C2704B1F60B98B6A; Path=/
Set-Cookie: SS_X_JSESSIONID=AFA6E52B61BCC8A2C2704B1F60B98B6A; Path=/
Set-Cookie: SS_X_JSESSIONID=AFA6E52B61BCC8A2C2704B1F60B98B6A; Path=/
Set-Cookie: SS_X_JSESSIONID=AFA6E52B61BCC8A2C2704B1F60B98B6A; Path=/
Set-Cookie: SS_X_JSESSIONID=AFA6E52B61BCC8A2C2704B1F60B98B6A; Path=/
Set-Cookie: SS_X_JSESSIONID=AFA6E52B61BCC8A2C2704B1F60B98B6A; Path=/
Set-Cookie: BIGipServerPool_www_yodobashi_com_cms=1258399936.20480.0000; path=/
Content-Length: 83878
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html;charset=Windows-31J

えーと。どこから突っ込んでいいのやら。

ベンダ変えた方がよくないですか?>ヨドバシ

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