申し訳程度の人間性,そして社会性

雑多なメモ,お気持ち

セキュリティキャンプ2020全国大会に参加できることになった

応募を決めた理由

セキュキャンは一度しか参加できないので,割と慎重になっていたが,今回のキャンプに参加しても来年以降も参加できるとの事なので,参加しないのはもったいないと思った.

選択

Z-V Rustで作るLinux向けアンチウィルスソフトウェア 選択コースも面白そうなコースが多くて迷ったが,Rustに惹かれた. Rust,AVの2つの単語で心が踊らない男はいない. 最近は基本的になんでもRustで書くタイプの人間をしているが,本を読むことも無くただひたすらに書いて覚えてきたので,一度人に教わりながらRustを書いてみたかった.

課題

課題を引用する


Z5. 「Rustで作るLinux向けアンチウィルスソフトウェア」

課題1,2は必須です。課題3は設計ドキュメントだけ、実装が途中 でもOKです。 なお、募集期限のうちは、ソースコードを公開リポジトリに置かないようにしてください。

課題1

課題2

  • Rustとyaraのbindingsを使い、UPXを検知するスキャナプログラムを作成してください。
    • 引数でスキャン対象のファイルとyaraのルールファイルを指定して実行するようなものを作成してください。
    • 加えて、ディレクトリをスキャンできるようにし、/usrをスキャンして計算時間を計測してください。

課題3

  • 課題2のスキャナを拡張し、アンチウィルスサービス(デーモン化)をRustで実装してください。
    • 並列スキャンができるように設計してください。
    • アンチウィルスサービスのIFは自由です。
    • スキャン処理だけでリソースが枯渇しないような処理の制限を設定できるようにしてください。

課題2

先に取り組んだのは課題2だった. yara crateを使えば実装難易度はgrepくらいのものなので,割とすぐ終わった.

課題1

私には課題を期限ギリギリまでやらない悪い癖がある.

楽しい実装の課題だけやって,「おもしろそうだし他のトラックの課題もやってみよう」などと軽い考えで生活した結果,締切前日の夜中に夜行バスの中でソースコードを読むことになった.

割と読みやすい綺麗なソースコードだったのと,Linuxカーネルを読む経験があったので,解読自体は割と難しいものではなかった.

一方で,ソースコードを読んでプログラムの実装はなんとなく理解しても,その機能や必要性を言語化するのは少し難しかった(結果,かなり粗末な日本語を生成してしまった).

clamukoについては,カーネルモジュールのソースコードを読もうと思って気合を入れて探してみたら,蓋を開けたら中身はほぼ別のモジュール(dazuko)を使ってるだけだった(これはもしかしたら見るバージョンが違っていたのかもしれない).

課題3

1で作ったのはほぼgrepなので,まずは使いやすいようにファイル分けたりした.

並列処理については扱い慣れてないので,別プロジェクトで勉強したりしてる.

感想

後輩がどんどん通ってるのをTwitterで見て,連絡が無いので落ちたんだと思ってた.

やけになって別の事したりしてたけどちょっとしてから封筒が来てた.

通ったのは嬉しいので頑張る.

気になる点

なぜ結果が郵送なのか

いつ結果が決まったのかわからんし,時間差が出るのでつらい

一部の人はID発表より早く届いていたので,その人達のツイートを見て,「来てないって事は落ちたんだな」と思っていた.

よくわからないけど,ID発表→必要書類郵送の順番じゃいけない理由があるんだろうか.

期限が伸びた事がわかりづらい

期限が伸びたのなら,もう少し伝わりやすい方法で伝えてほしかった.

もとの期限の間に提出した人に改めてメールで伝えるとかしてくれるとありがたかった.Twitter見てなかったらヤバかったね.

特に自分のゼミの課題は,募集期間中はソースコードを公開してはいけないというルールがあるので,もし期限が伸びた事に気付かないで公開していたらと思うとこわい.

GoとRustについて

巷ではGoとRustを比較するのが流行っているらしいので、便乗しておく。

Go

良い

Rust

良い

結論としては、やっぱりどっちも良いので俺は好きな方を使います。 他人がどっち使おうと「ほ〜ん」とか「ええやん」くらいしか口出しはしないスタンスで生きていきたい。

Let's note CF-SV7の分解

Let's note (CF-SV7)のメインボードへのアクセス

諸事情で分解が必要になった為、メモ程度にここに記す。

保証対象外となる可能性があるので、もし行う場合は自己責任。

これを参考にし、分解して生じたいかなる現象についても私は責任を負わない。

底面パネル剥がし

まずはもちろん、電源を切る。

もし充電中ならACアダプターを外す。

