ステップ19 変数を使いやすく このステップでは次の機能を実装する。 変数に名前を付けられるようにする。 変数から配列の形状を知ることができるアクセサを実装する。 プリティプリンタを実装する。 変数に名前を付ける <variable>クラスにnameスロットを足し、コンス</variable>…
ソースコード ステップ18 メモリ使用量を減らすモード 計算の途中で得た微分は不要な場合が多いため、用が済んだら消去するように改良する。 また、逆伝播を無効にするモードも実装する。 モード切替を実装するにあたり、backward総称関数にキーワード引数を…
ソースコード ステップ17 メモリ管理と循環参照 弱参照を使うことで、循環参照を解消し、メモリ使用量を減らす。 循環参照があると、参照カウント方式のメモリ管理では解放が難しいという。ガベージコレクタの方式によっては循環参照になっているオブジェク…
ソースコード ステップ14 同じ変数を繰り返し使う 微分を累算して、同じ変数を使っても結果がおかしくならないようにする。 オリジナルのコードにある次のコード片をCommon Lispにどう翻訳するか少し悩んだ。そのままだと(@gradient x)という式があちこちに…
ソースコード ステップ11 可変長の引数(順伝播編) 可変長引数を取り扱うため、callやforwardのシグネチャを変更し、関数の入力も出力もリストとなるよう変更する。 総称関数の特性上影響が大きく、コンパイルエラーを参考に直していくことになる。 ステップ1…
ソースコード ステップ9 関数をより便利に まず、呼び出し側が毎回gradientに全要素が1の配列を設定しなければならないのを直す。 ユーティリティ関数として次のようなものを定義する。 (defun full-like (array fill-value) (let ((dims (array-dimensions …
ソースコード ステップ4 数値微分 Common Lispでは0.942のような浮動小数点数リテラルを読み取ると、デフォルトで単精度浮動小数点数型(single-float)として扱ってしまう。この挙動は (setf *read-default-float-format* 'double-float) という行を挿入すれ…
はじめに Common Lispで深層学習コンパイラを作っている人に感銘を受けたので、プログラミングの練習のためにと自分もCommon Lispで似たものを書いてみようと思い、この本を買った。 ゼロから作るDeep Learning ❸ ―フレームワーク編作者:斎藤 康毅オライリー…
はじめに プログラミングを始めるには、どの言語でも開発環境の構築が必要である。この記事ではCommon Lispの開発環境をEmacsというテキストエディタとSteel Bank Common Lisp(以下SBCLと呼ぶ)という言語処理系を用いて説明する。 まず、SBCLをインストール…
pkgfile pkgfileはファイルを所有しているパッケージを高速に検索できるプログラムである。そのパッケージをインストールしていなくても検索できるため、システムにないコマンドが入力されたら候補となるパッケージを提案するフックが作られている。 参考: p…
この記事の続きです。 elderica.hatenablog.jp 自分のコードが遅い ここずっと、アルゴ式というサイトでいろいろな問題に挑戦しています。このサイトは競うためものではないので、正答例や解説を読んだり、他人のコードを読むのが簡単です。 自分はRustで解…
低レイヤを知りたい人のためのCコンパイラ作成入門 https://www.sigbus.info/compilerbook 困ったら見るリファレンス実装: https://github.com/rui314/chibicc 自分で写経(?)しているコード https://github.com/sbwhitecap/9cc 記録を取ることもなく黙々と…
まずはこの記事を読むことをおすすめします。 A Road to Common Lisp 翻訳 · GitHub 書籍 Practical Common Lisp(実践Common Lisp) gigamonkeys.com 一番最初に読むのに向いている。内容は古びてはいるものの、リスト遊びに終始するよりはるかに良い。日本語…
前提とする環境はArch Linuxで公式パッケージからopensmtpdをインストールする場合。 まずMicrosoftアカウントでアプリパスワードを発行する。 パーミッションは640、所有ユーザはroot、所有グループはsmtpdとして/etc/smtpd/secretsを書く。 hogefuga myacc…
導入 リポジトリはこちら github.com 公式マニュアル 公式チュートリアル Susam Pal 氏によるチュートリアル 設定 デフォルトでは'\'(バックスラッシュ)キーをプレフィクスとするコマンドを使う。 自分はカンマに設定している。 let g:vlime_leader = ',' " …
はじめに AtCoderなどの競技プログラミングのプラットフォームでは、標準入力として空白と改行で区切られたテキストが与えられることが多い。 例 N A_1 A_2 ... A_N Rustでは入出力の記述が煩雑になりやすいとされているため、有志によってproconioというク…
はじめに 知り合いが「これからはRustを知らないとまずいぞ」というので、重い腰をあげてRustを勉強することにした。 まずはTRPLから読んでみることにし、とりあえず第三章まで読んだので練習問題の自分の解答をここに掲載してみる。 書いたコード 温度を華…
問題文 https://play.picoctf.org/practice/challenge/160 What integer does this program print with arguments 4134207980 and 950176538? File: chall.S Flag format: picoCTF{XXXXXXXX} -> (hex, lowercase, no 0x, and 32 bits. ex. 5614267 would be …
問題文 https://play.picoctf.org/practice/challenge/121 keygenme-trial.py 考えたこと Pythonスクリプトを読み解くことで解くようだ。読み解くことで次のことがわかる。 フラグに関連する文字列が格納された変数群がある。 key_part_static1_trial key_pa…
問題文 https://play.picoctf.org/practice/challenge/64 Decrypt this message. 考えたこと ヒントにはシーザー暗号のことが書かれていたので、これで復号すればよさそう。 問題は鍵がわからないことである。アルファベットだけで26通り試す必要がある。 Cy…
問題文 The one time pad can be cryptographically secure, but not when you know the key. Can you solve this? We've given you the encrypted flag, key, and a table to help UFJKXQZQUNB with the key of SOLVECRYPTO. Can you use this table to sol…
問題文 https://play.picoctf.org/practice/challenge/68 The numbers... what do they mean? 考えたこと リンクはPNG画像を指している。画像ビューアで開くと、数列が書かれている。 {や}があることから、フラグそのものの可能性がある。 色々考えたすえ、A…
問題文 https://play.picoctf.org/practice/challenge/104 I wonder what this really is... enc ''.join([chr((ord(flag[i]) << 8) + ord(flag[i + 1])) for i in range(0, len(flag), 2)]) 考えたこと encというファイルには、文字化けする謎のバイナリデ…