hotoolong's blog

プログラムのことやエンジニアリングに関することを記事にしています。

閲覧履歴を検索した文字列でまとめて削除するBetter History

Chromeの閲覧履歴をまとめて削除したくなるケースがあったのですが、
標準の閲覧履歴は検索して絞り込んで、1件ずつでないと削除ができず不便に感じていました。

探してみるとBetter History というExtension があって便利そうなので使ってみました。 日付単位での閲覧履歴やタイトル、ドメインで検索してまとめて削除もできたので、とても重宝しそうです。 同様の状態で困ってる方は使ってみてはどうでしょうか。

chrome.google.com

RubyKaigiの動画が更に追加されてました

Keynotesの動画が追加されて、こんなに早く36本もの動画が追加されていました。 対応していただいた関係者にはとても感謝の気持ちです。

しばらくは楽しみに動画を見ようかと思います(^^)

スライドをまとめている記事にもリンクを反映しておきます。

「プロを目指す人のためのRuby入門」を読んでみて

前置き

「プロを目指す人のためのRuby入門」のレビューを書いてなかったので記載しておきます。

先日行ってきたRubyKaigiの中でも話題になっていた本ですね。

1位になっているパーフェクトRubyも読んだことないんですよね。 一度は見ておかないと。

hotoolong.hatenablog.com

こちらでも触れていたように、読んでいて、読了したのですが、感想かけていなかったので、記載しておきます。

書評

目次から確認してみると章立てがとても細やかで驚かされます。
とても几帳面感が出てますね。

他にもあるRuby本と比べて大きく違ってる点はテストと正規表現ですかね。
基礎的なRubyの仕組みを本当に驚くほど丁寧に説明してくれています。
個人的には8章の”モジュールを理解する” 10章の”yieldとProcを理解する” が良い復習になりました。
また、正規表現の説明が多く取り扱われていたのが少し驚きでした。これはプロを目指すという意味合いで追加されてるのかもしれないです。

若干残念なのがデバッグに関してですが、pryなどを使ってしまうとgemの領域になってしまうので本の主旨からも少しずれてしまうんですかね。 実際にRuby(irb)だけでデバッグする場合どのような手段が有効なのか。私はpryに頼り過ぎてるのかもしれないなと思い知らされました。

まとめ

Rubyに関して今まで読んだ本の中では一番いい印象です。
初心者もそうですし、既にRubyを使っている人にもお薦めできそうですし、他の言語からRubyを学びたい人にはとても良い本ではないでしょうか。 まだ読んでない方は是非読んでみてください。

参考文献

プロを目指す人のためのRuby入門

RubyKaigi 2019 の 動画が一部公開されてました

早くもRubyKaigi 2019の動画のKeynotesが公開されていました。
迅速な対応とてもありがたいです。

www.youtube.com

www.youtube.com

www.youtube.com

スライドをまとめているページにもリンクを作っておきます。

RubyKaigi 2019 の スライドまとめてみた

明日から令和ですね。 ブログ更新できていなかったので先日参加したRubyKaigi 2019のスライドのリンクをまとめてみました。 コードを書く意欲がそそられるものが多く実際に参加できてとても光栄でした。

久々に福岡にいったのですが、随分と整備されていて移動するのが快適になっていますね。 特に空港からの移動が非常にスムーズな印象です。 また個人的に遊びに行こうかとおもいます。

Ruby Kaigi 2019ですが、4/19 〜 21 までの3日間でとても多くのセッションが用意されていていました。 4つのセッションが並行して実施されていたので、聞けないセッションもあったので少し残念ではありましたが、後日動画などもこうかいされることを期待しつつ、公開されているスライドをまとめてみました。

1日目

speakers twitter title slide movie
Matz @yukihiro_matz The Year of Concurrency -
Matz & the Ruby Core Team - Ruby 3 Progress Report
Takashi Kokubun @k0kubun Performance Improvement of Ruby 2.7 JIT in Real World
Maciej Mensfeld @maciejmensfeld How to take over a Ruby gem
ITOYANAGI Sakura @aycabta Terminal Editors For Ruby Core Toolchain
ota42y @ota42y How to use OpenAPI3 for API developer
Koichi Sasada @_ko1 Write a Ruby interpreter in Ruby for Ruby 3
Nate Berkopec @nateberkopec Determining Ruby Process Counts: Theory and Practice
Giovanni Sakti @giosakti Pathfinder - Building a Container Platform in Ruby Ecosystem
joker1007 @joker1007 Pragmatic Monadic Programing in Ruby
Yusuke Endoh @mametter A Type-level Ruby Interpreter for Testing and Understanding
Alexander Ivanov Zahary Karadjov @￰alehander42 @￰zah Compiling Ruby to idiomatic code in static languages
Genadi Samokovarov @gsamokovarov Writing Debuggers in Plain Ruby! Fact or fiction?
Yoh Osaki @youchan Ruby for NLP
Samuel Williams @ioquatix Fibers Are the Right Solution
Matthew Draper @_matthewd A Bundle of Joy: Rewriting for Performance
Paolo Perrotta @nusco A Deep Learning Adventure
Shizuo Fujita @watson1978 RMagick, migrate to ImageMagick 7
Kazuki Tsujimoto @k_tsj Pattern matching - New feature in Ruby 2.7
Alex Wood @alexwwood Building Serverless Applications in Ruby with AWS Lambda
Shawnee Gao @gao_shawnee GraphQL Migration: A Proper Use Case for Metaprogramming?
Aaron Patterson @tenderlove Compacting GC for MRI v2

2日目

