【2017年3月】

array_unique() で小ハマリ

PHPの関数 array_unique() で小ハマリしたのでメモ。

array_unique() は、配列から重複する要素を削除する関数。

たとえば、こんなプログラム。

$list = array('A', 'B', 'A', 'C');
$list = array_unique($list);
for ($cnt = 0; $cnt < count($list); $cnt++)
{
print($list[$cnt] . "\n");
}

このプログラムは、「A」「B」「A」「C」という配列から、array_unique() によって、重複する「A」の余分な要素を取り除き、「A」「B」「C」という配列にするプログラムである。

このプログラムにおける、期待する実行結果は、こうである。

A
B
C

ところが、実際にプログラムを実行すると、この様に出力される。

A
B

最後の要素「C」が出力されない。
なぜだ。

実行結果だけを見ると、count($list) の値が「2」であるように見える。
確認してみよう。

$list = array('A', 'B', 'A', 'C');
$list = array_unique($list);
print(sprintf("===%d===\n", count($list))); // ★追加★
for ($cnt = 0; $cnt < count($list); $cnt++)
{
print($list[$cnt] . "\n");
}

実行してみると…

===3===
A
B

count($list) の値は「3」なのに、最後の要素が出力されない。
なぜだ。

var_dump() で配列の内容を一覧してみよう。
$list を初期化した後と、array_unique() を通した後に var_dump() を入れてみる。

$list = array('A', 'B', 'A', 'C');
var_dump($list); // ★追加★
$list = array_unique($list);
var_dump($list); // ★追加★
for ($cnt = 0; $cnt < count($list); $cnt++)
{
print($list[$cnt] . "\n");
}

実行してみると…

array(4) {
[0]=>
string(1) "A"
[1]=>
string(1) "B"
[2]=>
string(1) "A"
[3]=>
string(1) "C"

}
array(3) {
[0]=>
string(1) "A"
[1]=>
string(1) "B"
[3]=>
string(1) "C"

}
A
B

なるほど、array_unique() を通した後は、重複している要素番号[2]が抜けて、 [0][1][3] と飛んだ状態で格納されている。
要素数(つまり count($list))は「3」なので、for は [0][1][2] でループするのだけれど、最後の要素の添え字は [3] だから出力されないのか。
おそらく、[2] は null なのだな。

確認してみよう。

$list = array('A', 'B', 'A', 'C');
$list = array_unique($list);
for ($cnt = 0; $cnt < count($list); $cnt++)
{
if ($list[$cnt] == null) // ★追加★
{
print("NULL!\n");
}
print($list[$cnt] . "\n");

}

実行してみる。

A
B
NULL!

では、array_unique() を通した後の配列を正しくループさせるにはどうしたらいいのだろう。
sort() を通して配列を並べ替えたらどうだろうか。

$list = array('A', 'B', 'A', 'C');
$list = array_unique($list);
sort($list); // ★追加★
for ($cnt = 0; $cnt < count($list); $cnt++)
{
print($list[$cnt] . "\n");
}

できた!

A
B
C

しかし、これでは配列がソートされてしまう。ソートしたくない場合はどうしたらいいのだろうか。
array_系の関数をざっと見てみる... これか、array_merge() を使用して、1個の配列だけをマージしてみたらどうか。
やってみよう。

$list = array('A', 'B', 'A', 'C');
$list = array_unique($list);
$list = array_merge($list); // ★追加★
for ($cnt = 0; $cnt < count($list); $cnt++)
{
print($list[$cnt] . "\n");
}

できた!

A
B
C

もっといいやり方があるような気がするのだが、とりあえず、これでヨシとしよう。
なかなか奥が深い。

WAKWAKの回線速度が異常に遅い

ずんべ は、インターネットに プロバイダ WAKWAK 経由で、「NTT西日本 フレッツ光ネクスト隼」で接続している。
しばらく前から、あきらかな回線速度の低下が感じられるようになった。
しばらく、「遅いな、遅いな」と思いながら使っていたのだけれど、オンデマンドでの配信はまともに視聴できないし、ソフトウェアのダウンロードも途中で止まるほどの状況になった。

これはいくらなんでもと思い、回線速度を計測してみた。

BNRスピードテスト

結果は…

回線速度計測(夜)

へ?

100Kbps ?

回線は「フレッツ光ネクスト隼」で、理論最大速度は1Gbpsだぞ。
なのに、回線速度がキロ?
理論最大速度の1万分の1だと?
なんだそれ?

