brand new note

ジャズ屋が技術の話をするところ

Inside Linux Softwareを読んだ

前回linuxのしくみを読んでから次の本に行きたくなったので、ブックオフでこちらを買ってきました。

Inside Linux Software オープンソースソフトウェアのからくりとしくみ

Inside Linux Software オープンソースソフトウェアのからくりとしくみ

ほんとは購入するとき横にlinuxデバイスドライバとかあってそっちを買えたらよかったなーと思っていたのですが、あまりにも理解ができないのでちょっと他の本を間に挟んで様子見することにしました。とはいえこちらも難しいので進捗は随時追記します。

読んでみて

本の内容は、一言で言うとlinuxを用いたソフトウェア開発の中身の説明です。前回読んだ「linuxのしくみ」は、メモリやプロセスやCPUの挙動、いわばコンピュータの基礎知識をlinuxを用いて確認するといった内容でした。本書はOSS等の開発をする際に目にする、コンパイラやマクロ、パッケージの挙動がどうなっているかを詳解した内容となっており、よりプログラミングの知識を必要とする実践的な内容であるように思います。今までの読書を足がかりにして理解できる部分もちらほらあるのですが、読んだことのない、あるいは触ったことのない部分が個人的にはかなり多いので勉強になります。

また本書は、「開発者がlinuxを用いたソフトウェア開発に実際に必要なノウハウを詰めた一冊」ともいえるでしょうか。分かりやすく混み行ったっところを言えば、manページの書き方なんかも紹介されています。読んでいて面白いのですがネットワーク寄りの自分が見た感覚としては、完全に基礎から一歩抜け出した内容だなーという印象を受けました。

3/26

プログラミングの基礎がちょっと分かったかなと思った。

冒頭では開発に必要なCを用いたプログラミングの基礎が説明されています。といっても「よくあるCの入門書の次の段階」を説明しているので、何も分からないところから読み進めるのはちょっと大変だと思います。具体的にはマクロや関数あたりの細かい説明、ヘッダファイルの存在意義等。個人的には、「これはおまじないだから取り敢えず覚えておきましょう」の「おまじない」がやっとちゃんと見えてきたなという感じがありました。

5/6

まだがっつりこの本の内容は理解できない。

というのも他の本を先に読んだほうがいいかなと思ったんですね。今は本業サーバですし、それすらあまり進捗出てないし。。。もっと空き時間を見つけてソースの読み書きをしないと、この本の内容までたどり着けないなーと。でもUNIXで開発をするための一つのゴールとしてこの本を見つけられた事は自分なりの収穫かなと思いますね。もうちょっと頑張ります。

その他

前回読んだ本の記事はこちら。

試して理解-Linuxのしくみを読んだ - brand new note

Microsoft OneDriveを使ってみる

ノートPCを新調し、研究やら外出先での作業やらがもっと快適にならないか考えていたところ、クラウドをちゃんと活用してみる考えに至りました。めも。

Microsoft OneDriveとは

f:id:frazz:20180323145558p:plain

win10を使っているとこういうのが左側に出てきますよね、これがMicrosoftが個人向けに提供するクラウドサービスのOneDriveです。今まで使いどころが全く分からなかったんですが、家のPC、外出先で作業するノートPC、研究室のPC等、一人で使い勝手に合わせて複数台使っている自分の場合、重宝します。

microsoftアカウントがあればデータをクラウド上に投げて共有できるので、あのPCに入ってた作業ファイルが家で使えない!外出先で使えない!といった悩みがなくなります。

ブログ書くのに便利

ブログ書くと作業写真とかスクリーンショットとか上げたくなるのですがデータ管理が大変です。

dropboxとかicloudとかgoogleドライブも使ったことはあるんですが、個人的には決まり手がありませんでした。

OneDriveの場合、PrtScキーでスクショを撮ったらそのままOneDrive上にアップロードしてくれるんですね。しかもスマホと同期すればそのファイルがスマホからでも見える、スマホで撮ったスクショもPC側ですぐ使える、この連動性が気に入りました。

f:id:frazz:20180323145444p:plain f:id:frazz:20180323145059p:plain

他のクラウドサービスでも似たようなことはできると思うんですが、一式Microsoftさんのツールを使うのが結局効率がいいんですよね。これはmac使いがicloud使うのと大差ないと思いますけど。

そんな感じ

研究室の作業環境も非常に便利なんですが、学びをもとに自分で作業環境を作れないとこの先不便だなーと思うこの頃です。あとはポケットwifiがあれば外出先でも無双できるのですが。。。

ジャンクのThinkPad X250を魔改造する

