Panda Noir

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

Space2回でfzfを呼び出すzsh script

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

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

1. ターミナルエミュレータを選ぶ まず端末をきちんと選びましょう。どれも同じに見えますが、フォントが効かなかったり透過できなかったり、意外と違いがあります。 主要なターミナルエミュレータとしてはこんな感じです。 gnome-terminal Terminal.app xfc…

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

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

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

TrueColorで表示しようとすると、わりかし対応がめんどうである。なぜなら、Vim、tmux、zsh、ターミナルそれぞれで対応しなければならないからだ。今回はそれぞれどういった対応をすればいいのか紹介する。 対応できているか確認する まず以下のコマンドを実…

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行で与えられ…

競技プログラミングを始めた

競技プログラミングを始めました。今日、人生ではじめてコンテストに参加もしました。やっていて思ったことをいくつか書こうと思います。 ちなみにこれが600記事目ですが、特に特別なことはしません(いつもどおり)。 蟻本に挫折する人生 実は競技プログラミ…

Generatorで自然数列とか素数列を作った

「ゼッタイにこういうライブラリあるだろ」と思って探したんですが、なかったのでここに書いておきます。ライブラリ化はするまでもないですが、たびたび使うので… // 自然数列. [0, 1, 2, 3, 4, ...]. 数列の最初の数を引数として受け取ります. const natura…

俺がESLintを勘違いしていたのはお前らが悪い!

ESLintというツールをご存知でしょうか?これは「コードスタイルを統一するためのツール」です。そのため、 リーダブルコードを読んだことがある人 コードの整形について知っている人 if文まわりの改行について一家言ある人 には必要ありません。 〜完〜 違…

そもそも静的型付けって?TypeScript入門以前の話

みなさんは「型」についてご存知でしょうか?「intとかcharみたいなアレでしょ?」くらいの知識はあるかと思います。今回の記事では型についての種々の疑問について解説して行きたいと思います。 そもそも型とは? 型があるとなんで嬉しいの? 静的型付け・…

就活を振り返る

2018年(学部3年) 4月 院進以外に、就職という道があると気がつく(院には当然進むものだと思いこんでいた) 5月 院進と就職で悩み始める 6月 就職しようと決める 〜12月 「自己分析」とか「業界研究」とか何すればいいか分からないし、部活が忙しくてやる暇が…

ポートフォリオ

就活しているのでブログにもポートフォリオを書いておきます。 自己紹介 名前はクロパンダです。 現在は東北大学の工学部で情報工学を学んでいます。学部4年生なので、まだ研究は始まっていません。 趣味はプログラミングと合気道です。プログラミングは中学…

webpack.config.jsのプラクティスを考えてみた

何度もwebpack.config.jsを手書きしていて面倒くさくなってきたので、ここに書き方を残しておきます。 webpack.config.jsを書く際によく使うTipsとして、これらが挙げられます。 mode: env.mode || 'development' path.resolve(__dirname, path_to_file)を使…

はてなブログのHTTPS化をするとJSBinの埋め込みが無効化されるので注意

JSBinの埋め込みは便利ですが、HTTPSのサイトに埋め込むにはJSBinの有料会員登録をしなければなりません。なので、JSBinを使ってコードを埋め込んでいる場合、注意してください。

JSON5ならケツカンマができる!

JSONでケツカンマがあったらなあ、コメントを入れられたらなぁと思うことありませんか?僕はpackage.json内のnpm scriptsをいじっているときに頻繁に思います。 そんな我々の思いを受けてできたプロジェクトがあります。その名もJSON5です。今回はこれを紹介…

JavaScriptの環境構築あれこれ

JavaScriptの環境を構築するのがつらくて辛くて仕方がないのでチートシートを作ることにしました。やや長くなったので目次をつけます。 Webpack関連 WebpackのローダーとBabelの役割分担 Webpackのインストール ts-loader ts-loaderはJSXも扱える vue-loader…

jQueryでむりやりFluxをするとどうなるのか?

結論: 非常に辛い。なぜならFluxの恩恵はコンポーネント化によってもたらされるから。 jQueryのコードが汚くてつらい こちらをご覧ください。jQueryで作ったカンタンなアプリのコードになります。 <title>jQuery</title> <script src="https://pandanoir.net/js/jquery.slim.min.js"></script> <script src="socket.io/socket.io.js"></script> <script> jQuery($ => { const socket = io(); l…

WebSocketでカンタンなゲームを作った

火をつけて消えないように薪を足し続けるだけのゲームを作りました。サイトに接続している人なら誰でも薪を足したり、火をおこせます。 http://ws.pandanoir.net/ WebSocket通信をどう使っているか WebSocketは一度確立したコネクションを切断しないでそのま…

なぜrequire('lodash/zipWith')で関数ひとつだけ読み込めるのか

lodashというユーティリティライブラリがあります。lodashは便利な関数をたくさん提供しています。たとえば配列をシャッフルするshuffle()や、配列の差をとるdifference()などが挙げられます。 lodashは300個以上の関数を提供しています。しかし、実際に使う…

気がついたらimmerが独自クラスのインスタンスもサポートしていた

immerという、ミュータブルな操作を書く感覚でイミュータブルな操作が行えるライブラリがあります。 import {produce} from 'immer'; // 破壊的に配列をシャッフルする関数 const shuffle=(a,i=a.length,j) => {for(;[a[i],a[j]]=[a[j=0|Math.random()*i],a[…

Nginxのincludeディレクティブはいちいちフルパスを書かなくてもいい

ずっとNginxのincludeディレクティブは絶対パスをちゃんと書かないといけないと思っていましたが、どうやら--prefixで指定したディレクトリからの相対パスでも書けるようです。 $ nginx -V nginx version: nginx/1.15.10 built by gcc 4.8.5 20150623 (Red H…