Don't Repeat Yourself

Don't Repeat Yourself (DRY) is a principle of software development aimed at reducing repetition of all kinds. -- wikipedia

作って学ぶ、cats.effect.IO モナドのしくみ

今回は cats.effect.IO (以下、 IO ) を理解する上で最低限必要となる*1実装を選定して、cats を参考に IO を実装してみました。具体的には、下記の機能を実装してみます。 IO#pure IO#delay or IO#apply IO#raiseError IO#map IO#flatMap IO#unsafeRunSync …

async/await 時代の新しい HTTP サーバーフレームワーク tide を試す

Rust Advent Calendar 2019 25日目の記事です。 tide は現在開発途中の、 Rust の async/await に対応した HTTP サーバーを構築するフレームワークです。not ready for production yet なので本番にこれを使用するのは難しいかもしれませんが、いろいろな例…

【競プロノート】bit全探索を学ぶ

全探索にもいろいろ種類があるそうで、今日は bit 全探索という方法を勉強したのでそれについてまとめてみます。まとめないと忘れる。 解きたい問題 この記事に載っている部分和の問題を解きます。説明のために問題文を拝借します qiita.com n 個の正の整数 …

今年読んだ技術書(2019年)

今年も多くの技術書を読みました。その中で印象に残ったものをご紹介したいと思います。今年は忙しくて休日しか時間がなかったので、読んで知識を体系的に整理できたと思った本の冊数は少ないですが… Functional Programming 2019年の4月くらいに5年目がはじ…

群、モノイド、半群

数学を勉強している最中に話が出てきたので、少しまとめておこうと思います。理解に誤りがあったら教えて下さい‍♀️ なお、私はモノイドやモナドといった言葉は、その成立条件について Functional Programming in Scala などの本でさらっと理解しています。一…

クリエイティブ担当者から見た Rust.Tokyo #rust_tokyo

Photo by: @katsumata_ryo まずはお礼をさせてください。10月26日に Rust.Tokyo を開催しました。ブログ等での反響を見る限り、みなさんお楽しみいただけたようで、主催者としては何よりです。カンファレンスを初めてやるメンバーが多い中で、前日まで準備に…

ターミナルに色をつけられる crate 「ansi_term」

Rust を書いてる際にコンソールでいろいろ出力を出して遊びたいことがあると思います(?).コンソールの出力にふと色をつけたくなって,コンソール文字列の色づけって Rust ではどうやってつけることができるんだろう?と思って調べたらこういう crate が…

logback で環境ごとにロギング設定を変えたい場合にやること

ググると Spring も込みの設定方法しか出てこなかったので,メモしておきます.言語は Scala,ビルドツールは sbt を使用しています.logback-classic を使用しているようです. やろうとしていること logback.xml 内で,開発環境/ステージング環境/本番環…

『実践 Rust 入門』

思い返すと、Rust をはじめて知ったのは2年前でした。ある Googler が記事の中で Rust に対して惜しみない賛辞を送っていた記事でした。私はこの記事に大変共感し、感銘を受けました。Rust がやりたくなった。 当時の私は、金融業界で使われるリスク管理計算…

社会人4年目が終わった

先週で社会人4年目が終わり,今週から社会人5年目になりました.3年目で新卒入社した金融の会社を辞め,今は2社目に1年半弱在籍しています.振り返りをしておきたいと思います. ちなみに私は社会人になってからプログラミングをはじめたので,プログラミン…

Functor,Applicative Functor について勉強したので整理してみる

最近 Functional Programming in Scala の勉強会をずっとしているのですが,ようやく12章の Applicative Functor に入りました.ところが,急に登場した Applicative という概念がいまいち勉強会の時点ではつかめておらず,少し頭の中を整理したいと思ったの…

Run Length Encoding

『問題解決のPythonプログラミング』という本を読んでいたら出てきたエクササイズです.おもしろそうだったのでやってみました.もともとその章のお題だった配列をぶん回すという方針に従って,それを応用して今回はやってみました.各文字に対してカウンタ…

Servo の開発に出てくる highfive について

小ネタもうひとつ. Servo の開発をするとお世話になるのが highfive という bot です.新規コントリビュータの人が参加しやすいように作られた bot だそうです.アイコンかわいい. github.com お世話になる場面は下記の2つです. Issue を自身に割り当てる…

Servo の開発で出てくる bors-servo について

Mozilla 関係のプロダクトにコントリビュートするとよく見かける (?) ,bors というボットがいます.たとえば,普段コントリビュートするみなさんもこういったコメントを見たことがあるかと思います. @bors-servo r+ 普段は自分でキックすることはないので…

ポケモンのタイトルになっているプログラミング言語を調べてみた

