タグ

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

  • きれいなコードを書けという話について - Software Transactional Memo

    前回のブログから90日以上経ってしまったので広告が載ってしまったから短文でもアウトプットしておく。 プログラマとして仕事をしているとコードと向き合っている時間の9割以上は既存のコードを読んでいる、だから読みやすさは重要である、という言説は耳にタコができるほど誰もが言っている。 仕事で書かれるコードが誰のレビューも通ること無くマージされている現場は凄惨だが、自分より明らかに経験を積んだ人たちが何度もレビューを重ねたコードが読みやすいかというとそうとは限らない。良いコードが守るべきルールをすべて守っていても不可解なコードはあるし、どんなに読みやすいコードでも数千行の規模になってくるとやはり脳内からこぼれて一度に覚えておける範囲からはみ出る。 変数名や関数名をわかりやすくするとか不必要な技巧を凝らさないとかわかりやすい設計にするとか主観的な事を偉そうに語るは山ほどあり、それらのを崇める事は悪

    きれいなコードを書けという話について - Software Transactional Memo
  • 僕の自作ツールが大学のサーバーをダウンさせてしまった日の話|くりきん

    2021年10月25日、この日は僕がただの大学生から、大学のサーバーをダウンさせた"犯人"へと変わった日です。 小説みたいな書き出しをしてみましたが、これは嘘みたいな当の話で、ふと思い出して懐かしくなったので回想録として note に残すことにしました。 出来事の概要2年前の2021年10月、何が起きたかを簡単に書くと以下の通りです。 ・大学の授業や課題を管理するためのシステムを拡張するツールを作った ・ツールが予想以上の人数に使われ、結果として大学のサーバーに負荷がかかりサーバーが落ちる事態になった ・大学から呼び出しを受けることになった 時系列を追って、この note で出来事の全容を書きたいと思います。 使いづらい LMSまず前提として、私の大学では毎日の授業や課題は授業支援システム、通称 LMS と呼ばれるオンラインのシステムで管理されています。 実際のLMSの画面しかし、この

    僕の自作ツールが大学のサーバーをダウンさせてしまった日の話|くりきん
  • TypeScriptのdeclareやinterface Windowを勘で書くのをやめる2022

    おことわり 個々の関数や変数に正しい型をつける話はしません。TypeScript HandbookのDeclarationの章などを読むことをおすすめします。 かわりに、稿では関数や変数の型宣言をどこにどう置くべきかの指針を与えます。 モジュールとスクリプト declareを正しく使うにはまずモジュールとスクリプトの区別を理解し、意識することが大切です。 ブラウザやNode.jsは外部からの指定でモジュールとスクリプトを区別しますが、TypeScriptでは原則としてファイルの内容でモジュールとスクリプトを区別します。 import 宣言または export 宣言が1つ以上あればモジュール。 CommonJSモジュールの場合はTypeScript専用構文である import = 宣言、 export = 宣言を使う。 それ以外の場合はスクリプト。 ただし、JavaScriptファイル (

    TypeScriptのdeclareやinterface Windowを勘で書くのをやめる2022
  • CMake - Qiita

    CMake とは、autoconf みたいに Makefile を作るツールです。Makefile 以外にも Visual Studio や Xcode の設定ファイルも作れるらしい。 基的な文法 CMake への入力 Directories: CMakeLists.txt 親ディレクトリのここを最初に読む。 add_subdirectory() で子ディレクトリを追加できる。 Scripts: (script).cmake cmake -P で実行する。 Modules: (module).cmake include() で呼び出す。 コマンドの文法 コマンド名は大文字小文字を区別しない。(こういうのやめて欲しい。。。) add_executable(hello world.c) のように書く。 引数は色々な方法で指定出できる。 Bracket Argument: [===[abcde

    CMake - Qiita
  • [CMake] ライブラリを自動的に探すFind<package>.cmakeのテンプレート - Qiita

    はじめに 修正:<package>-config.cmakeが得られる場合はそちらを使うようにという点を追記(@yumetodo さんありがとうございます。) CMakeには自身のプロジェクトに属していないライブラリを自動的に検索してくれる便利なコマンドfind_packageがあります。 例えばBoostライブラリを自作プログラムで使っている場合、 cmake_minimum_required(VERSION 3.8.2) project(find_package_example CXX) find_package(Boost REQUIRED) add_executable(foo foo.cpp) target_link_libraries(foo Boost::boost ) とすればfooをコンパイルする際にBoostライブラリのヘッダーファイルがインクルードされます。 非常に便

    [CMake] ライブラリを自動的に探すFind&lt;package&gt;.cmakeのテンプレート - Qiita
  • デバッガと和解せよ

    2022/08/28 Kernel/VM探検隊online part5 (https://kernelvm.connpass.com/event/256248/) の @nullpo_head (https://twitter.com/nullpo_head) の発表資料です。 ptraceを使って対象コマンドの全子プロセスにattachしてDwarfを見つつデバッグしたいプロセスを探し、最終的には他のデバッガに処理を流すような不思議なデバッガ(?)を作ることで、zero configurationでvscodeでブレークポイントを打ったプロセスのデバッグを始めてくれる dbgee (https://github.com/nullpo-head/dbgee) という便利ツールを作ったときの話をしました。

    デバッガと和解せよ
    nharuki
    nharuki 2023/05/11
    思いのほか力業だったwでもその分楽そう
  • IT英語スタイルガイド | IT英語スタイルガイド

    大手ITスタイルガイドがベースGoogleMicrosoftなど大手IT企業の英語スタイルガイドの基準がベース。一般的な英語表記から外れません。

    IT英語スタイルガイド | IT英語スタイルガイド
  • 『リンカー moldをいろんなターゲットに移植した話』を視聴してCPUやpsABIの世界を覗き見してみた #kernelvm

    Kernel/VM探検隊online part6 で Rui Ueyama 氏による『リンカー moldをいろんなターゲットに移植した話』のセッションを視聴し、普段は接点のないCPUやpsABIといった低レイヤーの世界を覗き見したので、メモを残しておきます。 動画 発表スライド Ruiさんは、LLVMのリンカlldの作者でもあり、過去には同勉強会のPart 2でもリンカについて発表されています。 超高速リンカmold 1/2 - ログミーTech 超高速リンカmold 2/2 - ログミーTech 今回も、前日に発表が決まったとはとても思えない、非常に濃い発表でした。 テーマは筆者の普段の業務と大きく異なります。間違いなどがあればコメントで指摘していただけると助かります。 以下の様なキーワードが頻出します。 リンカ psABI ELF QEMU ISA RISC/CISC エンディアン

    『リンカー moldをいろんなターゲットに移植した話』を視聴してCPUやpsABIの世界を覗き見してみた #kernelvm
  • 1日で基本が身につく! Python超入門

    私が技術評論社から出版したPythonの入門書をベースとしたトレーニング資料です。 出版元の承諾をえたうえで400P近いスライドにして公開します。 企業の自社研修や大学/社会人の勉強会などに利用してもらって構いませんが、再販などの営利利用はお控えください。 後半にはおまけ資料としてプログラミングのレベルマップとレベル向上法および、駆け出しエンジニア向けにインフラエンジニアの世界をまとめています。

    1日で基本が身につく! Python超入門
  • 【必見】Pythonプログラマーが必ず確認するべきGitHubリポジトリ 10選

    はじめに 今回の記事では、学習・開発でPythonを使うプログラマーが必ず確認するべきGitHubリポジトリを10個紹介する。記事の対象は主に以下の通り。 実務でPythonを使っているプログラマー Pythonの情報収集に困っている人 Pythonの学習・開発の効率をアップさせたい人 Pythonのフレームワーク・ライブラリを確認しておきたい初心者 Pythonは1991年にリリースされてから今年で30年以上も経過している歴史のあるプログラミング言語なので、情報量が非常に多くどのように開発を進めればよいかわからない人も少なくないだろう。 そこで、記事では個人の独断と偏見で学習・開発でPythonを使うなら必ず確認するべきGitHubリポジトリを紹介する。Pythonで実装できるプロダクトは多岐に渡るので、記事では分野ごとに確認するべきGitHubリポジトリを紹介する。 必見 awe

    【必見】Pythonプログラマーが必ず確認するべきGitHubリポジトリ 10選
  • 未経験者がプログラミングを学びたいと思った時に最初に読む記事

    ここ数年プログラミングを学びたい人が増えている。そうした需要に応じて有象無象のプログラミングスクールや不適当な内容の学習サイトも増えている。中には粗悪なスクールやオンラインサロンも沢山ある。しかし未経験者にはどれがいいスクールなのか悪いスクールなのか等の審美眼はない。 この記事では未経験者がそういった情報弱者をい物にする偽物に騙されないように滑らかに学習を進めていくための道筋について書く。 この記事の対象読者は下記。 教養としてプログラミングを学びたい未経験者 とにかくWebサービスやアプリを作りたくてプログラミングを学びたい未経験者 プログラマとして職を得たい未経験者 以下、まずは全ての対象読者向けの下準備について書き、その後それぞれの対象読者向けに道筋を書く。 目次 準備 教養としてプログラミングを学びたい人の場合 とにかくwebサービスやアプリを作りたくてプログラミングを学びたい人

    未経験者がプログラミングを学びたいと思った時に最初に読む記事
  • Pythonプログラミング入門 — Pythonプログラミング入門 documentation

    Pythonプログラミング入門¶ ▲で始まる項目は授業では扱いません。興味にしたがって学習してください。 ノートブック全体に▲が付いているものもありますので注意してください。

  • ZigはCMakeの代替となるか

    既存のプロジェクトで使用しているコンパイラを置き換えるだけで、Zigに付属しているCコンパイラを利用できる。 クロスビルドが標準で可能 上でも述べた通り、Zigは標準でクロスコンパイルが可能である。 Zig libcのTaget一覧 ❯ zig targets | jq ".libc" [ "aarch64_be-linux-gnu", "aarch64_be-linux-musl", "aarch64_be-windows-gnu", "aarch64-linux-gnu", "aarch64-linux-musl", "aarch64-windows-gnu", "aarch64-macos-none", "aarch64-macos-none", "armeb-linux-gnueabi", "armeb-linux-gnueabihf", "armeb-linux-musleabi

    ZigはCMakeの代替となるか
  • VSCodeでPython書いてる人はとりあえずこれやっとけ〜 - Qiita

    はじめに Pythonはコードが汚くなりがち(個人的にそう思う) そんなPythonくんを快適に書くための設定を紹介します。 拡張機能編 ここでは Pythonを書きやすくするため の拡張機能を紹介していきます。 1. Error Lens before 「コード書いたけど、なんか波線出てるよ💦」 記述に問題があった場合、デフォルトでは波線が表示されるだけ。。。 after Error Lensくんを入れることによって 波線だけでなくエディタに直接表示される。 はい、有能〜 2. indent-rainbow before Pythonくんは インデントでスコープを認識している。 for の f から下に線が伸びてるけど、ちょっと見にくいなぁ after 色が付いてちょっと見やすくなった! 3. Trailing Space before 一見、普通に見えるコード after 末尾にある

    VSCodeでPython書いてる人はとりあえずこれやっとけ〜 - Qiita
  • 共通化すれば良いとは限らない - Object.create(null)

    ここのところ偶然なのか「共通化」という言葉を多く聞いているのですが, その言葉を聞くたびに身構えていることに気がついたので, この気持ちの出どころを共有しておきます. なぜ身構えているかというと, 共通化が必ずしもコードを良い状態にするとは限らないにも関わらず, それ自体が目的になってしまっている (ように見える) ことが多いからです. この手のリファクタリングの目的はあくまでコードの改善のはずで, そのことを忘れて共通化するだけで満足してしまうと, 良くてリファクタリングの効果が半減, 悪ければ逆効果になってしまいます. 個人的にコードを共通化する上で注意してほしいと思っているのは以下の二つです. コードを共通化すべきでない場合もある 共通化されたコードは一般的な原則にしたがって設計されなければならない 似たようなことは歴史の中で何度も繰り返し言われていることだろうと思いますが, 改めて

    共通化すれば良いとは限らない - Object.create(null)
    nharuki
    nharuki 2022/07/05
    ただただコードが類似しているから、というだけで共通化すると逆に要らぬ依存関係を生む羽目になる。知識が重複している=役割が近しいとも言い換えられる。
  • PlemolJPか、それ以外か – プログラミング用フォント徹底比較!

    2021年7月24日。IBMから『IBM Plex Sans JP』がリリースされました。 「だから?」と思われた方、罰としてこのまま長い序文をお読みください。それ以外の方は次の見出しでお会いしましょう。 以前の記事でもお話ししましたが、これまでにリリースされてきた日語対応のプログラミング用フリーフォントは、一部を除いて『源ノ角ゴシック』と『M+』という2つのフォントから派生したもの。 なぜ他のフォントが使われないのか。それは選択肢が無いからです。この2つ以外で、 漢字を網羅しクオリティが高くライセンスフリーで使えるそんな都合の良いフォントはほぼありませんでした。あるとすればそれは、漢字を含まないフォントのみ。 ここに加わってきたのが『Plex Sans JP』という新たな選択肢です。 日常使いできる安定感、多彩なウェイト (太さ) 、そして商用利用可能なフリーフォントであるという大きな

    PlemolJPか、それ以外か – プログラミング用フォント徹底比較!
  • Value Objectについて整理しよう - Software Transactional Memo

    Value Objectとは何であるか? マーチン・ファウラーのPatterns of Enterprise Application Architecture(PofEAA)やエヴァンス・エリックのDomain Driven Design: Tackling Complexity in the Heart of Software(DDD)が原典であるが、PofEAAではこう切り出している。 When programming, I often find it's useful to represent things as a compound. プログラミング時は物をcompound(合成物)として表現すると便利なことがしばしばある。 例えば2次元空間上での座標のように複数のメンバ(属性)を持つ物は便利である、と。しかしそれらを比較する方法は一意ではない、そこで Objects that a

    Value Objectについて整理しよう - Software Transactional Memo
  • シグナルハンドラにprintf()を書いてはいけない - Qiita

    三行でまとめると シグナルハンドラ内でprintf()してはいけない というより、余計な処理を書いてはいけない もう一度言う、シグナルハンドラで余計なことをするな、非常に大事なことだ はじめに シグナルハンドラでやってよい処理は非常に限られるのに、全くルールを守らないサンプルコードが世の中に大量に出回っている。printf()するなんてもってのほかなのだが、カジュアルにそこらじゅうで見かけて非常に悲しい。 この記事では、そんな状況を少しでも改善したいと思い初心者向きに書いたものだ。そのため、下記では、回避するにはどう実装すればよいのか、ルールを破るとどうなるのか、といった点を先に簡潔に記述する。 なぜしてはいけないのか、POSIXだとかリエントラントだとか、は下の方に追いやっている。玄人は読んでてウズウズするだろうが、細かい話はできるだけ目につかないような構成としたため了解いただきたい。

    シグナルハンドラにprintf()を書いてはいけない - Qiita
    nharuki
    nharuki 2022/05/11
    一番の解決策はシグナルを意識的に使わない && キャッチしない(発生したら諦めてプログラム落とす)
  • ユニットテストのガイドラインを作成しました | メルカリエンジニアリング

    この記事は Merpay Tech Openness Month 2022 の15日目の記事です。 はじめに こんにちは。Credit Design Teamでバックエンドエンジニアをしている@tanaka0325です。主にメルペイスマート払いの開発をしています。 この記事では、先日私のチームで作成したユニットテストのガイドラインについて紹介します。 課題 現在私が担当している「メルペイスマート払い」のマイクロサービスは、もともと「メルカリ月イチ払い」として提供されていたコードを流用し、新規要件となる機能を追加して作られたマイクロサービスです。 マイクロサービス化するにあたり、「メルカリ月イチ払い」にあったデータはマイクロサービスリリース後に随時マイグレーションをする方針になったので、既存のデータをマイグレーションしつつ、定額払いなどの新規機能を追加してきました。メルペイスマート払いのマイ

    ユニットテストのガイドラインを作成しました | メルカリエンジニアリング
  • else 句に「// 何もしない」コメントを書く意味について

    確かに、パッと見で 「なんだこれ?」 になりますね。 意味のないコメントとして else 句ごと削除してしまって良さそうにみえます。 しかし、実はこの「何もしない」コードは、 プログラミング(理論)的に面白い側面を持っている ので、簡単に記事にまとめてみたいと思います(記事中では Swift に似た擬似コードを使用します)。 キーワード if 式、網羅的パターンマッチ、参照透過、副作用、モナドと単位元 else 句が省略できる条件 例えば、次のコード例を考えてみます: let array: Array<Int> = ... var positiveArray: Array<Int> = [] // var = 可変変数 for x in array { if x > 0 { positiveArray.append(x) } else { // 何もしない } } ここでは array か

    else 句に「// 何もしない」コメントを書く意味について
    nharuki
    nharuki 2022/01/11
    発端からは想像できないくらい深い…