speakers twitter title slide movie
nagachika @nagachika All bugfixes are incompatibilities
Sam Phippen @samphippen How RSpec works
Noah Gibbs @codefolio Six Years of Ruby Performance: A History
Hitoshi HASUMI @hasumikin Practical mruby/c firmware development with CRuby
Kouhei Sutou Kazuma Furuhashi @ktou @284km Better CSV processing with Ruby 2.6
Hiromasa Ishii @Hir0_IC intimate Chat with Matz and mruby developers about mruby
Xavier Noria @fxn Zeitwerk: A new code loader
Andrey Novikov @Envek Yabeda: Monitoring monogatari
Yutaka HARA @yhara Ovto: Frontend web framework for Rubyists
Jake Zimmerman Paul Tarjan @￰jez @ptarjan State of Sorbet: A Type Checker for Ruby
Michael Grosser @grosser Actionable Code Coverage
RubyData Workshop
Shugo Maeda @shugomaeda Terminal curses
Vladimir Makarov @￰vnmakarov A light weight JIT compiler project for CRuby
Amir Rajan @amirrajan Building a game for the Nintendo Switch using Ruby
Alex Rodionov @p0deje Crystalball: predicting test failures
Uchio KONDO @udzura The fastest way to bootstrap Ruby on Rails
Emily Stolfo @￰estolfo Benchmarking your code, inside and out
Kevin Menard @nirvdrum Beyond puts: TruffleRuby’s Modern Debugger Using Chrome
Mike McQuaid @MikeMcQuaid Building Homebrew in Ruby: The Good, Bad and Ugly
Tanaka Akira @tanaka_akr What is Domain Specific Language?
- Lightning Talks
How does TruffleRuby work

3日目

speakers twitter title slide movie
Presentation avatar Ruby Committers vs the World
Yurie Yamane(team yamanekko) Masayoshi Takahashi @yuri_at_earth @takahashim (partially) Non-volatile mruby
Ariel Zelivansky @￰zelivans Fuzzing native Ruby code with Kisaten
Justin Searls @searls The Selfish Programmer
Sangyong Sim @riseshia Cleaning up a huge ruby application
Soutaro Matsumoto @soutaro The challenges behind Ruby type checking
Charles NutterThomas E Enebo @tom_enebo JRuby: The Road to Ruby 2.6 and Rails 6
Colin Fulton @PeterQuines Running Ruby On The Apple II
Go Sueyoshi @sue445 Best practices in web API client development
Hiroshi SHIBATA @hsbt The future of the Bundled Bundler with RubyGems
Kevin Deisz @kddeisz Pre-evaluation in Ruby
Masatoshi SEKI @m_seki dRuby 20th anniversary hands-on workshop
Sadayuki Furuhashi @frsyuki Performance Optimization Techniques of MessagePack-Ruby
Kenta Murata @mrkn Reducing ActiveRecord memory consumption using Apache Arrow
Tung Nguyen @￰tongueroo Ruby Serverless Framework
Tatsuhiro Ujihisa @ujm Play with local vars
nobu @n0kada Timezone API
Urabe, Shyouhei @shyouhei The send-pop optimisation
Petr Chalupa @pitr_ch TruffleRuby: Wrapping up compatibility for C extensions
Colby Swandale @oceanicpanda Working towards Bundler 3
Naotoshi Seo Yusaku Hatanaka @sonots @hatappi Red Chainer and Cumo: Practical Deep Learning in Ruby
Jeremy Evans @jeremyevans0 Optimization Techniques Used by the Benchmark Winners

個人的な感想は別途まとめます。 リンク間違いや、追加されている資料を教えていただけると助かります〜 Enjoy Ruby!

Nvim起動時にdeoplete failed to loadが表示されてたので対応する

nvimで変なエラーが表示されるようになった

[deoplete] Failed to load python3 host. You can try to see what happened by starting nvim with $NVIM_PYTHON_LOG_FILE set and opening the generated log file. Also,
the host stderr is available in messages.
[deoplete] function remote#define#FunctionBootstrap[1]..remote#host#Require[10]..provider#pythonx#Require[13]..provider#Poll, line 14
[deoplete] deoplete failed to load. Try the :UpdateRemotePlugins command and restart Neovim. See also :checkhealth.

brew でインストールしているpython3のバージョンが変わってしまっている影響のようだ

pip3 list

をして neovimのPackageがなければインストールしておこう

pip3 install neovim

nvimを再起動すれば同様のエラーは出なくなる。

ソフト404をRailsで対応する

Search Consoleのエラーでソフト404が表示されることが度々あり、対応方法を考えてみました。

support.google.com

本来であれば、sitemap.xmlで送信しているURLから削除するなどの対応をすべきです。

ただ、検索ページなどで動的に変化する場合、
ページ内もしくは、サイト内の導線を切ることで対処します。
検索ページでファセットを使ってるのもその一つですね。

ファセットが使えない場合は、対応しかねるケースもあるかと思います。
単純に404ページを出すのでもいいのですが、
サイトの回遊がうまく誘導できなくなってしまうので、ユーザビリティが落ちてしまいます。

そこで ソフト404対応として ステータスのみ 404で返却して 検索結果がなかったことを表示するため、 コントローラーでstatusを変更してあげるのか良いかと思います。

self.status = :not_found if @items.blank?

@itemsは検索結果のオブジェクトが格納されています。 検索結果が0件の場合にstatus に :not_found (404)を設定しています。 selfはActionControllerのメソッドを呼び出したいためです。付け忘れないでください。 簡単ですね。

github.com