大学で使っていたノートPCのストレージとバッテリーが寿命を迎え、電源を繋いでいないと起動しない実質サーバ状態になっております。今後の生活が脅かされそうだったのでwindows用ノートPCを買い換えました。

というわけで今回はジャンクのThinkPad X250と周辺パーツを購入して、あれこれ組み直した記事です。別にそこまで魔改造じゃないですが、参考になれば幸いです。

ThinkPad X250

f:id:frazz:20180323140409j:plain

本体はヤフオクで約3万円、core i5-5300U 2.3GHz, mem8GB, HDD500GB, 無線LAN有。何気に自分で組むのは初めてですが、ThinkPadは打ち心地いいですし他のPCより組み換えが効きますし、なかなかいいですね。今のところ

f:id:frazz:20180323140532j:plain win7だし画質もあれだし、

f:id:frazz:20180323140641j:plain これじゃCも書けません(物理的に)

OS入れ替え

win7が入っていたのをwin10にアップグレードします。0からインストールする場合と違ってアップグレードなら無償でできますから、microsoftのダウンロードページから落とします。linuxと違って待てば勝手にアップグレードしてくれるので楽ですね、流石に時間はかかりますが。またoffice一式は(有難いことに)大学で揃えられる環境があるので後から入れました。

キーボード入れ替え

ただ組み替えるだけでも面白くないので英字キーボードデビューします。自分が購入した時はamazonで5000円強でした。一応リンクは張りますが、この業者から購入したかどうかは定かではありません。替えのキーボードに関しては流通情報が多い割に業者によって価格がまちまちなので、意思決定にある程度の勇気が必要です。


実はX250の場合ほぼ全部分解しないとキーボードまで辿り着けません。ハードウェア保守マニュアルを見つつキーボードは3時間弱かけて組み直しました。これが一番大変でした。

マニュアルはこちら→ https://download.lenovo.com/jp/mobiles_pdf/sp40f30022_ja.pdf

当たり前ですが分解のしかたは全てここに書かれているので、どのパーツを組み替える際にも最初は参考にしておいたほうがよいでしょう。

なんとか復活してくれました。 ただこれだけではOS側の認識が日本語キーボードのモードのままですので、Windows10インストール時に使用キーボードをUSに変更します。後からでもできるので当時は別の方法で変えました。参考リンクは記事の一番下にまとめています。

ディスプレイ入れ替え

X250は通常HD画質のディスプレイが付いていますが、ちょっと画質が足りないのでFHDパネルに付け替えます。自分はヤフオクで購入しましたがamazonでも購入できます。どちらで買ってもおそらく1万円強ですので機種だけ見間違えなければ大丈夫だと思います。

マニュアルがないと最初はわからないので読みながらの作業ですが、こちらはキーボードの取り換えに比べるとさほど難しくはありません。おそらく一時間もかかってないと思います。

f:id:frazz:20180405173606j:plain

f:id:frazz:20180405173751j:plainf:id:frazz:20180405174038j:plain

解像度の限界が1366x768 -> 1920x1080に引き上げられました。こっちに慣れるともうHDには戻れません。

ストレージ入れ替え

半年ほどフォーマットしたHDDで凌いでいたんですが思い切ってSSD 1TBにしました。

f:id:frazz:20181121110958j:plain

SanDisk 内蔵 2.5インチ SSD / SSD Plus 1TB / SATA3.0 / 3年保証 / SDSSDA-1T00-G26

SanDisk 内蔵 2.5インチ SSD / SSD Plus 1TB / SATA3.0 / 3年保証 / SDSSDA-1T00-G26

sandiskSSDで購入時は約2万円 (sunじゃなくてsanなんですね)。amazonで買いましたが、2019年4月現在では同機種が14000円程度まで落ちているようですから、時の流れを感じます。ただ、最近の格安SSDは大容量データのコピー(例えば4GB以上)になると、キャッシュが溢れてr/w性能が格段に落ちるタイプのものもありますので(調べたらこれもそうらしい)、そのあたりに詳しい方は一番安いSSDに手を出さなかったりもするそうです。

ただ、HDDから初めて換装した当時の感想は、さすがだな、めっちゃはやいな…という感じなので、そこまで神経質になる必要はないと思います。現在ではこのSSDも半年使ってますが、購入時よりほんのちょっと遅くなっただけで、絶対値で言えば全然遅くはないです。

なお、データ移行についてはUSBメモリに大事なデータだけちまちま入れてあほみたいに手作業で移行してました。ストレージが2枚以上入るタワー型デスクトップならソフトがあるんだと思いますが…