背面のバッテリーをロックを解除しながら上にスライドさせて抜き取る。

f:id:noleo:20191107180155j:plain
背面(バッテリーを外した状態)
すると、バッテリーがあった位置の側面にシールが貼られているので剥がす。

これは俗に言う剥がすと保証無効系のシール。

f:id:noleo:20191107180306j:plain
右側
f:id:noleo:20191107180524j:plain
剥がした状態
反対側にも黒いシールが貼られているのでこれも剥がす。

次に背面のネジを全て外していく。

種類は

  • ゴム足部

  • 両上端

  • ファン部のカバー

  • 左下から二番目

  • その他

となっているので種類ごとに無くさないよう保存しておく。

f:id:noleo:20191107181005j:plain
外した状態

内部

ここからはメインボード(右側)に取り付けられた各パーツを外していく。

テープを剥がす場面が多く生じるが、フレキシブルケーブルを傷つけないよう、注意する。

SSDは上のネジを外し、テープを剥がしながら抜き取る。

ボード上にあるネジ(計4個)を外す。この時、HDMI端子とUSB端子の間部分にあるもの以外は同じ種類のネジである。

また、CPU上のヒートシンクを固定しているネジを外す必要性は無い。

しかし、ファンの上と横(上の写真では黒いテープで隠れている)にあるネジは外す。

f:id:noleo:20191107181517j:plain
丸いマークがついている
ボードを固定しているネジの周りには丸いマークがついているので、組み立ての際に参考になる。

上の方にディスプレイとつなぐコネクターがある。

これはテープを伸長に剥がしたのち、白いフィルムを持って垂直に持ち上げる事で外せる。

f:id:noleo:20191107181656j:plain
ディスプレイ用コネクター

また、いくつかのフレキシブルケーブルが現在見えている面に繋がっている。

f:id:noleo:20191107182423j:plain
フレキシブルケーブルの例。コネクターは既に起こされている
これらは、コネクターの丸い面(ケーブルの逆側)を起こす事で抜き取れる。

その他、ボタン電池等を繋いでいるコネクターはスライドして外せる

f:id:noleo:20191107182945j:plain
その他のコネクター
一通り繋がれた部分を外すと、裏面に繋がれたフレキシブルケーブルが残る。

これは一度ボードを持ち上げながら外す。

テープを剥がすと現れるコネクターは、他のフレキシブルケーブルのコネクターとは少し形状が異なるが、グレーの部分を起こせば良い。

f:id:noleo:20191107183128j:plain
裏面のコネクター

これで独立した(ファンはついているが)メインボードへアクセスができる。

GoでABCに挑むために必要な最低限の知識

Hello Go!

package main

import "fmt"

func main(){
    fmt.Println("Hello Go!")
}

これで

$ Hello Go!

できる。


GoでABCを解く

ABCを解く事を目標としたレベルの内容であり、厳密に学びたい場合はA Tour of Goとかでやってください。

agenda


基礎の基礎

基本的な形

冒頭で書いたhelloで察しはつくかもしれないが、ABCを解く程度なら基本的に

package main

import "fmt"

func main(){
    // 必要な処理
}

この形はあまり変わらないだろう。

ABCを解く上では深く考える必要は無いが、Goのプログラムはパッケージから構成される。 ここで書いたコードは、fmtパッケージをインポートしている。 これは書式入出力に用いられるパッケージだと思って良い。


インポート

もし他にもパッケージをインポートしたい場合は

import (
    "fmt"
    "math"
    "hoge"
    "fuga"
)

といった感じで追加出来る。

外部パッケージの関数を使う際は、最初の文字を大文字にする


宣言

Goでは変数、関数の宣言時、型の指定は名前の後で行う。

func add(a int, b int) {
    return a + y
}

func main() {
    var a int = 2
    var b int = 3
    var sum int = add(a, b)
}

varで変数を定義、名前をつけて型も決める。

上のコードは簡略化出来る

func add(a, b int) {
    return a + b
}

func main() {
    var a, b int = 2, 3
    var sum = add(a, b)
    fmt.Println(sum)
}

同じ型の宣言はまとめられる 変数の宣言はさらに簡略化できて

var a, b = 2, 3

で良い。初期化した場合は型を省略できる。

更に

a, b := 2, 3

にもできる


整数

int // 32bit環境では32bit、64bit環境では64bit
int64 // 64bit

uint // 符号なしint
uint64 // 符号なし64bit整数

浮動小数点数

float32 // 32bit
float64 // 64bit

文字列

string

キャスト

var a float64 = 4.5
var b int = int(a)  // 型()でキャスト
fmt.Println(a)  // 4

