brand new note

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

/dev/zeroってなんだ

/devはデバイスのdev。データの入出力装置に関する情報を管理しているディレクトリです。/dev/xxxという形でハードディスクやUSBメモリ等、様々なデバイスの情報を格納しています。

/dev/zeroとは

0x00を常に出力し続ける特殊なデバイスのことをさします。とりあえずダミーファイルを作りたい時や、ディスクを0x00で埋め尽くしてデータを消去したい時に用いることができます。一歩間違えると危険そうですね。。。なんか右下にありますね。

f:id:frazz:20180402145316p:plain

/dev/nullとの違い

0x00でデータを埋め尽くしてファイルを作るとファイルサイズがちゃんと0の分だけ存在してくれます。対して、null文字で埋め尽してファイルを作るとファイルサイズは0バイトになります。といってもよく分かんないのでやってみましょう。

f:id:frazz:20180402150555p:plain

検証にddコマンドを使います。bsはブロックサイズ、ifはinput file, ofはoutput fileの略だと思います(たぶん)。/dev/zeroを入力元としてtestファイルを錬成すると、ちゃんとファイルサイズが1000バイトになっていますね。moreで見てみると1000バイト分の空白があるのも確認できます。

次に/dev/nullから同じようにファイルを練成します。

f:id:frazz:20180402151210p:plain

1000バイトと指定してもファイルサイズは0バイトのtestファイルができてしまいました。これが「何もない」と「0がある」の違いです。データっておもしろい。今後何かに使えればいいのですが。。。

参考

qiita.com

ここの方が詳しく載ってますので興味があれば。

個人slackをはじめたらだいぶ良い感じって話

slack.com

slackというツールをご存知でしょうか?コミュニケーションツールの一つなのですがLINEとは雰囲気が全然違っていて、トークルーム(チャンネル)の管理やチャットがスマホだけでなくPCでも柔軟に出来るのが特徴です。自分も研究室に入ってからはLINEと同じくらい利用していて、社会人の方も使っている方は多いのではないかと思います。

メインはコミュニケーションツールとして使うslackですが、ちょっと教わって「個人でやるslack」がとても便利だということを知りました。メモ。

普通に高性能なメモ帳として使える

qiita.com

大体この記事を読む場合が多いと思うので挙げておきます。まずコミュニケーションの場の単位としてもっとも大きいのがワークスペースです。ワークスペースを作ることは誰でもできるので、まず自分用のワークスペースを作成します。

で、誰も招待せずにチャンネルには「ここはこのメモ!」と分かるように名前を付け、それらを一人で全部使うのです。

こうすることにより日々のタスクやらメモやら独り言を掲示板形式で書きためておく事が出来ます。

アプリ連携が非常に強い

で、アプリケーションの連携が非常に高機能なところもslackの強みです。twitterの情報を垂れ流すこともgoogleカレンダーやtrelloのタスク管理と連携*1することもできますし、githubともインスタともOneDriveとも連携できます。なんでもできます。

スマホにアプリが沢山入っている方も連携機能を使いこなせばslack一つ見るだけで様々な用事を済ませることができるかもしれません。

f:id:frazz:20180328231326p:plain

ちなみに自分は連携機能についてはまだまだ使いこなせてないので、シェル芸botを垂れ流すくらいしか使用用途を思いつくことができません*2。既にだいぶ楽しいですけど。こんな感じで、チャンネル毎に色々メモを残しておくことができますので、最近はノート取るのはネットが使えない外出先だけになってきました。PCが使えて家で一人で作業ができる時のメモはほとんどこっちにシフトしましたね。

おわりに

slackを知ってる方は結構この使い方をしている方が多いので今更感があるかもしれません。しかし知らない方や使って日が浅い方には全く馴染みがないと思います。コミュニケーションツールとしても、予定管理やメモのツールとしても非常に有用なのでおすすめです。

tmuxのはじめの一歩

tmux歴1年くらいになったのでちょっとまとめ。ずいぶん前から書こうとしていたのですが放置していました。

tmuxとは

1つのターミナルで複数のサーバにログインし、同時にセッションを保ちながら作業ができます。これがないと複数のサーバに一度にアクセスして作業したいときに1つずつターミナルを立ち上げなきゃいけないので、あるととても便利。一度このサーバとこのサーバに入って作業がしたい!ってなったら、未使用中でもその作業環境を保存できます。

参考サイト

自分の記事より100万倍参考になるサイトを先に紹介しておきます。

概念はここ読めばいいと思います。

基本的にはこのへん読めば使えます。

強い人はこういうことしてるらしいです。

とりあえず、基本的な説明も以下に示します。


セッション、ウィンドウ、ペイン

