Panda Noir

JavaScript の限界を究めるブログでした。最近はいろんな分野を幅広めに書いてます。

HHKB所感

HHKB HYBRID Type-Sを買ったのでレビューします。 所感 ノートのキーボードより打ちやすい Bluetooth接続でも遅延をほとんど感じない Fnキーは気にならないが、チルダキーの位置がとんでもないのでつらい Ctrl + Shift + Spaceで入力切り替えというのはやっ…

TypeScriptのExcludeはなぜT extends K ? never : Tで実装できるのか?

直感に反しているExclude型についてconditional typeの話をしつつ解説します。 Exclude型とは? Union型から特定の要素を取り除く型です。ある型から特定のプロパティを取り除きたいときに使えます。 interface Person { name: string; age: number; country…

JavaScriptでPriorityQueue

優先度付きキューを実装する必要に駆られたので書きました。 実装 TypeScript class PriorityQueue<T> { private container: T[] = []; private size = 0; private comp: (a: T, b: T) => boolean; constructor(comp = (a: T, b: T) => a < b) { this.comp = co</t>…

サブディレクトリでNext.jsのアプリをデプロイしたい!!

結構こういう要求はあるとおもいます。 解決する課題 /staticへのリンクが途切れる <Link>で遷移するとbasepathが変わる つまり、サブディレクトリ以下でNext.jsを使ったSPAをしたい!!という人向けの記事です。 /staticへのリンクをサブディレクトリ以下になるよ</link>…

Codeforcesで精進するときに便利なツールの紹介

github.com 今回はこちらのツールを紹介します(なぜか日本語記事でCodeforces向けのツール紹介がなかったので) ツール概要 このツールは以下のような便利機能を提供しています。 テストケースのダウンロード・ディレクトリセットアップ テンプレートファイル…

denite.nvimからfzf.vimに移行してみた

tl;dr 操作性が良い :Agコマンドが強すぎる めっちゃカッコイイ!! fzf.vimとは? fzf.vimとはfzfを使ってファイルオープンやバッファ切り替えを行うツールです。denite.nvimと役割はかなり近いです。 fzf.vimの使い方 requirement fzf本体を別途インストー…

NerdFontがうまく効かないときの対処法

半年くらい悩んでいた問題が解消できたのでまとめです 環境はUbuntu 19.10を想定しています。 1. そもそもフォント選択できていますか? そもそもターミナルの設定でフォントをきちんと設定できていない可能性があります。正しくインストールして、ちゃんと…

tmuxのプラグイン「tmux-respawn-all-panes」を公開しました

卒論ちょっと進んだマン。ドラフトの締切まであと2日…つらい… 昨日書いたこちらの記事の内容をプラグイン化してみました。 tmuxのすべてのpaneでzshrcの再読み込みをする - Panda Noir GitHub - pandanoir/tmux-respawn-all-panes: respawn all panes with o…

tmuxのすべてのpaneでzshrcの再読み込みをする

卒論が全然終わらないしストレスがすごいです…はぁ… とりあえず息抜きにこないだ作ったtmuxの設定を上げておきます。 モチベーション zshrcを書き直したあとに、一括ですべてのpaneに変更を適用したいからです。いちいち全てのpaneに移動してsource ~/.confi…

Reactのリハビリがてらアプリ作った記録

卒業研究とか部活に追われてあまりReactとか触れていなかったのでリハビリのつもりでやった。1日でガーッと書いたときの記録。コケたところとかも(どうせ後でまた同じところでコケるので)記録しておく。 どういうアプリ? graphemesplitという、Unicodeで1文…

まじかる☆ベーカリーのパンはどれほどの確率で焼けるのか?

www.youtube.com こちらは僕が好きでよく見ている動画です。まじかる☆ベーカリーというボードゲームで遊ぶ動画です。 このゲームは「パン」を焼き上げて得点をもらうゲームとなっており、パンにはそれぞれ焼き上げるための条件が書かれています。たとえばコ…

JSでHaskellのMaybeモナドを再現してみた

Haskell的な書き心地を再現しようと試みてみました。結果、かなりいい感じに仕上がりました。 // Haskellでは // Just 3 >>= return . (+ 3); // JSだと Maybe.Just(3) .bind (compose(return_, v => v+3) ); // 似てる!! Maybeモナド 結構えらい実装にな…

HTTPieを使いこなすためのサンプル集

問題という形でまとめてみました。 パラメータ付きGET httpbin.org/getにGETメソッドでリクエスト name=John、age=29というパラメータを渡す 解答: $ http httpbin.org/get name==John age==29 通常のようにURLへパラメータをつけることもできます。 $ http …

AtCoderで水色になりました

水色記念に書いておきます 競プロ歴 AtCoder歴は半年…というと微妙ですが、ちゃんと取り組みだしてから半年ですね。高校生のときに蟻本で挫折しているので、競プロにはじめて触れたの自体はAtCoderができるより前です。 水色になるまでに取り組んだこと ABC…

「7」の倍数を表す正規表現の解説

オートマトンから正規表現への変換方法について、「7の倍数」を表す正規表現 - Qiitaをもとに書きます。 オートマトンとは? 状態(計算の途中結果)をもっていて、値が入力されると現在の状態と入力値をもとに次の状態へ遷移します。入力を受けるたびに「受理…

Space2回でfzfを呼び出すzsh script

fzf、使っていますか?ぼくはそこそこ使ってはいるのですが、どうしてもC-tを押すのが面倒くさく感じてしまいます。そこで、$ vim<space><space>のようにspaceを2回続けて入力するとfzfが起動するようにしてみました。 (わかりづらいですがspaceを2回押してfzfを起動してい</space></space>…

最高のターミナルを作る2019

1. ターミナルエミュレータを選ぶ まず端末をきちんと選びましょう。どれも同じに見えますが、フォントが効かなかったり透過できなかったり、意外と違いがあります。下の画像を見れば一目瞭然です。 左: Alacritty 右: gnome-terminal 主要なターミナルエミ…

サーバーの全データをぶっ飛ばしました。

タイトル通りです。全データが吹き飛びました。 経緯 CentOS8にバージョンアップするためにサーバー再構築をしたのがミスでした。確認ダイアログも出なかったので、まさか吹き飛ぶとは思っていなくてバックアップも取っていませんでした。やらかした… 現在の…

TrueColor対応のはなし(端末、シェル、tmux、vim)

TrueColorで表示するのは、わりかし対応がめんどうです。なぜなら、Vim、tmux、zsh、ターミナル全てで対応しなければならないからです。今回はそれぞれどういった対応をすればいいのか紹介します。 まず: TrueColor に対応できているか確認する TrueColor 対…

tcomment_vimをドットリピートできるようにする

Vim

repeat.vimを併用することで対応させます。 # dein.toml [[plugins]] repo = 'tpope/vim-repeat' [[plugins]] repo = 'tomtom/tcomment_vim' hook_add = ''' au MyAutoCmd VimEnter * nnoremap <silent> <Plug>RepeatTComment :TComment<Bar> \ silent! call repeat#set("\<Plug>Repea</plug></bar></plug></silent>…

競プロで使うBashテク

スペース -> 改行 | xargs -n1 | tr ' ' '\n' | tr \ \\n (上のものをエスケープしたもの) 改行 -> スペース | xargs | tr '\n' ' ' | tr \\n \ 行数カウント | wc -l | awk 'END{print NR}' | awk '$0=NR' | tail -n1 これはwc -lだけで十分ですね 先頭1行…

Vimでbashコマンドを併用するとできること7選

Vimはexコマンド(:qや:w)だけでなく、シェルコマンドを実行することができます。今回はシェルコマンドをつかってもっと便利に編集をしようという記事です。 基本: コマンドを実行したい行を指定 Vimのコマンドは、実行したい範囲を決めることができます。 :%…

ABCのA問題で二度とWAしないためのツールを作りました

github.com その名も「失敗は死(Failure is Death)」です。たぶん英語としては間違えてますが、カッコイイのでこのままで。 機能 AtCoderのコードテストをちょっと強くしたものになります。複数のテストケースを同時に試せるので、コードの書き換えをしたあ…

どんな劣悪環境でも負けないためにvimrcをダウンロードできるようにした。

世の中には「gitがインストールされていない」というおぞましい環境が存在します。弊学の演習室とかね。そういった、dotfilesを使うことすらできない劣悪環境でプログラミングしなければならないとき、せめてvimrcだけでも使えるようにしておこうと思って整…

俺のためだけのsedまとめ

sed

迷ったときにとりあえずこれ読めば8割くらいわかるように書きました。 sedでできること sedは受け取った文字列を加工するためのコマンドです。パイプラインやファイルから文字列を受け取って処理します。置換や削除などができます。四則演算はできません。 s…

そうだ、明日京都行こう。

京 都 行 き た い ! ! ! ! ! …失礼しました。授業で「複数のWeb APIを組み合わせてオリジナルのサービスを作ってみましょう!」という演習があって、それで作ったサービスを公開したので紹介します。 https://pandanoir.net/webcomp 「そうだ、京都行こう」…

最近の状況

ここのところブログの更新をサボっていたので近況報告でお茶を濁そうと思います。生存報告とかいう動画を投稿するYouTuberっぽいですね。 研究室とか 現在大学4年生で、今年の4月に研究室に配属になりました。前期のあいだは教科書の輪講を主にやっていまし…

スターリンソートをJSで実装してみた

スターリンソートなる、「整列されていない要素を"粛清"することでO(N)でソートを実現する」というネタが盛り上がっているようなので、便乗して書きました。 実装 まず、空のソート結果を格納する配列を用意します。そして、リストを先頭から見ていきます。…

ICPCに参加して

経緯 4月に研究室の同期から「ICPCに参加しない?」と誘われ、競プロを始めました。そこから約3ヶ月での参加だったので、かなり急ピッチでした。 大会感想 練習ではC、Dも解けていたのですが、本番は焦りと緊張もありBまでしか解けませんでした。 終わったあ…

Rubyでコードゴルフするためのtips

AtCoder Beginner ContestのA問題を1分で解くためにRubyを書いているのですが、そのときのTipsが溜まってきたので書いておきます。 入力編 まず入力を受け取るところです。ここを高速で書けるとだいぶ強いです。 a,b,c=gets.split.map &:to_i 1行で与えられ…