とりあえず、LAN内を疑ってみる。

モデム、回線終端装置、ルーター、スイッチングハブを電源断し、再起動してみる。
効果なし。

LANケーブルを交換してみる。
効果なし。

パソコンから直接ルーターに接続するようにして、LAN内を最短経路にしてみる。
効果なし。

深夜~未明に回線速度を計測してみると、時間によっては悪くない速度が出ている。

回線速度計測(深夜~未明)

更に、一時的な現象ではない事を確認するために、数日間、同様に計測してみる。
結果は、常に同じパターンだ。

朝:1Mbps
昼:1Mbps
夜:100Kbps
深夜:80Mbps

深夜に80Mbpsの速度が出る事、毎日同じパターンである事から考えて、LAN内の設備の問題ではない。
プロバイダの問題か、NTT光回線網の問題か、のいずれかしか考えられない。

BNRスピードテストのサイトには、画面の左上に「TraceRoute」というボタンがあり、向こうからこちらにトレースルートをしてくれる機能があるので、試してみる。
結果は...。

トレースルート(100Kbps)

こちらに近づくにつれ、速度が低下していく。
xephion.ne.jp、wakwak.com、wakwak.ne.jp が遅く、特に最後の wakwak.ne.jp が異常に遅い。
ちなみに、xephion.ne.jp とは、おそらくこれ。

XePhion

wakwak.com、wakwak.ne.jp は、プロバイダのこれ。

WAKWAK

XePhionも、WAKWAKも、提供会社は NTT-ME である。
つまり、回線速度後遅い直接原因は NTT-ME の設備と考えられる。

ところで、50Mbps程度の速度が出ている状況の時に「TraceRoute」を実行してみると、次の様な結果になった。

トレースルート(50Mbps)

この結果によると、XePhion の部分は 100Kbps の時と大差ないが、最後の wakwak.ne.jp の部分が速くなっている事が分かる。
つまり、この最後の wakwak.ne.jp がボトルネックであると考えられる。
つまり、プロバイダの設備が原因としか考えられない。

WAKWAK のサポートに電話をし、上記の状況を説明する。

ここ数ヶ月、夜の時間帯の回線速度は激烈に遅い。100Kbps~200Kbpsしか出ていません。
LAN内の機材の電源断、再起動を試しました。
朝、昼、夜、深夜の各タイミングで回線速度の計測をしてみると、朝昼は1Mbps程度、夜は100Kbps程度、深夜から未明でないと80Mbpsが出ません。
これでは、使い物になりません。
調査をお願いできますか。
ここ数日間のNTT光回線網は問題ないようです。
しかし、あきらかに速度が遅い状況です。
先に説明した通りの状態ですので、LAN内の設備がおかしいという事は考えられません。
どう考えてもサービス提供側の問題だと思います。
NTT光回線網の問題ではないとすれば、WAKWAKの設備の問題という事ですか?
回線速度の計測はどこでされましたか?
BNRです。
そうですか...。
仰る通り、お客様の設備の問題ではないと思います。
先ほどの通り、NTT光回線網の問題はないと思います。
従いまして、弊社の設備の問題であると思われます。

WAKWAK が、自身の設備の問題であると認めた
WAKWAK の方から回線速度を計測したサイトを聞いてくるあたりや、何の調査をする事も無くすらすらと問題点を回答してくるあたり、いとも簡単に自社の設備の問題だと認めるあたりなどからして、既に相当数のクレームが入っているという事がうかがえる。
更に聞く。

私が回線速度を計測した段階で、既に速度が遅い状態が何ヶ月も経過していると考えられます。
インターネットで検索してみると、少なくとも半年以上前から速度が遅い状態になっていると考えられます。
100Kbpsという速度は、昔のピーヒョロヒョロと繋いでいたアナログ回線の速度に毛が生えた程度の速度でしかありません。
この状態は「サービスが提供できている状態」ではないと思いますが、いつ改善される予定ですか?
申し訳ございません。現時点では、いつ改善するという事は申し上げられません。
いや、もう、何ヶ月も遅い状態が続いているのですよね?
それなのに、改善される状況がわからないというのはどういうことですか?
100Kbpsですよ。1Mbpsにすら届いていないのですよ。公称速度の1万分の1ですよ。
いつ改善されるのですか?
申し訳ございません。現時点では、いつ改善するという事は申し上げられません。
よろしければ、他社プロバイダに乗り換えるとかをご検討いただけませんでしょうか。

