カテゴリー: テクノロジー

Raspberry Pi に Chromium OS をインストールしてみた

はじめに

Chromebook のことを調べているときに、ラズパイに Chromium OS ってインストールできるのかなとふと思いついて調べてみたらできることが判ったので試しにやってみました。

インストールイメージのダウンロード

FydeOSのRaspberry Pi用Chromium OSのページからインストールイメージをダウンロードします。この記事を書いたときのインストールイメージは chromiumos_image_r86r2-rpi4b.img.xz でした。

インストールイメージをSDカードに書き込む

Raspberry Pi Imagerを使いました。Raspberry Pi Imagerは対象のSDカードに以前別のOSをインストールしていたりしてパーティションが分けられているような場合でも適切に作り直してくれるので、圧倒的に楽になりましたね。

起動・初期設定

書き込みが終わったSDカードをRaspberry Piに挿して起動するとすんなりChromium OSが立ち上がりました。初期設定として、言語・キーボードを選択して無線LANの設定をしたらすぐに使えるようになりました。

Linuxを使えるようにする

せっかくなので Linux を使えるようにします。Chrome OSはLinuxカーネルを使ったディストリビューションの1つという説明をさせることがありますが、ここで言うLinuxはChrome OSの素の部分のことではなく、裏で起動される仮想マシン上のもののようです。

7.5GBのディスク領域が推奨されます。

64GBのSDカードを使っている場合は、余裕でLinux用の空き容量がありました。

インストールは簡単です。ユーザ名とディスクサイズを指定して数分待つとターミナルが起動します。仮想マシン上で動いているのは Debian なので、 apt でパッケージをインストールできます。

Emacs もこの通り動きます。

日本語入力

少し前までのバージョンだと日本語入力にはいろいろと不具合があったようですが、今回インストールしたr86r2ではあまり不都合を感じませんでした。

1つ問題だったのは、Linux ターミナルから開いたウィンドウ上では日本語入力できなかったことです。例えば、ターミナル上で開いた Emacs では日本語入力できるが、別ウィンドウとして開いた Emacs では日本語入力できない、といった具合です。

おわりに

インストール自体は簡単でした。

Chromium OS では Google Play から Android アプリをインストールすることはできないので、アプリケーションの追加は Chrome Store からか追加インストールした Linux システムからということになります。

Chromium OS の軽さは魅力ではありますが、実用ということであれば、やはり Raspberry Pi OS を選択することになりそうです。


簡単なプログラミング用語

こんにちは。開発担当のマットです。

私の初めての仕事は15歳の時でした。父の会社で、紙資料(パンフレットなど)を折りたたむ役でした。毎日8時間、紙を印刷して折りたたんで折りたたんで、フォルダーに綴じてをやっていました。つまらない仕事で時給はたったの 500 円でした。その後、日本に移住して保育園で働きながら日本語を必死に勉強して、翻訳や通訳の仕事もやりました。

そして、途中で私はプログラミングに憧れました。ソフトウェアの翻訳の仕事をしていたら自分でもソフトウェアを作りたいな!という気持ちになりました。ただ、その翻訳の仕事で多くの言葉に初めて出会いました。日本語でも英語でもないような言葉・・・英和辞典で調べても、どうしても理解できないプログラミング用語。

この記事でその用語をできるだけ簡潔でわかりやすく説明したいと思います。プログラミングは幅広い分野なので主にウェブアプリケーションを中心に説明しますが、ご興味があればぜひお読みください!

とても短い辞典ですが・・・

API

Application Programming Interface
アプリケーション通しの通話窓口ですね。

例えば、Youtube に動画をアップすると自動的にTwitterに投稿する、という設定があるとしましょう。それを成し遂げるにはYoutubeはTwitter のサイトを開いてテキストボックスにメッセージを入力し「ツイート」ボタンを押しているわけではありません。

実は Twitter が裏で API というウェブページ(みたいなもの)を用意しています。 Youtube は特定の情報を添えて(認証データ、送りたいツイートの内容)、そのページにアクセスするだけでTwitter がそれを処理してツイートを投稿してくれます。

つまり、Twitter の API は他のアプリケーション(YoutubeやFacebookや個人が作ったサイトやゲームでも) が Twitter に仕事をお願いできるところです。

ウェブサイトだけではなく、ソフトウェア・アプリケーションやハードウェアにも、APIが存在しています。

バックエンド・フロントエンド

ウェブ系のアプリケーションでよく聞く言葉ですが、バックエンドとは、ユーザーが見えない部分です。フロントエンドはユーザーが見える部分となります。

たとえば、ウェブページのレイアウトはユーザに見られる部分ので、そのサイトのフロントエンドです。逆に、ウェブページの内容が保存されているデータベースはバックエンドと言います。

クライアントサイド・サーバーサイド

フロントエンド・バックエンドには似ていますが、クライアントが「ユーザのブラウザ(Chrome、Safari等)」、サーバーが「サービス側のサーバー」と考えたら、わかりやすいです。

例えば、ウェブサイトに都道府県の一覧があるとします。都道府県の順番を並べてあげたいのですが、ウェブページを送る前に並び替えてあげるならその処理はサーバーで行うので「サーバーサイド」です。
もし、ウェブページを送る時に並び替えスクリプトもページの中に埋め込んで、並び替え処理はサーバーではなくユーザのブラウザでされる場合は「クライアントサイド」と言います。

Google の検索結果の順番はGoogle が決めるのでサーバーサイドとなります。
逆に、Wikipedia での一覧リストの順番は(だいたい)ボタンを押せば、ブラウザが並び替えをしてくれるのでクライアントサイドとなります。

