タグ

ブックマーク / qiita.com (979)

  • シェルスクリプトの変数はダブルクォートしなければいけない!という話 - Qiita

    TL; DR 変数をダブルクォートしない使い方は上級者向けの危険な機能です! $@ と $*(または配列の全要素)をダブルクォートしない使い方は知る必要すらありません! ShellCheck を導入すれば誰でも簡単に正しい書き方がわかります!! 2021-08-21 補足 この記事は dash や bash などの POSIX シェルの一般的な動作を解説しており zsh のデフォルトとは異なります。記事の中でも説明していますが zsh の場合はシェルのオプションを変更することで POSIX 準拠の動作に変更することができます。zsh に関しては後半の「zsh に関する注意点」も参照してください。 はじめに プログラミング言語は、言語によって記号の意味が異なることがよくあります。クォーテーションマークはその一つです。C 言語ではシングルクォートは文字リテラル(一文字)を意味し文字列はダブルク

    シェルスクリプトの変数はダブルクォートしなければいけない!という話 - Qiita
    n314
    n314 2021/08/26
    自分はMakefile的な使い方をすることが多くて最終的にコマンド引数に渡すから、むしろダブルクォートを付けてバグることが多かった。
  • 提言:パスワードロック機能は誤入力の“回数”ではなく“種類数”で - Qiita

    正当なユーザーの多くはパスワード認証を拒否されたらまず自分のミスタイプを疑い、再入力を試します。再々入力、再々々入力を試すことも大いにありえます。別のパスワードを試すこともありますが、それも拒否された場合はやはりその別パスワードのミスタイプを疑ってそれも再入力します。正当なユーザーは、自分のミスタイプを疑っての再入力で容易に試行回数を使い切ってしまうのです。 それに対して、総当たり攻撃をする攻撃者の目的はより多くの種類のパスワード候補を試すことです。 誤ったパスワードの種類数でなく回数を条件にすることは、防御力にまったく寄与することなく正規ユーザーの利便性だけを下げているのです。利便性ということは当然、カスタマーサポート工数とユーザー離脱率を高める利益削減要因だということです。回数を条件にする意義はまったくありません。

    提言:パスワードロック機能は誤入力の“回数”ではなく“種類数”で - Qiita
    n314
    n314 2021/08/09
    確かに。間違った同じパスワードが何度も入力される場合は、総当り攻撃ではないよね。
  • Laravelで同じ実装をドメイン駆動設計(DDD)とMVCで比較してみた(フロントはReact) - Qiita

    概要 Laravelで同じ実装をドメイン駆動設計(DDD)とMVCで比較してみました。フロントはReactで実装しています。設計思想はドメイン駆動設計(以下DDD)、アーキテクチャはクリーンアーキテクチャを採用しました。LaravelのWebアプリケーションをDDDやクリーンアーキテクチャで構築すると、MVCで構築するのと比べて実装量やファイル数が増えるのでは?また、処理速度も遅くなるのでは?という懸念を抱いておりました。ただ、それは実際に試してみないとわからないと思い、同じ機能をDDD、MVCで実装し、比較する事にしました。やるなら実践的なプロジェクトが望ましいし、イメージし易いと考えて、題材はECのデモサイトにしました。構築パターンは、DDD、軽量DDD、MVCの3パターンです。DDD、軽量DDDの違いは、DDDはクリーンアーキテクチャに忠実に実装したのに比べて、軽量DDDはPrese

    Laravelで同じ実装をドメイン駆動設計(DDD)とMVCで比較してみた(フロントはReact) - Qiita
    n314
    n314 2021/07/29
    とても良いしこういう比較欲しいんだけど、モデルのProductがDBカラムに依存したり、OrderSaveUseCaseが色々なものに依存しているのが気になるかなあ。管理画面と共通化するときに頭抱えそう。
  • 【PHP8.1】PHP8.1の新機能 - Qiita

    PHP8.2 / PHP8.1 / PHP8.0 / PHP7.4 2021/11/26にリリースされました 2021/07/20、PHP8.1がフィーチャーフリーズしました。 言語機能に関わるような機能の追加・変更が締め切られたということです。 今後はデバッグを繰り返しながら完成度を高めていき、2021/11/25にPHP8.1.0がリリースされる予定です。 というわけでPHP8.1で実装されるRFCを見てみましょう。 RFC Fibers 賛成50反対14で受理。 Fiberです。 PHPで非同期コードを書けるようになります。 $fiber = new Fiber(function (): void { $value = Fiber::suspend('fiber'); echo "レジュームした。$value: ", $value, "\n"; }); $value = $fiber

    【PHP8.1】PHP8.1の新機能 - Qiita
    n314
    n314 2021/07/27
    “First-class callable syntax”これいいな。
  • シェルスクリプトはパイプで並列処理すれば速い・・・は神話! - Qiita

    この記事は「シェルスクリプト リファクタリング ~遅いシェルスクリプトが供養されてたので蘇生して256倍に高速化させました~」の続編です。該当の記事ではリファクタリングを行うと共にシェルスクリプトの高速化も行いましたが、その結果としてコマンド置換とパイプがコードから消えました。これらは遅いサブシェルを使っているため、コマンド置換やパイプが消えているのも高速化した理由の一つです。 実はパイプを使ったからと言って必ずしも速くなるわけではなく、場合によっては遅くなることすらあります。パイプを使うとシェルスクリプトは速くなると単純に思っていた人にとっては意外な話ではないでしょうか?ということでこの記事ではパイプラインに焦点を当てて解説したいと思います。 パイプ処理に関する関連記事(2021-12-06 追記) この記事を書いた時点より更に詳しく調査し、その結果を以下の関連記事まとめています。現時点

    シェルスクリプトはパイプで並列処理すれば速い・・・は神話! - Qiita
    n314
    n314 2021/07/20
    合ってるのか間違ってるのか微妙なところ。リンク先に有用なコメントあるのになんでstrace使わないんだろう。
  • 全部 public じゃなんでダメなの? - Qiita

    はじめに Java など、オブジェクト指向言語に触れたとき困惑するものの一つが アクセス修飾子 だと思います。 なんでこんなもん必要なんだ って気持ちのせいで、一向に身につかない... 全部 public でいいじゃん。無駄にアクセスできないエラーが出てくるだけじゃん。 そんな方(過去の自分を含む)へ贈る記事です。 アクセス修飾子ってそもそも何? とりあえず Java で話をすすめていきます。 アクセス修飾子とは以下みたいなやつですね。 class MyAccess { public String public_str = "public access OK!"; // 変数に public をつけるとどこからでもアクセスできる private String private_str = "private access OK!"; // 変数に private をつけるとクラス内でしかアクセ

    全部 public じゃなんでダメなの? - Qiita
    n314
    n314 2021/07/20
    finalでいいような
  • 「つみたてNISAは米国インデックスファンド放置で良い」は本当か? - Qiita

    こんにちは、最近になってつみたてNISAを始めた今年2年目の社会人です。つみたてNISAは運用益が非課税、半自動的に積立運用可能、途中で取り崩し可能と様々なメリットがあり、非常に有益な制度です。そんなつみたてNISAを活用する上でよく耳にするのは「信託報酬が安くてパフォーマンスの高い米国インデックスファンド一択!一時的に暴落しても戻るから気にするな!」という話です。確かに2000年のITバブル崩壊、2008年のリーマンショックという暴落を経験しながらも、S&P500といった代表的な米国インデックスの直近20年のパフォーマンスは素晴らしいです。 しかし、当に米国インデックスファンドを積立・放置するだけでいいんでしょうか?頭を使わずに、というのは言い過ぎかもしれませんが放置しているだけで資産が殖えるなんて美味い話、不安を感じるのも確かです。そこで過去に米国インデックスファンドを積立・放置して

    「つみたてNISAは米国インデックスファンド放置で良い」は本当か? - Qiita
    n314
    n314 2021/07/16
    放置でいいというか放置しなければならず、一気にまとめて利確は厳禁じゃないのかなあ。暴落時に利確するより借金する方が得だよね。
  • 他の言語がJavaにかなわない唯一のポイント - Qiita

    JDBCドライバという存在は破壊的だった。 JDBCの登場まではODBCやADOなどWindows縛りの接続環境が楽ちんインストールの接続ライブラリだったけど、JDBCの登場で環境依存が極小化された形でDBにつながる。 例えばRubymysqlの接続ライブラリをインストールすると、libmysqlclientのCのライブラリにバインドされる。Rubyも結局はC。phpもC。Cである以上はライブラリのインストールに何かしらのCのコンパイラが呼び出されて、makeやらが動く。ここWindowsはめっぽう弱いところ。MacでもXcodeのバージョンアップで挙動が変わったりする。いろいろ言語は進化したのに、ライブラリをインストールする段階になると、私達はCのコンパイルのエラーメッセージを眺めている。(Pythonに至ってはFortranのコンパイルが動いてる) DBMSを提供している側はCのライ

    他の言語がJavaにかなわない唯一のポイント - Qiita
    n314
    n314 2021/07/12
    RubyはCのコンパイラ走ってるイメージあるけど、PHPでCのコンパイラ動かす状況なんてあるかな?PDOは本体にバンドルされてるし。
  • オブジェクトとはつまり"メモリ上の実態"のことで人によって指し示すことが違うこと - Qiita

    プログラムを勉強したての頃は「オブジェクト」という言葉が何を意味しているのか全く理解ができなかった。 独学でのみ学習し続けた結果「オブジェクトとは何か」を理解できた(つもりな)ので、僕と同じ様に理解に苦しむ人の助けになればと思う。 QUITA先輩方、ご指摘や訂正がたくさんあると思うのでコメント欄にください。まだまだ理解不足な中投稿していきますのでよろしくお願いします。 この記事のまとめ ・オブジェクトというのは「相対的な概念」であるということ。 ・相対的な概念だから人によって指し示しているものは違うこと。 ・つまり文章の前後を紐付けてその人が使っている「オブジェクト」が「変数・関数・インスタンス」のどれのことを言っているのかを理解すること。 ・広義の意味でのオブジェクトとは「メイン・メモリ上の実態のこと」 ・狭義の意味でのオブジェクトとは「インスタンス」のこと。 ・反対にオブジェクトでない

    オブジェクトとはつまり"メモリ上の実態"のことで人によって指し示すことが違うこと - Qiita
    n314
    n314 2021/07/09
    オブジェクト指向言語の中であれこれ考えるより、basicとかhaskellとかオブジェクト指向以外のものをやって違いを見つけた方が早いんじゃないだろうか。
  • Re: CookieのPath属性は本当に安全性に寄与しないのか - Qiita

    以下の記事を読みました。 CookieのPath属性は当に安全性に寄与しないのか 結論として以下となっています。 結論。Path属性は特殊な状況下ではある程度安全性に寄与する Path属性は、これを設定してCookieを発行するあるパス(以下「自身のパス」)にサーバサイドのプログラムを書き換えられるような脆弱性がなく、同一オリジン内の別のパスにそのような脆弱性がある場合に、そのパスへのCookieの漏洩することを防ぐことができます。 中略 つまり、「体系的に学ぶ 安全なWebアプリケーションの作り方」の記述はおそらく間違えです。 とはいえ私はセキュリティは専門ではなく、特に攻撃側には疎く、この記事に書いた以上の調査・実験もしていないため、この結論も確実とは言い切れません。詳しい情報をお持ちの方がいたら、ぜひご教示ください。 記事では、iframeなどを用いた攻撃について言及されていて、そ

    Re: CookieのPath属性は本当に安全性に寄与しないのか - Qiita
    n314
    n314 2021/07/09
    わかりやすい
  • Linux ハードリンクとシンボリックリンク - Qiita

    Linux* ハードリンクとシンボリックリンク ○ハードリンク (☆ln fileA fileB :この場合、fileAが元々あり、fileBをハードリンクファイルとして作成できます。) 同一ファイルに異なる名前をつける! →中身は同じ →名前は違う 全く同じファイルの中身で、iノード番号(ファイルの住所のようなもの)も同じです。 ただ名前は違います。見た目は違うが中身は同じということです! ○シンボリックリンク (☆ln -s fileA fileB :この場合、fileAが元々あり、fileBをシンボリックファイルとして作成できます。) ファイルに別名をつける! →中身は同じ(元ファイルの参照先を保存) →名前は違う 見かけのファイルの中身は同じですが、根的にファイルの場所(iノード番号)が違います。 ファイルを開いて、参照して返ってくる結果は同じですが、そもそものファイルの場所が

    Linux ハードリンクとシンボリックリンク - Qiita
    n314
    n314 2021/07/06
    何故か全然分かってない雰囲気がある
  • 俺の見積もりがこんなに安いわけがない: 第1話 We will be selective - Qiita

    第1話: We will selective 第2話: We will specialize 第3話: No estimates 第4話: Pricing input/output 第5話: Value based pricing 「先輩さん」 『はい後輩ちゃん』 「この会社は1ページ1万円でHTML書くらしいですよ」 『ほう』 「今来てる見積もり依頼は100ページぐらいなんですが」 『うん』 「これは対抗して100万ぐらいで見積もりを出したほうがいいんですかね〜?」 『なるほど』 『まーうちだと100万で100ページはできないかな』 「えっ、そうなんですか。それだと負けちゃうじゃないですか!」 『まぁ値段で言えばそうなるね』 「えー👊」 『そうね〜。後輩ちゃんはまだ20代だし、一人暮らし。だからそんなに出費も多くないと思うんだよね』 「失礼ですね!私だってNetflix海外ドラマみた

    俺の見積もりがこんなに安いわけがない: 第1話 We will be selective - Qiita
    n314
    n314 2021/07/06
    なんかふわっと誤魔化してるけど、設計とかテストとか品質管理とかは顧客に理解されないから見積もり項目に入れないということかな?
  • 人間が書くための設定ファイルに何を選ぶのか - Qiita

    [ { "name": "An object that takes many lines to describe" }, { "name": "Many lines of definition" }, { "name": "Multi-line object" } ] のような場合、末尾の要素を末尾以外に移動したり、末尾に要素を追加したりすると「ここにカンマがあると文法エラーです」とか「ここにはカンマが必要です」とかいう文法エラーに見舞われる。というわけで、順序変更や末尾付近で追加削除するときにストレスを感じる。 これがケツカンマ問題である。 ケツカンマ問題が問題なのは、行末にコンマが必要な場所と行末のコンマが禁止の場所が両方あるからなので 全部コンマありなら問題ないような文法 全部コンマなしなら問題ないような文法 のいずれかなら人間としては楽になる。 具体的には、 最後の要素の後にコンマ

    人間が書くための設定ファイルに何を選ぶのか - Qiita
    n314
    n314 2021/07/03
    iniファイルよく使う。ネストが必要なレベルの設定は普通にプログラムの中に書くけど。
  • 【Declined】PHPのあらゆる関数を部分適用できるようにするRFC - Qiita

    // 普通の関数 function foo1(int $a, int $b):int{ return $a + $b; } echo foo1(10, 5); // カリー化 function foo2(int $a):Closure{ return fn (int $b):int => $a + $b; } echo foo2(10)(5); // 部分適用 $foo10 = foo2(10); echo $foo10(5); 読みにくくなっとるだけやん? 関数の再利用とか言うけどそんなに再利用するか? まあ私の妄言はどうでもいいとして、なんかPHP体であらゆる関数を部分適用できるようにするというRFCが提出されていました。 以下はPartial Function Applicationの紹介です。 Partial Function Application Introduction 関

    【Declined】PHPのあらゆる関数を部分適用できるようにするRFC - Qiita
    n314
    n314 2021/06/28
    反対多いな。nikicも大量にレビューしている割には反対しているよ。詰めきれていない問題があるんだろうか。
  • 【PHP8.1】引数デフォルト値でnewできるようになる - Qiita

    先日2021/03/02に、New in initializersというRFCが提出されました。 なにかというと、こんな構文が書けるようになります。 class Test { private $foo = new Foo(); public function __construct( private Logger $logger = new NullLogger, ){} } PHP RFC: New in initializers Introduction このRFCでは、プロパティやパラメータのデフォルト値など、イニシャライザの内部でnew式を使えるようにすることを提案します。 現在のPHPでは、以下のようなコードは許可されていません。

    【PHP8.1】引数デフォルト値でnewできるようになる - Qiita
    n314
    n314 2021/06/26
    これいいな。安全安心のnikic。
  • 綺麗なコミットログを作りたいときのgitテクニック - Qiita

    これは何 僕は開発作業をしているとき、PRをあげるまでの開発途中はwipコミットに変更を記録していき、最後にコミットを仕上げていくような作業をよくします。 初めからコミットを綺麗に書きながら開発ができれば良いのですが、 にあるようなコミットログを仕上げていこうと思うとどうしても最後にコミットログを整理したくなります。 この記事はこのようにgitを使うと綺麗なコミットログを作れるよ、というTipsです。 具体的にこういうコミットを作ると良いよ、みたいな話はこの記事ではしません。 僕はこのような工程でPRを出す前にコミットログを作っています。 git rebase -iで作業中のコミットを全て一つのコミットにsquashする git reset HEAD~で一度コミットを取り消す git add -pで作りたいコミットごとに変更をstageにあげていく コミットを作成する git rebase

    綺麗なコミットログを作りたいときのgitテクニック - Qiita
    n314
    n314 2021/06/21
    作業ログ的なコミットが多くあるってことはそれだけ複雑な機能ってことだから、むしろ残っていた方がありがたい。
  • 押印廃止はなぜ遅れた馬鹿げた考え方なのか - Qiita

    押印廃止はできないのではなく限界費用が上回ってしまった 単純にコストが全く合わないのです。 押印廃止って正直「昭和の遅れた発想」でしかありません。 押印を廃止しても満員電車にのる必要がある。河野太郎が言うのは嘘 押印を廃止するということは制度面からいってもありえません。こういうでたらめで制度を作ることが多すぎるので、トランプ前大統領やフェイクニュースやQアノンを一切馬鹿にできない。なぜならこれ自体が嘘だからです。大臣自体が嘘をつくのだから仕方がないですね。 仮に押印が必要なものがあったとして、満員電車にのる必要がある。これを廃止したらどうなるか。 当然ながら「自筆が必要になるのでやはり満員電車にのる」ということになります。しかも自筆になると代理することができないか、代理の手続きが面倒になります。ここで印鑑のほうが慣習的に黙示で代理が成立しうるので、問題がなければそれでOKということになりま

    押印廃止はなぜ遅れた馬鹿げた考え方なのか - Qiita
    n314
    n314 2021/06/18
    多くの人が毎年1回タダでe-taxで電子署名しているよ。4万円って何の話?
  • Phalcon PHPを今は新規で使うべきでない理由 - Qiita

    こんにちは。 今日は業務で3年ほどPhalconを使っている私が今後Phalconを使おうと思っている人に向けて、使うべきでない理由をだらだら書いたものです。 注意 この話の前提として、現在(v4)の話をしています。 v5v6(PHPコード版)が開発され始めているのもあり、v5v6が出たらこの状況は変わる可能性があります。(v5はPHPコード版ではなくなりました、v6からPHPコード版になるようです) 家のバグ修正が遅い、メジャーバージョンアップによるバグが多い 正直これに尽きる気がします。 Phalconは2021/02/07現在、4.1.0が最新です。 4.1.0は比較的最近出ているのですが、正直いま安定しているのは3.4.5です。 4系に上がったときにPSRに寄せようとしたり、色々と努力がされているのですがその際にバグが結構生まれてしまってるなと感じます。 特にPhalconはPH

    Phalcon PHPを今は新規で使うべきでない理由 - Qiita
    n314
    n314 2021/05/24
    貢献とは…。
  • ブラウザバックで画面遷移してきたことを判定し、処理を動かす - Qiita

    はじめに ページの離脱直前に確認ダイアログを出すなど、そのページから遷移しようとすることをトリガーに処理を書く際はbeforeunloadイベントを使用するメジャーなやり方がありますが、ページの読み込み時( jQueryの$(document).readyが動くタイミング )にブラウザバックでこの画面に遷移してきたどうかを判定して処理したいケースがあり、無事実現できたのでご紹介します。(とてもレアケースだとは思いますが…) どんなケースで必要だったか気になる方に向けて使用した際の用途にも触れておきます。Bootstrapのtagsinputというプラグインを導入してフォーム画面のinputへの入力がタグ化されるようにしていたため、ブラウザバック時のフォーム復元には別途処理を実装する必要がありました。 復元するための入力値はsessionStorageに保存していたので、同一タブでブックマー

    ブラウザバックで画面遷移してきたことを判定し、処理を動かす - Qiita
    n314
    n314 2021/05/19
    フォームの値はブラウザバックでも記憶されているのに、なんで初期化されちゃうんだろうね。tagsinputの作りが悪いのかね。
  • 2021年に知っておきたいJavaScript最適化技術34選 - Qiita

    最新の省略テクニック、コツ、秘訣で、JavaScriptコードを最適化する。 開発者の生活というのは常に新しいことを学ぶことで、その変化についていくことは決して難しいことではありません。私は、フロントエンド開発者として知っておく必要のある省略形や機能など、JavaScriptのすべてのベストプラクティスを紹介して、2021年の生活をより快適にしたいと考えています。 JavaScript開発に長く携わっている人でも、コードを追加しなくても問題解決できるような最新機能を知らないこともあるかもしれません。ここで紹介するものは、クリーンで最適化されたJavaScriptのコード記述にも、2021年のJavaScriptの面接準備にも役立ちます。 これは新しいシリーズで、2021年版のJavaScriptコーディングチートシートです。 1. 複数の条件を持つif 配列に複数の値を格納し、includ

    2021年に知っておきたいJavaScript最適化技術34選 - Qiita
    n314
    n314 2021/05/18
    2011年なら知らなくて良かったこととの差分じゃないのか。