書式指定子

  • %d
    • 10進数
  • %f
    • 指数なし少数
  • %s
    • 文字列

配列

var array [5]int
primes := [6]int {2, 3, 5, 7, 11, 13}

みたいなの


スライス

配列とちがって可変長。配列への参照のようなもの。スライスに対する操作は配列にも反映される。

primes := [6]int{2, 3, 5, 7, 11, 13} // これは配列
var s[]int = primes[1:4] // primesの要素1~3

ループ

for

cに似ている

for i := 0; i < 10; i++ {
    sum += 1
}

みたいに書く。

初期化と後処理はしなくても良い

for ; ratio < 100;{
    ratio += pt
}

とか


while

while文はない。forでできるから。

for sum < 100{  // セミコロンも省略できる
    sum += a
}

if

cに似てる。forと同じく()は不要

if a > 0 {
    hoge
}

if文でもforみたいに評価前に処理ができる

if sum := a + b + c; sum > 3 {
    return sum
}

みたいに書ける else

if sum := a + b + c; sum > 3 {
    return sum
} else if sum == 3 {
    return 1
} else {
    return 0
}

みたいなの


switch

Goのswitchはbreakがいらず、caseが定数や整数である必要もない。

switch class := student.grade; class {
    case "1-1":
        first ++
    case "1-2":
        second ++
    case "1-3":
        third ++
    default:
        others ++
}

みたいに書く


入出力

