スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

再びチャベリ裏口さんが不調

先日もチャベリ裏口さんが不調だったのですが、今日もチャベリ裏口さんが不調になっています。
心配ですね。
とりあえず、チャベリサーチさんに切り替えました。
cronから呼ばれる取得コマンドを切り替えるのに
shファイルへのシンボリックリンクを切り替えているのですが、
いちいち rm xxx.shと ln -s xxxxx xxx.shを手で打って実行するのも
間違えるといやなので、shファイルにしておきました。
今後はshファイルをキックするだけで切り替えられますね。
そんなに頻繁に使わなくて済むことを祈りますが。。

http://chattera.net/
http://chattera.net/chaberilist.php

スポンサーサイト

チャベリ裏口さんが復活したようです

チャベリ裏口さんが復活したようですので
データの取得先をチャベリ裏口さんに戻しました。
まあ<wbr>の問題が見つかったのはよかったですね。

http://chattera.net/
http://chattera.net/chaberilist.php

simple_html_dom.phpでPHP Fatal error

チャベリサーチさんから取得するようにしたのですが、
時々ブルーのトップページの取得でデータが取れていないことがありました。
ログを見ると

PHP Fatal error: Maximum function nesting level of '100' reached, aborting! in simple_html_dom.php on line 1643
PHP Stack trace:
PHP 1. {main}() parsetreely.php:0
PHP 2. file_get_html() parsetreely.php:6
PHP 3. simple_html_dom->load() simple_html_dom.php:83
PHP 4. simple_html_dom->parse_charset() simple_html_dom.php:1070
PHP 5. simple_html_dom_node->__get() simple_html_dom.php:1234
PHP 6. simple_html_dom_node->text() simple_html_dom.php:728
PHP 7. simple_html_dom_node->text() simple_html_dom.php:443
PHP 8. simple_html_dom_node->text() simple_html_dom.php:443
PHP 9. simple_html_dom_node->text() simple_html_dom.php:443
・・・

のようにtext取得で再帰が多くおこなわれています。
名前等のデータの中に再帰を起こしそうな文字があるのかと思って、探してみたのですがありません。
いろいろ探っていると、どうやら名前の数が一定以上になると、このエラーを起こします。
ということで、しまっていないタグがあるのではと思って調べてみました。

すると、<wbr>というタグが名前の間に挟まっています。
このタグは単独で使用するタグなので、しまっていないのも当然なのですが、
simple_html_dom.phpが対応してないと、しまっていないタグを延々と再帰で終わりをみつける
ということをやってしまいそうです。
そうおもって、simple_html_dom.phpのソースを見てみると


protected $self_closing_tags = array('img'=>1, 'br'=>1, 'input'=>1, 'meta'=>1, 'link'=>1, 'hr'=>1, 'base'=>1, 'embed'=>1, 'spacer'=>1);

という部分がありました。
たしかにwbrは入ってないですね。
そこで、

protected $self_closing_tags = array('img'=>1, 'br'=>1, 'wbr'=>1, 'input'=>1, 'meta'=>1, 'link'=>1, 'hr'=>1, 'base'=>1, 'embed'=>1, 'spacer'=>1);

のようにwbrを追加してみると、エラーがでなくなりました。
これが原因だったんですね。

http://chattera.net/
http://chattera.net/chaberilist.php

最小二乗法のN次多項式近似

昨日の最小二乗法の1次多項式近似を最小二乗法のN次多項式近似に一般化したものです。


#define MAXDIMN 6
static void gauss(int dim, double a[MAXDIMN][MAXDIMN+1],double *outx)
{
int i,j,k,l;

for (i = 0; i < dim; i++) {
double m = 0;
int pivot = i;
for (l = i; l < dim; l++) {
// max
if (fabs(a[l][i]) > m) {
m = fabs(a[l][i]);
pivot = l;
}
}

if (pivot != i) {
// 行の入れ替え
for (j = 0; j < dim+1; j++) {
double t = a[i][j];
a[i][j] = a[pivot][j];
a[pivot][j] = t;
}
}
}

for (k = 0; k < dim; k++) {
double p = a[k][k];// 対角要素
a[k][k] = 1; // 対角要素は1になる
for (j = k+1; j < dim+1; j++) {
a[k][j] /= p;
}
for (i = k+1; i < dim; i++) {
double q = a[i][k];
for (j = k+1; j < dim+1; j++) {
a[i][j] -= q*a[k][j];
}
a[i][k] = 0; // 0となる
}
}

//
double x[MAXDIMN];
for (i = dim-1; i >= 0; i--) {
x[i] = a[i][dim];
for (j = dim-1; j>i; j--) {
x[i] -= a[i][j]*x[j];
}
}

for(i = 0; i < dim; i++) {
outx[i] = x[i];
}
}

void LeastSquaresMethod(double *x,double *y, int n, int dim, double *coefficient)
{
int i,j,k;
double A[MAXDIMN][MAXDIMN+1];

for (i = 0; i < dim; i++) {
for (j = 0; j < dim+1; j++) {
A[i][j] = 0.0;
}
}
for (i = 0; i < dim; i++) {
for (j = 0; j < dim; j++) {
for ( k = 0; k < n; k++) {
A[i][j] += pow(x[k],i+j);
}
}
}
for (i = 0; i < dim; i++) {
for (k = 0; k < n; k++) {
A[i][dim] +=pow(x[k],i)*y[k];
}
}

gauss(dim, A, coefficient);
}


3次での呼び出しは
dim=4で
double coefficient[4]を渡せばOK
返却データは、順に0次から3次の係数

double *x = new double[n];
double *y = new double[n];
double coefficient[4];
for (int i = 0; i < n; i++) {
x[i] = xxx;
y[i] = yyy;
}
LeastSquaresMethod(x, y, n, 4, coefficient);

現在チャベリ裏口さんが調子悪いようで

現在チャベリ裏口さんが調子悪いようで、
4時間くらい同じデータを返し続けて、その後データ取得に失敗したのを繰り返している状態です。
そのためチャベリ誰がいたのデータ取得先をチャベリサーチさんに切り替えました。
早く調子が戻って欲しいですね。

でも、画面見るまで気づかないというのはあまりよくないですね。
データが取得できないのが続くとメールでも飛ばすようにするべきですかね。
ミスってメールが飛びっぱなしも困りますが。。

http://chattera.net/
http://chattera.net/chaberilist.php

最小二乗法の1次多項式近似

最小二乗法の1次多項式近似の備忘録です


void LeastSquaresMethod1(double x[], double y[], int n, double *coefficient)
{
double A00,A01,A02,A11,A12;

A00 = A01 = A02 = A11 = A12 = 0.0;
for (int i = 0; i < n; i++) {
A00 += 1.0;
A01 += x[i];
A02 += y[i];
A11 += x[i] * x[i];
A12 += x[i] * y[i];
}

// 1次式の係数の計算: y = c[0] + c[1]*x
coefficient[0] = (A02*A11-A01*A12)/(A00*A11-A01*A01);
coefficient[1] = (A00*A12-A01*A02)/(A00*A11-A01*A01);
}


プロフィール

chattera.net

Author:chattera.net
フリーでソフト開発の仕事をしています。
自作したこのチャットシステムは、何か世の中に役に立つこともあるかと思いますので、お呼びがかかるとうれしいですね。

連絡先は chatteranet@gmail.com です。

また、ソフト開発関連のお誘いもうけたまわっております。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。