西村まさゆき @tokyo26 ☎09038043720/ ✉tokyo26@gmail.com/ ライター。企画、執筆。移動好き。好物は海藻。東京都中央区月島在住(鳥取県倉吉市出身)/著書『日本の路線図』三才ブックス/『たのしい路線図』グラフィック社/『ふしぎな県境』中公新書/『ファミマ入店音の正式なタイトルは大盛況に決まりました』笠倉出版社 dailyportalz.jp/writer/kijilis…
テクノロジー部門で Ruby インタプリタの開発をしている笹田です。RubyKaigi 2024 楽しみですね。 さて、Ruby のメソッドを定義するとき、仮引数がある場合、カッコを省略することができます。 def foo(x, y) end def bar x, y end bar の定義の方法ですね。私は好んでこの書き方をしてたんですが、同僚の遠藤さんに「そんな書き方をしているのは今時笹田だけだ」と言われてショックを受けたので、ちょっと調べてみました。 ちなみに、カッコがないと使えないメソッド定義の方法があるので、その時には涙を呑んでカッコをつけます。 def foo(kw:) # 必須キーワード引数 end def bar(&) # 無名ブロック引数 end 補足1:Ruby では「メソッド呼び出し時にカッコをつけるかどうか」にいろいろな論争がありますが、ここでは「メソッドを定義する
TL;DR tar(1)の引数はオプションではなくkeyだから 歴史 tar(1)は Unix v7 (1979) で導入されたが、その前身は Unix v4 (1973) の tp(1)、更にこれは Unix v1 (1971) の tap(1) に遡る。 80年代に入りSystemV v.s. BSDといったことが起きたりし、PWB/UNIX (Programmer's WorkBench)で導入された cpio(1)とtar(1)、どちらがUnixの標準アーカイバか争われた結果、IEEE Std. 1003.1-2001 (POSIX.1-2001) を以って tar(1)は規格から削除され、代わりに IEEE Std 1003.2-1992 で導入された折衷案のpax(1)が標準となった。よって、現在実装中立なtar(1)の仕様書がそもそも存在しない。最後の中立規格は1997―19
続・tar(1) はなぜオプション引数にハイフンが不要なのか?―tarとkey argumentsの起源を更に辿る また、過去ではなく未来方向、つまり Bell Lab で Unix の successor として生まれた Plan 9 や Inferno における tar についてはこちらで lufia 氏がまとめておられたので参考にどうぞ。Plan 9とInfernoにおけるtar(1)の変化 Introduction 前回の記事では、tar(1)が Unix v1 (1971) のtap(1)まで遡ること、 また、その引数は key というサブコマンドの原始的な姿のようなものだったことを調査した。 さて、実は Unix v1 Programmer's Manual の栄えある最初のページを飾るコマンドは今でもスタティックリンクライブラリの作成などで使われる ar(1) であり、 こち
Goで関数の引数に、struct Aという型もしくはstruct Bのどちらかを受け取るということをしたかった。interfaceをちゃんと切ってそれに必要なメソッドをAとBに実装することで実現できることを知った上で、あまり丁寧にそういうことをせずにやりたい。 色々調べると、genericsを使うとできるようだ。 package main import "fmt" type A struct { Field1 int } type B struct { Field2 string } type AorB interface { A | B } func PrintAorB[T AorB](s T) { // Tで受け取ったものをそのままs.(type)とは出来ないので、一旦anyへキャスト switch v := any(s).(type) { case A: fmt.Println(v.
この記事はtraP Advent Calendar 2023 14日目の記事です。 はじめに こんにちは。19Bの@kegraという者です。いつもゲーム開発とかWeb開発あたりをやってます。 今日はJavaScript(TypeScript)で最近やらかした割と初歩的なデカいミスを紹介したいと思います。 setInterval()による定期ポーリング 僕は今あるシステムを作っており、そのシステムではクライアントサイドが定期的にサーバーのAPIを叩いて情報を取ってくる感じになっています。いわゆるポーリングです。 クライアントサイドはWebフロントエンドで作っており、僕はこの実装でsetInterval()を使っていました。 setInterval(() => { updateData(); }, 5000); // 5秒おきにポーリング そこで本当にしょうもないのですが、第2引数を書き忘れて
CERT Coordination Center (CERT/CC, Carnegie Mellon University)は4月10日(米国時間)、「VU#123335 - Multiple programming languages fail to escape arguments properly in Microsoft Windows」において、Windows上で動作する複数のプログラミング言語から引数を適切にエスケープしない脆弱性を発見したと報じた。この脆弱性はアプリケーションのコマンドインジェクションにつながるとして注意を呼びかけている。 VU#123335 - Multiple programming languages fail to escape arguments properly in Microsoft Windows 脆弱性の詳細 多くのプログラミング言語にはオ
普段Go書いているときにそこまで気にしてなかったが、ふと気になったので色々パターンを挙げてみる。なおこの記事には「答え」が書かれてないので、みなさんの意見を聞かせてください。 複数の引数を取るパターン一覧 そのまま引数を羅列する 複数の引数をまとめたstructを取る Functional Options Pattern そのまま引数を羅列する 例えばHTTPリクエストを行うような関数があったとして、 func Request(ctx context.Context, method http.Method, _url string, query url.Values, formValues url.Values) error { // do something } というシグネチャが考えられる。 実際にnet/http.NewRequsetWithContext は func NewReq
こんにちは、エムスリーエンジニアリンググループ Unit5 (Consumer) チームの園田です。 今回は大きな実装ではなく、TypeScript のちょっとしたテクニックを Next の API ルートを題材に書いてみます。 想定読者は TypeScript 初心者の方です。TypeScript 強者の方はどうぞ温かい目で見てください。 はじめに モチベーション 実装のポイント 試行錯誤 関数で何度も囲む形式 引数指定 + オーバーロード 実際に辿った実装手順 最終的なコード Class 構文での実装 まとめ We are hiring はじめに まずは何を作ったのかご覧ください。 NextApiHandler の Factory できた メソッドチェーンで引数が増えてくやつ hono の zValidator を意識したけど、ハンドラの引数として Zod を渡すのではなくメソッドチェ
よく見たら不自然なんだけどこれまで普通に許されていた、この引数デフォルト値がついに禁止されます。 何がおかしいって型がintなのに引数を渡さないことができてしまうので、矛盾してしまうわけですね。 これはPHPが昔からの仕様を残しておいたためであり、いわゆる歴史的経緯というやつです。 以下は該当のRFC、Deprecate implicitly nullable parameter typesの日本語訳です。 PHP RFC: Deprecate implicitly nullable parameter types Introduction PHP7.1で?T構文、さらにPHP8.0でUnion型がサポートされたことにより、PHPはnull許容値型を正しく書くことができます。 歴史的にはPHP5.0でオブジェクト型、PHP5.1でarray、PHP5.4でcallable、PHP7.0でス
今日はhas_manyのブロック引数に関して取り上げます。 以下のモデルを想定します。 # attributes # # name: 氏名 # attendance_count: 出席回数 class Student < ApplicationRecord has_many :exams end # attributes # # student_id: 学生ID # subject: 教科 # period: テスト実施回 # score: 得点 class Exam < ApplicationRecord belongs_to :student end スコープブロック has_many のブロックと聞くとまずスコープブロックが思いつくと思います。 今回のテーマのブロック引数とは異なりますが、先にスコープブロックに関して触れていきます。 スコープブロックは has_many の第2引数に
この記事では、Scala 3と関数型ライブラリであるCatsを時折使いつつ、Stateモナドを利用することでmap結果にうるおいを与えられるという話題を紹介します。 よくある処理: mapしてからペアにする まあまあよくある: メソッドはたまに値返さないことがある まあまあよくある: メソッドが非同期の場合もある Stateモナド 通常の関数をStateに持ち上げる Stateでmapする StateT登場!! 一般化する まとめ プログラミング言語で最も頻繁に使われるデータ構造といえば、タプル、とりわけ2つの要素を持つタプルであるペアかもしれない。 【タプルとは?】 タプルとは、いくつかの型を並べて組にし、1つの型として扱えるようにしたものです。例えば、StringとIntをくっつけた(String, Int)というタプルを考えることができます。 タプルを構成する型の数によって、3-タプ
本記事は、最近のRubyで出現した"無用な"(さもなければ物議を醸す)構文要素を扱うシリーズ記事の一環です。本シリーズの目的は、そうした機能を擁護することでも批判することでもなく、その機能が導入された理由、設計、そして新構文を使うコードに与える影響を分析するための一種の「思考のフレームワーク」を皆さんと共有することです。本シリーズのあらまし記事もご覧ください。 今回取り上げるトピックは小さなものですが、ハッシュ1 やキーワード引数の値を省略可能にする機能は、複雑な心境を大いにかきたてました。 🔗 値省略とは何か Ruby 3.1から以下のコードが動くようになりました。 x = 5 # ハッシュを構築する h = {x:} # `h = {x: x}`と同じ #=> {x: 5} def distance_to(x:, y:) # ... end # `x: 5`を暗黙で渡す distan
xargs 完全理解マニュアル - xargs は拡張引数 (extended arguments) の略って知っていますか?ShellScriptUNIXシェル芸POSIXUnix哲学 はじめに xargs コマンドは「なにか凄そうだけどよく分からないコマンド」としてよく知られています。使う人は使うけど何をやっているのか全くわからないコマンドです。また、やっていることがわかっても実際に使ってみると、空白やクォーテーション文字でエラーになってしまう使い方がとても難しいコマンドです。この記事はそういうよくわからない xargs はどういうコマンドなのか解説します。この記事を読むと xargs を「完全に理解した」と言えるようになるでしょう。 xargs コマンドが難しい理由は、xargs 自体の設計や実装の問題で古い時代の制限が多いからです。仕様が意味不明で一貫性がなくで他のコマンドと正しく
JPCERTコーディネーションセンター(JPCERT/CC)は2024年4月15日、「Window」で動作する複数のプログラミング言語や実行環境でのコマンド実行処理において、引数のエスケープ処理が適切に機能しない脆弱(ぜいじゃく)性があると伝えた。 PHP、Rust、Node.jsなどで引数処理の脆弱性を確認 この脆弱性を悪用されるとアプリケーションのコマンドインジェクションにつながる可能性があり、コマンド実行時に改ざんされたプログラムの引数の入力を処理することで任意のコマンドを実行される危険性がある。 今回発見された脆弱性は脆弱性情報データベース(CVE)に複数登録されている。CVE情報は以下の通りだ。 CVE-2024-1874: PHPの「proc_open」関数に存在するコマンドインジェクションの脆弱性 CVE-2024-22423: コマンドラインプログラム「yt-dlp」に存在
概要 原著者の許諾を得て翻訳・公開いたします。 英語記事: “Useless Ruby sugar”: Argument forwarding 原文公開日: 2023/11/24 原著者: zverok 日本語タイトルは内容に即したものにしました。段落編成を若干変更し、訳文の一部に強調を加えています。 forwarding(転送)は本記事では英ママとしました。anonymousは「無名」としました。 参考: プロと読み解くRuby 2.7 NEWS - クックパッド開発者ブログ 本記事は、最近のRubyで出現した"無用な"(さもなければ物議を醸す)構文要素を扱うシリーズ記事の一環です。本シリーズの目的は、そうした機能を擁護することでも批判することでもなく、その機能が導入された理由、設計、そして新構文を使うコードに与える影響を分析するための一種の「思考のフレームワーク」を皆さんと共有すること
はじめに 連載の第3回となる今回は、Python 3.10以降の新機能のうち、ジェネリクスのための新しい型引数構文、**kwargsのより厳密な型付け、オーバーライドデコレータtyping.overrideなどの型関連機能、構造的パターンマッチング、with文の入れ子構文の改良など、文法関連の新機能を中心に紹介します。 対象読者 Pythonの最新の機能を把握したい方 Pythonの経験者で、Pythonに改めて入門したい方 プログラミング言語の最新パラダイムに関心のある方 必要な環境 本記事のサンプルコードは、以下の環境で動作を確認しています。 macOS Sonoma Python(3.12.0) Visual Studio Code 1.82.3(Python v2023.19.12831011、Pylance v2023.10.11) mypy(1.5.1) サンプルの実行 掲載サ
Pythonにおける外部Pythonプログラムの実行と引数の受け渡し Pythonプログラミングにおいて、他のPythonプログラムを呼び出して実行することは、様々なシナリオで必要とされます。subprocessモジュールを使用すると、外部のPythonスクリプトを効果的に実行できます。この記事では、subprocessモジュールを用いて他のPythonプログラムを実行し、かつ5つの引数を受け渡す方法に焦点を当てます。実際のコード例と実行結果を通じて、手順を詳細に解説していきます。 1. subprocessモジュールの概要 subprocessモジュールは、外部プロセスを作成、実行、および制御するためのPythonの標準ライブラリです。これを使用することで、他のPythonスクリプトや外部プログラムを呼び出すことができます。具体的には、subprocess.run()関数を使って外部プロ
週刊Railsウォッチについて 各記事冒頭には🔗でパーマリンクを置いてあります: 社内やTwitterでの議論などにどうぞ 「つっつきボイス」はRailsウォッチ公開前ドラフトを(鍋のように)社内有志でつっついたときの会話の再構成です👄 お気づきの点がありましたら@hachi8833までメンションをいただければ確認・対応いたします🙏 TechRachoではRubyやRailsなどの最新情報記事を平日に公開しています。TechRacho記事をいち早くお読みになりたい方はTwitterにて@techrachoのフォローをお願いします。また、タグやカテゴリごとにRSSフィードを購読することもできます(例:週刊Railsウォッチタグ) 🔗Rails: 先週の改修(Rails公式ニュースより) 公式更新情報: Ruby on Rails — Enhanced assert_broadcast
関数に渡す引数はどんなふうに設計されるべきでしょうか。 引数に関するベストプラクティスを少し調べてみると、引数の命名や引数の順序についての記述を見つけることができました。一方で、引数で渡すべき変数それ自体についての記述はあまり見当たりませんでした。 このトピックについてちょうど最近考えていたところだったので、記事を書くことにしました。 はじめに この記事ではソフトウェアはデータと関数で構成されていると考えます。 データはしばしば DB やストレージといったハードウェアに束縛されており、ソフトウェアがソフトでありつづけるためには、関数によってデータを柔軟に取り扱うことができる必要があります。 関数の分類 関数には 3 つの役割が存在します。 データの変換 データの定義 副作用の処理 1. データの変換 データは関数によって、他のデータと組み合わされたり、ビジネスロジックを実行することによって
[ アップデート ] aws_ecs_task_definition に CI/CD との競合を防ぐ track_latest 引数がリリースされました aws_ecs_task_definition を定義する際、いつも指定しているあの ignore_changes が、不要になるかもしれません。 tfstate への反映、コードとの差分があった場合の挙動に違いがあるため、理解しておくと今後役立つかもです。 こんにちは! AWS 事業本部コンサルティング部のたかくに(@takakuni_)です。 aws_ecs_task_definition で CI/CD との競合を防ぐために、 track_latest 引数がリリースされました。 r/aws_ecs_task_definition: add track_latest attribute by GerardSoleCa · Pull
この記事では、Next.js の Server Actions にフォームの入力値以外の情報を渡す方法について紹介します。 Server Actions とは Next.js の Server Actions は、クライアントサイドのイベント(例えばフォームの送信やボタンのクリック)をトリガーとして、サーバーサイドの関数を呼び出す機能です。この機能はプログレッシブエンハンスメントをサポートしており、JavaScript が読み込まれていない状況や無効になっている場合でもフォームを送信することができます。 使用例 'use server' をファイルの先頭に追加して、サーバー側で実行したい関数を定義します。
今回は引数を渡すデバッグについて。 まずは引数を受け取り、分岐するロジックを main関数に追加。 main.go (修正後) package main import ( "fmt" "os" "test1/calc" ) func main() { //fmt.Println("Hello, world!") var answer int switch os.Args[1] { case "-addtion": answer = calc.Add(10, 3) case "-subtract": answer = calc.Subtract(10, 3) case "-multiply": answer = calc.Multiply(10, 3) case "-divide": answer = calc.Divide(10, 3) default: answer = 0 } fmt.
function func1({a = 100, b = 200} = {}) { console.log(`${a}, ${b}`) } func1() // => 100, 200 func1({a: 20}) // => 20, 200 Refs デフォルト引数 - JavaScript | MDN 既定値のある分割代入の引数 既定値の代入を、分割代入表記で行うことができます。 これを行う一般的な方法は、空のオブジェクト/配列をオブジェクト/配列に分割代入することです。例えば、 [x = 1, y = 2] = [] とします。 このようにすることで、空の配列/オブジェクトを関数に渡しても、あらかじめ設定した値を保持することができます。 分割代入 - JavaScript | MDN
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く