trifle

技術メモ(最近は hellorusk.net/blog の方が使うことが多いです)

Fast inverse square root

高速に の近似値を計算するアルゴリズム。 Quake III Arena というビデオゲームのCGプログラムがきっかけで誕生したらしい。 めっちゃ単純で、与えられた x(32bit浮動小数点とする)に対して 浮動小数点 x を対応する 32bit のビット列 i にする。 i = 0x5f…

Cには参照渡しがない

booth.pm プログラミング言語神経衰弱、というものをバイト先の先輩の家でやる機会があり、とても盛り上がった。言語は16種類くらいあって、一目で分かるもの(BrainfxxkやWhiteSpaceなど)もあれば、なかなか区別しづらいものもあった。その中で、 int add(…

Last.fm で不要なアルバムの scrobble を削除する方法

Last.fm では scrobble (楽曲を聴いた記録一つひとつの単位) を操作するための API が公開されておらず、もし登録してほしくない履歴が誤って登録されても、クライアントサイドで削除ボタンをポチポチ押すしか方法がない。 ただ、それでも一応ある程度自動化…

Go で Web サイト監視ツールを作るときのメモ

Go

最近 Web サイトのコンテンツ更新を自動で検知したいという欲が発生したので、監視ツールを作成しました。 そこで初めて Go を使ったのですが、ライブラリが充実しており、並行処理が書きやすく、使いやすかったです。今後また Go で何か作りたい時のために…

Rust 製のシェル Nu Shell の設計理念

github.com www.jonathanturner.org Rust で書かれたという nushell がはてブで話題になっていたので, 自分もちょっと試していた. 実用で使うにはまだ色々難があるけど, 結構おもしろい. これから試す人に対する注意点としては, 現状では rustc の中でも直近…

Mozilla Observatory を試した

observatory.mozilla.org Netlify でホスティングしている自分のサイト https://hellorusk.net をよりセキュアにしてみようと考えた. もちろん, 静的サイトなのでプライバシーに関わる情報を持っているわけではないし, GitHub にソースコードを上げてしまっ…

Scrapbox API のラッパーを書いてみた

よく使わせてもらっている Scrapbox が, 実は API を提供していることを昨日知った. scrapbox.io 前から一度APIラッパーというものを書いてみたいなと思っていて, Mastodon とか Last.fm とかやろうとして規模の大きさに挫折していたけど, この Scrapbox API…

すごい if let たのしく使おう

最近, Rust で Cコンパイラを書き始めました. github.com コンパイラといっても, これはまだ四則演算と値の比較ができる程度です. 今はそんなに手をつけられなさそうですが, 夏休みになったら一気に進捗を高めたいです. ところで, このコンパイラを書くにあ…

線形計画ソルバー PuLP で強双対性・相補性の確認

線形計画問題はなんとなくエクセルとかで解くイメージがあったけれど, Python にもちゃんとライブラリがあった github.com ちょっと使いたくなったので触ってみます 線形計画問題において, (主問題) (双対問題) のそれぞれの実行可能な最適解を とすると…

OCaml で8クイーンを解く

電車の中で 7つの言語 7つの世界作者: Bruce A. Tate,まつもとゆきひろ,田和勝出版社/メーカー: オーム社発売日: 2011/07/23メディア: 単行本(ソフトカバー)購入: 9人 クリック: 230回この商品を含むブログ (65件) を見る を読んでいて, Prolog で数独や…

Monadic Memoization in Python

関数の再帰呼び出しにおいて値を保持しておくことで計算が高速化されるメモ化という手法が知られています. 例えば以下のようにして80番目のフィボナッチ数が高速に求まります. d = [0 for i in range(100)] def fib(n): if n <= 1: return n if d[n] != 0: r…

OCaml と TypeScript の比較に見るユーザ定義型

大学の授業の一つで OCaml という言語を今書いていて, ユーザ定義型について整理して学ぶ機会があったので, TypeScript と絡めてメモしてみます. レコード型 レコードは組の各要素に名前が付いたもの. OCaml での定義は type 型名 = {フィールド名: 型; ...}…

A Complete React Redux Tutorial for 2019 を読んで Redux に入門する

これまで名前しか聞いたことがなかった Redux をプライベートで知る必要が出てきたかもしれないので, 入門してみることにしました. ちょうど最近, daveceddia.com という記事が出たようなので, これを手がかりに, 自分用のメモを残してみます. Redux を使う…

その人が GitHub で普段どんな言語を使って開発しているかをすぐ見れるやつ作った

https://github-language-data.now.sh/ ↑これです 例えば自分の今の状況はこうなる. 仕組みといたしましては, GitHub API の GET /users/:username/repos で, 直近の30件のリポジトリ一覧を取得し, それぞれのリポジトリの json の language をみています. O…

簡単な例で考える React Hooks のよさ

最近安定版にも導入された React Hooks が自分の中で面白いので, とても簡単な例で試してみたよという話をします. 例1: フォーム class Home extends React.Component { constructor(props) { super(props); this.state = { value: 'ここにポエムを書いてね'…

Rustで2048をつくる

2048というゲームのブームはとっくに終わっているとは思いますが, 自分は未だに通学中とかライブ開演前とかの空き時間によくやっています. そんな2048をパソコンでもやりたいなと考えたので, つくってみました. Rustのビルドシステム兼パッケージマネージャ…

NFAをDFAに変換して状態数最小化する

大学の試験で「与えられた言語を認識するような状態数最小の有限オートマトンを答える」問題が頻出されているため, 検算用のプログラムを書いてみます. NFA の入力形式 input.txt として以下のように与えます. 2 0 0,0 1,0, 1,2,2, 2,3,3, 3,,,1 一行目は[入…

今TeXを始めるならVSCodeが良いかもしれない, という話と, MacOSで最低限の文書を出せるようにするまで

VSCodeのLaTeXの拡張機能に, 部分的な数式のレンダリングの機能があることを今日知りました. vscodeのtex環境, カーソルを合わせた瞬間数式表示されるの天才か pic.twitter.com/EWtetJRCZN— f_jhr (@f_jhr) 2018年12月22日 どうやらこれは比較的最近追加され…

Rustの配列に関する雑多なメモ

多重配列の初期化 固定長のarrayの場合は[T; N]という形式なので, 例えば2次元配列の場合は, let a: [[i32; 3]; 2] = [[0; 3]; 2]; println!("{:?}", a); // [[0, 0, 0], [0, 0, 0]] let mut b = [[39; 2]; 3]; // 型を省略すると推論される b[1][1] = 8; pr…

Twitter APIに全く頼らずにslack botだけでタイムライン管理をしてみる

※ この記事はISer Advent Calendar 2018の3日目の記事としても書かれています. 最近はTwitterを開くのが面倒でやっていないのですが, 好きな声優 or アーティスト or アニメの最新の情報が手に入らないことに以前より悩まされていました. 昨日デレマスのライ…

WhitespaceのインタプリタをRustで書こうとしたという話

Whitespace というクリーンな言語がある. この言語で Hello World するにはこのようなプログラムを書く. カラクリとして, Whitespace では(空白文字), (タブ), (改行文字)の3種類を使ってプログラムを組み立てている. いくつか解説しているサイトがあ…

Emoji Prefix 忘備録

git

他の人のコミットを見て「これどういう意味だっけ...?」となることがしばしばあるので. 日本語だとあまりちゃんとしたまとめが見つからない. 自分がよく見るやつだけメモしておくので最低限だと思います. ちなみに絵文字自体はUnicodeにこんなにある. ちゃ…

コマンドライン上で Evernote

ただのメモ. 自分はスマホとPCの間でメモ書きや写真をやり取りする際 Evernote を使っていて, 以前は PC→スマホ でデータを送る際いちいちアプリケーションを開いていたが, これはコマンドラインで全て済むことに気づいた. 例えば, ディレクトリ内の test.jp…

dotfiles はじめました

私は macOS を使っていますが, 最近 PC をチョコチョコカスタマイズしているので, 突然 PC が壊れて使えなくなるような不測の事態に備えて最低限の環境構築はすぐに出来るようにしようと思いました. そこで役立つのが dotfiles らしいです. 私も作ることにし…

Haskellでも非決定性有限オートマトンがしたい!

理学部オートマトン学科に在籍しているので, オートマトンについて勉強させられています. これは決定性有限オートマトンという良いオートマトンです. 各状態と各文字に対して, 状態遷移がちょうど1つだけ定められています. 形もかっこいいですね. これは非決…

jQuery しか知らなかった人間が React に触れてみた感想

個人サイト hellorusk.net を jQuery から React に乗り換えた. 以前は CDN で jQuery を読み込んでいただけだったが, Node.js に慣れてきたので, 今回はローカルの React で create-react-app して雛形を作り, できたアプリケーションを Bitbucket に push …

ES6 のクラス 覚え書き

const, let やらアロー関数やらasync, await やらにはそこそこ慣れてきたが, クラスについては曖昧な理解のままな気がしたので, を読んで部分的にまとめておく. クラスを定義する クラスの定義はクラス宣言(Class declarations)とクラス式(Class expressi…

Stateモナドでランレングス圧縮

最近Stateモナドを学び始めた. 状態を保持しながら計算を進めたいときに便利のようである. とりあえず, get で状態を取り出し, put で状態を更新し, 最後に return で最終的な値を出すStateモナドを定義(Stateモナドの型は State [保持する状態の型] [最終…

Haskellの型クラス/インスタンスはIQ150を超える

に触発されて, これを Haskell でもやってみようと思った. + をアドホック多相させようという話だ. Python には特殊メソッドを定義する関数があり, + であれば __add__() が対応している, という感じのようだ. Haskell には型クラスとインスタンスというもの…

Haskell の I/O 処理 覚え書き

初学者のメモです. 概要 基本 I/O アクションにまつわる関数①(標準入出力) I/O アクションの組み立て do 記法 (余談)糖衣構文について I/O アクションにまつわる関数②(ファイルシステム) I/O アクションにまつわる関数③(例外処理) その他今回は触れ…