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)
nba_apiを使いNBAデータを取得する
NBAデータ取得 NBAデータを分析する場合には、まず最初にデータ取得が必要です。 Kaggleなどのデータサイトから検索してもいいし、データサイトからスクレイピングしてる方もいると思います。 そしてPythonのライブラリからもNBAデータを提供してるものがあるので、それを使っ...
-
文字列の改行を消す Cで入力文字列を扱っているとfgetsなど改行まで入り込む場合があります。それを消すための簡単なコード。 例: #include <stdio .h> #include <string .h> #define LEN 32...
-
CGIスクリプトでスクリプトが実行されない時 PythonスクリプトでCGIスクリプトをサーバーから実行させようと思ってWebページを開こうと思っても表示されない時があります。 様々なケースが考えられますが、単純なミスの場合もあります。 サーバーを起動させているシェル...
-
WindowsのC/C++開発環境 普段Linuxで開発を行なっている方も場合よってはWindowsでC/C++を試す機会があるかもしれません。 そんな中、Visual Studioの様なIDEを一々起ち上げるのは面倒です。Visual Studioにはclコマンドが...