キャッシュ

一度完了した処理の結果を一時的に覚えることです。
例えば、通販サイトの場合ユーザがページを見ると今セール中の商品一覧を出したいかもしれませんね。
でも、誰かがページをアクセスすると毎回毎回何がセール中であるかをわざわざデータベースに確認して処理をするより一度だけやってその結果をメモリーは一時間だけ覚えます。

こうすると、データベースへの負荷が軽くなりウェブサイトのスピードが速くなるのでユーザが快適に買い物ができます。

暗号化・復号化

とても賢い数学を使って、データをごちゃごちゃで読めない状態にして(暗号化)、また読める状態に戻す(復号化)ことです。
暗号化の数学処理で指定の数字を使いますので、その「鍵」がないと復号化できません。

ハッシュ

ハッシングとは暗号化のようです。
データをごちゃごちゃに読めない状態にできますが、暗号化と違ってそのごちゃごちゃのデータを復号化できません。

復号化できないので、あまり用途がないように思えますが、アプリケーションがパスワードを保存する時に使えます。
パスワードをデータベースに保存してしまうと万が一ハッキングされてしまった時に漏洩してしまうので、復号化できないのはそれを避けるためです。

逆に、パスワードをハッシュして、ごちゃごちゃの状態で保存します。
そして、ユーザさんがログインする時にそのログインで使ったパスワードをハッシュして照合する。
どちらのごちゃごちゃも一致していると同じパスワードを入力したと判断できます。

MD5 と SHA1 はハッシュ・アルゴリズムの種類です

まとめ

他にもたくさんありますが、用語をちょっとでも紹介できたら嬉しいと思います。ここまで読まれているということはプログラミングに少しでも興味があると思いますので、私が以前に書いた「プログラミング言語とは」の記事もぜひ併せてお読みください!


Solrのリファレンスガイドをビルドする

Solr のリファレンスガイドは、たとえばバージョン8.7のものは
https://lucene.apache.org/solr/8_7_0/index.html
というURLで閲覧できますが、リリース直後などにおいては最新のバージョンに対応したリファレンスガイドが公開されていないこともあります。
そういった場合を踏まえて、Solr のソースからリファレンスガイドを自前でビルドしてみました。

リファレンスガイドのソースは Solr のソースコードの solr/solr-ref-guide 以下にあります。ビルドに必要な手順が Readme.adoc に書かれています。

リファレンスガイドのソースは Asciidoc 形式で記述されているので、Asciidoc を扱える ruby のツール群をインストールします。

gem install jekyll --force --version 3.5.0
gem install jekyll-asciidoc
gem install slim
gem install tilt
gem install concurrent-ruby

ビルドには ivy が必要なので、まだ使ったことが無ければ準備しておきます。

ant ivy-bootstrap

ビルドします。

cd solr/solr-ref-guide
ant default

生成されたHTMLは solr/build/solr-ref-guide/html-site 以下にあります。

各所に DRAFT の文字列が見られますが、オフィシャルのリファレンスガイドとほぼ同じものをローカルに閲覧できるようになります。


Solrの記事リスト(〜2020年12月)

はじめに

ふと気付けばこのブログの Solr の記事が40本を超えていました。Solr タグで検索していただくこともできますが、もう少し見やすくなるようにトピックで分類して記事タイトルとリンクの形でリスト化してみました。

Prometheus連携

パッケージ管理

JSON Request API

Docker

日付表現

SolrCloudのリーダー選出

SolrCloud

インデックス作成

distinct

その他


SolrのCirtcuit Breakerは具体的に何を見ているのか

はじめに

前回紹介した Circuit Breaker には MemoryCircuitBreaker と CPUCircuitBreaker の2種類があります。それぞれメモリとCPUの使い過ぎに対応しているのだなと何となくは想像が付きますが、具体的にはシステムの何を参照しているのかを調べてみました。

MemoryCircuitBreaker

リファレンスによると、JVMのヒープ使用率が設定値を超えると503を返すと書かれています。MemoryCircuitBreaker の実装をみると、取得しているのは ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getUsed() でした。これは現在のヒープ使用量をByteで返すものです。

一方、設定ではヒープの使用率を記述するので、比較するには使用率か使用量かのどちらかに変換して合わせる必要があります。
ソースを確認すると、MemoryCircuitBreaker のコンストラクタで memThreashold を読み込んだときに、ヒープの最大値 * memThreshold / 100 で閾値となるメモリ使用量を計算しておき、MemoryMXBean から取得したメモリ使用量がその値を超えたらリクエストを拒否するという実装になっていました。

CPUCircuitBreaker

CPUCircuitBreaker で監視しているのは ManagementFactory.getOperatingSystemMXBean().getSystemLoadAverate() なので OS から取得するロードアベレージです。設定するのはCPU使用率なので、こちらも何らかの変換をしているのかと思いきや、何とソースコードではCPU使用率の閾値(%)とロードアベレージ(0以上の数値、CPUの数にもよるが通常はせいぜい10未満)を直接比較していました。

これだと使用率のつもりで75などと設定しても全く引っ掛からないのはずで不思議に思って調べてみたところ、どうやらバグのようで JIRA に Issue が作られていました。

CPU circuit breaker needs to use CPU utilization, not Unix load average

タイトルそのまんまですね。
ManagementFactory.getOperatingSystemMXBean().getSystemLoadAverate() の代わりに ManagementFactory.getOperatingSystemMXBean().getSystemCPULoad() (0.0-0.1の間のCPU使用率)を使うことが提案されており、近いうちに修正されることと思います。