プログラミングをプログラミングすること。
Rubyにおけるメタプログラミングの例
class Person attr_accessor :name, :age end
Rubyではattr_accessorを用いてインスタンス変数をアクセスするメソッド(ここではnameとage)を生成できる。
どうも hkrblog です. 最近やたらと寒いですね..... 今日はpythonのメタプログラミング入門と題して本当に触りの部分、 クラスを動的に作って、インスタンス生成して、メソッド呼び出すくらいのものです. (やっぱりpythonだとコード短いし、パパパッて感じで書けてしまう感じがして ブログとかに載せやすいからついついpython関連の記事になってしまう....w) 実際このコードは2, 3か月前に書いたものです... まずはコードを載せてしまいます. class Student: def __init__(self, student_id, name): self.student_…
新しい言語をさわったらとりあえずラムダ計算のインタプリタを実装するよね! Scalaでふつうにラムダ計算のインタプリタを実装するのはあまりに簡単*1なので, 型レベルでやってみた.まじめな話をしておくと, C++のテンプレートがチューリング完全なのは有名な話だけど, Scalaではどうなのか気になった. 以前C++のテンプレートでラムダ計算のインタプリタを実装したのと同様のことができるか思考実験してみると, だいたいできそうに思えたのでやってみた. *1:ケースクラスの公式ドキュメントに途中まで実装が書いてあるレベル
Tl;Dr それは何? 構成は? がんばるぞい bot の歴史 (興味がない方は読み飛ばしてください) ペンギン村 Slack では昔から がんばるぞい bot が稼働していました。 それは Slack bot と呼ぶには単純すぎるもので、「がんばるぞい!」や「がんばったぞい!」などと書き込むと、ランダムでキャラクターがメッセージを返答してくれるという、まぁがんばる人を応援しちゃうぜ的な bot でした。 そんな、がんばるぞい bot ですが実は2度もスクラッチで書き直されています。 初代: JavaScript / AWS Lambda もっとも初期のサービスは JavaScript / A…
「Julia言語で入門するプログラミング」第10回である。未読の方は第1回〜第9回を読んで欲しい。 Julia言語で入門するプログラミング(その1) - SE教育パパむううみんのブログ Julia言語で入門するプログラミング(その2) - SE教育パパむううみんのブログ Julia言語で入門するプログラミング(その3) - SE教育パパむううみんのブログ Julia言語で入門するプログラミング(その4) - SE教育パパむううみんのブログ Julia言語で入門するプログラミング(その5) - SE教育パパむううみんのブログ Julia言語で入門するプログラミング(その6) - SE教育パパむう…
- はじめに - Pythonのパッケージ管理ツールは、長らく乱世にあると言える。特にpip、pipenv、poetryというツールの登場シーン前後では、多くの変革がもたらされた。本記事は、Pythonパッケージ管理ツールであるpip、pipenv、poetryの3つに着目し、それぞれのツールに対してフラットな背景、技術的な説明を示しながら、所属企業内にてpoetry移行大臣として1年活動した上での経験、移行の意図について綴り、今後のPythonパッケージ管理の展望について妄想するものである。 注意:本記事はPythonパッケージ管理のベストプラクティスを主張する記事ではありません。背景を理解…
こんにちは。メドピアのお手伝いをしています @willnetです。花粉が厳しい季節みなさんいかがお過ごしでしょうか。僕は毎年レーザー治療したいな、と思っているのですが気づくともう春になっています。次回こそは…。 さて、メドピアでは毎週水曜日の11時から12時の間に社内読書会を開催しています。これは社内でなるべく多くの人が仕事上で使える知見を獲得することを目的としています。進め方は 予習不要 音読する キリのいいところで止めて感想を話す という形です。詳しい内容は以前個人のブログで書いたので興味のある人は読んでみてください。 しかし読書会を定期開催するようになってから4年がすぎ、また社内のエンジ…
9章 Active Record の設計 Active Record は、Ruby のオブジェクトをデータベース のテーブルにマッピングするもの ActiveRecord::Base Active Record は、Active Support と Active Modelの2つのライブラリに大きく依存している ActiveSupport::Autoloadモジュールのautoloadを用いて多くのモジュールのincludeを実現している autoload https://docs.ruby-lang.org/ja/latest/method/Module/i/autoload.html モジ…
OSSってやりがい搾取じゃねえか?と思ったので書く。 それを理解するにあたっていくつかのプログラミングの発展段階をまとめる必要があるように思う。 ■原始時代 パソコンのメモリがギガ単位で当たり前となったこの時代には考えられないが、そもそも動かせるプログラムに限界があった時代があった。その時代のプログラムは極めてサイズが小さく、アプリは原始的な動きしかなかった。機械の性能がついてこなかったからだ。 プログラマの学習初期に見られるような、一枚のファイルで動く極めて小さいプログラムを作ること、それが原始時代だ。hello worldと画面に表示するだけのプログラムはせいぜい1KBファイルでコマンドラ…
Haskell は Swift に影響を与えたプログラミング言語として知られています。Swift に影響を与えたとされるプログラミング言語は他にも Objective-C、Rust、Ruby、Python、C# など多数に及びますが、プログラミングパラダイムに最も影響を与えているのは Haskell でないかと私は感じています。 この連載記事は、Swift と比較しながら Haskell を学んでいく記事です。 0. Introduction 1. 環境構築 2. 関数の基本 3. データ型の基本 4. リストと演算子と関数合成 5. リストと再帰 6. レコード構文と多相型とカインドと --…
前回はI18nのデータを元にコメントを追加するというやつを書きました。 patorash.hatenablog.com 今回は、さらに踏み込んで、ActiveRecord::Enumの値が何を示しているのかを、メタプログラミングを使ってコメント化しました。 なお、プロジェクトではgem enum_helpを使っているため、それを前提とします。enum_helpは、enumの値からI18n対応した文言を取得するのを楽にするgemです。 github.com マイグレーションファイルを作る とりあえず生成。 bin/rails g migration AddColumnCommentFromEnu…
C言語はUNIXとともにある 機械でも分かるような手順を書く Cにおけるプログラミング C++の特徴 C/C++はプログラミング界の帝王 ポインタとクラスの両立が難解でメモリ管理は手動 システムプログラマの標準言語 レシーバ、メソッド、メッセージ クラス階層 オブジェクトに対する任意の演算子を定義する感覚に近い C++におけるクラス C++のクラスには、データ、メソッド、インスタンスの作成の3つの記述部がある 仮想関数 動的なオブジェクトの作成 動的なオブジェクトの作成とは 基本クラスに派生クラスのオブジェクトをつめこむ テンプレート テンプレートは型を作る型 C言語はUNIXとともにある C…
こんにちは、id:daido1976 です。 Ruby 3.0 の「キーワード引数の分離」が原因で委譲用のメソッドが壊れた場合、特に Ruby 2.6 ~ 3.0 で互換性を保ちながら対応する場合の日本語記事が見当たらなかったので、書かせていただきます。 インスタンスメソッドが壊れた場合 以下のコードは Ruby 3.0 より前のバージョンでは動きますが、3.0 からは MyClass#other_method の実行時に ArgumentError が起きるようになります。(2.7 の時も警告が出ます) class MyClass def delegating_method(*args) o…
こんにちは。サービス開発課の丸山です。 今回は最近触っていて疑問に思ったwith_optionsについて調べてみました。 with_optionsはRailsでよく使われる、こんな感じのメソッドです。 class Account < ActiveRecord::Base with_options presence: true, if: -> { foo? } do validates :name validates :email end end これは以下のコードと等価です。 複数のメソッド呼び出しにまとめて同じオプションを指定する時に便利なメソッドですね。 参考: APIドキュメント cla…
「Julia言語で入門するプログラミング」第6回である。未読の方は第1回〜第5回を読んで欲しい。 Julia言語で入門するプログラミング(その1) - SE教育パパむううみんのブログ Julia言語で入門するプログラミング(その2) - SE教育パパむううみんのブログ Julia言語で入門するプログラミング(その3) - SE教育パパむううみんのブログ Julia言語で入門するプログラミング(その4) - SE教育パパむううみんのブログ Julia言語で入門するプログラミング(その5) - SE教育パパむううみんのブログ スキルの実装 前回の続きからのスタートだ。順番にスキルを実装していこう。…
2021.1.21- チュートリアル12章(11章が基本) controllerの部分がmailer viewの部分がメールとなる。 ここ画像111 --メールを使ってパスワードの再設定-- 1 再設定フォームから自分宛のemailを入力 2 emailをキーにDBからユーザーを探す。見つかれば再設定用トークンと、対応するハッシュ値を作成 3 ハッシュ値をDBに保存し、再設定するためのトークン付きリンクをメールアドレスに送信する。 4 リンクがクリックされたら、メールアドレスを探し、DBに保存したハッシュ値と比較して認証する 5 認証に成功したら、パスワード再設定フォームを表示。 *再設定用フ…
『Fluent Python』ようやく読み終わった(´_ゝ`)約800ページ。1日10ページずつ毎日必ず進めていきやした。 まあちゃんと理解したかっていうと別の話だけど。 最後のメタプログラミングのあたりはほぼ「無」の状態で進めてた。 コードも書いて動かしつつやってたけど、バグが出て良く分からんところはgit-hubのコードと見比べてバグフィクス。良い時代になったなぁ(´_ゝ`) むかしはエラーコードがあっても何が原因か分からんことあったしね。とくにCやってたときは処理系依存に泣かされたし。 とりあえず今後も「技術書を毎日10ページやる日課」を続けていこうと思う。技術書はいっぱいあるし。 『F…
紹介 プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで Software Design plus作者:伊藤 淳一発売日: 2017/11/25メディア: Kindle版 アカウント有効化 トークンとメールアドレスの情報の2つをURLに含める。 (URLパラメータとか) 色々含んだURLを盛り込む。 activation したのかしてないのかのカラムも必要 editアクションがちょうどよい。/:id が入れられるから showアクションはリソースを変更しないから普通。 Restfulの規則的にはeditの方がふさわしいので。 sessionのときと同じかんじ de…