「他社プロバイダに乗り換えろ」とは、WAKWAK は何をバカな事を言っているのだ。
サービス提供を放棄する気か。

-----
本題とは逸れるが、このフレーズ、どこかで聞いた事がある。
弁護士だ。
弁護士は、何か問題が発生すると「自分を解任してください」と言う。
アホか。「私が解任」じゃないだろ、「自分で辞任」しろ。
辞任して、責任を認め、ペナルティを受けて(お金を返して)、はじめて責任を逃れられるんだ。
解任させようとするのは、利用者に責任を押し付けて逃げようとする行為だ。
逃げたいのなら、辞任しろ。
-----

WAKWAK も同じことを言ってきたのだ。
私が「自ら他社プロバイダに乗り換える」という事は、WAKWAK から見たら「ずんべが勝手に乗り換えたのだから、私に責任はない」という発言だ。考えがミエミエである。ふざけるな。
この一言で、WAKWAK に対する信頼はがくっと落ちた。

残念な事に、ずんべ は固定IPアドレスを契約している。
固定IPアドレスを変更すると、ひじょうに大きなコストをかけて、様々のサーバの設定変更しなければならないので、そうおいそれとはプロバイダを変更できない。

仕方がないのでもう少し様子を見てみようとは思うが、はっきり言って半年も改善しないような状況で、今後改善されるとは思えない。
今しばらくだけ待ってみようと思うが、100Kbps程度の速度しか出ないようなら、お金を払う価値はないと思うので、固定IPアドレスを変更するコストをかけてでもプロバイダを変更しなければならないかもしれない。
そして、一旦 WAKWAK を離れる状況になったら、二度とWAKWAKと契約する事はない。


このブログを読んだ WAKWAK 会員の方は、回線速度を計測してみよう。

そして、回線速度が遅いのであれば、WAKWAK のサポートに電話をしてクレームを入れよう!
上記の通り、現状で WAKWAK から提供されているサービスは、品質が非常に悪い。我々ユーザは、異常に遅い回線を高い料金で買わされているのである。
我々ユーザが声を上げ、WAKWAK にわからせよう!


■2017/06/01追記

このエピソードを書いてから約2ヶ月半が経過したが、まったく改善される様子がない。
夕方以降は、現在でも 100Kpbs~200Kbps 程度しか速度が出ない。
利用者に対して、未だに何の報告もない。
最低だ。

蛍の航跡: 軍医たちの黙示録

「蛍の航跡: 軍医たちの黙示録」を読んだ。

[amazon isize="large"]4101288259[/amazon]



軍医に着目して小説化された作品。
日本軍の最前線においては、軍医自らが病気にかかる危険性に晒され、飢餓に晒され、そして、治療をしたくても医薬品の補給がない現実に晒され、敵とも、病気とも、過酷な環境とも戦い抜いた軍医の方々には頭が下がる。
過酷な状況下で多くの兵士を救ってくれた方々に感謝したい。

ただ、本題と外れるところで気になった点がある。
最前線の描写の中で「看護婦」が時折登場するのだが、最前線に看護婦がいるのだろうか。

チア☆ダン

「チア☆ダン」を試写会で観た。

チア☆ダン
チア☆ダン



試写会に当選した。(^^)

試写状

主役の広瀬すずは、昨年に同じく試写会で観た「ちはやふる [上の句」でいい演技をしていて好きになった。
たくさん応募して、試写状をゲット!

かなり期待して観に行ったのだが…。
映画は、ごく普通の配役で、これと言って特別なサイド・ストーリーもなく、ごく普通に物語は進行し、アメリカの大会に進んで優勝する。
物語は3年間。しかし、2時間に圧縮した結果、物語の進行はあっと言う間で、1年生での散々な結果からアメリカの優勝まで、わずか3大会くらいで進んでしまう。仕方がないとは思うけど、駆け足過ぎて感動が薄い。
う~ん、決して悪くはないと思うのだけれど、私的にはイマイチ。60点かな。

この映画のキャストの中で、優等生 玉置綾乃 役の 中条あやみ が、とても気になった。

中条あやみ

かわいいなぁ。(^^)
ちょっと注目してみたいと思う。

広告

まとめページ

取得した資格
登った山

広告

サイト内検索

WordPress

最近のコメント

広告

RSS

RSS 記事
RSS コメント
Server offered by
有限会社パテンティックソフトウェア
Profile for zunbe