koichi_nakashimaのブックマーク (327)

  • C port of Ken Thompson's Space Travel

    koichi_nakashima
    koichi_nakashima 2024/09/19
    ケン・トンプソンが作ったゲーム「スペース・トラベル」のC言語移植版のオンライン版
  • BourneシェルとCシェル、先に誕生したのはどっち?【Unixシェルの歴史】 - Qiita

    補足1: 上記以降のその他のシェルの歴史 ksh: 1980年頃に開発開始し、1983年に ksh83 がリリース、ksh93 は大幅強化版 bash: 1988年1月に開発開始し、1989年6月に 0.99 がリリース pdksh:1987年から1989年頃に開発、その派生版 (mksh) を OpenBSD が採用 ash: 1989年5月にリリース、その派生版をFreeBSD、NetBSD、Debian系Linux などが採用 zsh: 1990年頃に1.0がリリース その他のシェル シェルの歴史 総まとめ(種類と系統図)と POSIX の役割 〜 シェルスクリプトの現在・過去・未来 補足2: POSIX 標準化以降 1992 年に POSIX によってシェルの仕様が標準化されました。しかし Bourne シェルは POSIX に準拠することなく 1992 年の SVR4.2 版を最

    BourneシェルとCシェル、先に誕生したのはどっち?【Unixシェルの歴史】 - Qiita
  • 「ファイルの末尾の改行は POSIX の仕様」はガセネタ - Qiita

    はじめに $\color{#e02020}{\huge{\bf{それは単なる「POSIX標準規格書の用語集」じゃい!}}}$ ということで、まことしやかに POSIX がテキストファイルの仕様を決めているかのような噂が流れていますが(私も言ったことがあるかも?)、POSIX に「テキストファイルは末尾に改行を書かなければならない」なんて仕様はありません。また POSIX は「テキストファイルの末尾を改行にすべし」などとも言っていません。POSIX は「3. Definitions(定義)」で 「POSIX 標準規格書の中で使用している『テキストファイル』という用語の正確な意味は・・・である」と言っているだけなんです。用語の意味を定義しただけであることも、ちゃんと POSIX に書かれています。 ❌️ POSIXはテキストファイルの末尾に改行を書かなければならないと決めた ⭕ POSIXでは

    「ファイルの末尾の改行は POSIX の仕様」はガセネタ - Qiita
  • Microsoftの中の人直伝! 「clip.exe」を覚えるとコマンドラインやWSLで便利だぞ/テキスト出力をクリップボードへポイ!……ただし、文字化けには注意【やじうまの杜】

    Microsoftの中の人直伝! 「clip.exe」を覚えるとコマンドラインやWSLで便利だぞ/テキスト出力をクリップボードへポイ!……ただし、文字化けには注意【やじうまの杜】
    koichi_nakashima
    koichi_nakashima 2024/08/03
    樽井 秀人さんへ。いい加減ShiftJISを捨てて、Windowsのネイティブの文字コードであるUnicode(UTF-16)を使用してください。Windowsはずっと昔からUnicodeに対応してるのに、なんで今さらShiftJISを使うんですか?
  • grepやsedの「-eと-Eの違い」は、基本正規表現と拡張正規表現じゃねーぞ! - Qiita

    はじめに grep コマンドや sed コマンドの -e オプションや -E オプションの意味を勘違いしている例を見かけるので訂正です。 -e オプションは正規表現またはスクリプトを追加指定するためのオプションです -E オプションは拡張正規表現モードを有効にするためのオプションです -e と -E は反対の意味を持つオプションではありません。まったく異なる機能を提供しているオプションです。-e オプションは拡張正規表現でも使うことができます。 -e オプションは正規表現またはスクリプトの追加指定 まず、なぜ -e オプションというものが作られたのか? それはハイフンで始まる正規表現を指定したり、sed スクリプトを組み立てたりするためです。 grep コマンドの話 例えば grep コマンドで -a という文字列を検索したい場合はどうするでしょうか?

    grepやsedの「-eと-Eの違い」は、基本正規表現と拡張正規表現じゃねーぞ! - Qiita
  • 「テスト自動化実践ガイド」執筆に至るまで - Qiita

    はじめに テスト自動化についてのを書きました。2024年7月30日に発売します。 もともと2021年3月ぐらいから書き始めて、同年12月に書き終わる予定だったのですが、伸びに伸びてこんなことになってしまいました。 幸いなことに興味を持ってくださっている人が多いようなので、ここでは書籍で書ききれなかった、執筆に至るまでの背景(あるいは、いかに自分がE2E自動テストで苦労してきたか)について書いてみたいと思います。 試行錯誤の時期 自分が初めてE2Eテスト自動化に取り組んだのは2018年ごろからで、当時は TestCafe というツールを使っていました。そのころのことは別の記事に書いてあります。 ちょっと引用してみましょう。 イケてるところ コマンド一つでマルチブラウザテスト環境が構築できる これだけで完成です。SeleniumのようにWebDriverのインストールは必要ありません。あとは

    「テスト自動化実践ガイド」執筆に至るまで - Qiita
  • Bourne Shell(古いsh)とPOSIXシェル(今のsh, bash等)の違い - Qiita

    Bourne Shell はとっくにレガシーです Bourne シェルとは昔の UNIX で使われていた古いシェルの名前です。最終バージョン(SVR4.2 版)がリリースされたのは 1992 年なので 30 年も前のシェルです。現在は Bourne シェル の後継シェルが広く使われています。LinuxmacOS、BSD 系 Unix(初期の BSD は除く)には Bourne シェルが搭載されたことがないため、古い UNIX を使ったことがある人以外は Bourne シェルを使ったことは無いはずです。Bourne シェルは近く終焉を迎えます。詳細は以下の記事を参照してください。 Bourneシェルの終焉まで残り1年 ~ 新しいシェルへの移行は完了していますか? Bourne シェルは Steve Bourne が開発したシェルの名前です。しばしば勘違いされていますが POSIX で標準化

    Bourne Shell(古いsh)とPOSIXシェル(今のsh, bash等)の違い - Qiita
  • GitHubのWiki使うのはやめとけという話 | やねうら王 公式サイト

    やねうら王関連のドキュメントは、やねうら王のGitHubのWikiに整理して公開している。 やねうら王Wiki https://github.com/yaneurao/YaneuraOu/wiki ところが、このGitHubのWikiは、☆500以上獲得するまでGoogleにインデックスされない(Googleの検索結果に出てこない)のだ。 やねうら王のGitHubは8年目であるし、現在、GitHub Sponsors + FANBOXで1ヶ月20万円程度獲得している程度の規模感なのだが、昨日やっと☆500になったばかりである。(めでたい。やっとGoogleの検索結果に出てくる!) そんなわけで、平均的な個人のプロジェクトGitHubで☆500なんでまず獲得できないので、(Google検索で引っかかって欲しいなら)GitHubのWikiを使うなというのが私からのアドバイスである。 その代わ

  • CUIとは? - CUI は誤用(和製英語) だって知っていますか? - Qiita

    はじめに CUI英語圏では通用しないようです。CLI という正しい用語を使いましょう。というか CUI のことしか書いていない初心者向け記事、量産させすぎ😡 ❌ CUI (キャラクターユーザーインターフェース)なんて言葉は英語にはありません 🟢 CLI (コマンドラインインターフェース)が正しい用語です 🟢 GUI (グラフィカルユーザーインターフェース)も正しい用語です なんども繰り返されている話題ですが、ふと書きたくなったので書きます。 CLI (コマンドラインインターフェース)ってなに? CLI とはその名の通り、コマンドラインを使ったインターフェースのことです。つまり一般的にはシェルを使うユーザーインターフェースです。よく見るコレ↓です。 $ ls bin dev home lib64 mnt proc run srv tmp var boot etc lib media

    CUIとは? - CUI は誤用(和製英語) だって知っていますか? - Qiita
  • Plan 9とInfernoにおけるtar(1)の変化 - Plan 9とGo言語のブログ

    小ネタです。以下の記事を読んでいて、 tar(1) はなぜオプション引数にハイフンが不要なのか? 続・tar(1) はなぜオプション引数にハイフンが不要なのか?―tarとkey argumentsの起源を更に辿る なぜ不要なのかは元記事を読んでもらうといいのだけど、ここではPlan 9ではどうなのか気になったのでtar(1)を調べてみた。ベル研UNIXの子孫なので当然だろうけど、Plan 9のマニュアルでは key の存在がそのまま残っている。 tar key [ file ... ] The key is a string that contains at most one function letter plus optional modifiers. なんだけど、そこで終わりではなく、Plan 9から派生したInfernoでは tar(1) コマンドが無くなっていて、代わりにgett

    Plan 9とInfernoにおけるtar(1)の変化 - Plan 9とGo言語のブログ
  • 「dd bs=サイズ count=1」で パイプから入力するとデータが途切れる罠に注意せよ! - Qiita

    はじめに: データが途切れる問題 dd コマンドでパイプから dd bs=サイズ count=1 でデータを読み取ると途中で途切れることがあります。知っている人にとっては有名な問題だと思いますが。 $ seq -f '%0999g' 100 | dd bs=100000 count=1 | wc -l 0+1 records in 0+1 records out 49152 bytes (49 kB, 48 KiB) copied, 5.0325e-05 s, 977 MB/s 49 $ seq -f '%0999g' 100 | dd bs=100000 count=1 | wc -l 0+1 records in 0+1 records out 4096 bytes (4.1 kB, 4.0 KiB) copied, 0.000208169 s, 19.7 MB/s 4

    「dd bs=サイズ count=1」で パイプから入力するとデータが途切れる罠に注意せよ! - Qiita
  • Why Standardization Efforts Fail

  • Unix哲学「一つのことをうまくやる」は単機能のコマンドを作ることではない - Qiita

    はじめに Unix 哲学には DOTADIW: Do One Thing and Do It Well という言葉があります。日語に訳すと「一つのことをうまくやる」となりますが、しばしば単機能のコマンドを作ることだと勘違いされています。もし勘違いしている人がいるのであれば、ぜひその人に聞いてみてください。なぜ grep コマンドはマッチした行数をカウントする機能を昔から持っているのですかと。昔からある wc コマンドがあれば grep コマンドに行数をカウントする機能をもたせる必要はないのではないかと。 -c Only a count of matching lines is printed. wc provides a count of the words, text lines, and roffcontrol lines for each argument file. 複数の機能を

    Unix哲学「一つのことをうまくやる」は単機能のコマンドを作ることではない - Qiita
  • Bashで$(cat foo.txt)していませんか?$(< foo.txt)しよう - Lambdaカクテル

    以下の文書はBashを使う前提の話。 Bashにはコマンド置換(Command substitution)というのがある。$(another-command)のように、$()でコマンドを括る記法だ。これを利用すると、括弧で括られたコマンドが実行され、その標準出力が文字列として取り出され、$()全体を置き換える。シェルスクリプトでは非常によく見る技術だ。 この$()でファイルの内容を読み出すというのを最近見た。このような用法は非常によく見る。 foo-command $(cat params.txt) しかし、より良い書き方があるのでこれを提唱したい。$(< params.txt)と書くことで全く同等のことができる。しかも速いのでこちらのほうが完全に上位互換となる。 foo-command $(< params.txt) この方法はBashのドキュメントのコマンド置換のコーナーにちゃんと書か

    Bashで$(cat foo.txt)していませんか?$(< foo.txt)しよう - Lambdaカクテル
    koichi_nakashima
    koichi_nakashima 2024/06/08
    これはBashでしか動かない機能ではなく、Bash誕生以前のksh88(ksh86?)で最初に実装され、bash, ksh, mksh, OpenBSD sh, zshで動作する。動作しないのはash系とyashだけなので、むしろ動かないほうが少数派(元記事にコメントできない)
  • インタプリタは「コードを1行ずつ機械語に変換する」はガセネタ - Qiita

    はじめに 多分これはガセネタです。おそらく日だけで出回っているガセネタです。インタプリタにはそのような定義はありません。インタプリタは「ソースコードを読み込んで意味を解釈して実行するプログラム」 です。「1行ずつ」は些細な間違いとして「機械語に変換する」は完全に間違いです。ある程度詳しい人にとっては常識だと思うのですが。 おそらくコンピュータは機械語しか動かせないから、インタプリタも最終的に機械語に変換しているはずだという間違った思い込みからこのガセネタは広まってしまっているのでしょう。機械語に変換するのは面倒な処理です。速くなるかもしれませんが変換処理しなくて良いのだから普通はしませんよ。 コンパイラとインタプリタの定義 コンパイラとは コンパイラとは、ソースコードを元に実行可能なプログラムを生成するためのプログラムです。ユーザーは(ソースコードではなく)別に生成されたプログラムを実行

    インタプリタは「コードを1行ずつ機械語に変換する」はガセネタ - Qiita
  • The Architecture of Open Source Applications

    Architects look at thousands of buildings during their training, and study critiques of those buildings written by masters. In contrast, most software developers only ever get to know a handful of large programs well—usually programs they wrote themselves—and never study the great programs of history. As a result, they repeat one another's mistakes rather than building on one another's successes.

  • The Architecture of Open Source Applications 日本語訳

  • シェルスクリプトをJavaScript/TypeScriptで記述、どのOSでも実行できる「Bun Shell」、JavaScriptランタイムのBunが発表

    JavaScriptランタイムのBunは、新機能としてシェルスクリプトをJavaScriptもしくはTypeScriptで記述し、特定のOSに依存せずに実行できる「Bun Shell」を発表しました。 シェルスクリプトは特定のシェルに依存するもの LinuxmacOSWindowsなどのOSは一般に、「シェル」(Shell)と呼ばれる機能を備えています。 シェルはコマンドラインインターフェイスなどのユーザーとの対話機能を備えており、例えばLinuxのコマンドラインで「ls」コマンドを打ち込むとファイルの一覧が返ってくるという動作はシェルが提供しています。 そしてシェルでは一般に、こうしたコマンドを複数つなげた一連の動作をスクリプトとして定義し実行できる「シェルスクリプト」が利用可能です。例えば、次のシェルスクリプトは、「ls」コマンドによるファイルの一覧をファイル「list.txt」に

    シェルスクリプトをJavaScript/TypeScriptで記述、どのOSでも実行できる「Bun Shell」、JavaScriptランタイムのBunが発表
    koichi_nakashima
    koichi_nakashima 2024/01/30
    シェルやコマンドはOSに依存する。ならばOSに依存しないbashやGNU Coreutils等をインストールすれば解決する。JavaScriptランタイムをインストールするのと何も変わらない。その発想がいつまでも生まれない事が興味深い。
  • シェルスクリプトが速くなる! forkしない新しいコマンド置換がやってくる!(次期bash/zshの新機能) - Qiita

    シェルスクリプトが速くなる! forkしない新しいコマンド置換がやってくる!(次期bash/zshの新機能)ShellScriptBashZshkshmksh はじめに シェルスクリプトを遅くする大きな原因は fork と exec です。この二つは OS のインターフェースである fork() 関数と exec() 関数のことで、シェルスクリプトからは、外部コマンドやバックグラウンドプロセスの実行、明示的なサブシェル (...)やコマンド置換 ret=$(...)、パイプの使用などで呼び出されます。 シェル関数はシェルの中で実行される関数であるため、単純にシェル関数を呼び出す場合には fork も exec も行われません。しかしシェル関数の出力を変数に代入しようとコマンド置換(var=$(func))を使うと、exec は行われませんが fork は行われてしまいます。その事に気づかず

    シェルスクリプトが速くなる! forkしない新しいコマンド置換がやってくる!(次期bash/zshの新機能) - Qiita
  • シェルスクリプトの関数で「戻り値」を返す方法、全部まとめ(bash/zshの新機能 関数置換・値置換の使用例) - Qiita

    シェルスクリプトの関数で「戻り値」を返す方法、全部まとめ(bash/zshの新機能 関数置換・値置換の使用例)ShellScriptBashZshkshmksh はじめに シェルスクリプトのシェル関数の return コマンドは他の言語のような戻り値を返すものではありません。return コマンドで返すものは終了ステータス、つまり 0 から 255 までの数値です。しかし現実には終了ステータス以外の値を返したいというのはよくあります。この記事ではシェル関数から「他の言語でいう戻り値を返す」に相当する方法をすべてまとめました。または次期 bash 5.3/zsh 5.10 で追加される予定の「関数置換 (funsub)」と「値置換 (valsub)」の機能の紹介です。 この記事では現時点で開発中の bash 5.3 と zsh 5.10 に追加される予定の「関数置換」と「値置換」の話を扱って

    シェルスクリプトの関数で「戻り値」を返す方法、全部まとめ(bash/zshの新機能 関数置換・値置換の使用例) - Qiita