暇ではないです.言い出しっぺの人晒しときます. とりあえず確認してるのは- Go- Ruby- Perlあとなんかあったっけ?— ema (@ema_hiro) 2019年2月28日 歴代のタイトル 面倒なので,まずは日本語のタイトルを都合よく解釈して英語にしていきます. 赤・緑 (Re…

IO モナドを使った Web アプリケーションの構築

Scala の記事を書くのは地味に初めてかもしれません.今回は,Scala の cats-effect というライブラリの中にある IO モナドを使って Web アプリケーションを構築してみたいと思ってやってみたので,その話を簡単にメモしておきます. cats とは? Scala 界隈…

Procedural Macros に入門していたずらしてみた

この記事は Rust Advent Calendar 2018 25日目の記事です. Rust 2018 edition より,Procedural Macros (以下もずっと英語表記します) という機能が新たに追加されました. Procedural Macros においては, TokenStream というストリームが概念の中心にあり…

『A PHILOSOPHY OF SOFTWARE DESIGN』 の1章〜3章を読んだ

こういう本好きなのと,話題になっていたので買ってみて真面目に読んでみています. 話題になってて気になってポチった本が届いた。ソフトウェアデザインをしていてよく思う迷いどころに対する解決策が載ってそう pic.twitter.com/CCUdzvB6wh— yuki (@helloy…

AWS Lambda の新機能 Custom Runtime を Rust でトライ

この記事は CyberAgent Developers Advent Calendar 2018 3日目の記事です. アドテクスタジオ所属の yuki です.社内の方向けに軽く自己紹介をしておくと,2017/11 中途入社です.アドテクスタジオの某プロダクトでテックリードをしています. Rust が好き…

Shinjuku.rs で actix-web の話をしました (ちょっとした解説付き)

11/21 に Shinjuku.rs で登壇しました.今回は actix-web に関する話をしました.もちろん LT ではすべてを話しきることができませんでしたので,今回も裏話を記事にして書き留めておこうかと思います (自身の頭の整理にもなるためです). forcia.connpass.c…

ライプニッツのモナド (1)

関数型プログラミング言語を触っていると,「モナド」という言葉が登場します.関数型プログラミングの文脈でのモナドは,圏論という数学の一分野が元ネタです.しかし,モナドにはさらに元ネタがいます.高校の倫理をやった方は,聞き覚えがあるかもしれま…

Rust LT#2 で話をしました & その話の詳細な解説

Rust LT#2 で話をしました.「インタプリタを作ってまなぶ Rust らしい書き方」という話です.内容は実は,Ruby のコードを Rust のコードに置き換えてみようという内容でした.Ruby 製のインタプリタを Rust に置き換えるセッションです. speakerdeck.com …

関数を呼び出すまではアセンブリに直されない? (C++ と Rust を見比べた)

もしかすると一般的な話なのかもしれませんが,おもしろかったのでメモ書き程度に残しておきます *1.ソースコードはすべてアセンブリに直されているものだとばかり思っていましたが,そうではないんですね. 使ったツールは,Compiler Explorer というサイ…

Rust LT #1 で話をしました

先日開催された Rust LT #1 で話をしました.話は HTTP サーバーを自作してみるというものです.Rust に最近入門された方や,今回の LT ではじめて Rust に触れる方向けに,なにかお話できたらなと思い LT をしました. Rust で簡易 HTTP サーバーを作ってみ…

簡易シェル LSH を Rust で実装してみた

シェルをフルスクラッチしてみようと思い,まずは手始めに簡易的なシェルとして紹介されていた LSH を実装してみました. 実装したソースコードはこちらにあります. github.com LSH に実装されている機能 LSH には次のコマンドが実装されています. cd help…

Junction Tokyo 2018 で優勝しました――技術的な話

3/23-2/25 で,Junction Tokyo というハッカソンに参加してきました.そして,Logistics 部門において見事,優勝をすることができました.3日間本当にお疲れ様でした.スタッフの皆さんもどうもありがとうございました. Junction Tokyo は,毎年5月頃に開催…

clap, serde, rss を使って自分の好きなサイトのフィードを Rust で取得する

自分の好きなサイトのフィードを取得してリストアップしてくれるツールを簡単に作ってみました.ライブラリに関する知識を整理しておきたいので,記事として残しておきます. Rust で CLI ツール 先日,Rust が CLI ツールにも今後注力すると発表しました.…

java.nio を使って簡単な HTTP サーバーを作ってみる: ノンブロッキングなHTTP サーバー

先日,LINE の Meetup in Tokyo #28 に参加してきました.そのときに,Netty を作っている Apple の方が話をしていたのですが,彼の話す ByteBuffer や Channel ,Selector などの単語がよくわからず,帰ってから気になって調べてみました.そこで,java.nio…

Rust の lang_item について

lang_item とは具体的には rustc の下記の箇所で設定されている言語固有のアイテムのことを指しています。また、#[lang = "<lang_item_name>"] アトリビュートを使用することで、その lang_item の実装を書き換えてしまうことができます。 lang_item の一覧: rust/lang_items</lang_item_name>…

Rust の no_std について

詳しいところはドキュメントを読みましょう事案なのですが、今作っているプログラムで次のような文言がはじめて出てきて、どういうことか整理しておきたいのでメモ程度に残しておきます。 出てきたアトリビュートは下記です: #![no_std] 以下、あいまいな理…