`docker exec -it` を便利にしたかった
Dockerコンテナ弄りにはみんな大好き docker exec -it
(まさかSSH使ってませんよね…?).
docker exec -it $container_name $shell_name
とすることでコンテナ内に入ってインタラクティブシェルを使うことが出来ます.
ただし基本的にコンテナ内には素のシェル環境しかありません (ツライ). コンテナ内で作業をするとは言えあくまでコンテナは使い捨て. いちいちコンテナ内にzsh, vimやtmuxの自前環境を用意するのは大変で環境も汚してしまうという問題がありました.
…というわけでローカルに用意しておいた設定をコンテナ内に自動的に持っていく docker exec -it
用のラッパーが出来上がりました.
使い方やサンプルはリポジトリを参照してください. 大体はSSHでリモートに設定ファイルを持っていくというコンセプトの sshrc に倣っています.
エイリアスを無視してコマンドのフルパスを取得するだけ
例えば .bashrc
や .zshrc
で ls
の利便性を上げるために alias ls='ls -G'
といったようにエイリアスを張っているとします.
この状態で ls
コマンドのフルパスを取得するため which ls
や type ls
を実行するとフルパスではなく ls: aliased to ls -G
のようなエイリアス情報が出てきててしまいます.
which -a ls
や type -a ls
のようにオプションを渡すことで ls: aliased to ls -G; /bin/ls
とエイリアス・フルパス全ての情報を取得できますがフルパスのみ欲しい時にはちょっとばかし不便です.
解決策
$SHELL -c 'which ls'
もっといい方法がありそうだけど見当たらなかった (完)
技術書典お疲れ様でした & BOOTHでScalaTourを販売します
技術書典お疲れ様でした. 技術系個人サークル「かいていどうくつ」としてScala入門本のScala Tourを片手に参加していました. ISUCON2日目と被るわ台風来るわで大変でしたが来てくださった方ありがとうございました.
頒布していたScala Tourですが, 若干数で本のみですがBOOTHにて販売を行います. 技術書典は行けなかったけど気になる…という方は是非! なくなり次第終了で増刷は行いませんのでご了承ください.
Scalaの入門本です. ネットでは探しづらいScalaのアレコレもふんだんに掲載しています. 関数型は難しそう…? なんとScalaでは関数型に深入りせずとも関数型の恩恵だけ受けることができるんです. (以前頒布したα版からの更新が多々あります)
コンテンツ
・Scalaとは
・環境構築
・基本文法
・コレクション
・Option/Either
・非同期処理
・外部ライブラリ
・ベストプラクティス
・参考リンク集
今後も「かいていどうくつ」ではScalaやその他技術系で活動を続けていく予定です. 次は夏コミか技術書典4 (あるのか?) でScalaのリファレンスになるようなものを作れたらと考えています.
「かいていどうくつ」の告知サイトはこちら (css…? 知らない子ですね)
ISUCON7予選通過できた #ISUCON
やったぜ!
ISUCON5とISUCON6はScala界隈の方とScalaで突破しようとして一般枠で撃沈していたのですが, 今回はチーム「チーム名を考えるのが苦手すぎる」として OUCC の老害組 (@spring_raining, @susisu2413) と人生最後の学生枠を初利用して最終スコア89,047で初の予選突破できました (なお一般枠のスコアを見て真顔). 開催時間が押したことにより @spring_raining の途中離脱が発生したりしましたが無事 (?) 終えることができました.
ISUCON申込み成功 pic.twitter.com/u048rUvHs9
— 緑豆はるさめ (@spring_raining) 2017年9月25日
チームメンバーの2人が 💪JavaScript力の塊💪 だったので (Scalaではなく) JavaScriptです. その2人がアプリ, 私はミドル系で分担していました.
- アプリ側: Linter/リファクタ → iconsをDBに入れないようにする → ひたすらredisにぶっこむ → 細かいチューニング → ベンチマークガチャ
(アプリ側はそのうち2人がまとめてくれそう) - ミドル側: いろいろ初期化 → いろいろプロファイリング → iconsをDBから取り出す → いろいろ事前gz化 → mysql/nginx/redisの設定を地道に弄る → ベンチマークガチャ
大したことしてないですね, はい. 終始リーダーボードの下の方で見え隠れするくらいのスコアでした. リーダーボード凍結辺りからはCPUが100%に張り付きiconsがタイムアウト連発して全くスコアが伸びませんでした…圧倒的力不足…
よくなかったこと
- 色々勘違いしてサーバ1台で頑張ってしまった (アホ)
- キャッシュに関する圧倒的知識・経験不足 (すまん)
- レギュレーションをちゃんと読まなかった (レギュレーションにヒントが多かった)
- リハーサルなし (pixiv社内ISUCONがそっくりだったらしい…終了後に知った…)
よかったこと
- 予選突破 (めでたい)
- 全員集まって参加 (実は初めて)
- Webアプリの知見が結構増えた (普段, 特に最近はWebアプリを触る機会がないので. つまり ISUCON最大の目的を達成)
忙しくて (言い訳) 予選は完全に準備不足というか初期化スクリプトの準備くらいしかできていなかったので本戦は足を引っ張らないように頑張りまふ. それと本戦終了後は結果がどうであれもうちょっとまともなエントリ書きます.
チームメンバーのエントリをぺたり
最後にISUCON7予選で最高のスクリーンショットを共有しておきたいと思います.
(デバッグ風景)
Scala2.13からの新しいコレクションライブラリ
今更
もうProposalが出されてから暫く経っていますが今更軽く確認したのでメモ書き. 特に大した内容はないです. ちゃんと知りたい方は SCALA 2.13 COLLECTIONS REWORK や ソース を読んで下さい.
過去にScala2.8でも一度Scalaのコレクションライブラリは大きな変更が加えられています. その際に (確かに機能的なんですが) 分かりづらいと評判の CanBuildFrom
を中心とした仕組みが追加されました. しかしながら, その挙動は一見トリッキーで実装は無駄に巨大になってしまっているため, Scala2.13で新しいコレクションライブラリである Strawman に変更される予定です. 普通に(?) 利用している分にはAPIの変更はないため既存のコードはそのまま動くはずですが, breakOut
, view
や継承して自前のコレクションを作成している場合などには破壊的変更があるためコードの修正が必要 になります. 以下は個人的に気になった変更箇所のピックアップ.
速くなる
→うれしい
CanBuildFrom
が消える
コレクション内部の操作方法が変更され, map
等で生成されるコレクションの型を決定していた CanBuildFrom
が消えます. これでやっとIDEの補完が分かりやすくなりますね (今までのやつだと初心者が見たらわけわからんかったと思うの). 内部的にシンプルにしようとしているらしくソースをちら見した限りではかなり読みやすくなっていました. implicit
が大幅に減ってほぼ型クラス用にしか使われなくなっていたり.
ちなみに, CanBuildFrom
の代替として (?) FromIterable
で Concreteなコレクションの生成を行います (to
メソッドもこれを使うようになる). CanBuildFrom
と違ってExplicitな引数を使います.
CanBuildFrom
が消えたので当然 breakOut
も消える
以前は breakOut
でコレクション変換を端折ってちょっとパフォーマンスを上げるといったことができたのですが消えます. 代わりに view
を使うことになるようです. ちなみに view
の実装もシンプルになったとか.
val s: Seq[Int] = ... val set: Set[String] = s.map(_.toString)(collection.breakOut) // before val set = s.view.map(_.toString).to(Set) // after
collection.parallel
が標準ライブラリから外れる
parser-combinators
や xml
のように外部モジュールに切り出されるようです
Migrationは ScalaFix で
ScalaFix以外のMigrationツールも検討中らしい
まとめ
よさの塊. まだ実装途中なのでリリースが楽しみ.
リリースが待ちきれない, そんなあなたに (すぐに試せます)