はてなキーワード: Emacsとは
HHKBは下記のような話が前提となって作られている
アメリカ西部のカウボーイたちは、馬が死ぬと馬はそこに残していくが、どんなに砂漠を歩こうとも、鞍は自分で担いで往く。馬は消耗品であり、鞍は自分の体に馴染んだインタフェースだからだ。
新しいパソコンを買ってもWindowsからMacに乗り換えてもキーボードは大切なインタフェースとして鞍のように持ち運ぶ
なので小さければ小さい方が良いし品質は高ければ高い方がいいい
この大前提があるので
といった特色を持っている
キーの少なさについて不満を言う人が多いが、基本的にプログラマーはFunctionキーや矢印キーを使わない
それどころかホームポジションから指を離さないといけないようなキーはほとんど使わない
例えばVimならhjklのキー、EmacsならC-npfbのキーで移動できるので矢印キーは使わないし
BackspaceはC-hを使ったり、その他にも人によって独自にショートカットキーを設定している
これはキータイピングの時間を短くするという理由と打ち間違いを極力減らすという理由のためである
大抵の場合ショートカットキーにはCtrlキーを多用するのでAキーの横にCtrlキーが配置されており、押し間違いの代表格であるCaps Lockはよくわからないところに追いやられている
プログラマーが英語配列を好むのも実はこの押しやすさが関係していて
ITなどではしゃいでる人をみると必ず、冷や水をかけに現れるブクマカがいる。
昔は存在しなかったこういう人たちが、ITをつまらなくしてる側面は確かにあると思う。
はてブでもマンガとかのジャンルとかでは、ハラスメントは注目コメントに入ってこない。
最近では、注目ブコメで露骨に暴言、ハラスメントしてくる奴らも増えた
足引っ張り屋のせいでオモテで素直にはしゃげない
いやぁ〜、テキストエディタの世界、めっちゃディープでんねん!聞いてくださいよ〜。
まず、テキストエディタの心臓部、バッファ管理システムについてや。これ、単なるテキスト保持やないんですわ。例えば、Emacsのガベージコレクション機構。マーク&スイープ方式採用してて、バッファ内のLispオブジェクトを効率的に管理してんねん。これがあるから、長時間の編集作業でもメモリリークせーへんのや。
次に、レンダリングエンジン。これが曲者でんねん。Unicode標準のUAX #9に準拠した双方向アルゴリズム実装せなアカン。さらに、合字処理のためにOpenTypeのGSUB/GPOSテーブル解析も必要や。Harfbuzzライブラリ使うんやけど、カスタムシェーピングエンジン組み込んで、特殊な文字体系にも対応せなアカンのや。
構文解析エンジンも侮れまへんで。LR(1)パーサーじゃ複雑な言語構文に対応でけへんから、GLR(Generalized LR)パーサー実装するんや。これで曖昧な文法も扱えるようになるんですわ。Treesitterライブラリ使うと、インクリメンタルな構文解析ができて、巨大ファイルでもリアルタイムにハイライティングできるんや。
差分アルゴリズムも奥が深いんですわ。Myers差分アルゴリズムだけやなくて、Histogram差分アルゴリズムも実装せなアカン。大規模リファクタリングの差分表示に効くねん。さらに、セマンティック差分アルゴリズムも組み込んで、構造的な変更も検出できるようにするんや。
非同期処理システムもめっちゃ重要や。単なるPromiseやasync/awaitやのうて、Reactive Extensionsベースのストリーム処理実装するんや。これで、複雑なイベントシーケンスも扱えるようになるんですわ。さらに、アクターモデルベースの並行処理システム組み込んで、マルチコア活用した並列処理も可能にするんや。
最新トレンドもめっちゃアツいんですわ。例えば、Language Server Protocolの拡張や。単なる静的解析やのうて、シンボリックAI使うた意味解析まで可能にしてるんや。これで、コードの意図を理解して、より高度なリファクタリング提案ができるようになるんですわ。
WebAssembly統合も進化してるんや。Single Instruction, Multiple Data (SIMD)命令セットサポートで、テキスト処理のパフォーマンスが爆上がりしてんねん。さらに、WebAssembly System Interface (WASI)採用で、ファイルシステムアクセスも可能になってるんや。
AI支援機能も侮れまへんで。単なる補完やのうて、プログラム合成(Program Synthesis)技術導入してるんや。部分的な仕様から完全なコードを生成できるようになってんねん。さらに、説明生成AI組み込んで、生成されたコードの詳細な解説までしてくれるんですわ。
リアルタイムコラボレーションも進化してるんや。Conflict-free Replicated Data Type (CRDT)のカスタム実装で、ネットワーク遅延があっても一貫性保てるようになってんねん。さらに、意図ベースの競合解決アルゴリズム導入して、複雑な編集操作の衝突も自動解決できるようになってるんや。
拡張性アーキテクチャもすごいんですわ。WebAssemblyベースのプラグインシステム採用して、言語に依存せんプラグイン開発可能になってんねん。さらに、サンドボックス化されたランタイム環境提供して、セキュアなプラグイン実行も実現してるんや。
性能評価も厳しくなってるんですわ。起動時間は、コールドスタートだけやのうて、ホットスタートも測定せなアカン。メモリ使用量も、物理メモリだけやなくて、仮想メモリの使用状況も追跡するんや。CPU使用率は、マイクロアーキテクチャレベルの最適化まで求められるようになってんねん。レンダリング性能は、GPUアクセラレーションの効率も評価せなアカンのや。応答性は、入力レイテンシだけやのうて、知覚的な応答性(Perceived Responsiveness)も測定するんですわ。
いや〜、テキストエディタの世界、マジでディープすぎて、もう頭おかしなるで〜!こんな感じで、テキストエディタの最深部まで潜ってみましたけど、いかがでしたか?テキストエディタ、侮れまへんで〜。ホンマに。
生産性が全ブラウザの中で一番低いにも関わらずなぜか使用率が高いので、生活残業を稼ぎたい人に大変オススメのブラウザです。
Windowsに最初から入っているEdgeは基本的にChromeの全ての機能が使える上に、
縦タブやOfficeファイルのプレビュー、Copilot、広告ブロックなど業務を効率化させる余計な機能がついているので禁止です。
生活残業をしたい生産性の低い社会人の合言葉は「EdgeはChromeダウンローダー」!
もちろんVimキーバインドでブラウジングができる拡張機能、Surfingkeysなんて入れたら生産性が爆上がりしてしまうので、
リンクはマウスでポチポチとクリックし、ページスクロールはマウスホイールを使いましょう。
Ctrl+TやCtrl+L、Ctrl+Wなどのショートカットも覚える必要がありません。
生活残業のためにタブを開くのも閉じるのもマウスを使うべきです。
こちらもマウスと矢印キーを使うことを前提にした非常に生産性の低いエディタであるにも関わらず使用率が高く、
と言う気の狂った操作方法しかなく、後者の場合『Shiftがすっぽ抜けるとやり直し』と言う絶望的な生産性の低さで非常におすすめ。
カーソル移動と言う一番頻出する操作方法がメモ帳と変わらないので、結局多少補完が強力だろうとVSCodeの基本的な生産性はメモ帳と同じです。
素晴らしい!生活残業にピッタリ!
VimやEmacsなどのエディタはもちろん、これらのキーバインドを使えるようにする拡張機能も絶対に使うべきではありません。
VSCodeで使えるGit系の拡張機能もバカみたいにマウスをポチポチして操作する必要があるので、
ヘタするとそのままGitコマンドを打つよりも遅そうで最高です。
間違ってもtigやEmacsのMagitなどの高速Git操作インターフェースを使ってはいけません。
わざわざGUIで操作するSourcetreeを入れるのもアリですね。
ExcelでもSpreadsheetでも全てのセルにその場限りの計算式を入れましょう。
今日は家に引きこもり続けている。これから散歩へ行こうと思うが、その前に冷水シャワーで気合を入れたい。
普段からブログ記事なんてそう頻繁に見ているタイプではない。ドッグフーディングの失敗である。
というのも記事推薦ツールを作ってみたが自分では使わないことがわかった。
自分で作ったもののほうが世間で誰かが作ったものよりも使いやすい、というタイプのツールはそう多くはない。
こう考えると自分の仕事の具体的状況に対して最適化すると、自作の意味が出てくるように思う。
ポモドーロタイマーについても、CLIツールとして最もシンプルな形にしたものを作りたかった。タイマーの時間も自分の仕事の時間に対して最適化できる。
TODOリスト管理ツールについては自作する価値があった。なぜなら、履歴をプレーンテキストにできるし、その履歴でグラフのプロットも簡単にできるからだ。
次に作ることになりそうなのは、emacsの自分用python開発環境モードだ。elpyよりもフィットしたツールを作りたいわけである。
Vimを使っている開発者が、pythonコードのインデントをスペース2として書いていた
他の開発者はpep8に従っているのでインデントはスペース4である
Emacsでは、tabを押せば即座にスペース4として補完されるのでタイプ数が増えるということはない
ところがこのVim利用者はスペースを2連打して入力していたようである
コーディングスタイルは、原則としてグローバルスタンダードとなっているものを採用した方が良い
pythonであればpep8を使えば、他のコードとの整合性もとれる
もし他の開発者が「スペース2のほうが生産性が高い」というなら、tab一回の入力で補完されるような環境設定を推奨すべきである
つまり、コードブロックを視認するためには4ぐらいの幅があったほうが見やすいということだ
学生時代にエディタ戦争というものを知って、vimかemacsかということで、ストールマン先生を信じてemacsを使い続けてきた
基本的なキーバインドは熟知しているので生産性は高いし、lispでカスタマイズする方法も知っている
だがvscodeを布教する連中が現れてから「そろそろ俺も老害か?」と思うようになってきた
しかしリーナス・トーバルズも、Matzも、デイブ・トーマスも、グイドヴァンロッサムも、DHHも、ビャーネ・ストロヴストルップもEmacsユーザーである
サーバサイドにemacs-noxが入ってない時は仕方なくviを起動するが、開発は常にemacsを使う
今でこそWindowsでも全く問題なく開発できるけど、ちょっと前は「Macのが開発体験が良い」と言われていた。
具体的には2011~2015年あたり。
2013年のころ、俺はWindowsで開発していた。WSL2なんてものは当たり前に存在しない時代だ。
たとえばC言語を使いたい場合、MinGWとMSYSを使ってこんなかんじで必要なものにチェックマークをしてインストールしていた。
まちがえた。俺が使っていたのはCygwinだ。こんなかんじでインストールする。
「パスを通す」とか言われていた時代だ。今ではインストーラがほとんどやってくれる。
Windowsのコマンドプロンプトがアホほど役に立たないので、msysCygwinのコンソールを使うのだ。
Pythonのインストールにもパスを通していた時代だった。当時はまだ2系が主流で、卒論を書く際、大学の教授から「3系は使ってもいいけど、俺は知らないからサポートできない」と言われた。
Scipyはインストールしなければ使えなかったので、「python scipy インストール」で検索して出てきた記事を参考にしてインストールしていた。これがまたエラーの連続だった。
プログラムを開発するエディタも、vim、emacsがまず候補に上がった。どちらも癖のあるエディタなので、そういうのが嫌な人はサクラエディタが推奨されていた。そして少しして登場するAtomに感動したのだ。今ではあたりまえのようにVSCodeがある。
ちなみに俺はPythonの開発ではIDLEというのを使っていた。知ってる?こんなの。
そんなWindowsユーザーを少し煽るような(Winユーザが自虐するような)、「プログラミングするならMac」という風潮があったと記憶している。そこから「どうやらMacはUnix系で、コンソール操作が簡単らしい」「文字がきれい」「Windowsでは定期実行するためのcronすらないが、Macにはある」「xcodeというのがあるからめちゃくちゃプログラミングがラクらしい」みたいなイメージがあった。
今ではWindowsも随分便利になったし、IDEやインストーラがなんでもしてくれるようになった。今では結論、「どっちでも好きなほうを使えばいい」という良い環境になった。