汎用コマンド探訪 2 - lsof
lsof - List Open Files
wikipediaより:
lsofとは、オープン中のファイルや、そのファイルをオープンしているプロセスのリストを出力するコマンドである。
これの便利なところは、
オープンされている全てのディスク上のファイル、パイプ、ネットワークソケット、デバイスドライバが含まれる。
といったところ。 つまり、全ての開かれているファイルと、そのファイルを使用しているプロセス全体を調べるため、包括的な調査が可能になる。
例えば、-iオプションで、そのポートを使っているファイルを調べると、
lsof -i:port_number
のようになる。
ちなみにポートスキャンは、macならプリインストールの Network Utilityで簡単に行うことができる。
参考:
DataloaderのExportとExport allの違い
下記の質問と回答より抜粋。
Data Loader - Export & Export All - Answers - Salesforce Trailblazer Community
Export
"It is used to export the Salesforce Data(excluding recycle bin's data) into your local system."
つまり、ゴミ箱のデータを除いた全レコードを吐き出す。
Export All
"It is used to export the Salesforce Data(including recycle bin's data) into your local system."
つまり、ゴミ箱のデータも含んだ全レコードを吐き出す。
はてなMarkdownを書くときに参考にしたサイトまとめ
自分が改めてまとめるほどでもないほどたくさん記事があるので、とりあえず参考にした記事をメモしておく。
# Markdown
# 数式
普通にLatexの書式がわからないとき:
記号を知りたいとき:
LaTeXƒRƒ}ƒ“ƒhƒV[ƒgˆê—— - ‚·‚ׂĂ̋L†
はてなの数式の謎仕様について参考になる:
AtCoder Beginner Contest 108 参加ログ
ABC108に参加しました
AtCoder Beginner Contest 108 | AtCoder
実力:緑色 / 現R: 916
ここ数回は、参加していたもののいずれも爆死。 メンタルをやられてログを書いていませんでした。
今回もほぼ爆死ですが頑張って翌日に書いています。
A - Pair
いつも通り普通に解けばおk
B - Ruined Square
珍しくほぼ完全に図形の問題だったので、これで手こずった人も意外といそう(はい私です。
この問題は、図をあれこれ弄ることなく、回転行列を使って解く方が簡単だ。
で原点を中心に反時計回りに だけ回転するから、 1と2を入れ替えて、
C - Triangular Relationship
問題文の解釈
三角関係という甘美な響きの問題だが、3人の関係は(Kを法として)いつでも対等である。
問題文を解釈していこう。
Kで割った余りが等しい関係を で表そう。
かつ
の の関係は、
の時、が言えるので、
の時、
2.1. の時は、 となるが、残りの式から矛盾が言える。
2.2. なら、 。よって なので、 。 同様にして になる。
元の式と比べると、Kが2の倍数の時に限り、 となる。
計算
あとはどうやって数え上げるかが問題になる。
- の場合 a, b, cが全てKで割り切れる組み合わせを全て数えれば良いので、
(n//k)**3
となる。
- の場合
1.を除くために、全部 K/2の倍数で、かつKの倍数でないものを数え上げる。
((n - k//2)//k+1)**3)
で計算できた。
最終的にワンライナーで書けて、
print((n//k)**3 + (1-k%2)*((n - k//2)//k+1)**3)
となる。
D - All Your Paths are Different Lengths
所感
2進数をグラフで表現すれば良いことにはすぐ気がつくだろう。 でも、実装力がないと解けない問題のようだった。
自分は時間が足らず解けなかった。
今回も本家解説を読んで、概要だけでも書いておきたい
作るべきグラフの形
結局、何を作ればいいのかは、次図を見ていただければわかりやすいかと思う。
これは、 の時の一つの解なのだが、大きく分けて2種類のエッジがある。
一つは鎖状に繋がっているエッジで、これは1番ノードから終端ノードまで繋がっている(ここでは主鎖と呼ぼう)。
もう一つは、各ノードから最後のノードに直接橋渡しをしているものだ。
主鎖によって、2の累乗までの数字を全て表現できるようになる。主鎖のような構造が、最も単純に2進数を表すことのできるグラフだ。
問題で問われているのは、任意の数字 までの数字を漏れ・ダブりなく表すことであるから、この主鎖を応用して、数字の大きい方から順に埋めていけば良い。
主鎖のノード から取得できる数字は、[tex: 0 ~ 2i - 1]※ なので、ノード から取得できる最大の数字が、今足りていない最も大きな数字に合致するように、定数を足せば良い。
具体的に説明しよう。
図では、 のノードから、終端ノードにエッジが伸びている。
これらはそれぞれ、0~1, 0~3, 0~15を表す数字を出力している。これらに定数を足して、
128~129, 130~133, 134~149を表すようにしている。
127までは、主鎖で表すことができるから、これで条件は満たされている。
二進数
ところで、主鎖は2進数を表すといった。
150を2進数で表すと、"10010110"になる。
ひっくり返すと、"01101001"になるが、これがちょうど上の鎖の構造と同じことが分かるだろうか。
つまり、2進数表記で右から 桁目のビットが1ならば、ノード から終端ノードにエッジを伸ばせば良い。その時の定数の大きさは、 [tex: n - 2i]※ となる。
結果
R916 => R945 (Up)
頑張って早く青色コーダーになりたい
■
Macの容量がなくなってしまった。
最近JetBrainsのIDEをたくさん入れてしまったので、ストレージが満杯になってしまった。 開けるために何をしたかを書いておく。
- ストレージの管理から、不要なファイルを削除
- OmniDiskSweeperで不要そうなファイルを探して削除
- duコマンドでも探してみる
- homebrewのキャッシュを削除
一番効いたのは、homebrewのキャッシュだった。
1. ストレージの管理から、不要なファイルを削除
ここから。 Downloadsにあるファイルを消した(※図はすでに消した後)。
2. OmniDiskSweeperで不要そうなファイルを探して削除
起動して、ディスクを選択すると、容量の計算が始まる。
赤くなっている部分が計算中のフォルダで、紫が計算済みの様子。
よくフォルダを調べていくと、homebrewのキャッシュがかなり容量を食っていた。
消す(残 8.4 GB => 11.6 GB)。
3. duコマンドでも探してみる
sudo du -gx -d 5 | awk '$1>=5{print}'
5GB以上のフォルダをまとめて表示させる。
(duは容量を計算するコマンドで、awkは結果を整形・表示するコマンド)
duコマンドの計算は結構遅いようで、表示に時間がかなりかかっていた。
OmniDiskSweeperの方が良さそう。
4. homebrewのキャッシュを削除
結果的にこれが最も効果的だった(残 11.6 GB => 17.24 GB)。
brew cleanup -s
以上。
Kaggle Titanicやってみる
Kaggle
Kaggleを知っているだろうか
Kaggle: Your Home for Data Science
最近流行りのデータサイエンスを、世界的な競技大会にしたwebサービスだ。
これに参加することにした。
チュートリアル
データサイエンスを全て自前で行うのは、かなり技術的ハードルが高い。というのも、
- データ収集の方法
- 集めたデータを処理する技術
- 統計手法に関する知識と、それをデータに適用する技術
- それらを実行する環境
- その環境を用意する技術
最低限これらが必要になるからだ。
けれど、Kaggleに参加するだけなら、これを全部やる必要はない。
Kaggleがデータを持っているし、Kernelを使えば、4, 5が不要になる。
この記事に倣って、KernelからTitanicを解いてみる。
Kernel
Kaggleへの登録を済ませたら、Kernelは @karaage. 氏の記事を見れば簡単に使えると思う。
基本的にJupyter notebookと同じ使い方ができる。
Kernelを使う際に押さえておくべきポイントは、
1. 使える言語はR, Pythonだけ。
2. ワークスペースが与えられ、そこで作業が完結する。
3. 予測データの提出("Submit to Competition")はkernelを公開(publish)した後に行える(参考:Submitting From A Kernel | Kaggle)。
このくらいか。
写経とその結果
参考:【Kaggle初心者入門編】タイタニック号で生き残るのは誰?
上記記事を参考に、最も単純な決定木を実装する(titanic test | Kernel)。
全くチューニングなど行わずとも、約70%の正答率だった(なお 9876位 / 10556チーム中)。
こんな簡単に予測ができるのはやっぱり面白い。
次からは順位を(正解率を)どうやって上げていくのか考えてみよう。
AtCoder Beginner Contest 103 参加ログ
ABC103に参加しました
AtCoder Beginner Contest 103 - AtCoder Beginner Contest 103 | AtCoder
実力:緑色(最高R: 1007, 現R: 964)
今回は概ね時間通りに参加。
A, B
いつも通り普通に解けばおk
今回はAが少し引っ掛けで、Bが少し考える問題だったか
C - Modulo Summation
今回はCでつまづいた。
C問題自体はそれほど難しくはなかった。
ai列の最小公倍数より1だけ小さい整数の時に、fが最大となることに気がつけば良い。
だがここに至るまでにも紆余曲折経た。次のような思考をして答えにたどり着いた。
1. 全ての剰余類についてfを計算して、最大を探せば良いのでは?
2. 次の例でn = 24までを調べてみると、値の変化が12周期である。つまり最小公倍数ごとに1周する。
3 3 4 6
つまづきポイント
「最大公約数(GCD)を計算するmath.gcdは、Python 3.5から追加」
コレだ。
Pythonで最大公約数と最小公倍数を算出・取得 | note.nkmk.me
最小公倍数(LCM)を計算するのに、GCDを計算しなければいけないが、それをそのままこのサイトから持ってきてしまった。
AtCoderはPython3.4.3なので、math.gcdは使えない。
反省点
AtCoder上でコードテストができるので、それを使ってまず試す。
また環境を3.4.3に合わせる。
D - Islands War
計算量をうまく減らすことができず、TLEのまま時間切れ。
(C問題を提出してすぐDを解き始めたので、CのREに気がつかず両方落とす結果に)
解説を読んで自分なりに解説してみたい
aでソートされた列を考える基点にしていると、うまく正解にたどり着かないのかもしれない。
元の配列をbで安定ソートすると、下のようになる。
○のうち、左側がa, 右側がbだ。
こうやって並べてみると、確かに上から処理していけば、右に部分問題が残るのでうまくやれそうに見える。
反省点
1. 問題を多角的に捉えられていない。
2. 特に部分問題に分ける意識が低かった(部分問題に分けようとすれば、自ずと並び替えにも至ったかもしれない)
結果
R964 => R919 (Down)
次はCまでは解けるようにしたい、、、