ブックマーク / keens.github.io (19)

  • Rustのコードチェックを強力にする3つのツール | κeenのHappy Hacκing Blog

    κeenです。 Rustaceanのみなさんは普段書いてるRustのコードを検証するのに cargo check や cargo test などのツールを使っているかと思いますが、それらを強力にするツールの miri 、 MIRAI 、 kani をそれぞれ紹介します。 Rustにはいくつかコードの正しさや行儀のよさを検査する方法がありますね。 cargo check や cargo test 、 あるいはビルドしたバイナリを走らせて検証したり色々手を尽くしているでしょう。 ですがこれらだけだとあらゆる種類のバグを拾いきれる訳ではないのもみなさん承知の通りだと思います。 既存の方法だと手が回らない所があるので他のアプローチでコードを検証してくれるツールがあると嬉しいですよね。 そういったツールを3つ紹介します。 先に注意しておくと、これらのツールはまだ成熟しきってはおらず使いづらい点、使い

    Rustのコードチェックを強力にする3つのツール | κeenのHappy Hacκing Blog
  • eBPFでDockerの--passwordで入力したパスワードを盗む | κeenのHappy Hacκing Blog

    κeenです。以前の記事の続きで、 /proc を監視するのではなくeBPFで取得してみます。ついでにRustのコードをeBPFで動かせるライブラリのayaも使ってみます。 以前の記事では /proc 以下の監視をビジーループで回すという力技で新しく作られたプロセスを補足していました。これだとCPU使用率が上がって美しくありませんし、何より原理的には見逃しもありえてしまいます。そこでカーネルの機能を使って全てのプロセスの作成を監視して低CPU使用率かつ捕捉率100%の実装を目指します。 eBPFとは? なんかLinuxカーネルでユーザの書いたコード動かせるやつです。私は説明できるほど詳しくないので適当にググって下さい。 1つやっかいな点として、独自のバイナリを動かすのでカーネル内で動かすコードはコンパイラがeBPFに対応したものでないといけません。また、カーネル内で動かすコードをユーザラン

    eBPFでDockerの--passwordで入力したパスワードを盗む | κeenのHappy Hacκing Blog
  • プログラミング言語の未来はどうなるか | κeenのHappy Hacκing Blog

    κeenです。最近JEITAのソフトウェアエンジニアリング技術ワークショップ2020に参加したんですが、そこで五十嵐先生、柴田さん、Matzとパネルティスカッションをしました。その議論が面白かったので個人的に話を広げようと思います。 年末年始休暇に書き始めたんですが体調を崩したりと色々あって執筆に時間がかかってしまいました。 時間を置いて文章を書き足していったので継ぎ接ぎ感のある文体になってるかもしれませんがご容赦下さい。 というのを踏まえて以下をお読み下さい。 いくつか議題があったのですが、ここで拾うのは一番最後の「プログラミング言語の未来はどうなるか」という話題です。 アーカイブが1月末まで残るようです。もうあと数日しかありませんが間に合うかたはご覧下さい。 そのとき各人の回答を要約すると以下でした。 五十嵐先生:DSLを簡単に作れる言語というのが重要。それとプログラム検証、プログラム

    プログラミング言語の未来はどうなるか | κeenのHappy Hacκing Blog
  • Twitter上のプログラミング入門者観察記 | κeenのHappy Hacκing Blog

    κeenです。 ここ半年くらいTwitter上でプログラミングに入門してる人、入門してエンジニアとして働きはじめたばかりの人を観察していました。 そろそろ潮時かなと思ったので観察結果を報告します。 観察結果をまとめようと思ったのは、どっかのタイミングで書こうと思っていたところに丁度いい記事が目に入ったからです。 プログラミングスクールに通わず、プログラミングを学ぶ方法 プログラミングをともに学ぶ仲間をTwitterで探すのはやめておこう(追記) 私が初心者を観測していて、これらの記事と概ね同じ意見に至ったので補足説明として記事を書きます。 観察に至るまで 結果を書く前に、どういう経緯で観察をはじめてどうやって観察対象を集めたかを記しておきたいと思います。 モチベーション だいたいこの2ツイートに要約されます。 小耳に挟んだ話なので眉唾ものなんですがXSSとかSQLインジェクションみたいな古

    Twitter上のプログラミング入門者観察記 | κeenのHappy Hacκing Blog
  • 安全なシステムプログラミング言語Rustへの招待 | κeenのHappy Hacκing Blog

    # 安全なシステムプログラミング言語Rustへの招待 ---------------------- [IIJ Labセミナー](https://iijlab-seminars.connpass.com/event/152079/) === # About Me --------- ![κeenのアイコン](/images/kappa.png) * κeen * [@blackenedgold](https://twitter.com/blackenedgold) * Github: [KeenS](https://github.com/KeenS) * GitLab: [blackenedgold](https://gitlab.com/blackenedgold) * [Idein Inc.](https://idein.jp/)のエンジニア + 2年半くらい仕事Rustを書いている

  • 「実践Rust入門」を書いたよ | κeenのHappy Hacκing Blog

    κeenです。実践Rust入門 言語仕様から開発手法まで(技術評論社)を書いた(3人で共著)のでどういうなのか解説します。 5/8発売です。電子版もありますよ。Gihyo Digital PublishingだとPDFが手に入るので人気らしいです。 See Also 書籍『実践Rust入門』の詳細な目次です 目指したもの Rustの入門書といえば公式ドキュメントのThe Book、TRPLなどと呼ばれるThe Rust Programming Languageやその有志による和訳が一番に挙がるでしょう。 それ以外にもオライリーよりProgramming Rustやその和訳版も出ています。 どちらもRustについてよく書かれており、書の購入を検討されている方は上記2冊との違いが気になるかと思います。 書の大きな特徴は以下の2点です。 Rust 2018 Editionに対応している 実

    「実践Rust入門」を書いたよ | κeenのHappy Hacκing Blog
  • async/awaitと合成可能性 | κeenのHappy Hacκing Blog

    κeenです。async/awaitって実装の都合と利便性の良い所取ってるよなーと常々思ってるのを言語化してインターネットに放流します。 何度か似たようなことを言ってるのですがスライドであることが多くてあまり情報量を詰め込めなかったのでブログにまとめます。 非同期処理と継続 非同期処理は時間のかかる処理を待ち合わせずに別の処理をし、時間のかかる処理が終わってから元の処理を継続する仕組みです。 let url = "http://example.com" let html = fetch url (* この結果を待たずに別の計算をする *) (* fetch urlが終わったあとでここに戻ってきて後続の処理をする *) print html 「継続」や「後続」などのキーワードが出てきているとおり、継続の影がチラチラ見えます。 継続とはいってもスレッドのようなタスク単位で分割したいのでフルの継

    async/awaitと合成可能性 | κeenのHappy Hacκing Blog
  • プログラミングを目的にしてもいいと思う | κeenのHappy Hacκing Blog

    文系でプログラマーになったけど色々失敗して3年半で会社を辞めた話|denkigainoteという記事を読みました。 この記事に書かれていることが私の身にも覚えがあります。特に私と同い年の方のようなので自分に重ねてしまうところもあります。 ですが多少似たところはあってもやっぱり他人なので全然違う体験もしています。そういう体験を書いてみようと思います。もし該当記事を読んで絶望した人がいるなら別の例もあるよということで参考にしてください。 私は「パソコンの中身が知りたい。多分プログラミングとかいうやつを勉強したら分かる気がする。」くらいのモチベーションでプログラミングをはじめました。 ゴールがあやふやですし、結局のところ「プログラミングをする」が目標になってるので迷子になるのは必至ですね。実際そういう時期がありました。 そんな私でも今はプログラマとして生きています。以下に、私が遭遇した課題とそ

    プログラミングを目的にしてもいいと思う | κeenのHappy Hacκing Blog
  • JITあれこれ | κeenのHappy Hacκing Blog

    κeenです。遅刻してしまいましたがこのエントリーは 言語実装 Advent Calendar 2018 1日目の記事です。 最近私の観測範囲内でJITが流行っているのですが一口にJITと言っても色々あるよなーと思ったので私がJITについて知っていることをグダクダ話します。 このブログでも何度がJITや周辺技術について取り上げてますが話の流れがスムーズになるので最初から説明していきます。 2018-12-03: 加筆修正しました。差分はこちら JITって? Just in Time(コンパイル)のことで、日語にすると「間に合ってコンパイル」になりますかね。 インタプリタの高速化テクニックの1つです。 最初はインタプリタのようにコードをコンパイルせずプロセスが起動しますが、メソッドを実行するまでにはメソッドをコンパイルして、ネイティブコードで実行する方式です。 来ならJITはこのような意

    JITあれこれ | κeenのHappy Hacκing Blog
  • isucon7予選のアプリをRustに移植したから解説するね | κeenのHappy Hacκing Blog

    κeenです。こういう流れがあったので移植しました。 keenさんが「2028年、Rust でイケてる web application framework はこれだ!」みたいな記事を書くとと "余力" が生まれるかもしれません…!! — FUJI Goro (@__gfx__) 2018年8月28日 まずISUCONを知らない方に雑に説明しておくと、意図的に遅く作られたWebアプリケーションが与えられるので7時間くらいでどれくらい高速化できるかを競うコンテストです。 このお題のWebアプリケーションが参加者や流行りに合わせて複数言語で提供されるのですが、今年はRustが来そうだということで参加者の肩慣らしのために過去問を移植しましたというお話。 ひとまずソースコードは こちら 手元でベンチマークをしてみた限り、Pythonの2倍くらいは速いもののGoには劣るようでした。これの考察については

    isucon7予選のアプリをRustに移植したから解説するね | κeenのHappy Hacκing Blog
  • Rustのこれまでとこれから | κeenのHappy Hacκing Blog

    # Rustこれまでとこれから ---------------------- [Learn Languages 2018 in ODC (LL2018) ](https://llevent.connpass.com/event/95443/) === # About Me --------- ![κeenのアイコン](/images/kappa.png) * κeen * [ちゅーんさんだよー](https://shindanmaker.com/789932) * [@blackenedgold](https://twitter.com/blackenedgold) * Github: [KeenS](https://github.com/KeenS) * [Idein Inc.](https://idein.jp/)のエンジニア + Rustで開発してるよ * Lisp, ML, Rus

  • エンジニアの働き方とかについてのエモい記事 | κeenのHappy Hacκing Blog

    κeenです。 非エンジニアのマネージャがエンジニアチームと上手くやる方法の記事に影響を受けてエンジニアとしての意見を書いてみようかなと。 非エンジニア向けのつもりです。 ここでいうエンジニアはソフトウェアエンジニアのことです。 Disclaimer ある程度客観的になるように気をつけてますがあくまで私個人の意見です。エンジニアを代表するようなものではありません。 κeenはまだエンジニア3年目くらいの若造なのて「それは違うんじゃねーの」と思ったところがあったら多分あなたが正しいです。 仕事内容 エンジニア仕事は外から見たら何してるかよくわからないらしいですね。 ふつう仕事の成果物はエンジニアの間でしか共有してないのでまあ、そうなるでしょう。 なので「何をしているか」を説明するのはやめて「仕事しているときにどんな気持ちか」を話しましょう。 エンジニア仕事は頭脳労働です。 それも問題解決

    エンジニアの働き方とかについてのエモい記事 | κeenのHappy Hacκing Blog
  • 雰囲気でシェルを使っている人のためのシェル入門 | κeenのHappy Hacκing Blog

    κeenです。雰囲気でシェルを使ってる人が多いとのことだったので少しばかり込み入った知識を。 あと一応POSIX準拠かどうかも気にしながらやっていきます。 基礎知識編 シェルの種類 まず、POSIXにシェルが定義されています。 これに最低限の機能で準拠しているものをPOSIXシェルと呼ぶことにします。いわゆる/bin/shです。具体的な実装はbsh、ash、dashあたりでしょうか。 最低限の機能以上に色々拡張されているシェルを拡張POSIXシェルと呼ぶことにします。具体的な実装はbash、zsh、kshなどでしょうか。 ここでは触れませんがPOSIX準拠でないシェルも存在してcshやtcshなどのシェルがあります。あと確か最近話題のfishも違ったような。 さて、1つ問題になるのは普段使いのコマンドラインはおおむね拡張POSIXシェルでしょうが、サーバで使うシェルやデプロイスクリプトで呼

    雰囲気でシェルを使っている人のためのシェル入門 | κeenのHappy Hacκing Blog
  • 非同期とノンブロッキングとあと何か | κeenのHappy Hacκing Blog

    κeenです。最近同期/非同期、ブロッキング/ノンブロッキング、直接形式/継続渡し形式あたりが混乱してきたので個人的に整理します。 あくまで私個人の理解を纏めただけなので誤謬などに注意して下さい。 追記: @tanaka_akrさんから指摘されたのですが、用語の説明が間違っていそうだったので書き直しました。 diffはこちら 非同期とノンブロッキングはよく混同されます。また、非同期処理の記述形式として直接形式や継続渡し形式などがあります。 私自身違う言葉だなとは思いつつも混同したり違いを忘れたりしています。 非同期もノンブロッキングもナイーブなIOに比べると速い方式だな程度の理解でいてそんなに困らないと思ってますし混同や誤用に目くじらを立てるつもりもありません。 しかしながら3者を区別しないと意味を成さない文脈で3者を混同している技術を何度か見掛けたので(自分の中で)整理しようと思ったのが

    非同期とノンブロッキングとあと何か | κeenのHappy Hacκing Blog
  • メモリとスタックとヒープとプログラミング言語 | κeenのHappy Hacκing Blog

    κeenです。 今回の話は別にRustに限ったものではないのですが、よくRustを始めたばかりの人がスタックとヒープが分からないと言っているのをみかけるので少しメモリの話をしますね。 厳密な話というよりは雰囲気を掴んで欲しいという感じです。 メモリは配列 プログラム(プロセス)のメモリには実行するプログラム(機械語)やグローバル変数/定数、関数の引数やローカル変数、その他プログラムで使うデータ領域などを置きます。 プロセスに割り当てられるメモリというのは、1つの巨大なのっぺらな配列みたいなものです。サイズも決まってます。64bit OSなら2^64 byteです。 0 2^64 +--------------- ----+ | | | | | ~~ | | +--------------- ----+ これは仮想的なメモリなので実際の物理メモリに2^64 byteの配列がドンと確保される訳

    メモリとスタックとヒープとプログラミング言語 | κeenのHappy Hacκing Blog
  • サイバーエージェントを退職しました | κeenのHappy Hacκing Blog

    このエントリはEx CyberAgent Developers Advent Calendar 2016 - Adventar1日目の記事です。 元サイバーエージェントの人がわいわいやります。 κeenです。二年弱勤めたサイバーエージェント退職したのでその旨について。 サイバーエージェントの思い出 サイバーエージェントに興味をもつきっかけになったのも入社することになったのも学生の頃からずっと参加し続けていたLispMeetUpでした。 LispMeetUpでは長らく会場としてCAのセミナールームを使わせてもらっていました。 そこでエンジニアに対して気軽に施設を提供するCAや社員の@potix2さんを知って、そのまま@potix2さんの手引でCAに入社する運びとなりました。 「面接でLispは口にしない方が良い。100%落ちる。」なんて言ってた割にはLisp繋りで入社しました。 Cyber

    サイバーエージェントを退職しました | κeenのHappy Hacκing Blog
  • Rustのゼロコスト抽象化 | κeenのHappy Hacκing Blog

    κeenです。今日Twitter上でのやりとりから少し面白いことが分かったのでそれについて。 最近1.0が出たKotlinについて、水島さんがツイートしてました。 nullableに対してはmapとかの高階関数を一切使えないのが痛い。 ?. でカバーできるケースは一部だけだ。zero-overhead null-safetyと唄っとるが、代わりにnullチェックお化けになるわけで、どこがzero-overheadだ #kotlin_dis — 水島 宏太(Klassic作成中) (@kmizu) 2016年2月29日 それについて私が無関係なツイートを。 全く無関係だけどRustはOptionみたいな0-1の型をnull or valueに最適化するそうな。これこそがゼロコスト抽象かな https://t.co/5Y7cBEyrMe — κeen (@blackenedgold) 2016

    Rustのゼロコスト抽象化 | κeenのHappy Hacκing Blog
  • 独学でプログラミングをやってきた中で良かった技術書50選 | κeenのHappy Hacκing Blog

    今まで読んできた技術書の中で良かったものを挙げていく。 そろそろ棚が溢れるので捨てる前に書き留めておく。 私は独学でプログラミングを始めたので情報系専攻の人には何をそんなというも混っているだろうが価値は人それぞれ違う。 一応私自身について語っておくと学生時代はプログラミングに興味を持ちつつも数学科に進んだ。 しかしそこでもプログラミングへの興味は薄れず、色々を読んだり同学年の情報科学科の真似をしたりしていた。 今思えば日の精鋭たる東大情報科学科の人達に勝てる筈もなかったのだが学生時代に我武者羅になれたのは悪い経験ではなかった。 私が興味があったのは主にプログラミング言語そのもの、特にLispとその周辺。 何故か 挙げていく前に1つだけ。Webに大量に情報がある今、何故かについて説明したい。簡潔に言うと 文章が推敲されていて読み易い 1つの情報ソースに多彩な内容が載っている 巨大

    独学でプログラミングをやってきた中で良かった技術書50選 | κeenのHappy Hacκing Blog
  • 2016年注目していきたい技術 | κeenのHappy Hacκing Blog

    2016年個人的に注目したいというか力を入れたいというか成行を見守りたいというか、そんな技術達を書き連ねていく。ものによっては「何を今更」と思うかもしれないがあくまで私にとって、だ。 順不同。 Apache Drill 公式。様々なデータソースに対してANSI SQLでクエリを投げれるやつ。 ビッグデータの時代にETL無しで迅速にデータを分析出来るようにするために開発されてるらしい。 様々なデータソースというのは当に凄くて、CSVとJSONをJOIN出来たりする。 あるいはTSVの生ログとRDBにあるマスタデータをJOIN出来たりする。 個人的にはデータベースから抽出したCSVにクエリを投げたい時に便利かな、と思って注目してる。viewや一時テーブルを作る権限がないデータベースだってある。 あるいは、Zookeeperを使って分散モードで実行も出来るのでBigQueryみたいなのをオンプ

    2016年注目していきたい技術 | κeenのHappy Hacκing Blog
  • 1