まずtmuxには3つのキーワードがありますので頭にいれましょう。

  • セッション:tmux全体で管理しているサーバへのセッション情報(接続情報)

  • ウィンドウ:接続した先のウィンドウ。

  • ペイン:ウィンドウは分割することができる。分割したものの一部をペインという。

次に実際にtmux実行時の画面を使って説明します。みんなもやってみよう!!

ペインを割る

# tmux

f:id:frazz:20180328170349p:plain

起動しました、下が緑色になってウィンドウの名前を表示しています。このようにただコマンドを打つだけでも起動しますがこれでは使う意味がありませんので、ペインを分割してみます。Ctrl+b→%と入力してみます。

f:id:frazz:20180328171149p:plain

ウィンドウが横に割れました。次にCtrl+b→” と入力してみます。

f:id:frazz:20180328172401p:plain

そこからウィンドウが縦に割れました。このように一つの画面で複数のターミナルを開くことができます。あと、隣のペインに移動する時はCtrl+b→矢印キーです。ペインを消すときはCtrl+b→xです。まずはこれだけ覚えると作業してる感に満ち溢れてテンションが上がると思います(?)。

ウィンドウを増やす

しかしペインを割るだけではどんどんひとつの作業スペースが狭まります。新しいウィンドウを作るにはCtrl+b→cです。

f:id:frazz:20180328173205p:plain

新しいウィンドウが作られ、下にウィンドウ0とウィンドウ1が見えますね。このように作業スペースが確保できない場合はウィンドウを増やします。ウィンドウ間を移動する時はCtrl+b→n もしくは Ctrl+b→p です。(nextとprevだと思います)

Ctrl+b ってなに

散々出てきているCtrl+bはプレフィクスキーと呼ばれます。要するにtmuxの処理を行うために必要な最初のコールのようなものです。使いこなせるようになったら独自のキーバインドを作ることも可能ですので、段々自分の作業がしやすいようにカスタマイズできると楽しいと思います。

セッション管理

ここまでできたら普通にターミナルを開くよりも、確実に一度に様々なアクセスができるようになっていると思いますが、こことここにアクセスした記録をそのまま残して次回以降は一瞬で立ち上げたいという欲が湧いてきます。

ここで使えるのがセッション管理の概念です。

本記事を見ながら手を動かしている方はCtrl+b→dしてみてください。

f:id:frazz:20180328174949p:plain

tmuxが消えて元の画面に戻りました。これをセッションを抜ける、デタッチするといいます。今作業していた直前のセッションにもう一度入る、アタッチするには以下です。

# tmux attach

過去に名前を付けて保存したセッションに再度入るには以下です。

# tmux attach -t [session name]

はい、セッション名の話もしないといけませんね。直前の環境だけでなく、この作業環境とこの作業環境を分かりやすく残しておきたい。。。という場合は起動時に予めセッション名をつけます。

f:id:frazz:20180328180257p:plain

ここからは上図の説明になりますが、tmux new -s hogehogeというセッション(作業環境)を作成しています。tmux ls することで現在作られているセッションを見ることができます。いらないセッションはtmux kill-session -t [セッション名]で消すことができます。

注意事項

ここまで覚えたらあとはもっと便利に使えるように調べていくのがいいと思います。ただ、セッションの概念を理解せず普通にexitとかしてtmuxを閉じてしまうと、一度作った作業環境が保存されず作り直しになったりすることになります。

また、exitもせずCtrl+b→xでペインだけ消してそのまま全部作業環境を消してしまうと、サーバに接続している情報が残ったまま作業環境が消えてしまうことになります。こうなるとログアウト作業が別に発生してしまいます。(自分はこれで2週間サーバに知らずにログインしっぱなしになって注意されたことがあります、勉強にはなりましたが。。。)

というわけで、tmux初めての皆さんもこちらに気を付けて作業していただければと思います。では。

C言語のめも:03/26

パケットを投げるプログラムを拾ってきたので読んでいます。。。

ソケットプログラミングのヘッダファイル

  • sys/socket.h
  • netinet/in.h
  • arpa/inet.h

L3L4ヘッダ定義用のヘッダファイル


hexdump([バッファ用メモリアドレス][index])

main関数の中で呼び出されたらindexのぶんだけバッファのアドレスを出力? デバッグ用?

  • uint8_t

  • uint16_t

  • uint32_t

型。ヘッダ情報を構造体で作る、IPとプロトコルとレングス?


main関数

argvはプログラムに渡す引数の配列?

IPはポインタで??

char *data:IPヘッダの最終番地を入れる、ペイロードの開始番地に等しい? 細かいヘッダの中身はmain内で定義されている、代わりに大まかな作りは関数にまとめている

TCPヘッダ、synフラグだけ1になってる

ウィンドウサイズ:htons(155)とは。。

送るbyte数はsendto()の中で定義されたものが代入される

送れない場合はbyte数が負の数だったときと仮定してperrorを返す

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