1. Intro 1.1 タイトルの答え それは,最初から"How"(どうやってこの問題を解決すべきか)だけを考えているからです. 最初に問うべきなのは"Why"(なぜこの問題が起きたか)です. このタイトルの問いも,なぜ?から始まっています.「どうやって自分でエラーを解決するか」だけを考えていると,問題の根本的な原因が分からないため,ずっと自分でエラーを解決することはできません. 1.2 Keyword 最初に自分に問いかけるべき言葉 〇 Why(なぜ?): なぜこの問題が起きたか ✕ How(どうやって?): どうやってこの問題を解決すべきか 1.3 背景 研究室では毎年,いつまでたっても自分でソースコードのエラーや出力の問題を解決できず,進捗が遅かったり開発をあきらめてしまったりする人が発生する.本記事では,なぜ自分でエラー・問題を解決できないのか?を明確にする. <注意書き> この
こんにちは、ruby-devチームの遠藤(@mametter)です。 Among Usというゲームをやってるのですが、友達が少なくてあまり開催できないのが悩みです。 今日は、Ruby 3.1に導入される予定のerror_highlightという機能を紹介します。 どんな機能? NoMethodErrorが起きたとき、次のような表示が出るようになります。 error_highlightの動作例 どこのメソッド呼び出しで失敗したかが一目瞭然ですね。これだけの機能ですが、使ってみると意外と便利です。 もう少し詳しく この機能が本領を発揮するのは、RailsのparamsやJSONデータの取り扱いなどのときです。 たとえばjson[:articles][:title]みたいなコードを書いて、undefined method '[]' for nil:NilClassという例外が出たとします。 この
標準出力ではなく標準エラーにエラーメッセージを書き込む 現時点では、すべての出力をprintln!関数を使用して端末に書き込んでいます。多くの端末は、 2種類の出力を提供します: 普通の情報用の標準出力(stdout)とエラーメッセージ用の標準エラー出力(stderr)です。 この差異のおかげで、ユーザは、エラーメッセージを画面に表示しつつ、 プログラムの成功した出力をファイルにリダイレクトすることを選択できます。 println!関数は、標準出力に出力する能力しかないので、標準エラーに出力するには他のものを使用しなければなりません。 エラーが書き込まれる場所を確認する まず、minigrepに出力される中身が、代わりに標準エラーに書き込みたいいかなるエラーメッセージも含め、 どのように標準出力に書き込まれているかを観察しましょう。意図的にエラーを起こしつつ、 ファイルに標準出力ストリーム
Ruby 3.0.1, 2.7.3, 2.6.7, 2.5.9 がリリースされたので、 rbenv install 2.6.7 などでインストールしていると、 macOS Big Sur の環境でエラーになったので、 その回避方法の話です。 動作確認環境 macOS Big Sur 11.2.3 Xcode 12.4 エラー内容 以下のように implicit-function-declaration でエラーになります。 詳細は確認していませんが、Xcode 12 でデフォルトでエラーになるようになったそうです。 % rbenv install 2.6.7 Downloading openssl-1.1.1j.tar.gz... -> https://dqw8nmjcqpjn7.cloudfront.net/aaf2fcb575cdf6491b98ab4829abf78a3dec8402
panic!すべきかするまいか では、panic!すべき時とResultを返すべき時はどう決定すればいいのでしょうか?コードがパニックしたら、 回復する手段はありません。回復する可能性のある手段の有る無しに関わらず、どんなエラー場面でもpanic!を呼ぶことはできますが、 そうすると、呼び出す側のコードの立場に立ってこの場面は回復不能だという決定を下すことになります。 Result値を返す決定をすると、決断を下すのではなく、呼び出し側に選択肢を与えることになります。 呼び出し側は、場面に合わせて回復を試みることを決定したり、この場合のErr値は回復不能と断定して、 panic!を呼び出し、回復可能だったエラーを回復不能に変換することもできます。故に、Resultを返却することは、 失敗する可能性のある関数を定義する際には、いい第一選択肢になります。 稀な場面では、Resultを返すよりもパ
Resultで回復可能なエラー 多くのエラーは、プログラムを完全にストップさせるほど深刻ではありません。時々、関数が失敗した時に、 容易に解釈し、対応できる理由によることがあります。例えば、ファイルを開こうとして、 ファイルが存在しないために処理が失敗したら、プロセスを停止するのではなく、ファイルを作成したいことがあります。 第2章の「Result型で失敗する可能性に対処する」でResult enumが以下のように、 OkとErrの2列挙子からなるよう定義されていることを思い出してください: #![allow(unused)] fn main() { enum Result<T, E> { Ok(T), Err(E), } } TとEは、ジェネリックな型引数です: ジェネリクスについて詳しくは、第10章で議論します。 たった今知っておく必要があることは、Tが成功した時にOk列挙子に含まれて
panic!で回復不能なエラー 時として、コードで悪いことが起きるものです。そして、それに対してできることは何もありません。 このような場面で、Rustにはpanic!マクロが用意されています。panic!マクロが実行されると、 プログラムは失敗のメッセージを表示し、スタックを巻き戻し掃除して、終了します。これが最もありふれて起こるのは、 何らかのバグが検出された時であり、プログラマには、どうエラーを処理すればいいか明確ではありません。 パニックに対してスタックを巻き戻すか異常終了するか 標準では、パニックが発生すると、プログラムは巻き戻しを始めます。つまり、言語がスタックを遡り、 遭遇した各関数のデータを片付けるということです。しかし、この遡りと片付けはすべきことが多くなります。 対立案は、即座に異常終了し、片付けをせずにプログラムを終了させることです。そうなると、プログラムが使用してい
PIB hack のためのネタ帳, etc,,, トップページページ一覧メンバー編集 Cygwin - ruby-2.0.0-p576 最終更新: kou1okada 2015年02月16日(月) 19:02:48履歴 Tweet 2015-02-16: cygwin-1.7.34 ruby-*/ext/-test-/printf/printf.c 内に utoa という static 関数が 2013-09-19 に tag:v2_1_0_preview1 にて導入された。 vsnprintf.c: initialize cp この commit は ruby-2.0.0-p481 以降 ruby-2.0.0-p576 がリリースされる間のどこかで ruby-2.0.0 にも backport されている。 また cygwin 32/64 双方において cygwin-1.7.33-1 以
Windows 8.1のPCに,Cygwinの64ビット版を入れ,一通りのことをしてから, rbenv install 2.2.0 を実行すると,エラーが発生しました. エラーメッセージは: uncommon.mk:187: recipe for target 'build-ext' failed make: *** [build-ext] Error 2/tmp/ruby-build.年月日時分秒.たぶんプロセスID.log を読むと,以下のとおり,「utoa」の宣言で,衝突が起こったとのこと. printf.c:23:1: エラー: ‘utoa’ と型が競合しています utoa(char *p, char *e, unsigned int x) ^ In file included from /usr/include/stdio.h:29:0, from ../../.././incl
久しぶりにアクセスログを見たら、 nokogiri のインストール方法で検索してくる方が結構いらっしゃるようなので、 最新の情報を書いておこうと思います。 # nokogiri に限った問題ではないので、条件によっては他の gem であっても解決するかも。 2015/4/27 追記 本稿は、Ruby 2.1.X までを使用している方が対象です。 Ruby 2.2.X 以降の場合は、本稿は役に立ちません。たぶん。 TL;DR 原因 & 解決法まとめ 原因: 古いバージョンの rubygems に不具合があり、環境に適した gem を取得できないため [解決法1] 手動でインストールする gem をダウンロードする または [解決法2] rubygems をアップグレードする (おすすめ) [解決法1] 手動でインストールする gem をダウンロードする nokogiri | RubyGems
環境 CentOS 6.4 x86_64 git 2.3.0 手順 前提パッケージインストール 以下のパッケージをインストールする。 なお、wgetはcurlを使用する場合、SSH経由でファイルを送り込める場合はインストールしなくてもよい。 curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl wget make gcc perl-ExtUtils-MakeMaker tcl # yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl 依存ライブラリ。ないとmakeが通っても動かない・・・らしい。perl は依存パッケージとしても入る。 gettext-develがないとmake時に下記エラーが発生。 MSGF
MBAに入れてるgitのアップデート手順のメモ。 環境 Mac OSX Lion 10.7.4 Xcode 4.1 git version 1.7.4.4 gitをcloneしてv1.7.10.4をcheckout githubからgitのリポジトリをcloneして、v1.7.10.4をチェックアウト。 $ git clone https://github.com/git/git.git $ cd git $ git checkout v1.7.10.4 makeとmake install INSTALLによると、普通にmake & make insstallとすると~/binにインストールされるが、 prefixを指定することで/usr/local等にインストールすることが出来る。 今回は、/usr/localにインストールすることにした。 $ make prefix=/usr/loca
バンドルされた libxml2-2.8.0 インストール中にエラー発生 nokogiri が依存する libxml2-2.8.0 のインストール時にエラーが発生したのですが、どうやら nokogiri はデフォルトでは libxml2-2.8.0 を同梱していて、今回の場合 libxml2-2.8.0 インストール中にエラーが起きていた。以下 capistrano により出力されたエラーログ。 DEBUG[95c3bb26] Gem::Ext::BuildError: ERROR: Failed to build gem native extension. DEBUG[95c3bb26] DEBUG[95c3bb26] /usr/local/rbenv/versions/2.1.2/bin/ruby extconf.rb DEBUG[95c3bb26] Building nokogiri
■ このような場合に参考にして下さい MySQLのクライアントソフト(mysql,PHP,Perl他)からMySQLサーバーに接続しようとすると 「Can't connect to local MySQL server through socket '/tmp/mysql.sock'」 のようなエラーが出て接続に失敗する。 ■ 対処方法の前に まずはじめに、エラーメッセージは次の意味を持ちます。 「ソケット'/tmp/mysql.sock'を通じてローカルのMySQLサーバーに接続することが出来ません」 ソケットとはプロセスやネットワーク間の通信機構のことで、MySQLではこのソケットを通じて サーバーとクライアントとが接続されます。ソケットというとポート番号を指定して利用する方法が 思い浮かびますが、ここでは/tmp/mysql.sockというファイルが出てきています。 これはUNIXド
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く