サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Switch 2
var.blog.jp
◆ history.pushState で移動してから戻ってきたときにスクロール位置は復元される ◆ history.scrollRestoration の設定で無効にすることも可能 ◆ ページ全体以外の要素内スクロールは復元できない ◆ 通常のページ遷移でも bfcache がない Chrome だと復元できない スクロール位置が復元されてる前の記事で SPA にするかしないかを考えてるときに JavaScript でページを切り替えだと スクロールバーの位置がそのままになってしまう問題もあると思ってました 移動時は新規にページを読み込むのと一緒なので window.scrollTo(0, 0) でリセットで良いです しかし 戻る・進むボタンを使うときは 移動直前の状態に戻ってきてほしいものです 間違ったリンクをクリックして移動した後に戻るボタンで戻ってきたらスクロール位置が一番上に戻っ
◆ import 時に importmap で指定したパスから import できる ◆ 絶対パス・相対パス以外に Node.js で使われるパッケージ名を使うこともできる ◆ node_modules 内ではパッケージ名で import されるので rollup などが必要だったのがいらなくなる これまで ES Modules の import で指定するモジュールの場所は相対パスか絶対パスを書く必要がありました Node.js のようにパッケージ名だけ書くのはエラーです 例えば lit-html をロードする場合 こうなります import { html, render } from "https://unpkg.com/lit-html?module" HTML と同じフォルダに node_modules を配置していれば相対パスでこうなります import { html, rend
◆ 256 までは DOM Markers でマーカーが DOM の要素でできてる ◆ ズームやパンで要素の座標を調整 ◆ 256 からは Tile Markers で Canvas にマーカー画像を描画してタイルにしてる ◆ 数が多くなると Tile Markers のほうが位置調整とかも減るので軽い ◆ 表示範囲のタイルだけ作ればいいので画面外のマーカーは表示しなくていい ◆ icon に path を指定したマーカーは 256 を超えても DOM Markers のままになってる ◆ DOM Markers は画面外のも更新してるので多くなると重い ◆ path じゃなくて画像ファイルにすれば Tile Markers になって軽くなる マーカーが多いと重い以前 4, 5 年くらい前に Google Maps でマーカーを大量に表示してたときは重かったのですが それでも 100 とか
◆ 単純に文字列化のみで良い値なら JavaScript で実装した方が速い ◆ 文字列のエスケープ処理は JSON.stringify の方が速い ◆ オブジェクトのプロパティ列挙も JSON.stringify の方が速い ◆ 基本は JSON.stringify で十分 ◆ 更に速度が必要ならスキーマ定義して Fastify で使われてるライブラリなどを使う Fastify が生の Node.js より速い理由を調べたときは JSON.stringify が遅いのが原因でした ただの文字列結合と比べたら 40 倍近く差がありました これはもしかするとインデントや置換のオプションなしが前提なら普通に JavaScript で実装したほうが速い可能性もあったりするのでしょうか? というわけで JSON.stringify を自作しました オプションはなしで 事前のスキーマ定義も使わないも
Fastify 速いですね Express が hapi より遅いのは意外でした Koa は本体だけだと Express 以上に何もしないので その分速めです よくみると驚きなのが http.Server より Fastify が速いというところ http.Server はフレームワークを使わない Node.js 自体の API です Koa や hapi はこれを中で使っています これより速いということは Fastify は http.Server は使わずに net などを使って ソケット通信部分を直接操作しているのでしょうか? http.Server を使ってない?Fastify のソースコードを見た限りでは 特に設定をしなければ http.createServer でサーバを作成しています つまり http.Server を使っています https://github.com/fas
rollup 使ってみたあるライブラリのコードを見ていて すごく規則的ではあるんだけど無駄が多くて こんなこと手動でするかなぁ?と思うのがありました いかにも機械的って感じですが webpack みたいなバンドルされたものって感じでもなく普通に書いたようなコードです それでも global$1 と global$2 とか人が書かないような部分も多く気になってました その後色々あって rollup がもしかしたらこれかもと思うことがあって 試してみたら正解でした webpack や parcel と違って rollup はライブラリ向いてるとか聞いたことはありましたがその意味はよくわかってませんでした ですが バンドル結果をみればその理由は明らかでした rollup の良いところwebpack や parcel は元のファイルの import/export 処理だけを書き換えてそれぞれを関数
jasmine とか jest とか使ってやる単体テストじゃなくて 実際にブラウザで input に文字を入れたりボタン押したりして DOM がどうなってるかを確認したりするやつです 有名なのは WebDriver を使った Selenium 系です しかし 個人的に Selenium 嫌いなので気が進みません 以前 Selenium を使わずに同じことをするというすごくレアなライブラリを見かけて期待していたのですが それも更新されず非推奨になりました そのときに TestCafe に移行するといいよ みたいなことが書かれてましたが 結局 TestCafe もほぼ使わずいつか使うカテゴリに入って放置でした それから何年か経ってるのでまた調べてみましたが そこまで種類は多くないようです やはり WebDriver (Selenium) を使ったものが多く 新しいものが出ててもこれ系です 異な
◆ -webkit-overflow-scrolling をつけると範囲外表示できないバグがあった ◆ 今も直ってない ◆ だけどなくてもデフォルトでなめらかにスクロールするから付ける必要がなくなった 以前の iOS ではページ全体のスクロールはなめらかでしたが要素内のスクロールはすごくカクカクしてました 要素内のスクロールは 適当な要素に overflow: scroll をつけて要素内でスクロール可能にしたものです それの対処方法に -webkit-overflow-scrolling: touch を指定するというのがあります これを指定すると要素内のスクロールでもなめらかにできました しかし このスタイルにはバグが多いと報告されていて 私が困ったものだと このスタイルをつけた要素の外側に描画できないというものがあります スクロールエリアの中の要素で position: fixed
調べてみると Chrome 49 からのようです 結構前ですね URL オブジェクトURL のオブジェクトに searchParams というプロパティが追加されていて クエリパラメータを簡単に扱えます const url = new URL("http://var.blog.jp/page1.html?query=1&qqq=aaa&foo=bar") const params = url.searchParams // URLSearchParams {} params.toString() // "query=1&qqq=aaa&foo=bar" params.append("xxxx", "yyy") params.delete("qqq") params.toString() // "query=1&foo=bar&xxxx=yyy" url.href // "http://va
rimraf を入れたり OS コマンドを直接呼び出したりの手間が省けます 内部的には 1 から実装してるのかとおもいきや rimraf をそのまま取り込んだようです https://github.com/nodejs/node/pull/29168 経緯はこっちの方が詳しいです https://github.com/nodejs/node/pull/28208 ファイルシステムにふれる部分で OS 固有の問題もあったりして rimraf は昔から一番使われてるものでそういうところの対処もされているのでそのまま使うのが良いという判断のようです 並列処理的なところでも C++ でするより Node.js レベルでやったほうが libuv のイベントループでの非同期処理で並列実行できてパフォーマンスが良いみたいです 名前については fs.rmdir とは別に shutil を作ることが提案され
bat ではなく またランタイムの exe とスクリプトが別になる Node.js とか PHP でもなく単体 exe です 環境は開発用のツールは特に入ってない一般的な Windows PC です そして できる限り早く楽に作るのが目的です スクリプト系の言語は無しなので C/C++ などネイティブなものや C# など .NET Framework あたりです C/C++ はちょっとしたこと程度なら書く難易度は低いですが Windows で VisualStudio も入ってないとコンパイルができません Cygwin や MinGW があれば gcc くらいデフォで入ってそうですが そういうのは入ってません コンパイラ入れる手間があります Rust や Go もコンパイラがいりますし 楽さ的には gcc が一番軽い? .NET Framework は VisualStudio がいるので
◆ 定期的に AppData のフォルダ 3 つの違いが気になって調べてるのでまとめ ◆ 個人 PC なら Roaming も Local も一緒 ここを参考にしてます ほかも見てますが 同じようなことを書いてました https://superuser.com/questions/150012/what-is-the-difference-between-local-and-roaming-folders https://superuser.com/questions/21458/why-are-there-directories-called-local-locallow-and-roaming-under-users-user 大きな企業や学校などで多数の PC をドメイン機能でまとめて管理してる場合に どの PC でログインしてもアプリケーションのデータを引き継いで扱えるようにしてい
◆ apt で jupyter-notebook をインストール ◆ jupyter notebook コマンド ◆ WSL だと Windows の Chrome で起動もできる でも 重いしインストール時間かかるし 専用のコマンドプロンプト使わないとパス関係でうまくいかないしで 機械学習するわけでもないのに Anaconda 入れるのもなぁ という感じです Win10 なら WSL があって Python を Windows 側には入れず WSL だけにできるし と WSL に Jupyter Notebook を入れて使うことにしました インストールpip で入れればいいのかなと思ってましたが Ubuntu では apt にパッケージがありました 検索した感じでは Jupyter Notebook が入りそうなものに jupyter-notebook と python3-notebo
Java 製らしいですが Java の微妙な感じがしません 昔見た Java 製のツールは見た目が悪い意味で独特で好きになれない感じで私が Java 嫌いな一つの理由でした ですが JetBrains の IDE を見て Java の GUI もけっこういいんだねと見直したほどです そこでどういう技術で GUI 作ってるのか調べてみました Java の GUI frameworkJava ユーザでない私が聞いたことあるのは AWT / Swing / JavaFX の 3 つ 私が知ってるだけあって どれも有名なもので今でもこれらがスタンダードみたいです どれが一番新しいかも知らないくらいでしたが 上に書いた順で古いのから新しいのになってます AWT が一番最初からあるもので それぞれの OS のコンポーネントを使用するようです 速いけど見た目が揃わないとか HTML でフォームパーツがブ
◆ @babel/polyfill は deprecated になってた ◆ 代替は core-js と regenerator-runtime のインポート ◆ core-js だとモジュールごとにロードできるので IE が消えれば 最低限の polyfill のみにできて効率よさそう @babel/polyfill が deprecated になってたES2015+ のバンドル時に IE 用に @babel/polyfill を使ってたのですが 7.4 から deprecated になってたようです https://babeljs.io/docs/en/babel-polyfill 大きく赤色で警告っぽい見た目じゃなかったので ドキュメントは一応見てたはずなのにスルーしてしまっていました 変わった理由は core-js の方に書いてます https://github.com/zloir
その非同期処理がタイムアウト機能に対応してれば 時間がすぎれば Promise が reject されたりしそうですが中にはタイムアウトに対応してなかったり 設定してるのになぜか終わってくれないライブラリもあったりします そういうときのために自分でタイムアウトできるようなものを作ります まずは基本のタイムアウトとか考えない非同期処理をする関数を用意します async function p() { const result = await fn() return result } この関数は 非同期関数の fn を実行した結果を返すもので fn の処理が一定以上かかってるようならタイムアウトするようにします やることは単純で自分で Promise を作って fn の結果を受け取ったら resolve し 受け取るより先に時間がくれば reject します async function p(t
vi でも emacs でもなんでもいいです ~/.bashrc などの rc ファイルに書いておくと 次から書かなくていいので楽です /etc/incron.conf でも設定できるみたいです こっちのほうが全部のユーザに対して設定できるのでいいのかもしれません エディタを終了すると設定が更新されます incrontab -d が必要と書いてるところもありましたがなくていいです 何かの理由があって設定ファイルのリロードしたいときに -d を使います 確認したいときは incrontab -l 削除したいときは incrontab -r です 設定ファイルの書き方監視するディレクトリかファイル どのイベントを監視するか イベントが起きた時に実行するコマンド の 3 つをスペース区切りで書きます パス/ からの絶対パスじゃないとダメです ディレクトリでも大丈夫です マスクイベントを選びます
◆ n-install でインストールしないと管理者権限必要で使いづらい ◆ dnf で入れた Node.js 使うと一般ユーザに権限のない場所に node_modules ができる ◆ 使いやすいけど切り替えで指定バージョンのファイル全部コピーしてるみたいで遅い ◆ シンボリックリンクでいいのに nodebrew の必要性なかった?新しい環境に Node.js を入れようといたのですがこれまで使ってた nodebrew って perl が必要なんですよね 昔 Node.js のバージョン管理ツールを比較して nodebrew をオススメしてるところがあって以来 nodebrew を使っています はっきり覚えてないのですが そのおすすめの理由がたしか 「デフォルトで入ってる perl があれば動く」 というものだったと思います 適当にググって時期と内容からするとこのブログ? ここの人は M
◆ Canvas は更新面で不利 ◆ アニメーションとかマウスホバーの処理などで全体再描画になるので重い ◆ データ数が少ないとたいしたことないけど すごく多くのデータを扱うとかなら SVG が無難 いろいろありますが 大きな違いに描画部分を Canvas でするか SVG でするかというのがあります どっちでもいいやと思ってたのですが 使ってみると気になる違いがありました 結論を先に書くと SVG のほうが軽いです 大量のデータになると Canvas だと表示されるまでに時間がかかりますが SVG の方はそこまでかかりません SVG のほうが良さそうな理由仕組みを考えても Canvas は部分的に変更できなくて 1 から再描画する必要があるのに比べて SVG は HTML みたいな XML ベースなので部分的に変更ができるのでブラウザがいい感じに最適化してくれます 例えばマウスを乗せたと
◆ Windows はデフォルトで cp932 になってるみたい ◆ UTF8 モードにするオプションも pip コマンドや -m pip だと使えないので環境変数で指定 ◆ PYTHONUTF8=1 romkan をインストールしようとしたらエラーが出ました pip install romkan エラーの原因はこれです 'cp932' codec can't decode byte 0x97 日本語扱うとよくあるやつですが なぜインストールで? エラーの場所を確認すると README.rst を open して read する箇所でした 「仮名」とか日本語が入ってます 日本語を扱うライブラリですからね このファイルは UTF-8 でした 処理自体は setup.py に書かれています README を読んでどうするのかと思ったら setup 関数の引数で description として設
2018/03/04 22:58 letter-spacing でセンタリングするときは text-indent も一緒に使う センタリングするときや inline-block で内側に応じた幅にする場合は 最後の空白が原因で左側にずれてるように見えます letter-spacing に指定したサイズ分後ろに隙間ができるので 前にも同じだけスペースを作ればいいので text-indent で同じサイズを指定します これで左右のバランスが良くなります <style> div{ background: crimson; border-radius: 10px; color: white; padding: 5px 10px; letter-spacing: 1em; text-indent: 1em; width: 120px; text-align: center; } </style> <
今どきのプログラミング言語ってどれも REPL (interactive モード) があって当たり前だよね っと思ったのでどの言語があるか調べてみたメモ 対応してないの合わせて全 30 言語 REPL を起動して 1 + 1 を計算させて閉じるだけです Lisp 系でもなければみんな本当に 「1 + 1」 って入力してるだけ ツールによっては REPL の終了方法が用意されてないのもあるので ない場合はプログラムの自分のプロセスを終了するか Ctrl-C/Crtl-D で終了します 一部 REPL といいつつ Evaluate するだけで Print してくれないので自分で print 命令を出しています PHP とか Perl とか 各環境は C#, F# は Windows10 の VisualStudio 2017 Community で それ以外は fedora27 で実行したもの
◆ 要素のメソッドで querySelector しても検索は全体からされて内側だけってフィルタしてる ◆ 直接要素を指すものじゃなければ基準にする要素の外側の id や class 使える ◆ セレクタにいきなり ">" を使って 子要素をセレクタで検索できない ◆ 自分自身をセレクタで書いて ">" を使うのもありだけど そのセレクタが自分自身以外にマッチするかもしれない セレクタの基準は常にルートquerySelector って root からの document.querySelector 以外にも好きな要素に対して実行できます
あれ 最近どこかで……) ので少しちゃんと使ってみました 全体的なことcomposer は PHP のパッケージマネージャです Node.js でいう npm みたいなものです npm は Node.js についてきますが composer は PHP についてはきません 標準ではなくあくまでサードパーティのものという感じです Node.js は npm のパッケージをロードするのが前提とした作りですが PHP だとそういうものはなくて require でファイルを単純にロードするものがあるくらいです それと autoload というクラスが無いときにファイルを require する機能があって これらをうまく使ってパッケージをロードさせるという仕組みです なのでパッケージマネージャでインストールしたパッケージを使うためには 最初に vendor/autoload.php というファイルを
<style> span{ text-decoration: underline; } span:before, span:after{ content: "★"; text-decoration: none; } </style> <span>abc</span> :before と :after にも線があります 「text-decoration: none」 にしてるのに 原因は display が inline だからです inline-block にすると線は引かれません <style> span{ text-decoration: underline; } span:before, span:after{ content: "★"; text-decoration: none; display: inline-block; } </style> <span>abc</span>
要素を作って DOM に append して select メソッドを呼び出すだけ これで textarea の全選択ができます DOM に attach されていない場合は select で選択されないので appendChild で body に追加します 呼び出す度に DOM に textarea が増えても困りますし クリップボードにコピーするための共用の textarea を常に 1 つ DOM に残しておくのも嫌なので コピー後すぐに DOM から除去してます IEIE って動くのかな と思って試してみたら なんとすべてのバージョンのエミュレーションで動きました IE5 も対応です でもなぜか最初 IE/Edge で使ってみたら動かなかったです executeCommand 自体は対応してるはずなので 原因を考えていて focus をつけてみたら動きました でも その後 foc
◆ opacity が 1 以外だと stacking context が作られる ◆ position と同じようになるので z-index 指定しないと後に来る要素が上のレイヤになる こういう HTML を用意します <!doctype html> <style> body { margin: 0; } header { position: sticky; background: #888; color: white; top: 0; height: 40px; } section { display: flex; } div { width: 50%; height: 200vh; padding: 10px; } div p { font-size: 30px; margin: 10px; background: #ffee99; } .left { opacity: .3; }
◆ 拡張機能をインストールして Launch currently open script でデバッグ実行する ◆ VSCode の都合でデバッグ実行するにはフォルダを開いてる必要あり ◆ PHP のパス指定は デバッグの設定ファイルに runtimeExecutable キーを追加してパスを書く リモートのサーバにコードを置いてブラウザでアクセスしたときのデバッグ実行の方法はよく見かけるのですが ウェブサーバとかなしでただのコマンドラインで実行するプログラムとして扱う場合の情報がほしいのに全然見当たらなかったです というわけで ここではローカルで CLI 実行するのをデバッグ実行させる方法についてです 実はほとんどインストールするだけでいいのですが パスの都合で動かなくて変に困りました PHP Debug のインストールとりあえず PHP Debug の拡張機能をインストールします VSC
メニューにあれこれありすぎて使っていないのが多いですけど今回はこれを使ってみます テストってテストというと書いたコードがちゃんと動いてるかなーって確認するものです 例えばこういうコード書いたときにprivate bool isOdd(int val) { return val % 2 == 1; }isOdd(2) // false isOdd(9) // true isOdd(0) // falseという感じで適当に数値入れて思い通りの結果になってるか確認しますよね こういうのを自動でするための機能です これくらいのシンプルな関数だと中身を変更しない限り結果変わらないですし変更したらその場で確認をしてしまいますし自動でやる必要もないかもです ですが 複雑な関数で どこかひとつ変えたらあっちこっちが影響するってときに全部を手動で確認してまわるのは大変ですよね 確認するのにデータを準備しない
次のページ
このページを最初にブックマークしてみませんか?
『(*x).b=z->a+y/c』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く