タグ

プログラミングに関するtemtanのブックマーク (107)

  • C++erは全員戻り値型の後置記法を使おう - ペイントソフト開発日誌

    目次 目次 「戻り値型の後置記法」って何? 何が嬉しいの? 問題点 「戻り値型の後置記法」って何? C++11から導入された言語仕様です。 タイトルの呼び方は自分が勝手に使っているだけで、英語圏だと「trailing-return-type」がよく使われるらしい。 cpprefjp.github.io この仕様を使うと例えば以下のようなコードが int Add(int a, int b) { return a + b; } このようになります。 auto Add(int a, int b) -> int { return a + b; } 何が嬉しいの? この仕様はC++のメタプログラミングで戻り値型の推論を簡単に行う目的で使用されます。 なんだ、そんなC++上級者のための機能なんて下々の人間には関係ないじゃん、とお思いかもしれませんが、この機能にはもう一つわかりやすい大きなメリットがある

    C++erは全員戻り値型の後置記法を使おう - ペイントソフト開発日誌
    temtan
    temtan 2024/05/10
    戻り値の位置だってずれるし関数の引数だって同じだろ。単に何かしらトレードオフでしかない。
  • Python滅ぼす協会に入会したい

    なぜ令和にもなって動的型付け言語を使うのか シフトレフトという概念が生まれたのは二十年以上も前のはずだ。 それにもかかわらず動かしてみるまで答え合わせもできない言語で開発をするという発想自体がどうかしている。 同じ動的型付けといってもJavaScriptはブラウザという事情があるし、型の表現力に優れたTypeScriptがあるからまだよい。 しかし、Pythonはどうだ。他にいくらでも選択肢があるなかで、サーバーサイドにわざわざ選定する言語ではなかろう。 貧弱な型ヒント、しかも書いたところで大した効用もない。 使っている外部ライブラリにひとつでも型ヒントがクソなものがあれば即座に破綻する。 型というガードレールもシートベルトもなしで糞を撒き散らしながらする開発にはうんざりだ。 シンタックスもキモい 動的型付けもさることながら、シンタックスもキモい。とにかく思考を妨げる語順になっている。 m

    Python滅ぼす協会に入会したい
    temtan
    temtan 2024/03/30
    Ruby もそうだけど、型システムが無い(もしくは貧弱)な言語って大規模な開発には向かなくて、せいぜい個人で1000行とかその程度までの規模が限界じゃねえかなとは思うのよね。逆に小さいのにはとても良いけど
  • はじめてのインタープリター

    インタープリターを書いたことがない方向けに、四則演算といった簡単なものから始め、少しずつ機能を足しながら言語を拡張していくようなです。

    はじめてのインタープリター
  • [C++]特殊化?実体化??インスタンス化???明示的????部分的????? - 地面を見下ろす少年の足蹴にされる私

    C++のテンプレートの用語は日語に優しくなく、似た言葉がこんがらがってよく分からなくなります。分からないのでメモしておきます。 特殊化(specialization) 明示的特殊化(explicit specialization) 完全特殊化 部分特殊化(partial specialization) プライマリテンプレート(primary template) インスタンス化(実体化:instantiation) 明示的インスタンス化(explicit instantiation) 明示的インスタンス化の定義と宣言 参考文献 謝辞 特殊化(specialization) 単に特殊化と言ったら、あるテンプレートに対してそのテンプレート引数を全て埋めた状態のものをさします。つまり、テンプレートを使った時、その使っている(もはやテンプレートではない)テンプレートのことをテンプレートの特殊化と呼

    [C++]特殊化?実体化??インスタンス化???明示的????部分的????? - 地面を見下ろす少年の足蹴にされる私
  • 継承はなんでダメ? - まめめも

    「オブジェクト指向の継承を使うな」という主張が広まっているようです。なんでダメになったんでしょうか。 インターネットで見かけた「継承はダメ」という主張をいくつか眺めて、友人と議論しつつ、考えてみました。 「コードが読みにくくなる」 継承があると、メソッド呼び出しが実際にどのメソッド定義を呼び出すのか字面でわからない。 デバッガを使って、親クラスのメソッドに飛んだり、子クラスに飛んだりするのを追いかけないと行けない。 つらい。という主張。 めっちゃわかる。わかるんですが、これは「高度に共通化されたコードは読みにくい」という一般的な側面がかなり大きいような。 たとえば継承の代わりに高階関数を使うと、関数呼び出しがどのクロージャに飛ぶか字面でわからなくなる。 ひどいとコールバック地獄になって何が何やらになります。 継承がことさらにまずい理由を想像すると、すべてのメソッド呼び出しがポリモーフィック

    継承はなんでダメ? - まめめも
    temtan
    temtan 2024/02/11
    馬鹿には継承は使いこなせないというだけの話。継承は色んな単語に置き換え可能。
  • お気に入りのコマンドラインツールを淡々と紹介する

    めちゃくちゃ良い記事でした。 「OSS は使っていることを公言するだけでも貢献になる」と songmu さんが言っていたので、私も貢献したいと思います。 僕も貢献したいのでよく使うコマンドラインツールを紹介していきます。 特定のプログラミング言語等に依存するツールは省いています。 actionlint - GitHub Actions の Workflow ファイルの静的検査 GitHub Actions の Workflow ファイルの静的検査ツールです。 かなり精度が高く、色々な設定ミスを検知してくれます。 エラーメッセージも見やすくて助かります。 aicommits - コミットメッセージを自動生成 変更内容を元に自動でコミットメッセージを AI が生成してくれるツールです。 コミットをする前にちゃんと確認してくれるのも安心感があって良いです。 cLive - ターミナル操作を自動化

    お気に入りのコマンドラインツールを淡々と紹介する
    temtan
    temtan 2024/01/10
    いくつかちょっと調べてみたけど今どきのコマンドラインツールは Windows もあるのが当然っぽいのが素晴らしいなあと思いました。
  • リファクタリングをする際にソースコードの設計からはじめてはいけない - MonotaRO Tech Blog

    どうも、レコメンド商品のシステム開発をしている野川と申します。 私は、2021年にモノタロウに新卒入社し、2022年5月からレコメンド商品の開発に関わり始めました。 モノタロウのレコメンド商品は、下の図の①~④の流れでクライアントサイドで表示しています。大部分の処理はJavaScriptで構成しており、UIもそのHTML部分をjQuery(JavaScript)で作成しています。 図:レコメンド商品表の流れ 入社当時私は、ソフトウェアエンジニアとして、「可読性の低いコードは駆逐するべきだ」「読みやすいコードだけが正義である」「理解しやすいシステムだけが皆を幸せにする」と心の底から考えていました。加えて、「なぜ先輩たちは可読性の低いコードを放置して平気なのか?」と疑問を持つこともしばしばありました。 レコメンド商品周りのコードはまさに可読性の低いコードベースとなっていたため、当事者となった私

    リファクタリングをする際にソースコードの設計からはじめてはいけない - MonotaRO Tech Blog
    temtan
    temtan 2023/11/28
    ちゃんとした仕様が無いからどうあるべきが判らず色んな人が手を加えたから総合的に把握してる人物もいないシステムの保守は大変という話で「リファクタリング」とはまた違う話じゃねーかなあ。
  • 空の配列に対するmaxは何を返すか - きしだのHatena

    ちょっと前に「配列中のすべての要素が条件を満たすかどうか判別する関数で、空の配列はTrueを返すべきかFalseを返すべきか」のような話が話題になってました。 まあこれは「Trueを返す」が答えなわけですが、では「配列中の最大値を返す関数で空の配列の場合は何を返すか」が気になりました。 「配列中のすべての要素が条件を満たすかどうか判別する関数」について言えば、簡単に言えばこんな感じ。 まず、配列のすべての要素が偶数であるかどうか判別する関数を考えます。 void main() { int[] data = { 23, 44, 12, 98, 5 }; System.out.println(allEven(data)); } boolean allEven(int[] data) { for (int n : data) { if (n % 2 != 0) return false; } r

    空の配列に対するmaxは何を返すか - きしだのHatena
    temtan
    temtan 2023/06/06
    使う時の事を考えて、配列の要素中の MAX 値が欲しい(それを使って何かをする可能性大)時に配列が空ってのは普通に考えて使う側が想定外でしょ。つまり例外投げてそれが嫌なら事前にチェックして弾けってのが正道よ
  • コンパイラを書いてセルフホストした

    Quartzという言語をデザインしてコンパイラを書いて自身をコンパイルできるところまで到達したので記録として書く (人に使ってもらうことなどは特に想定してないので、ドキュメントなどはありません) Quartzについて 言語機能的にはGoとかに近く、syntax的にはRustに近い言語としてデザインした。ターゲットとしてWASM(wat形式)のみサポート。 元々の想定として、ゲームのスクリプトやアプリケーションのプラグインなど、動的に読み込めて気軽にかけて、型やLSPなどの現代的なDXは提供したいというモチベで作り始めた。 例えばfizzbuzzのコードは以下のような感じ。 fun main() { for i in 1..100 { if i % 15 == 0 { println("FizzBuzz"); } else if i % 3 == 0 { println("Fizz"); }

    コンパイラを書いてセルフホストした
  • Unicode

    Unicodeスカラ値 文字セットは16進数にU+をつけて U+0000~U+10FFFF で表します。これをUnicodeスカラ値といいます。 第0面は16進数で4桁で U+0000~U+FFFF と表します。この16ビット(2バイト)で表現できる部分は65536文字で、ここには基的な文字を登録してあり、基多言語面(BMP)と呼ばれます。 BMPの他に16ビット65536文字の面が16あります。0000~FFFF の前に 1,2,3,...D,E,F,10 と 16進数で 1から16 の番号がついていると考えれば理解できると思います。 UTF-16 エンコード JISで面区点で示された文字を実際に使うときに、ISO-2022-JP,Shift_JIS,EUC-JPなどさまざまなエンコーディングを使用したのと同様に、Unicodeにもたくさんの方式があります。主に使われているのは UT

  • 疑われる「C++」の安全性、今後の動きはどうなる

    C++」は非常に人気があるプログラミング言語だが、同言語の標準化に取り組んでいるグループが、C++の「メモリ安全性」を(新しいライバル言語である「Rust」のように)高めるための今後の道筋について議論する文書を発表した。 Rustは、MicrosoftAmazon Web Services(AWS)、Meta、GoogleAndroid Open Source Project、主にC++で書かれている「Chromiumプロジェクト(まだ始まったばかりだが)、Linuxカーネルなど、多くの企業やプロジェクトで採用されており、メモリ関連のセキュリティホールを減らすのに役立っている。最近では、米国家安全保障局(NSA)までが、開発者に対してC++からC#やJavaRubyRustSwiftへの戦略的な移行を促す事態になっている。 C++の生みの親であるBjarne Stroustr

    疑われる「C++」の安全性、今後の動きはどうなる
    temtan
    temtan 2023/01/30
    確かにC++は安全でないコードも書くことが出来る言語(他の最近の言語は安全なコードしか書けない)だけど、それがC++の良さに繋がってる感もあり。C++の良さを維持しつつ安全に書けるならそれは良いことだけど。
  • 何故オープンソースソフトウェアはUIがクソになりがちなのか?

    anond:20230124045812 MuseScoreという楽譜を書くためのOSSがある。楽譜ソフトもSibeliusやFinaleといった使いやすい商用ソフトウエアが主流で、貧民はMuseScoreの地獄のUIに慣れねばならなかった。(そもそも楽譜を書く必要のある人がMuseScoreを知らないことはありえないのでリストに入れなかったのは正しい) 最近MuseScoreを根的にオーバーホールした元MSのエンジニアが、「何故オープンソースソフトウェアはUIがクソになりがちなのか?」という増田の疑問に答えるそのものの動画を出している。 https://www.youtube.com/watch?v=Qct6LKbneKQ ・過去のパッチワークに次ぐパッチワーク ・その結果1カ所を変えるためにも複数箇所の改修が必要なので誰もやらない ・UIフレームワーク(QtWidget)が時代遅れな

    何故オープンソースソフトウェアはUIがクソになりがちなのか?
    temtan
    temtan 2023/01/25
    コレは自分の仮説だけど、OSS は UI だけがクソなんじゃなくて大抵は実は(「とりあえず合ってる」ではあるが)クソなのが多くて、UI はそれが可視化されやすいってだけだとか
  • 計算機プログラムの構造と解釈 第二版

    [ 目次, 前節, 次節, 索引 ] 2014-03-06 更新 [ 目次, 前節, 次節, 索引 ]

  • 好きなの使って他のをけなさない - 覚書

    私が生業とするソフトウェア開発において、OSやコードエディタやプログラミング言語など、様々なソフトウェアを使います*1。これらについて私が使っているものを理由付きで書くと次のようになります。 OS: Ubuntu 22.04 細かい設定をしなくてもそれなりに使える。よく普及しているから色々な情報を得やすい コードエディタ: VSCode 細かい設定をしなくてもそれなりに使える。Remote SSH extensionを使ったリモートマシン上での開発が楽 プログラミング言語: 主にGo 使い慣れているから。システムプログラムをするから。覚えやすいから これらにそれなりの愛着はあるものの、今後置かれる状況によって、どんどん変わってくるでしょう。じっさい10年くらい前はGoはほとんど使っていなくて、Cプログラマでした。 私はこんな感じですが、中には特定のソフトウェアに愛情を注ぐ人もいます。それ自

    好きなの使って他のをけなさない - 覚書
    temtan
    temtan 2022/12/27
    これは行儀正しい話だけど、「けなす」ってのは「それが駄目な所(目的を達成できない)をフラットな言葉で指摘する」を口悪く言うようにしただけだし、わざわざ口にする必要は無いかもだけど出来る方が良さげ
  • グーグル、Rust採用で「Android」のメモリーに関わる脆弱性が激減

    メモリー関連の不具合を減らすために、「Android」の新しいコードにRustを使用するというGoogleの判断は、成果を挙げているようだ。この数年で、Androidのメモリー安全性関連の脆弱性は半分以下になった。この成果が達成された時期は、GoogleがCやC++からメモリー安全性の高いプログラミング言語であるRustに切り替えた時期と一致する。 Androidに発見されたセキュリティホールの中で、最も件数が多かったカテゴリーがメモリー安全性関連の脆弱性でなかったのは2022年が初めであり、Googleは1年前に、「Android Open Source Project(AOSP)」で新しいコードのデフォルト言語をRustに切り替えている。 GoogleAndroidに使用しているほかのメモリー安全性を備えた言語には、JavaJava互換のKotlinがある。AOSPで主流の言語はま

    グーグル、Rust採用で「Android」のメモリーに関わる脆弱性が激減
  • リファクタリングは、下準備がすべて 『グランブルーファンタジー』推奨ブラウザ「SkyLeap」が生まれ変わるまで

    DeNAの多様に展開する事業や、それぞれの個性やライフステージに応じたフレキシブルな働き方、それらを受容するDeNAが根底に持つ考え方などを伝えるDeNA TechCon 2022 Autumn。ここで、株式会社ディー・エヌ・エーのAndroidエンジニアである手塚悠太氏が、『グランブルーファンタジー』推奨ブラウザ「SkyLeap」の開発を例に、リファクタリングの仕方について紹介しました。 リファクタリングはできていますか? 手塚悠太氏:それでは、「レガシーな実装を丁寧にリファクタしてモダンな実装にする技術」について、手塚悠太が発表いたします。 自己紹介です。2019年にDeNAに中途入社し、当時はMOV、現在の名前はGOですね、こちらのタクシーアプリの乗務員さん向けアプリケーションを開発していました。またタクシーフードデリバリーサービス「GO Dine」のアプリケーション開発も担当をして

    リファクタリングは、下準備がすべて 『グランブルーファンタジー』推奨ブラウザ「SkyLeap」が生まれ変わるまで
  • 技術書を読んでも頭に入ってこないし、プログラミングスキルが上がらないのはなぜか?

    もくもく会で話している中で、「技術書を読んでも頭に入ってこないし、プログラミングスキルが上がらない」という話になり、そのよさげな説明を思いついたので共有します。 具体的な話としては「を読んでもスキルアップした感じがしない。それでをよむモチベがわかない。」というものでした。これは僕もとても共感します。バックエンドエンジニアでいくつか有名ながあり(例えばPoEAAやDDD)、読まないといけないと思い手を出しました。しかし、何を言っているかわからずひたすらに苦痛で、読み切ることができませんでした。結局これらを読み終えることができたのは、業務経験を4年ほど積んだあとでした。 なぜ、を読んでも苦痛なのか、頭に入ってこないかを、今振り返ってみると、「全体感」と「土地勘」という例えで説明できるのではと思いました。 まず、前提としてあなたが新しい土地に引っ越してきたとします。その地域のことは全然

    技術書を読んでも頭に入ってこないし、プログラミングスキルが上がらないのはなぜか?
    temtan
    temtan 2022/11/15
    つまりは「土地勘」を個別の技術の理解、「全体感」を体系的な理解って話よな。体系的に理解するのは難しいのは昔からそうだし別にたいした事言ってないよな。
  • lighttpdでrubyのcgiを動かす

  • Linux | 公開鍵認証とsshコマンド、scpコマンドの使い方 - わくわくBank

    $ ssh-keygen -t rsa -b 4096 -C "comment" Generating public/private rsa key pair. Enter file in which to save the key (/Users/xxxx/.ssh/id_rsa): ←秘密鍵のファイル名を入力 Enter passphrase (empty for no passphrase): ←パスフレーズを入力 Enter same passphrase again: ←パスフレーズを入力 Your identification has been saved in /home/xxxx/.ssh/id_rsa. Your public key has been saved in /home/xxxx/.ssh/id_rsa.pub. The key fingerprint is:

    Linux | 公開鍵認証とsshコマンド、scpコマンドの使い方 - わくわくBank
  • Nadoka: IRC Client Server Program - nadokaさんとあそぼう

    nadokaさんについて nadokaさんのインストール nadokaさんの使い方起動 クライアントの接続 終了 設定ファイルの再読み込み 設定ファイル nadokarc の書き方大枠 一般的な設定 クライアントサーバの設定 IRCサーバの設定 ユーザ情報などの設定 チャンネル情報 ディレクトリの設定 bot の設定 そのた すてっぷあっぷ botbot の作り方 添付 bot 紹介samplebot.nb cron.nb opshop.nb rss_check.nb sixamo.nb shellbot.nb evalbot.nb メーリングリスト irc channel 謝辞 感謝したい 変更履歴 nadokaさんについて nadoka さんは、IRCクライアントサーバプログラムです。わかりやすくいうと IRC Client Proxy とか Bouncer とか言うらしいです。私ささ