サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
円安とは
qiita.com/tadsan
こんにちは! Emacs Advent Calendarです! メリークリスマス! Advent Calendarの季節なのでみなさんも20個くらい記事を書く羽目になっているのではないかと思うのですが、私も最近いろいろあって執筆環境を整えてモチベを高めようという気になってきました。 EmacsでMarkdownを書くならMarkdown Modeを使うのが定石ですが、長年何も考えずに使ってきてMarkdown ModeのMarkdown Modeらしい使いかたをしてこなかったので長い12月の最初に向き合ってみようかと思いました。 Markdown Modeのインストール Markdown ModeはEmacsに標準では付属していませんが、M-x package-install markdown-modeとかで入ります。Emacs 28以降ではNonGNU ELPAが最初から設定されているの
いろいろあってWindows上にメインの開発環境を構築しています。とはいってもだいたいのものはWSLで動くので楽なものです。ターミナルは最初から入っているWindows Terminalが十分な機能を持っていますし。 Windowsを起動するといきなり全画面のターミナルでDebian GNU/Linuxのシェルが起動しているというのは、なかなかに壮観で20年ほど前のことを思い返すとまさに隔世の感がありますね。GUIのEmacsすら深いことは考えずともGTK付きでビルドすればWSLgで動いてしまいました。 小さな問題はいくつもありましたが、だいたいのことはごにょごにょすれば解決できます。今回Emacsの環境を構築するまでしばらく気にも留めていなかったことですが、GUIのEmacsを使っていてURLをブラウザで開く機会は思いのほか多くありました。 Emacsはこういう場面でもカスタマイズできる
• PSR-1は高度な技術的相互運用性を目的としたコーディング標準 • PSR-2/→PSR-12はプロジェクト内での認知的摩擦を軽減するためのスタイルガイド • PSR-12はPER Coding Styleに進化した PSRとは何か PSRが何ではないかについて下記の記事にまとめたので、あとでゆっくり読んでください。 というか↑の記事にだいたい書いたので、この記事はコーディングスタイルに絞った内容ということになります。 重要な部分だけ抜萃して再掲しましょう。 PSRを管理するのはPHP-FIG (The PHP Framework Interoperability Group、PHPフレームワーク相互運用グループ)です。この組織はPHPのフレームワーク・CMS・ツールなどの開発者の寄合所帯です。 Frequently Asked Questions - PHP-FIGの内容をざっくり訳
みなさんはPHPで書かれたツール類などを、どうやってインストールしているでしょうか。 まあComposerを使うのが基本ではあるのですが、 Phiveみたいなツールもあったり、Composerを使うとしても composer global require を使うとか、composer require --devを使うとか、Composer bin pluginを使うとかの方法がありますよね。 PHPStan開発者のOndřejはこのように言っています。 PHPStanのインストール方法の選択肢については別に記事を書いています。 PHPStanについては上の記事にも書きましたが、composer require --dev phpstan/phpstanでインストールするだけで外部に依存性を持たない状態でパッケージをインストールできます。 Pharファイルを見る そもそもPHPStanのCo
PHPのstringは任意のバイト列を扱えますが、JavaScript/JSONはUnicodeで扱える文字しか扱えません PHPのint / floatはプラットフォーム依存ですが、JavaScriptのnumberは整数と小数を型レベルで区別しません JSONのarrayに対応する型はPHPのarrayのうちリストであるものです PHPは配列(リスト)と連想配列を型レベルで区別せず、どちらもarrayです リストはキーが0からの抜けがない連番になっている要素が0個以上の配列です array_is_list()関数で連想配列とリストを判別できます array_values()で連想配列をリストに変換できます array_filter()の結果はフィルタされたキーがスキップされるのでリストではありませんが、結果をarray_values()に通すことでリストにできます JsonSerial
メリークリスマス! 週末もPHPを楽しんでますか? ところでWebセキュリティはWebアプリケーションを公開する上で基礎中の基礎ですよね! メジャーな脆弱性を作り込まないことはWeb開発においては専門技術ではなく、プロとしての基本です。 中でもXSS (Cross-Site Scriptingクロスサイトスクリプティング)やインジェクションについての考慮は常に絶対に欠いてはならないものです。 現実にはプログラミングには自動車のような運転免許制度がないため、自動車学校に通わず独学で公道に出ることができてしまいます。つまりは基礎知識がないままにWebプログラマとして就職したり、フリーランスとして案件を請けることも現実には罷り通っています。それは一時停止標識も赤信号も知らずにタクシー営業しているようなものです。 このような事情により、体系的な理解のないWeb開発初心者は (時にはn年のキャリアを
こんにちは! えこひいきしてますか? 僕はしないようにしてます! ところでPHPとかいう言語の標準ランタイム (つまりは、みなさんが普段使ってるphpコマンド) はPHPスクリプトを直接実行するのではなく、実行前にコンパイラがPHPスクリプトをオペコードと呼ばれる中間表現(バイトコード)にコンパイルしてから、ZendEngineと呼ばれるVM(仮想機械)がオペコードを実行する構成になっていますよね。 PHPスクリプトで関数呼び出しをすると、あたりまえですが関数呼び出しをする命令にコンパイルされます。これはまったく不自然ではないことです。ところが、PHPの標準関数にはその前提に従わない、つまりは特別扱いえこひいきされているものがあります。 今回の記事はそんなえこひいきされた関数たちを眺めていきましょう ヾ(〃><)ノ゙ 前提: バイトコンパイルされるPHP ここまでの前ふりの意味の理解に自信
こんにちは! どんどんえこひいきしていきましょう! というわけで、後篇のこの記事では最適化の恩恵が受けられる場合において、どのような関数がその対象になるのかを見ていきましょう。 コードを読む 関数の最適化を担っているのは zend_try_compile_special_func 関数です。 プログラムを読める人ならこれを見てもらえれば何をやっているのかは一目瞭然なのですが、せっかくなので紹介していきましょう。 strlen() 言わずと知れた文字列長を返す関数です。より正確に言うならバイトシーケンスの長さを返すのですが、今回の最適化とは直接関係がないので置いておきましょう。 この関数は引数が strlen('str') のようなリテラルだったらその長さ(つまり3)に展開します。そうでない場合(変数や式など)の場合はSTRLENという専用命令にコンパイルします。また、strlen()自体が
名前、つけてますか? PHPにはnamespace(名前空間)という言語機能があります。 原初のPHPにはなかったのですが、PHP 5.3くらいからあるので、まあ平安時代には成立していたということです。それ以前の時代は App_Http_Controllers_User のような _ 区切りの擬似名前空間が用いられていたことがありました。現在では App\Http\Controllers\User のような \ 区切りの名前空間が利用できます。 名前空間付きのコード 名前空間が見慣れないという方のためにnamespaceのあるコードとしてLaravelで自動生成したControllerファイルの例を先に出しておきます。 <?php namespace App\Http\Controllers; use App\Models\Book; use App\Http\Requests\Store
最速LSPクライアント lsp-bridgeを使おう こんにちは! メリークリスマス! LSP使ってますか? 現在Emacsで代表的なLSPクライアントとして使われているのはLSP Mode、Emacs 29から標準のLSPクライアントとしてマージされたEglotがあります。 そんな中、今回紹介するlsp-bridgeは「最速」を謳うEmacsの第三のLSPクライアントです。 このパッケージはMELPAなどには登録されておらず、まだ開発段階の趣きがありますが、非常に快適な実装なのでこの期に紹介します。 特徴 The goal of lsp-bridge is to become the fastest LSP client in Emacs, not a complete implementation of LSP protocol. lsp-bridgeはLSPの全機能を網羅するよりも最
topsyは多くのLispパッケージを手がけているalphapapa氏が開発しているLispパッケージです。 MELPAからインストールできます。 これは現在画面に映っている関数の上端が見切れている場合に、関数のヘッダー行をウィンドウのヘッダーラインとして表示するマイナーモードです。 言葉で説明するよりも実際にGIFアニメで見てもらった方が早いでしょう。 言語ごとの関数ヘッダ行の特定は、 topsy-mode-functions でカスタマイズすることもできますが、一般的には beginning-of-defun-function で十分なはずです。自作のメジャーモードで期待通りに動かない場合は beginning-of-defun-function の設定を検討してみてください。 なお、Emacs組み込みの機能ではwhich-function-modeというマイナーモードがあり、これは画
メリークリスマス! みなさまに愛されたPHP7.x系は2022年11月28日をもってEOLを迎えました さて、標記のAttribute(アトリビュート)とは、PHP 8.0で追加された機能です。 PHP 7.4の命運が尽きたということは、全人類のPHPランタイム環境でもれなくアトリビュートが使えるようになったに違いありません[要出典]。PHP 8.0がリリースされてからも既に2年が経過していますが、Attributeに関してはみなさんあまり納得できてなさそうというか、どうやって実用すればいいのか持てあまされてるように見えるので、この記事では簡単な実装方法を紹介します。
(defun sut (arg) "テスト対象" (let ((a 1) (b 10) (c 100)) (message "sut: %s" (list a b c arg))) t)
メリークリスマス! Emacs Advent Calendar 2021です! 今月頭にはGNU Emacsの次期安定版であるEmacs28のプレテスト版(いわゆるベータ版に相当)がリリースされました。いつもの通り?ならここからEmacs半年かからずにリリース候補版・正式版がリリースされるのではないでしょうか。Emacsの独特なバージョンのルールや過去のリリース履歴などは以下のページでご確認ください。 さて、2021年のEmacs界隈を賑わしていたのが新しいミニバッファ補完UIの潮流でした。 各パッケージの位置付けや比較などは何人もの方が詳細な記事を書いてくださっているので参照ください。 Emacsの次世代ミニバッファ補完UI | 日々、とんは語る。 君はselectrumとEmacsる? - tsuu32 selectrum/consult/marginaliaの設定 - 備忘録 まあざ
PHPで簡単なAPIを作った話という記事を読みまして、自分ならどう改善していくかを考えました。 Step 1. 整形する = + . などの演算子の周りを空白で空けてあげます。これだけで何か見ためが綺麗めになります。 <?php $front = $_GET['front']; $back = $_GET['back']; $result = $front + $back; $response['result'] = $result; $response['status'] = "true"; $response['formula'] = $front . '+' . $back; print json_encode($response, JSON_UNESCAPED_UNICODE);
そういえば僕も3ヶ月くらい前にComposerとかに依存したくなくて1ファイルで完結するフレームワークを作ってた。ソースコードはzonuexe/hogephpにある。 こういう雰囲気でコードが書ける。 <?= (require __DIR__ . '/../Hoge.php')(function (Hoge\Framework $php) { $php->get('/', function () { ?> <!DOCTYPE html> <html> <title>Hoge index</title> <h1>The Hoge PHP Framework</h1> </html> <?php }); }) ?> トップページのルーティングしか定義していないが、これで起動スクリプトのコード全部だ。ほかにディスパッチ処理などのボイラープレートは要らない。 たわむれに作ったものなのでセキュリティ
このスライドは突発で開催されたPHPerKaigi Online(仮)でしゃべるために用意されたものです。 前回のあらすじ コードを自在に操るためのPHP文法入門 PHPのソースコードを正確に検査したり、ソースコードの一部を書き換えたいと思ったことはありませんか? PHPにはPHP-Parserという構文解析ライブラリがあり、静的解析ツールのPHPStanやリファクタリングツールのRectorはPHP-Parserをベースにしたプラグインでソースコードを検査したり、ソースコードを書き換えたりすることができます。 しかしながら、構文木を操作するには普段何気なくPHPコードを書く以上のプログラミング言語についての知識が求められます。この発表では構文木を取り扱う前提となるプログラミング言語についての知識、PHP-Parserの構造、PHPStanとRectorそれぞれの拡張方法と実例についても紹
PHPのechoとprintはどちらも関数ではなく言語構造です。どちらも文字列を出力バッファに書き出すという機能では同じですが、使われかたが異なります。 echo 1, 2, 3; // ← syntax error ではない print 1, 2, 3; // ← これは syntax error echo print 1; // ← syntax error ではない print echo 1; // ← これは syntax error 形式的に言うと echoとprintはどちらも出力バッファに書き込む機能です まれに「標準出力する」と言及されますが、それは間違いです fwrite(STDOUT, $str)の実行結果とは一致しないということです echoは文ですがprintは式です echoは複数の引数をとりますが、printは1つの引数をとります 便宜上関数マニュアルに掲載され
この数年でPHPでの開発でもCI(継続的インテグレーション)はかなり活発に行われるようになり、PHPUnitなどのテスティングフレームワークのほか、PHPStanやPhanなどのツールによる静的解析も浸透しつつあります。 関数/メソッドの引数と返り値、そしてオブジェクトのプロパティは比較的に型がつけやすいところですが、現状で無法地帯な箇所があります。そうです、配列の内部構造です。実際のところ、PHPDocに @param array や @return array と書くことは mixed と書くのとあまり大きな違いはありません。 ご存じの通り、PHPの配列は、動的配列(可変長配列)と連想配列(ハッシュテーブル、マップ)の特徴を併せ持ったデータ構造であり、配列は変数と同じくあらゆる値を格納することができるからです。 近年の開発が活発なPHPの静的解析ツール(PhpStormを除く)では配列
みんな大好きジェネレータ。クラスとか定義せずにジェネレータだけで綺麗に書けるぞ。 背景 もともとは仕事で書いたコード。先日開催されたPHPerKaigi 2020でジェネレータの事例紹介として出したので、ここで見せます。 要件 データベースから値を取り出してCSVにダンプしたい レコード数 = とにかくいっぱい 全レコードを1クエリで全部取得するのはメモリ量としてもDBの負荷としても許容できない CSVは表計算ソフトで読み込ませる必要がある 表計算ソフトという括りではExcelに限らず65535行以上のCSVを扱えるのは稀なので、ファイルには65534レコードごとにファイルを分割する。 実装 おいらは3重ループとか4重ループとか多重ネストさせるのは絶対に嫌なのでジェネレータで処理を分割しました。 #!/usr/bin/env php <?php /** * 実行すると記事一覧を CSV と
この記事について みなさんここまでついてこられていらっしゃいますでしょうか。この記事はこのPHPがテンプレートエンジンのくせに慎重すぎる (前篇)の続きなので、先に読んで、できれば実際に準備してから来てください。 一気に後篇を書いてしまおうとも思ったのですが、前回は徹夜して書いたので本日は著しく眠いので「Psalmの続き」と「型宣言」と「Phan」の話を書いて私は寝ます。 Psalm/Psalter (前回の続き) さて、PsalterはPsalm同梱の修正ツールです。./vendor/bin/psalter --issues=allで実行するとプロジェクト内のファイルが書き換えられます。 Psalterに限らず、今後ソースコードを自動で書き換えるツールがありますので、実行前にGitでコミットしておいてください。 diff --git a/src/Hello.php b/src/Hello
この記事ではPackagistで公開可能な形式のPHPのライブラリ(Composerパッケージ)を公開するための道具立てを紹介します。あと、現代のPHPerはツールを組み合せてさくっと開発しているんだという自慢です。 タイトルは「この TypeScript が Hello, world! のくせに慎重すぎる」と「この勇者が俺TUEEEくせに慎重すぎる」のぱくr… パロディです。 テンプレートエンジンのくせに型安全なんてなまいきな。 この記事の読みかた せっかくなので手を動かしながら自分でComposerパッケージを作成してみましょう。 今回の題材は「Hello worldを出力する」という革新的機能を提供する、とても画期的な実用ライブラリです。 記事名通り「慎重すぎる」ので、細かく刻んでGitで経過を保存しながら作業を進めていましょう。なんかよくわからない状態になったらgit reset
PHP 8から、PHPは「PHP」と「P++」という2つの言語を提供するようになる というキャッチーな紹介をするP++: 静的型付けをめざすPHPという記事がそれなりに話題になり、このニュースは目覚しく革新的な内容で、多くのひとの目を引き付けました。 これは早まった理解であり、ほとんど誤報と言ってもいい内容でした。2019年8月15日には提案者本人も、少くとも「P++」の計画を短期的に実現するととは非現実的であり時期尚早であることを認めています。 この記事では、PHP開発の現状、なぜ野心的なP++計画が提案され、事実上撤回されたかの経緯について紹介します。 [中立性のための表示] この記事の著者@tadsanはPHPの静的解析を強く推進する立場です。 PHPゆるふわCI入門 PHP型検査・夢と理想と現実) 三行で要約 PHPはバージョンを経るごとに「歴史的経緯」による負債が削ぎ落されてきた
PHP 7.4は現在beta1までリリースされたので、今頃はみなさまも12月のPHP 7.4.0正式リリースに向けて遊び倒してるところだと存じます。7.4でPHPに新たに導入される文法はいくつかありますが、その目玉のひとつがArrow Functions 2.0です。 ちなみにこの記事は「アロー関数はすべての無名関数式の代替になるわけではない」として書きはじめたので、今回本当に書きたかったのはそのあたりです。 最初にまとめると、「アロー関数は簡単なことを短く書ける」記法です。 複雑なことをするには既存のfunction式の方が適してます。 前提知識: 式と文 PHPをはじめとするC言語に影響を受けた多くのプログラミング言語では「式 (expression)」と「文 (statement)」を厳密に区別する特徴があります。 雑に言うと、文とは以下のようなものです。 制御構造 if, else
どうも、Emacs Lispアドベントカレンダーです。嘘です。 Emacsから外部コマンドを起動する方法として、大別すると「コマンドラインシェルで実行したい文字列(コマンド名と引数をまるごと含む)を渡す関数」 (shell-command系) と、「コマンドとコマンドライン引数を個別の引数として渡す関数」 (process系) の二種類の機能に分類できます。 シェルコマンドの方が使用方法がおてがる、かつポータブル(後述)なので私は特別な理由がない限りは前者のshell-command系の使用を勧めるのですが、これは同時に典型的なバグや脆弱性の温床なので注意が必要です。 用語 いろいろややこしい コマンド キーを入力したり、M-xを押してコマンド名を入力すると実行されるEmacsの機能のこと コマンドは関数の一種で、Emacs Lispから関数として利用することもできる シェル / コマンド
EmacsのLispパッケージのロード方法について、あまり周知されてないので書きます。まちがったことを書いてたらごめんね。日本語での説明は@ayatakesiさんの【途中】emacs 24.5のelisp日本語マニュアルより引用します1。 TL;DR package.elとかEl-Getを使ってるなら、init.el から、ほとんどの (require 'hoge) は消しちゃっても動くと思うよ あなたがLispパッケージ作者なら、依存関係はオートロードを期待せずに(require 'hoge)は列挙しないとだめだよ 0. load-path load-pathは、EmacsがLispファイルを読み込むディレクトリ一覧の変数です。もしpackage.elやEl-Getのようなパッケージ管理ツールだけを利用する場合は、この変数を操作する必要はありません。 管理ツールを利用せず手動でLispパ
みなさん正規表現は好きですか? 私は好きです。簡単に脆弱性を作り込めて、とても便利ですからね。 この記事ではPCRE関数(preg_match(), preg_replace()など)を利用して、みなさまにPHP正規表現のバッドノウハウを教示いたします。 先に結論を書きます 単独の文字列のマッチに $ を用いるのは予期しないパターンになるのでやめましょう。^は特に危険ではありませんが、^と$の組み合せではなく\Aと\zの組み合せを覚えましょう。ただし、m修飾子で複数行(マルチラインモード)で、行頭と行末にマッチさせたい場合を除きます。 文字列のマッチに ^ と $ のペアを利用する そうですね、例としてQiitaのようなユーザー登録サイトの表示名 @tadsan のような文字列を登録する前の検査をするとします。 要件としては、使用可能な文字は abcdefghijklmnopqrstuvw
PhpStorm 2018.3RCが11月14日にリリースされ、遠からず正式版がリリースされる見込みです。 2018年11月23日追記: 正式版としてPhpStorm 2018.3がリリースされました。 Coming in PhpStorm 2018.3 - PhpStormには次期バージョンに登載される見込みの輝かしい機能が並んで居ります。その中で目立つ位置にあるのがPHPDoc Improvementsです。 ここにPSR-5についての言及がありますが、この記事ではこれが具体的に現在どのような状態かを説明します。 2018年11月23日追記: 正式リリース後のWHAT’S NEW IN PHPSTORM 2018.3からはPSR-5についての記述は削除されました。 2019年1月30日追記: 「PhpStorm 2018.3でPSR-5ジェネリクス記法はサポートされない」から「PhpS
Pythonでも型チェックが捗ると噂をきいたのでPHPの環境構築について書きます。ちょっと眠いので簡潔に… もしわからないことがあったら回答するのでコメントで聞いて1。 得られる利益 関数名を間違ってることに気付いたり 変な型どうしで計算してることに気付いたり うっかり変な値をreturnしようとしたり そんな問題に編集中に気付けるよ。 画面はVimだけど、ほかのエディタでもいいよ。 事前準備 PHP 7.1+ macOSなら brew install php とかでもいいです (システムに最初から入ってる/usr/bin/phpは不可) Composer https://getcomposer.org/download/ とか読んで適当に入れて。 COMPOSER_HOMEにPATHを通す PATH=$HOME/.composer/vendor/bin:$PATH みたいな行をシェルの設
次のページ
このページを最初にブックマークしてみませんか?
『@tadsanのマイページ - Qiita』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く