※追記

がっちゃんこするだけでディスクをクローン出来るハードウェアがあるんですね。5000円くらいで買えるそうです。クローンソフトより手間がなく、SSDなら10分くらいでクローン出来るということなので、ちょっとほしいです。

メモリに関して

X230(2013年モデル)の場合メモリは2枚差しが可能です。しかし8GBまでしかマザーボードが対応していないので限界は16GBだそうです。

X250、もといX240以降のモデルについてはメモリが一枚しか差せない作りになっていますが、マザーボードが16GB1枚のメモリに対応しているので性能面では見劣りはなさそうです。ただ、現状でもDDR3の16GBは2万円くらいするので、購入は踏みとどまりました。

Ali express (中国、アリババ社の国外発送向けEC)では、中国製の16GBメモリが1万円で取引されていましたが、ページを閲覧して数十分で割引が取り消され、25000円と表示されてしまいました。あれはなんだったんでしょう、どっちにしろ買わないけど…。

最後に

f:id:frazz:20181126013605p:plain

なんか7万注ぎ込んでしまいましたが後悔はないです。ひとまず分解欲が出たら注意すべきこととしては、必ず写真を撮りながら作業すること。一瞬でどのネジがどこのものか判別できなくなります。それと、分解する前にBIOSで内部バッテリーを必ず切っておくこと。これを怠って壊れてしまっても申し訳ありませんが保証ができません…。この記事以外にもたくさん自作PCに関する記事や動画はありますから、興味のある方は他の方のご意見も調べてみるとより良いものになるかもしれません。ではでは。

参考

kohei.kaneta.net

chromesoku.com

qiita.com

grum.hatenablog.com

bbs.kakaku.com

後日談

ジャンクのX250、ついに4K出力に成功。火を噴きそうです。

4Kモニタを買いました - brand new note

コンパイルとビルドの違い

そういえばずーっと分からないままだったのでメモ。

コンパイル

Cを始めとする高水準言語は、コードを書いて実行する時コンピュータが理解しやすい機械語(アセンブリ言語)にまず翻訳されます。この翻訳をコンパイルといい、翻訳ソフトウェアのことをコンパイラと呼びます。機械語に変換された後はアセンブラによって0と1のビット列に変換されます。ここではじめてCPUが処理できる形になります。

これは授業やちょっとしたプログラミングの練習に毎回出てくるので理解はしていました。ただ授業中にマニュアルに沿ってvisual studioをいじっていても、コンパイルとビルドの違いに関しては全然理解していませんでした。

で、この理解不足は「一つのアプリケーションが一つのソースファイルで動いている状態」という、いわばプログラミング学習の初期段階から先に行けなかったことが原因だったのだ、と最近判明しました。

ビルド

ビルドに関してはもう少し実際のアプリケーションの構成を目で見ないとイメージしにくいかもしれません。少し前まで、他人のgithubとかを見て「なんでひとつのアプリケーションは複数のファイルで構成されているんだろう、readmeとかよくあるし、どうやって連動して動作しているんだろう」と思っていました。自分はそこまで書けないので。

こんな感じで、OSS等のパッケージは自分の作ったソースファイルだけで構成されているわけではありません。多くの場合、ソフトの使い方を書いたドキュメントや、動作に必要なデータファイルも含まれます。

このようなパッケージを、コンパイルも含め実際に使える、利用可能な状態に持っていくことの総称をビルドというようです。
はー納得。色んな本読むとスッキリしますね。


追記

コンパイルの詳細について続報を出しました。

僕はどれだけコンパイルのことを知っているのだろう - brand new note

試して理解-Linuxのしくみを読んだ

twitterで賑わいを見せている武内覚氏の新書「試して理解 Linuxのしくみ」を購入しました。 予想外でしたが、読んでいく中で本に書いてないエンジニアの一歩まで学べたので、ここで少しまとめておこうと思います。書評から少し外れますが、個人的な1ヶ月の進捗報告ということで境遇が近い人の参考になればと思います。

