Webでシェルを実行するwebshを作った

デザイン新しくした (追記 2020/2/1)

初期UI
目次
自己紹介
webshとは
デモ
作った経緯
開発の話
今後の課題
まとめ
自己紹介
最近は家でも仕事でも
CIで自動化フロー組んだりしている
デモ
正弦波泳法.shmuscular shout 正弦波泳法 -p front-relax|tee >(cat) >(cat) >(cat) >(cat)|tee >(cat) >(cat) >(cat) >(cat)|awk '{PI=4*atan2(1,1);for(i=0;i<(sin(NR/25*PI*2)+1)*5;i++){printf " "}{print $0}}'|textimg -asl25 -d5
ちょっとまて
はい
何だこのやる気のない画面は
フロントエンド何もわからないので勘弁して
作った経緯
これが一番大きい
開発の話
長くならないように努めます
長くならないとは言っていない
システム構成
こんなかんじ
貧乏なのでサーバ1台で運用してる
高い
開発言語
> 構文はPythonライクで、静的型付け言語であり、コンパイルすることでC、JS、ObjectC、C++のコードを出力することができる言語
ネイティブコードを吐ける
超高速
2019年9月に 1.0.0 がリリースされた最近の言語 (12年目)
このあたりの記事で雰囲気が伝わる
今年のアドベントカレンダー
スイスイ書けて楽しいよ
とりあえず unko.tower
を実装してみたので動かしてみて
nimimport strutils
proc unkoTower(n: int): string =
var rows: seq[string]
# 先端の追加
let topPad = " ".repeat(n+2)
rows.add(topPad & "人")
# うんこの段を追加
for i in 1..n:
let pad = " ".repeat(n - i + 1)
let row = "(" & " ".repeat(i * 2 + 1) & ")"
rows.add(pad & row)
# 結合して返却
return rows.join("\n")
echo unkoTower(3)
僕がいれた
rect 矩形を切り取ったり貼り付けたりするコマンド
$ unko.shout | rect crop -x 10 -y 5 -W 6 -H 10
> 
edens 独自の辞書を使用して文字列をエンコーディングする
$ edens kakikokera <<< かきとこけら
> 杮杮杮柿柿柿杮杮杮柿柿柿柿柿柿杮杮柿柿柿杮柿杮杮杮杮杮柿柿柿杮杮杮柿柿柿柿柿柿杮杮柿柿柿杮杮柿杮杮杮杮柿柿柿杮杮杮柿柿柿柿柿柿杮杮柿杮柿杮柿柿柿杮杮杮柿柿柿杮杮杮柿柿柿柿柿柿杮杮柿柿杮柿柿杮杮杮杮杮柿柿柿杮杮杮柿柿柿柿柿柿杮杮柿柿杮柿柿柿杮杮杮杮柿柿柿杮杮杮柿柿柿柿柿杮柿杮柿柿柿杮柿柿杮
$ edens unko <<< かきとこけら
> ウンウこうんこんウウンウこうんこんコウンウこうんこコうウンウこうんここウウンウこうんここんウンウこうここんん
$ maze -H:21
text #######################################
# # # # # # # # #
### ####### ### # # ### # ##### #######
# # # # # #
# # ################### # ##### #######
# # # # # #
# # ### ##### # ####### # # ### #######
# # # # # # # # # # # # # # #
# # # ### # # # # # ### # ##### #######
# # # # # # # # # # #
### # ##### ##### # ### # ##### #######
# # #
### ################# ######### # # ###
# # # # # # # # # # # #
##### ########### ##### # # # # ### ###
# #
# # # # # # # # # # # # # # # # # # ###
# # # # # # # # # # # # # # # # # # ###
#######################################
今後の課題
UI周り
フロントエンド何も分からない
パフォーマンス
2コアじゃ詰まりすぎる
札束で殴れ
バグ
シェルのパイプの最初のコマンドでファイルを開くと固まる
なんで起きるのかわからん
セキュリティ対策
インフラは非公開にしてるので僕がやるしかない
まとめ
webshの紹介
改善点があればissuesまたはPRください
webshの実装まわりの話
はじめてのおつかいならぬ、はじめてのWebアプリ
Nimの紹介
Nimは良い言語
流行ってほしい
終わり