CentOS7でChromeを使用していたらある日突然Webページが開けないケースが発生しました。
エラー内容
ERROR:child_process_launcher.cc(445)] Failed to launch child process
ERROR:zygote_host_impl_linux.cc(374)] Did not receive ping from zygote child
ERROR:zygote_linux.cc(573)] Zygote could not fork: process_type renderer numfds 5 child_pid -1
どうやらSELinuxポリシーの変更によるものの様です。
SELinuxポリシーが更新されていなかったら更新することで治ります。
$ sudo yum update selinux-policy selinux-policy-devel selinux-policy-sandbox
2015年12月6日日曜日
2015年12月4日金曜日
learnyounodeを解いてみる(8問目)
learnyounode [ HTTP COLLECT]
1つ目のコマンドライン引数は URL 文字列です。 そのURL文字列を使ってHTTP のデーターをロード (※)するアプリを書いてください。 サーバから全て(最初のイベントだけではなく)のデータを集め、次の2行をコンソールに出力して下さい。 1行目は文字数です。2行目はサーバから受け取った全てのデータを文字列で出力してください。
こちらも出題内容が解りづらいかもしれませんが、バッファから得られるデータを纏めて文字数とその文字列を出力するだけです。 先回のものを少し変えるだけで出来そうですね。
response.on("data")で得られるデータはバッファなのでそれを繋ぎます。
あとはresponse.on("end")でlengthを使い文字数を出力し、文字列そのものを出力してやればいいだけです。
httpcollect.js
var http = require('http'); var url = process.argv[2]; http.get(url, function(res) { var out = ""; res.setEncoding('utf8'); res.on('data', function(chunk) { out += chunk; }); res.on('end', function() { console.log(out.length); console.log(out); }); res.on('error', function(err) { console.error("Error: " + err.message); }); });
さて、正解はこれでいいのですが、問題のヒントにblかconcat-streamパッケージを使ってくださいとあります。これら外部パッケージを使うこともNodeの魅力です。これを使って解いてみましょう。
これらはサードパーティ製なので使用するにはnpmでインストールする必要があります。
$ npm install bl
blパッケージはBufferListの略でバッファをリストで加工できる様にしたパッケージでバッファを利用しやすくしています。
主な使い方は以下で説明されてます。
bl特に利便性が高いのはコールバックを引数に持つのでpipeで繋げられることです。
ヒントにもあるのでその使用法で書きましょう。
response.pipe(bl(function(err, data) { }));
blのサイトには
// `data` is a complete Buffer object containing the full data と書いてあります。
つまりデータにはすべてのバッファを含めた状態で渡されるとあるので上と同じ処理をして完成です。気をつけることはbufferはバイナリのままなのでtoString()で文字列に変更することでしょうか?
blcollect.js
var http = require('http'); var bl = require('bl'); var url = process.argv[2]; http.get(url, function(res) { res.pipe(bl(function(err, data) { if(err) return console.error(err); console.log(data.length); console.log(data.toString()); })); });
# おめでとう! 「HTTP 集める」に対するあなたの回答は合格です! これが正式な回答です(もしあなたの回答と比較してみたいならどうぞ): ─────────────────────────────────────────── var http = require('http') var bl = require('bl') http.get(process.argv[2], function (response) { response.pipe(bl(function (err, data) { if (err) return console.error(err) data = data.toString() console.log(data.length) console.log(data) })) })以上です。
登録:
投稿 (Atom)
Pythonで地図空間データを扱う⑤
ベースの地図が出来た所で、他のデータを被せてみます。 国土地理院の 500mメッシュ別将来推計人口データ を使用します。 同じく神奈川県のデータ 500m_mesh_suikei_2018_shape_14.zip をダウンロードします。 ベースの地図データと同じ場所に展開...
-
文字列の改行を消す Cで入力文字列を扱っているとfgetsなど改行まで入り込む場合があります。それを消すための簡単なコード。 例: #include <stdio .h> #include <string .h> #define LEN 32...
-
CGIスクリプトでスクリプトが実行されない時 PythonスクリプトでCGIスクリプトをサーバーから実行させようと思ってWebページを開こうと思っても表示されない時があります。 様々なケースが考えられますが、単純なミスの場合もあります。 サーバーを起動させているシェル...
-
近年、パソコンの需要が急速に減退し、一気にスマートフォンに置き換わってきました。 ネット閲覧もパソコンからスマートフォンに主役が移ってきています。 そこでWeb周りの技術だけでなくネイティブアプリやデバイスの深い部分まで動かすにはC/C++の知識はどうしても必要になってきま...