fmt.Println("文字列”,変数)

引数をデフォルトのフォーマットでフォーマットし、標準出力に出力し、改行をする

fmt.Printf("%d",変数)

指定されたフォーマットでフォーマットして標準出力に出力。改行はしない。

fmt.Scan(&変数)

標準入力からテキストを読み込み、スペースで区切られた値として、順番に引数に格納する。

fmt.Scanf("フォーマット指定子”,&変数)

フォーマット指定できるScan。

N個の要素をスキャンしたい時

fmt.Scan(&N)
a := make([]int64, N)
for i := range a {
    fmt.Scan(&a[i])
}

みたいにする

gist

人がスマートフォンを複数所持すべき理由

いくつかのシチュエーションに分けて説明してみる

起床時

現在、スマホをアラームとして運用している人は少なくないだろう。

スマホがあれば好きな曲で朝を迎えることができるし、一台で複数のアラームを設定することもできる。

 

しかし、それでも人は二度寝する。少なくとも私はする。した。

元から起床は履修していなかったので苦手分野でしたが最近攻略しつつある。

 

今時は寝る直前までスマホをいじっている事が多い。Twitter見てたら寝落ちしたりとか。そんな時、スマホと一緒に寝てしまうことが多い。翌日「アラームが聞こえないと思ったら布団の中にスマホが埋まっていた」なんて事になりかねない。

そんな危険性を解消する為に

アラーム用のスマホを用意しよう

スマホを分けることで無駄な電力消費を抑えられるし、複数台用意することで起床確率の向上にもつながる。

現在私はアラーム用のスマホを2台、ベッドから限界まで遠い位置に配置し、さらにロックを解除しなければアラームも止められない設定にし、それぞれが3分おきになるようにしている。

 

作業時

普段、PCで複数のモニターを使っていたりする人ならば、スマホの作業スペースの狭さに苦しんだ事があるかもしれない。Twitterしながらアニメ見たり、アニメ見ながらTwitterしたり。

同時に複数の作業を。と言う点でandroidの提示した答えはマルチウィンドウとPIPだ。それぞれ簡単に説明すると、画面を分割して二つのウィンドウを表示したり、メインのウィンドウの上に小さなウィンドウを配置し、そこで動画等を再生できる。

しかし、これでは物足りない人もいるだろう。

最近はベゼルレス化が進み、画面は広くなってきたが、少し窮屈に感じる人もいるだろう。

根本的に画面が足りない。AXON Mは買いたくないが2画面は欲しいという人もいるだろう。

そんな人はシンプルに

もう一台スマホ買おう

全部解決する。

 

予期せぬ通信障害が発生したとき

記憶に新しいソフトバンクの大規模な通信障害発生時、公衆電話には数年ぶりに行列ができた。ニュースを見ながら「こんな時どうすれば」などと不安に思ったりした人もいるだろう。基地局だって壊れない訳じゃない。繋がらなくなる事もある。

複数のキャリアで契約しよう

スマホ1台、キャリアは1つ」なんて運用は冗長性に欠ける。

 

災害時

上と似た状況で、災害時にも複数のキャリアで回線契約があると便利だ。

ただ、それだけではない。災害時用にモバイルバッテリーを用意している人は多いだろう。しかしバッテリーだけでは足りない。スマホは便利だ。ライト代わりにも使える。

ライトの代わりになるスマホを買おう

一方は画面を最大輝度にしてランタン代わりに、もう一方は手元を照らす懐中電灯代わりにしよう。

 

今のスマホに飽きた時

ワクワクしながらキャリアで機種変し、クリスマスの子供の様に新しいスマホを楽しんでいた筈なのに数日後には手元の革新的技術の結晶に飽きてしまうような事もあるだろう。

気になった新しいスマホを買おう

買ってしまおう。

 

”いかがでしたか”

いくら便利とはいえ、スマホは高い買い物。用途に応じて中古品を選択したり、賢くスマホを買っていこう。

キャリアの各種割引を使うのも1つの手だ。

端末代金と通信料の完全分離が進みつつある今、キャリアを利用した端末購入時の割引が受けられなくなる前にもう1台、スマホを買っておこう。

お気持ち

Twitterには書けない(書くのが憚られる)ようなお気持ちをここで書いていく。

理由的にネガティブなポエムだらけになりそうなので注意する。

文末が安定しなかったり不可解な文法が用いられている場合もあるが気にしない。

悪魔で心境をまとめる為の出力であるが故、外観を執拗に気にする必要は無いのだ。

ネガティブな気持ちを整理する為の作業に神経質になっては本末転倒だ。

 

dev

使用しているデバイス(2020年9月19日現在)

PC

Desktop

  • Ryzen7 3700X 32GB
  • RX580 8GB

ThinkPad YOGA 260

 Thinkpad。アキバでOneLink+ドックも5kで買った。

Razer Blade stealth

    社会に適合する為に買ったけど結局適合できなかった。

ThinkPad X230

 Windowsが入ったThinkPad。2年前にジャンク(キーボード破損)で購入。 

ThimkPad X230

 キーボードが壊れていた上のThinkPadの為にジャンク(LCD割れ、本体破損)で購入。

 現在は元のメインボードを移植後放置。

ThinkPad X230

 CPUがi3だった上のThinkPadの為にジャンク(上半身行方不明)で購入。

 i5が載ったメインボード以外に用は無かったので予備パーツとして放置。

Dynabook Satellite B552

 Windowsが欲しかったから中古で買った。本体に用は無い。

Thinkpad X220

 各種実験用Thinkpad

Thinkpad 10

 何のために買ったかわからない。気付いたら手元にあった。

YOGA BOOK (Android)

 かっこいいから買った。

YOGA BOOK (Windows)

   かっこよかったしストレージ増えたから買った。売った

GPD Pocket

 うわッ!!??マジでポケット入るじゃんこれ!!最高だなッ!!??って言いながら買った。

ThikPad T530

    いつの間にか部屋にいた。デカイし邪魔。

Let's note

     X230並の厚みのくせに無駄に軽い。安っぽくてキモい。いらない。

Latitude D420

     おもちゃ

ThinkPad X60

     IBMの香りがムンムンする

 

 

スマートフォン

Galaxy S10

    メイン。

Galaxy S8+

 財布。

Galaxy Note8

 メモ。

BlackBerry KEYone

 端末用端末。

V20 pro

 高級目覚まし時計。

iPhone 6

 iOS弄りたくなったから買った。

Galaxy Note3

 ROM焼いて遊ぶやつ。

Nexus 5

 ROM焼いたり物理的に焼いたりするやつ。

Xperia Z3

 緑のスマホ持ってなかったから買った。

Xperia VL

 推しが使っているスマホなので買った。当時メイン以外で始めて買った端末。

Xperia A2

 何で買ったのか覚えていない。Xperiaも遊びやすいからか?

Raspberry Pi 3B+

 ダウト

Raspberry Pi 3B

    ダウト

 iPad Pro 11

 外でSSHするのに便利

 

  iPhone 8

    iPadOSとiOSは別なので

   Fiio M9

    DAP 

その他

時計

Gear S2 classic + wena wrist leather

キーボード

fortitude60

crkbd

helix pico

NumAtreus

ProgresTouch RETRO tiny

イヤホン

Aurisonics HARMONY GOLD + Effect Audio Ares II

JHAudio Michelle

JHAudio Angie

SHURE SE215

KZ ZS6

COWON CF2

MASTER & DYNAMIC MW07

ヘッドホン

HiFiMAN HE350

Ultrasone DJ1 PRO

MONSTER ELEMENTS OVER-EAR

beyerdynamic CUSTOM STREET

V-moda crossfade M-100

parrot zik 2.0

parrot zik 3.0

AKG K550 MKIII