Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
xonsh oneliner
Search
ravicot
May 11, 2019
Technology
0
210
xonsh oneliner
xonsh使ったらpythonでonelinerが使いやすくなった話
ravicot
May 11, 2019
Tweet
Share
More Decks by ravicot
See All by ravicot
情報セキュリティ勉強会(SC4Y)のご紹介と技術を学び続ける価値について考える
ravicot
0
300
Security College for Youth
ravicot
1
430
エンジニアだった僕が転生したらLv1の教員だった件
ravicot
2
390
Other Decks in Technology
See All in Technology
MySQL の SQL クエリチューニングの要所を掴む勉強会
andpad
2
6.2k
リテール金融(キャッシュレス・ネット銀行・ネット証券)の競争環境と経済圏
8maki
0
910
Compose Compiler Metricsを使った実践的なコードレビュー
tomorrowkey
1
220
AOAI をきっかけに 社内の Azure 管理を見直した話
recruitengineers
PRO
1
280
VS CodeでAWSを操作しよう
smt7174
7
1.6k
Kernel MemoryでAzure OpenAI Serviceとお手軽データソース連携
mitsuzono
1
240
Yahoo! 知恵袋フロントエンドをリアーキテクトしている話
lycorptech_jp
PRO
1
100
地理空間データ可視化・解析・活用ソリューション Pacific Spatial Solutions (PSS)
pacificspatialsolutions
0
230
Azure犬駆動開発の記録/GlobalAzureFukuoka2024_20240420
nina01
1
210
非同期推論システムによるコスト削減と信頼性向上
koki_nishihara
0
240
Reducing Cross-Zone Egress at Spotify with Custom gRPC Load Balancing Recap
koh_naga
0
200
Java EE/Jakarta EEの現状と将来―クラウドネイティブ時代にJava EEは対応できるのか?―
takakiyo
1
150
Featured
See All Featured
Fireside Chat
paigeccino
21
2.6k
Code Reviewing Like a Champion
maltzj
514
39k
GraphQLの誤解/rethinking-graphql
sonatard
50
9.2k
RailsConf 2023
tenderlove
4
540
How STYLIGHT went responsive
nonsquared
92
4.8k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
501
140k
Debugging Ruby Performance
tmm1
70
11k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
78
42k
Fontdeck: Realign not Redesign
paulrobertlloyd
76
4.9k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
18
6.9k
Teambox: Starting and Learning
jrom
128
8.4k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
187
16k
Transcript
ONE-LINER.PY PYCON MINI SAPPORO 2019 @RAVICOT
whoami インフラ系 技術職 @ravicot ravicot 仮想化技術(openvz, Xen, KVM), ネットワーク設計, セキュリティ製品、ストレージ製品
メール(Postfix), データベース(MySQL)…etc…etc… 年に数回しかプログラムを書かない
何しに来たの? シェル芸? シェル芸いいよ! シェル芸楽しい! Pyhton使ってもっと楽したい!! シェルじゃなくてもいい!
XNOSH で加速しよう!! ONE-LINER.PY こ ん しゅ
None
役に立つの? あらゆる調査・計算・テキスト処理をコマンドを 一撃で終わらせる
どんなときに役に立つの? 学生には、まったりコードを書けないことがある 論文用の統計データだしておいてね 午後までに きょーじゅ
どんなときに役に立つの? どお?できた? 学生には、まったりコードを書けないことがある きょーじゅ
不整合? killall httpd 報告書つくらなきゃ 今やってるから! どうなってるの? 祭りだ わっしょい プロセス生きてる? どんなときに役に立つの?
エンジニアには、ゆっくりコードを書けないことがある ああ、障害だ 頼むだれか電話対応 影響範囲は? どのログからみる? 早く復旧してね 復旧まだー? 復旧優先? 原因特定優先? DDoS?
一 撃 必 殺 ss -ntu |grep '^¥(t¥|u¥)'|awk '{print $5,$6}'
|sed 's/:[^ ]¥+//' |sort|uniq -c|sort -nr|head -n 5 SYN flood攻撃を60秒で撃退したい!!!
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port tcp ESTAB
0 40 163.49.61.XXX:22 36.11.225.XXX:32877 tcp FIN-WAIT-2 0 0 163.49.61.XXX:443 218.218.98.XXX:50578 tcp FIN-WAIT-2 0 0 163.49.61.XXX:443 218.218.98.XXX:50581 tcp FIN-WAIT-2 0 0 163.49.61.XXX:443 210.20.229.XXX:53970 tcp FIN-WAIT-2 0 0 163.49.61.XXX:443 210.20.229.XXX:53969 tcp FIN-WAIT-2 0 0 163.49.61.XXX:443 218.218.98.XXX:50579 tcp FIN-WAIT-2 0 0 163.49.61.XXX:443 210.20.229.XXX:53965 tcp FIN-WAIT-2 0 0 163.49.61.XXX:443 218.218.98.XXX:50580 tcp FIN-WAIT-2 0 0 163.49.61.XXX:443 218.218.98.XXX:50582 tcp FIN-WAIT-2 0 0 163.49.61.XXX:443 210.20.229.XXX:53964 tcp FIN-WAIT-2 0 0 163.49.61.XXX:443 210.20.229.XXX:53967 tcp FIN-WAIT-2 0 0 163.49.61.XXX:443 210.20.229.XXX:53968 tcp FIN-WAIT-2 0 0 163.49.61.XXX:443 210.20.229.XXX:53966 tcp FIN-WAIT-2 0 0 163.49.61.XXX:443 210.20.229.XXX:53971 一 撃 必 殺
# 標準偏差 awk '{d[NR]=$1;avg+=$1} END{a=avg/NR;for(i in d)s+=(d[i]-a)^2;print sqrt(s/(NR-1))}' datafile awk
'{d[NR]=$1;avg+=$1} END{a=avg/NR;for(i in d)s+=(d[i]-a)^2;print s/(NR-1)}' datafile #分散 一 撃 必 殺 教授からの宿題を120秒で撃退したい!!! [datafile] 12 15 21 16 ・ ・ ・
速さは強さ つまり何がいいたいの?
AWK VS PYTHON 相関係数を求める awk '{dx[NR]=$1;dy[NR]=$2;avg_x+=$1;avg_y+=$2} END{ax=avg_x/NR;ay=avg_y/NR; for(i=1;i<=NR;i++){s+=(dx[i]-ax)*(dy[i]-ay); sx+=(dx[i]-ax)^2;sy+=(dy[i]-ay)^2}; print
s/(NR-1)/sqrt((sx/(NR-1))*(sy/(NR-1)))}' datafile ピアソンの積率相関係数 python3 -c "import scipy.stats as st; import pandas; df=pandas.read_csv('datafile',header=None); print(st.pearsonr(df.iloc[0],df.iloc[1]))" python WIN [datafile] 12 33 15 19 21 25 16 36 ・ ・ ・ ・ ・ ・
速さは強さ awkよりもPythonのほうが圧倒的に楽?
AWK VS PYTHON ファイルの2行目以降だけ扱いたい awk 'FNR > 1{ print $1
}' datafile python3 -c "import pandas; print(pandas.read_csv(‘datafile', skiprows=1))" awk WIN
AWK VS PYTHON 後ろから2番目の列を出力する echo "a b c d e"
| python3 -c "print(list(input().split(' '))[-2])" echo "a b c d e" | awk '{print $(NF - 1)}' awk WIN
AWK VS PYTHON パターンマッチに変数を使用する awk -v 'str=RAVI' 'match($0, str){print $0}’
datafile python3 -c "data=open('test.csv').readlines(); print([line for line in data if ‘RAVI' in line])" awk WIN
加速したい あと楽したい PYTHONで
https://github.com/xonsh/pycon2016 こ ん しゅ
Pythonic + UNIX哲学 XONSH (僕の所感)
PYTHON VS XONSH 相関係数を求める ピアソンの積率相関係数 df=pd.read_csv('datafile',header=None); print(st.pearsonr(df.iloc[0],df.iloc[1])) XONSHですっきり python3 -c
"import scipy.stats as st; import pandas; df=pandas.read_csv('datafile',header=None); print(st.pearsonr(df.iloc[0],df.iloc[1]))"
PYTHON VS XONSH ファイルの2行目以降だけ扱いたい print(pd.read_csv('datafile', skiprows=1)) python3 -c "import pandas;
print(pandas.read_csv('datafile', skiprows=1))" XONSHですっきり
PYTHON VS XONSH 後ろから2番目の列を出力する echo "a b c d e"
| print(list(input().split(' '))[-2]) echo "a b c d e" | python3 -c "print(list(input().split(' '))[-2])" XONSHですっきり
速さは強さ XONSHでONE-LINERが加速 豊富なライブラリをshell感覚で使える
インストールは5分で終わる(CentOS7.5) # yum install epel-release # yum install python36 python36-pip
# pip3 install xonsh # xonsh Welcome to the xonsh shell (0.9.0) ~ The only shell that is also a shell ~
起動してみた # xonsh Welcome to the xonsh shell (0.9.0) ~
The x-on shell ~ # echo $SHELL /bin/bash # env | grep -i xonsh XONSH_VERSION=0.9.0 _=/usr/local/bin/xonsh XONSHRC=/etc/xonshrc:/root/.config/xonsh/rc.xsh:/root/.xonshrc XONSH_LOGIN=1 XONSH_INTERACTIVE=True
ShellでPythonコード補完が効く # df = pandas.read_(タブキー) pandas.read_clipboard( pandas.read_msgpack( pandas.read_csv( pandas.read_parquet( pandas.read_excel(
pandas.read_pickle( (中略) pandas.read_html( pandas.read_stata( pandas.read_json( pandas.read_table(
先人から翼を授かる Pythonでモジュールをスクリプト上で動的にロードするには importlibを使います。 ばんくしさんのblogから抜粋 https://vaaaaaanquish.hatenablog.com/entry/2017/12/26/190153 すでにONE-LINERしている人がいた…!
XNOSH で加速しよう!! ONE-LINER.PY こ ん しゅ @ravicot