タグ

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

  • オブジェクト指向プログラミングは終わった カプセル化が悪い(感想戦) - Qiita

    が(良くも悪くも)注目頂き、その観測で思ったことのメモです。1年後の自分用です! もっかい言いたいこと再考のポエムです。 概要 関数型には意図的に触れたくなかった 継承や再利用性への懐疑の共通認識 抽象化戦略開発戦略で補う話 タイトルは釣り 抽象化という言葉のふわっと感 カプセル化が問題 関数型言語には意図的に触れたくなかった ポリモーフィズムのくだりで、関数型のご指摘が多かったのですが、あえて直接は触れたくありませんでした。これは、オブジェクト指向 vs 関数型にしたくなかったからです。(結果、Rust/Goに被弾させました) なぜかと言えば、オブジェクト指向を(結果として)衰退させたのは、あくまでも 開発手法の変化 や設計論の精錬が主軸だと認識しています。 不確実性に適応する上で、継承やカプセル化による状態隠匿という戦略が、良い筋に動かず、オブジェクト指向なりに変化を遂げた結果だと考え

    オブジェクト指向プログラミングは終わった カプセル化が悪い(感想戦) - Qiita
    n314
    n314 2022/08/03
    業務ロジックとかじゃなくて、インスタンスを大量に作る場合はオブジェクト指向にしないとめっちゃ大変じゃない?ウィンドウのボタンとかゲームの弾とか。
  • ゼロ幅スペースの罠が凶悪すぎた話 - Qiita

    記事では実際のコードを抜き出し C#インタラクティブ で実行した結果を記載しています。 環境は Microsoft (R) Visual C# インタラクティブ コンパイラ バージョン 4.1.0-5.22109.6 () 発端 文字列処理をしているときに遭遇した理解できないバグ なんじゃこれ > TimeSpan.Parse("0:00:00​") System.FormatException: 文字列は有効な TimeSpan として認識されませんでした。 + System.Globalization.TimeSpanParse.TimeSpanResult.SetFailure(System.Globalization.TimeSpanParse.ParseFailureKind, string, object, string) + System.Globalization.Ti

    ゼロ幅スペースの罠が凶悪すぎた話 - Qiita
    n314
    n314 2022/07/13
    なるほど、nbspの逆か。
  • 【DNS】サブドメインのないドメインのAレコードは真っ先に書かないといけない - Qiita

    インシデントの話なのでせっかくだから私が体験した1番ゾッとするインシデントの話に参加してみたのですが、正直なところ1番ではないですね。 やっぱ一番はコレですよ。 というわけで先日起こした事故の紹介です。 まあタイトルどおりなのですが。 どういうこと?

    【DNS】サブドメインのないドメインのAレコードは真っ先に書かないといけない - Qiita
    n314
    n314 2022/07/13
    ゾーンファイルを書いてたのはずっと前だからうろ覚えだけれども、トップレベルは @ で指定してた気がするなあ。割と自由に設定できる系の管理画面でも@が自動的に入ったりする。
  • 名著「UNIXという考え方 - UNIX哲学」は本当に名著なのか? 〜 著者のガンカーズは何者なのかとことん調べてみた - Qiita

    補足 1975: トンプソンはベル研を一時休職し、母校のカリフォルニア大学バークレー校に Version 6 Unix をインストールする作業を手伝う。これは後に BSD Unix として配布される。 1984-1998: ガンカーズが DEC でプリンシパル・ソフトウェア・エンジニアを務めた時期 ガンカーズは DEC の Unix Engineering Group (UEG) に所属 いつから DEC に勤めていたのかは不明 P63 より「小さな会社で Version 7 Unix を使っていた」ので 1979 年よりも後 V7M の開発には関わってなさそう おそらく 1980-1984 の間に DEC に入社したと思われる ガンカーズが「UNIX の考え方」についてのはないだろうか?と考えたのは 1991 年 1988: POSIX.1 標準化(POSIX.2 は 1992 年)

    名著「UNIXという考え方 - UNIX哲学」は本当に名著なのか? 〜 著者のガンカーズは何者なのかとことん調べてみた - Qiita
    n314
    n314 2022/07/12
    気になる
  • 特別な理由なしにgit-flowを新規採用するべきではない - Qiita

    私がこれまでGitの研修講師やブランチ戦略のコンサルティングをおこなってきた経験に基づいて、この記事を書きます。 Gitのワークフローについては自転車置き場の議論になりがちであまり乗り気がしないのですが、最近少し発見があったのと、実際に多くの現場で明らかにフィットしないのに git-flow を検討したり採用したりしようとして苦労をしている様を目撃することが多いので書くことにしました。 この記事で主張する内容はタイトルの通りですが、まず前提として以下を宣言しておきます: 全てのケースに100%フィットするようなワークフローは存在しない git-flowがフィットするケースも探せばあるかもしれない 例えばすでに何年もgit-flowでうまく回せてるよ、など どのようなワークフローを採用するかは最終的にはあなた(のチーム)が判断すべき さて、 git-flow は 2010年1月「A succ

    特別な理由なしにgit-flowを新規採用するべきではない - Qiita
    n314
    n314 2022/07/11
    結構丁寧な説明だった。webじゃなくて複数バージョンを維持する必要がある場合は、最大の成功例というかそもそもgitの目的だったlinuxを参考にすればいいと思うんだけど、何か不都合があるのかな。
  • 奇妙なJavaScript - Qiita

    ['constructor']['constructor']['constructor']('return this')()['console']['log']('Hello JavaScript!') // > Hello JavaScript!

    奇妙なJavaScript - Qiita
  • 【PHP8.2】PHPで選言標準形 (Disjunctive Normal Form) 型が使えるようになる - Qiita

    タイトルの意味はよくわからない。 さてPHPでは、PHP8.0で型のOR、PHP8.1で型のANDが使えるようになりました。 しかし、この両者を組み合わせて使うことはできません。 function f(A | B | C $param){} // OK function f(A & B & C $param){} // OK function f(A | B & C $param){} // NG ← ということで、これを可能にしようというRFCが提出されました。 既に投票は終わっており、賛成多数で可決されました。 PHP8.2からDNF型が使用可能になります。 以下は該当のRFC、Disjunctive Normal Form Typesの日語訳です。 PHP RFC: Disjunctive Normal Form Types Introduction Disjunctive Nor

    【PHP8.2】PHPで選言標準形 (Disjunctive Normal Form) 型が使えるようになる - Qiita
    n314
    n314 2022/07/05
    静的解析の方に本体が合わせていってる形になるのかな?
  • MySQL 5.7 にて STRAIGHT_JOIN を使って JOIN する順番を指定してチューニングした話 - Qiita

    n314
    n314 2022/07/05
    へ〜。自分だったらwhereとlimitを最後に書くんじゃなくて、t0を絞り込んでlimitした後にjoinするかな。
  • レコード数が膨大のカラムにダウンタイムなしでindexを貼ってみた - Qiita

    はじめに MySQLで、レコード数が膨大のカラムに index を貼ろうとすると、デプロイ時に落ちることがありました。 この記事では、実際に行ったダウンタイムなしで index 貼る方法を紹介します。 簡単なDB構成 今回は、User テーブルの point カラムに対して index を貼ります。 手順 index を貼った point_new カラムを追加し、deploy point の値を point_new に移すスクリプトを流す rename する migration ファイルを作成し、deploy index を貼った point_new カラムを追加 User テーブルに、point_new というカラムを追加します。 カラムの追加に関しては、こちらの記事 が参考になるかと思います。 追加すると、DB構成は以下のようになります。 point の値を point_new に移す

    レコード数が膨大のカラムにダウンタイムなしでindexを貼ってみた - Qiita
    n314
    n314 2022/06/25
    point_new に移してから rename するまでの間に point に登録された分は…?単純に考えたら整合性が崩れるぐらいなら落ちる方がマシって思えちゃうけども。
  • SolidJS「分割代入しないでクレメンス」ワイ「Why」 - Qiita

    SolidJS君さぁ... Reactとは違い、stateやpropsを分割代入すると、reactivityが失われます。どういうことかと言うと、 const Component = (props) => { const { isLoading } = props return ( <Show when={!isLoading} fallback={<div>Loading...</div>}> <div>Some Content</div> </Show> ) } こうやってisLoadingを分割代入すると、値が変わっても表示が切り替わらなくなります。 createSignalやcreateStoreによって作成された状態に関しても同じです。 なぜなのか 公式ドキュメントのこのページの2番目のポイントに詳しく書いてありますね。 個人的な解釈をざっくりと書きます。 まず分割代入とは co

    SolidJS「分割代入しないでクレメンス」ワイ「Why」 - Qiita
    n314
    n314 2022/06/09
    SolidJSもReactも知らんけど、ちょっと検索すると速さを求めたライブラリ?ルールの前に「エイリアス(参照)」「コピー」とかプリミティブ型のような変数の基本的な仕組みを調べた方が良いのでは…。
  • まだ PostgreSQL の開発で疲弊してるの? - Qiita

    { "plpgsqlLanguageServer.database": "データベース名", "plpgsqlLanguageServer.user": "ユーザ名", "plpgsqlLanguageServer.password": "パスワード", "plpgsqlLanguageServer.definitionFiles": [ // glob をサポート。 "**/*.sql", "**/*.psql", "**/*.pgsql" ], // Language Server が対応するファイルの拡張子はデフォルトで ['*.pgsql', '*.psql'] です。 // ( SQLite など他の RDS と競合させないためです。) // '*.sql' のファイルも対応させたい場合は、下記の設定を追加してください。 "files.associations": { "*.sq

    まだ PostgreSQL の開発で疲弊してるの? - Qiita
    n314
    n314 2022/06/08
    DBの変更ってプログラムみたいにファイルを更新していくんじゃなくて、マイグレーション用に古い定義を残しつつ新しい定義を追加していくよね?以前の状態に戻すファイルもあるし、その状態でうまく動くんだろうか。
  • else を禁止してはいけない - Qiita

    複雑なプログラムを書いてしまうのを避けるために、if 文の else を避ける制約を設けてプログラミングしてみましょう、というアプローチがあります。これはあくまで、ThoughtWorks アンソロジーに書かれていた、ある種のプログラミング思考のトレーニング方法のひとつにすぎないものです。 しかし、権威だからか、あるいは、あまりコードを書かない人がわかりやすいと感じるからか、プロダクションコードの規約に使おうとする誤った考えがあります。そんなことをすると、コード品質は下がります。 else 禁止制約というのは、「これまで if-else で記述していた多くのコードは、実は、生成するオブジェクトの多態性によって、分岐の前倒しが可能になるものだったのか」という認識を得られれば、すぐに忘れるべきルールです。 ある実在の OSS コードを例に説明します。 https://github.com/xr

    else を禁止してはいけない - Qiita
    n314
    n314 2022/06/08
    これはelse無しの方がシンプルなので例が良くない、と思ったらコメントに既に書かれていた。
  • 【DNS】CNAMEのTTLは転送先のTTLが適用されるっぽい? - Qiita

    今回のは試してみたらそういう挙動っぽかったような気がするという話であり、確定した情報ではありません。 私の勘違いとかなんか設定ミスとかだったらすみません。 どこ探してもこの件について書かれてないし、RFCにもいまいち見当たらないっぽいです。 ここに載ってるよってのがあったら教えてください。 どういう意味? サーバAのzoneファイル @ IN SOA ns1.a.com. root.a.net. ( 99999 ; Serial 60 ; Refresh 60秒 60 ; Retry 60 ; Expire 60 ; Negative cache ) foo IN A 10.0.0.1 bar IN CNAME bar.b.net.

    【DNS】CNAMEのTTLは転送先のTTLが適用されるっぽい? - Qiita
    n314
    n314 2022/05/25
    あんまり意識したことなかったけど、確かにそうなるのかも。権限ない場合は先にAのzoneにbar IN A 10.1.2.3って書いちゃうとか?
  • WHERE句を忘れただけなのに - Qiita

    ※前にいた会社での実話を元にしています(細かい部分は変えています) ※「こうはなったらアカン」という反面教師として読んでくださいやで… 初出社ワイ ワイ「HTMLコーダーの無職やめ太郎です!」 ワイ「今日からよろしくお願いしますやで!」 社長「おう、よろしくな」 社長「ほな早速・・・PHPでバックエンドの開発を頼むわ、一人で」 ワイ「ファッ!?」 ワイ「でもワイ、バックエンドの経験ないですよ・・・?」 ワイ「ちょっとはPHPできますけど・・・」 社長「チョットデキル?」 社長「ほな大丈夫やないか」 ワイ「いや、ちゃいます」 ワイ「初心者レベルってことですがな」 社長「ほな大丈夫とちゃうか」 ワイ「そうですわ」 ワイ「いわゆる完全に理解したレベルってことですわ」 社長「完全に!?」 社長「ほな大丈夫やないか」 ワイ「なんでそうなりますねん」 ワイ「とにかく、一人バックエンドは無理ですって・

    WHERE句を忘れただけなのに - Qiita
    n314
    n314 2022/05/25
    そんなミスするわけないって一瞬思うけど、$where['userId'] = $userId みたいに条件変数を遠いところで設定してたらやらかしたことある。それ以来、実行結果の行数確認して2件以上なら例外出すとかやってる。
  • 「DNSの浸透」という表現がなぜ不適切なのかを説明する - Qiita

    これは何 最近DNSの仕組みについて改めて勉強した上で、「DNSの浸透」という言葉がなぜ不適切なのかを自分の言葉で残しておきたくなったので書いたものです。 わかりやすさ重視で書くので、もしかしたら言葉足らずな部分や、説明不足な部分もあるかもしれません。編集リクエストやコメント等で補足など書いていただけるととても嬉しいです! DNSの浸透って? DNSに新しい情報を設定したときなどに、実際に設定通りにDNSが振る舞うようになるまでを「DNSの浸透期間」と呼んだりします。しかし、この表現はしばしば「不適切である」ということが言われます。 なぜこの表現が不適切なのかを解説していきます。 DNSの仕組み DNSは以下の図のように スタブリゾルバー(ブラウザなど) フルリゾルバー(キャッシュサーバー) 権威サーバー によって構成されています。ドメインの情報の解決は以下のような流れで行われます。 今回

    「DNSの浸透」という表現がなぜ不適切なのかを説明する - Qiita
    n314
    n314 2022/05/24
    「DNS浸透いうな」ね。懐かしい。昔は中継機のTTL無視、ブラウザの長すぎる独自キャッシュ、BIND脆弱性など色々な要因があった。今はどうだろう?
  • HTML3.2のどこが「間違って」いるのか、そしてそれを見た目重視のクラスで再現するのがおかしいわけ - Qiita

    Jason Knightさんの以下の記事の翻訳です。元記事はMediumプレミアム限定ですが、人から翻訳OKの許諾をいただいております。 「海外のガチHTMLコーダーに阿部寛のホームページを見てもらった」のフォローアップ的内容です。阿部寛のホームページを題材に、HTML3.2の問題点を議論しています。 かなり長いものとなっておりますが、その分得られるものも大きいと思います。 文 この題材について「当時いなかった」人向けに説明したかったんだけど、いい題材が無かった。でも阿部寛の懐かしめなホームページについての記事を紹介されて話は変わった。ハックや、アクセシビリティの欠陥や、そのぎこちなさ―かつて標準だったHTML3.2として見てもだ―を見るのは面白いものだった。 彼のホームページを語る前に―そして現代のテクがどれだけよくなったかをご覧いただく前に―HTMLが何のためにできたか、そしてHT

    HTML3.2のどこが「間違って」いるのか、そしてそれを見た目重視のクラスで再現するのがおかしいわけ - Qiita
    n314
    n314 2022/05/24
    原理主義になりたいけど全然なりきれない。
  • git で一番危険なコマンドは init ? - Qiita

    どんな方に見て欲しいか 初心者に git を教えている方。 git status を実行したときに何十行も赤い文字が出た方。 ls -a ~ | grep .git を実行したときに .git が出力された方。 (ターミナル操作と git の初心者の方。) 背景 後輩に「この git 教材を最初から最後までやってみて💪」と伝えたら、多くの後輩がホームディレクトリで git init を実行していたということが後々発覚しました。これは危険な状態です。また、それを引き起こし得る git の慣習にも多少の原因があるのではないかと思い記事化することにしました。 .git の位置の重要性 (誤解を恐れずに言うと、)git は commit されていない変更やファイルをいらないモノだと思っています。(具体的には git status で赤い文字で表示される Untracked files などのこと

    git で一番危険なコマンドは init ? - Qiita
    n314
    n314 2022/04/21
    rm でも、作業ディレクトリに居ると思って rm -f ./* とかやると大変なことになったりもする。rm で鍛えられたあとならgitの影響は軽微かなあ。
  • git commit --fixup が便利 - Qiita

    始めに 私は最近エンジニアに復帰し、現場で便利に思ったことを今後記事にできたらと思っています。 そして1発目は、gitのオプションについて記事を書いてみようと思います。 --fixup はどんな時に使えるの? Pull Requestなどで、軽微な指摘や後から気付いた修正など、来の機能のコミットとは別に修正コミットを残すのは少し嫌な時がありますよね。 コミットが一つ手前であれば、直前のコミットを修正してくれる git commit --amendなどで対応できますが、3つ前のコミットに修正を混ぜ込みたい時などは、少し大変。 そんな時に便利なのが、この git commit --fixupです。 使い方 例えば、下記のコミットの状況で、Fix article pageのコミットに対して、追加の修正をしたいとする。 ❯ git log --oneline 1131338365 (HEAD -

    git commit --fixup が便利 - Qiita
    n314
    n314 2022/04/15
    こうはならなくない?コミットを書き換えたら書き換えたコミットから後のハッシュは全部変更になるはず。
  • MacでWindows版Steamを使用する方法(無料のWineskinServer) - Qiita

    はじめに Steam で遊びたいと思ったゲームでも、Windows版があるが Mac版がないものが結構多いんですよね。そこでWineskinServerを使えば、MacでもWindows版のゲームが遊べるのか試してみました。 ※MacSteamはインストール済み、かつSteamアカウント作成済みです。 下記サイトでWineskinServerを使用して動作しているので大丈夫でしょう。 【2023/10/28追記】 エンジン「WS11WineCX64bit23.5.0_D3DMetal-v1.0」にした場合、遊戯王マスターデュエルを起動時に下記エラーが出ます。redditの情報ではD3DMetalが有効だと駄目なようです。 自分の場合、下記の方法で遊戯王マスターデュエルを起動させることが出来ました。 アプリケーションフォルダの「Wineskin Winery.app」をダブルクリックして、

    MacでWindows版Steamを使用する方法(無料のWineskinServer) - Qiita
    n314
    n314 2022/04/15
    こういう系はOpenGLとDirectXのどのバージョンまで対応しているかが重要なので対応を書いてほしいなあ。自分はVMware Fusionだけど OpenGL 4.1 までで、Unity系は動いてもツクール系は動かない。
  • <script>のdefer属性もっと流行れ - Qiita

    初めに HTMLの<script>要素にはdefer属性がある。これを使うことで、HTMLJavaScript両方のコーディングが改善されるので、開発者はもっと取り入れるべきだ。 deferのブラウザ対応は非常に良い、というかすべての現行ブラウザで利用可能なので、使わない手は無い。 利点その1:DOMを読み込む<script>でも<head>内に置ける! よくある<script>の書き方として、<body>の末尾に置くというプラクティスが良く知られている。WebページのDOMを操作するメソッドなどでよく使われる手法だ。しかし、これでは<head>にある先読みしておきたい<script>と場所が分散されてしまうので、HTMLの見通しが悪くなるという欠点がある。それにただのスクリプトは文書で遭遇した際に逐次読込が発生するのでローディングタイムが遅くなってしまう。 それを解決してくれるのがde

    <script>のdefer属性もっと流行れ - Qiita
    n314
    n314 2022/04/06
    末尾に置く場合の DOMContentLoaded に意味はあるのかな? load が必要な状況なら defer を使う場合でも必要なような。自分のプログラム見てたら、asyncで読み込んでbodyの最後に実行コード書いてた。