Aoinoのブックマーク (582)

  • 状態機械を合成してデッドロックを検出できる Go 言語パッケージを作ってみました - チェシャ猫の消滅定理

    はじめに マルチスレッドで動作するプログラムの設計は難しい問題です。個々のスレッドの動作は単純に見えても、複数が並行して動作する場合の動作は組み合わせ論的に複雑になります。また、タイミングに依存する不具合は狙って再現することが難しく、通常の単体テストによる検出にも限界があります。 そんなとき、有効な手法がモデル検査です。システムの取りうる状態をあらかじめ網羅的に探索することで、「実際に動作させた際にごく低い確率で踏むバグ」であっても、動作させることなく設計段階で発見することが可能になります。 ところでちょうど先日、デッドロック発見器を自作するハンズオンに参加する機会がありました。内容は非常にシンプルなモデル検査器を実装するというもので、せっかくなのでそのときの成果物を Go のパッケージとしてまとめたものを以下に公開しました。 github.com 以下、このパッケージで何ができるのかを具

    状態機械を合成してデッドロックを検出できる Go 言語パッケージを作ってみました - チェシャ猫の消滅定理
    Aoino
    Aoino 2020/04/05
  • タネ明かし: Whitespaceコンパイラを作った話の裏側 | κeenのHappy Hacκing Blog

    κeenです。今朝、エイプリルフールのネタ記事を書いたのでそのタネ明かしをします。タネとはいっても、ほぼ手書きなんですけどね。 WhitespaceはEdwin BradyとChris Morrisにより2003年4月1日に発表された言語です。 この言語自体エイプリルフールのジョークなんですね。 公式ページはあるのですが、繋がらないのでWebArchiveとかからアクセスして下さい。 特徴としては空白文字、タブ文字、改行文字だけで構成されているのでパッと見では何も書いてないようになる点があります。 いわゆるesoteric languageです。 今回の私のエイプリルフールのジョークは、Whitespaceを知らない人には「正直者にしか見えないコードですか?」、Whitespaceを知ってる人には「Whitespace!?んなもん書ける書けるわけないだろ!あ、そうか今日はエイプリルフールか

    タネ明かし: Whitespaceコンパイラを作った話の裏側 | κeenのHappy Hacκing Blog
    Aoino
    Aoino 2020/04/04
  • CognitoでSign in with Appleを実装して当たった壁 - Qiita

    はじめに 2019年11月、Amazon CognitoがSign in with Apple1をサポートしました。 公式記事はこちら 触れる機会があったので、この記事では以下の事柄についてまとめてみました。 Cognitoを利用して、Appleでサインインできるようになるまで Sign in with Appleの特徴 実際にぶち当たった壁 想定読者 ★★★これからAppleのアカウント連携を利用して何かしたい人★★★ OAuthとか認証認可なにそれ美味しいの状態の人 筆者も依然勉強中のため、詳しすぎる人はちょっと御免です(アドバイスは歓迎します!) Vueにさくっと触れてみたい人(サンプルアプリあります!) お断り Sign in…と言いつつ、この後日語で「ログイン」や「ログアウト」という言葉が多数出てきます。 Sign in=ログイン Sign out=ログアウト と読み替えてくだ

    CognitoでSign in with Appleを実装して当たった壁 - Qiita
    Aoino
    Aoino 2020/04/01
  • 【全方位木DP】明日使える便利な木構造のアルゴリズム - Qiita

    この記事について この記事では、一部で全方位木DP、Rerooting等と呼ばれているアルゴリズムの紹介/解説と、その実装についての簡単な説明を行います。 全方位木DPなどと物騒そうな名前がついていますが、発想自体は全く難しくありません。また、実装もそこまで難しいものではないです。 前提知識として、最低限のグラフ理論の知識(特に木構造について)を要求します。(有向木の根/部分木等…) 謝辞 この記事中に挿入されている図は、殆どを @259_Momone さんに提供して頂きました。素晴らしく美しい図を提供して頂き、この記事を分かりやすいものとして頂いたことに感謝いたします。 全方位木DPとは 各点から深さ優先探索を行って解くことができる問題のうち特定の条件(後述)を満たすものについて、全頂点についての答えを同等の計算量で求めることができるアルゴリズムです。 まず、全方位木DPで解くことができ

    【全方位木DP】明日使える便利な木構造のアルゴリズム - Qiita
    Aoino
    Aoino 2020/04/01
  • Sign in with Apple を本番でやらかしをしないために考えてみた - Reckless Engineering

    認証認可を趣味でやっている@nerocruxです。この記事は 認証認可技術 Advent Calendar 2019 第11日目の記事です。 番でやらかした人のAdvent Calendarではありませんのでご注意ください。 ...しかしこんなのやったら番でもやらかしちゃうぞとの指摘があるかもしれませんので予めお詫びをしときます (´;ω;`)ウッ そろそろ Sign In With Apple (以降、SIWA) を実装する時期がやってきました。番で SIWA を実装したサービスも増えてきました。最近 pocket 以外に、vivinoも実装しており、さらにadobe creative cloudも実装しています(なぜかweb版のみだが)。 またAppleCEOであるTime Cookさんもわざわざ日に来てSIWAを実装したTimeTree社をtwitterで褒めたりしていて、

    Aoino
    Aoino 2020/03/26
  • 「プログラミング言語Go完全入門」の期間限定公開のお知らせ | メルカリエンジニアリング

    メルペイ エキスパートチームの@tenntennです。 メルペイでは、社外の方向けにGopher道場という体系的にGoを学べる場を無償で提供してきました。Goの普及を目的にこれまでに7回開催し100人以上の方に参加していただきました。 自社でもGoを基幹技術として使っている背景があり、今後もGoコミュニティへの貢献は継続していきます。しかしながら、新型コロナウイルス感染症の状況を踏まえて直近のGopher道場開催を見合わせています。 Goを学ぶ場を提供することでGoに触れる方を増やしたいと考えている筆者にとっては、 開催できないことが非常に残念です。そこでエキスパートチームでは違う形で学ぶ場を提供できないかと考え、Gopher道場で使用している資料のベースになっている「プログラミング言語Go完全入門」を期間限定で公開することにしました。 bit.ly bit.ly 追記 3/18:PDF

    「プログラミング言語Go完全入門」の期間限定公開のお知らせ | メルカリエンジニアリング
    Aoino
    Aoino 2020/03/21
  • Algebraic EffectsとExtensible Effectsの違いってなんや? 関係あんの?

    1. はじめに 最近のエフェクトシステム2大ホットトピックといえばAlgebraic EffectsとExtensible Effectsだろう [要出典]。 度々この2つの違いは何なのかという質問を見ます。 比較というわけでも無いんですが、今回はこの2つを並べて見比べてみましょう。 そいうえばだいぶ前の発表でこんなこと言ってましたけど 当かしら 2. Algebraic Effects and Handlers PlotkinとPowerによりもたらされた、計算エフェクトを代数的に表現するという考え方[1]に、PlotkinとPretnarがハンドラを追加したもの[2]である。 詳細はカツアイしますんで、ブログをご巡回ください。 簡単にまとめると、 新たな言語機能 エフェクト(仕様)とハンドラ(実装)が分離できるモジュラーな手法 エフェクトシステムによって計算中にどのようなエフェクト

    Algebraic EffectsとExtensible Effectsの違いってなんや? 関係あんの?
    Aoino
    Aoino 2020/03/21
  • Scarab: SAT型制約プログラミングシステム

    Aoino
    Aoino 2020/03/21
  • IoPLMaterials

    学習の仕方 計算機科学コースの学生には講義中に別途やり方を指示します.(実験3SWもやるので.) この講義資料の GitHub のページからリポジトリを clone しましょう. OCaml が使えるように環境を設定しましょう. 落ちてきたソースコード中の textbook/interpreter/ ディレクトリの中にインタプリタのソースコードが入っているので,duneコマンドでビルドしましょう. 教科書を読みながらもりもり演習問題を解きましょう. 教科書にバグを見つけたら issue で報告しましょう. 講義の履修者は講義用 Slack で質問してもよいですね. プログラミング言語強者になりましょう.そのためには... なにか自分で言語を作って処理系を作ってみましょう.作った処理系を自慢しましょう.世界中で自作の言語が使われるようになったらいいですね. もしくは,プログラミング言語理論や

    Aoino
    Aoino 2020/03/21
  • Scala doesn't Need Generics! (or You can Encode Generics Using Abstract Type Members) - kmizuの日記

    タイトルは煽りではありません。もちろん、Scalaを実用的に使う上では「直接」Genericsを扱えないのは困ります。しかし、記述の冗長ささえ我慢すればGenericsのほぼ全ての機能をAbstract Type Membersによって表現できます。このことを指して、GenericsはAbstract Type Membersでエンコードできると言ったりします。とりあえずコード出せやといわれそうなので、実際のコードを貼りつけてみます。 gist.github.com このコードでは、不変Listと、その上の高階関数mapとforeachをGenericsなしで構築しています。 ポイント: Genericな型 => Abstract Type Memberを持った型 Genericなメソッド => Abstract Type Memberとメソッドを持った型 関数 => Abstract T

    Scala doesn't Need Generics! (or You can Encode Generics Using Abstract Type Members) - kmizuの日記
    Aoino
    Aoino 2020/03/16
  • Gentle Introduction to DOT calculus

    Gentle Introduction to DOT calculus

    Aoino
    Aoino 2020/03/16
  • JavaScript における文字コードと「文字数」の数え方 | blog.jxck.io

    Intro textarea などに入力された文字数を、 JS で数えたい場合がある。 ここで .length を数えるだけではダメな理由は、文字コードや JS の内部表現の話を理解する必要がある。 多言語や絵文字対応なども踏まえた上で、どう処理するべきなのか。 それ自体は枯れた話題ではあるが、近年 ECMAScript に追加された機能などを交えて解説する。 なお、文字コードの仕組みを詳解すること自体が目的では無いため、 BOM, UCS-2, Endian, 歴史的経緯など、この手の話題につき物な話の一部は省くこととする。 1 文字とは何か Unicode は全ての文字に ID を振ることを目的としている。 例えば 😭 (loudly crying face) なら 0x1F62D だ。 1 つの文字に 1 つの ID が割り当てられているのだから、文字の数を数える場合は、この ID

    JavaScript における文字コードと「文字数」の数え方 | blog.jxck.io
    Aoino
    Aoino 2020/02/23
  • お薦めのコンパイラの本とか | κeenのHappy Hacκing Blog

    κeenです。たまにお薦めコンパイラの教えてなどのやりとりをTwitterで見かけるのでまとめておきます。 私の主観が入っているので他の方の意見も参考にして下さい。 普通の入門書三書 よく挙げられるのは通称「ドラゴンブック」、「タイガーブック」、「中田先生の最適化なんちゃらの」です。 このうちのどれかを読むと良いでしょう。 こういう教科書系のによくあることですが、だけでなく挙げられている参考文献の情報も重要なので読み終わっても売らないで棚に残しておくことをお薦めします。 コンパイラ[第2版]~ 原理・技法・ツール ~ いわゆるドラゴンブックです。結構古くからあるです。前半が構文解析の理論で、後半でコンパイラ関連の技法などが載っています。 割と技法の紹介が多く、幅は広いですがそれぞれの説明に割かれた紙面は小さいです。 章分けが雑なので目次だけで内容を判断せず、手にとって確かめたほ

    お薦めのコンパイラの本とか | κeenのHappy Hacκing Blog
    Aoino
    Aoino 2020/02/16
  • 速攻MinCamlコンパイラ概説

    Aoino
    Aoino 2020/02/16
  • ((Pythonで) 書く (Lisp) インタプリタ)

    Peter Norvig / 青木靖 訳 このページには2つの目的がある。コンピュータ言語の実装について一般的な記述をすることと、Lispの方言であるSchemeのサブセットをPythonで実装する具体的な方法を示すことである。私はこのインタプリタをLispy (lis.py)と呼ぶ。何年か前に私はJavaとCommon LispでSchemeインタプリタを書く方法を示した。今回の目標は、アラン・ケイが「ソフトウェアのマクスウェル方程式」と呼んだところの簡潔さと取っつきやすさを可能な限り実現するということだ。 SchemeのサブセットLispy の構文と意味論 コンピュータ言語の多くは様々な構文的な決まり(キーワード、中置演算子、カッコ、演算子優先順、ドット記法、セミコロンなど)を持っているが、Lisp族言語の1つとして、Schemeの構文はすべてカッコ付きの前置記法であるリストを基とし

    Aoino
    Aoino 2020/02/16
  • 低レイヤを知りたい人のための Cコンパイラ作成入門

    はじめに このオンラインブックは執筆中です。完成版ではありません。フィードバックフォーム このには一冊のに盛り込むにはやや欲張りな内容を詰め込みました。書では、C言語で書かれたソースコードをアセンブリ言語に変換するプログラム、つまりCコンパイラを作成します。コンパイラそのものもCを使って開発します。当面の目標はセルフホスト、すなわち自作コンパイラでそれ自身のソースコードをコンパイルできるようにすることです。 このでは、コンパイラの説明の難易度が急に上がりすぎないように、様々なトピックを書全体を通じて次第に掘り下げていくという形で説明することにしました。その理由は次のとおりです。 コンパイラは、構文解析、中間パス、コード生成といった複数のステージに概念的に分割することができます。よくある教科書的アプローチでは、それぞれのトピックについて章を立てて解説を行うことになりますが、そのよう

    Aoino
    Aoino 2020/02/15
  • Google Scholar

    Aoino
    Aoino 2020/02/05
  • Composing Bidirectional Programs Monadically

    Aoino
    Aoino 2020/02/05
  • Applicative bidirectional programming | Journal of Functional Programming | Cambridge Core

    Aoino
    Aoino 2020/02/05
  • 圏論とプログラミング / Category Theory and Programming

    シンポジウム「圏論的世界像からはじまる複合知の展望」@慶応大学 (Jan 25, 2020) http://www.inter.ipc.i.u-tokyo.ac.jp/symposium.html 「圏論とプログラミング」発表スライドメモ - Qiita https://qiita.com/inamiy/items/9af1da1faec22cd968f0 Video: https://www.youtube.com/watch?v=Ua6NE48_-1s

    圏論とプログラミング / Category Theory and Programming
    Aoino
    Aoino 2020/02/05