[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識

[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識

読む前

研究室で1年ほどLinux(主にCentOS6.8)を触っていました。授業でもLinuxの使い方は学んでいましたが、仮想で触ったことがある程度。これといってこの1年以外に好きでLinuxを触っていたことはありませんでした。その程度の実力といえばその程度ですが、基本的なコマンドやディレクトリ構成の理解、ちょっとしたログ解析やrm -rf /*したシステムのバックアップ経験有、シェルスクリプトを少し、vimを少し、くらいの実力と思っていただければいいと思います。また、プログラミングスキルは皆無です。

併読していたもの

この本と同じ時期に読んでいたのが「Linuxカーネル2.6解読室」。twitterの強い人たちがこぞってカーネルはいいぞ~って言ってるのを見て憧れ読み始めました。オライリーの「詳解Linuxカーネル」も手元に置くには置いていましたが、心がカーネルっていいな状態になるまでのお守りに過ぎなかった気がします。

Linuxカーネル2.6解読室

Linuxカーネル2.6解読室

詳解 Linuxカーネル 第3版

詳解 Linuxカーネル 第3版

2.6解読室のおかげでプロセススケジューリングの話はわりとすんなり入ってきました。Linuxカーネルの中で最も学びやすいとも言われている部分?とのうわさを聞いているので、やはり大事かつとっつきやすいといったところなのでしょう…。

また、なんでもそうですが同系列の技術書は複数冊自分なりに良さそうなものを見つけて併読するのがいいなーと感じました。一冊だとそういうもんなの?で挫折しますので、いろんな本を読んで「あ!これは読んだことあるから知ってる!」「これは知らなかった!」という気づきを大事にして楽しむと良さそうです。人の事は言えませんが、駆け出しの部分での挫折は難しくないので、その先を楽しめることが大事だと思います。

カーネルに関しては実際どちらも深い理解を得るにはまだまだ自分に足りないものが山程あるので、この2冊はある種のゴールというか、長期的に読んで理解できるようになれたらなーと思っています。まだ0.01%しか理解してませんし、ここにある知らない知識を補強するように他の本を読み進めていくことになりそうです。

2/26 家に届く

脱線しました、本題に戻ります。この日Amazonで購入した本書が家に届きます、溢れ出る流行に乗ってやったぞ感。読みだしてすぐ「これはすごい」と直感しました。図が分かりやすく、手を実際に動かして納得させてもらえるからです。入門者にとって難しいことをできるだけ親切に教えてくれ、またこれからもっと深い所に連れて行ってくれる、そんな感じを受けました。好きでlinuxいじるってどんなもんなんだろう…と思っていた段階をこえて、実際に手を動かすのが一歩好きになれたというか。

年末年始にノートPCにArchLinuxをインストールして悶絶していたのですが、結局その上で色々動かすのはしんどかったのでCentOS7.4に変えました。7系ではコマンド体系が結構変わっていると聞いていたので、さすがに6系だけ触ってるのはそろそろまずいかな、とも思っており。 また、CやPythonも本書に出てくるので実行環境をPCに入れました。ぼくはPython3.5をやります(まだやってない)

ここで学んだ知識は以下です。

  • システムはソフト寄りなものとハード寄りなものがあり階層的に分かれている
  • 実行プログラムからシステムコールを記録し確認するにはstraceコマンド
  • sarコマンドでユーザモードかカーネルモードどちらで実行されているか確認可能
  • ライブラリはシステムが動くために必要な便利なパーツで、コマンド実行時にも使われており後ろで随時呼び出されている(glibc等)

3/7 プログラムを書き始める

少し本に書いてあるプログラムが長くなってきたので、あんまりできないgithubをちょこちょこ使い始めました。また写経もやってみました。ただ写経するだけでも能がないので、これまではvimに矢印キーを使っていたのをこの機会に矯正することにしました。

また、この本だけ写経しても能がないので昔買ったC言語基礎の本を引っ張りだしてプログラミングをリベンジすることにしました。ちょうどご縁があってそろそろインフラだけやってるのもあれかな...という時期に差し掛かっているのもありますが。また、一人でやってるとくだらない質問ができないので、ここでteratailを初めて使い始めました。皆さん優しくて涙が出そうです。ありがとう。

本は4章、プロセススケジューリングまで読みました。このあたりまでに実感した知識は以下です。

  • 1つのCPUを使えるのは1度に1プロセスのみ

  • リソース確認時、userは論理CPU使用中、sysはシステムコール呼び出し中を表す

  • niceでプロセスがCPUを占有する時間の優先度を変更

この「実感した」というのが本書の大事なところだと読みながら毎回思います。

3/12 読了...?

メモリ管理の5章を一日かけて読んでいたのですが、もっと効率的に頭に入る方法はないのか...と考えていたところある勉強法の記事を発見しました。記事は、本は7回は読まないと頭に入らないという内容のものでした。なるほど頭のいい人は反復して何度も頭に刷り込むのかなあと感じました。

「私だったら300ページの本は最初の一回は30分位で読みますねー」

...嘘を言うのは良くないだろと思いつつ残りの百数十ページを一気に目で追ってみることにしました。

とりあえず「試してみる」部分はすっ飛ばしましたが、1周目は読了した、ということになりました。知っている言葉がでてくるぶんだけ読みながら頭には所々ひっかかってくれたかなーと思いますが、後半はHDDとSSDで読み書き速度の比較をしていたこと、様々なファイルシステムの違いが説明されていたことをざっくり理解しただけとなりました。しかし今までこれほどのスピードで読書をして、読みきったことはありませんでした。アタマガイタイ。

これでほんとに頭に入るのか疑念を抱きましたが、2周目以降は他の用事もやりつつ読んでいくことにしました。

3/20 一段落

さすがにまだ7周できるほど要領良く読書はできませんが、後半部分をちらほら手を動かしながらもう一度見返しました。これまではやったことを忘れないようになんでも非常に遅いペースで1周読んで満足していたんですが、だんだん目を動かすスピードが速くなってきたように感じます。

どちらが吸収率が高いのかは分かりませんが、反復して読み込んだ時に新たな気づきがあるのも確かです。

また先日自分の研究に関する打ち合わせがあったのですが、より技術的に突っ込んだ内容が頭に入ってくるようになったかなーという実感はあったので、読んで良かったなと思います。今後は実験系の記事を増やすとかしてやっていきたいですね。。。

おわりに

とりあえず春休みを使って読んでみましたが、linuxの中身をもっと身近に感じたい方にはすごくおすすめできると思います。皆様もぜひ。

[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識

[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識

CentOS7でfirefoxをアップデートする

普段使いのノートPCをLinuxにしようとしている最中です。なんか便利なツールないかなーと思って探していたらfirefoxのバージョンが古いって怒られたので、今回はfirefoxのアップデートをします。去年の冬前に応答速度が二倍になってchromeにも負けないブラウザになったんじゃないかと話題になってましたが、デフォルトのCentOSではそのバージョン(Quantumというらしい)は入っていないようなのでそれを入れます。

f:id:frazz:20180318143841p:plain
CentOSのバージョンは7.4です

最新バージョンの確認

Directory Listing: /pub/firefox/releases/

こちらから確認できます。Quantiumが出た当時はバージョン57だったようですが、59が先週出たようです。こっちを入れてみましょう。 最初のwgetのところは公式サイトからguiでダウンロードでも構いません。結果的に自分はそちらでうまくいったので。。。

wget https://download-installer.cdn.mozilla.net/pub/firefox/releases/59.0.1/linux-x86_64/ja/firefox-59.0.1.tar.bz2
tar jxvf firefox-59.0.1.tar.bz2
yes | cp -R firefox/* /opt/firefox/

上記をsudoで実行します。/optはインストールしたものを適当に入れておく所なんですね(今更感)、最新版を/opt/firefox配下に入れて確認します。

f:id:frazz:20180318151454p:plain

あるね

/opt/firefox/firefox

これで起動すると思ったのですが!バージョンが52.7のまま!


なぜなのか調べたところ、firefoxを起動するrun-mozilla.shというスクリプトがなぜか入っておらず、/usr/lib64/firefoxにあるもとのrun-mozilla.shが昔のバージョンのfirefoxを参照しているのが原因でした。CentOSyum updateすると手に入るのは52.7で、これも現在の最新版ではあるんですがQuantumとは別物です。yumじゃQuantumは入らないのか...


なので前のバージョンのコピーを取ってから、/opt配下に作った最新版を/usr/lib64/firefoxにコピー、run-mozilla.shだけを前バージョンから持って来たところうまくいきました。ごにょごにょしてたんで実際打ったわけではないですが、やるならこんな感じ

cp /usr/lib64/firefox /usr/lib64/firefox.old
cp /opt/firefox/* /usr/lib64/firefox
mv /usr/lib64/firefox.old/run-mozilla.sh /usr/lib64/firefox

これでもとどおりfirefoxコマンド一発で動きますね。

f:id:frazz:20180318164359p:plain

はやい!はやいぞ!!

参考

ufuso.jp

unix.hateblo.jp

でも起動するたびにアドオンが動いたり動かなかったりするのなんだろうな。。。

C言語のめも:03/12

個人的メモ

  • static : プログラムを通して変わらない変数を定義するときつける

  • pid_t : プロセスidを取得する型。

  • getpid() : 現プロセスIDを取得する関数

  • getppid() : 親プロセスIDを取得する関数

  • snprintf() : printfとの違い?配列が絡むらしいが不明

  • fflush() : バッファをフラッシュする。データを吐き出すことを表す

  • system() : コマンドプロセッサにコマンド(string)を渡す