完成品 こんな感じのものができる。予定はgoogleカレンダーから引っ張ってきている。 8時間おきに画面を更新している。裏にraspberry piがついていて、これで画面表示を制御している。 ハンダ付けすらしてないので、電子工作といえるかはかなり微妙かも(ケー…
最近チームを異動して、仕事内容がサーバーサイドとなってjavaとかkotlinを書いてるので、その備忘録的なものを書いておこうかなと。マジで右も左もわからん… (※現段階の理解を雑に書きなぐってるので、多分間違えてるところがままある) java/kotlin kotlin…
vueのcomposition APIはどこで呼んでも問題ありません。たとえばonMountedのなかでonUnmountedを呼んでも良いです。 onMounted(() => { const handler = () => {}; window.addEventHandler('event', handler); onUnmounted(() => { window.addEventHandler('…
const obj1 = { foo: 42, ...({ foo: undefined }), }; // {foo: undefined} const obj2 = { foo: 42, ...({}), }; // {foo: 42} ↑こんな感じで、undefinedが指定されているときとプロパティ自体がないときでは動作が異なります。 (実は上のコードはそのまま…
:Inspect Inspect コマンドが0.9.0(2023年4月7日)で導入されたのでそれを使おう
www.pandanoir.info 5年経ったので書き直しをば interface Props { isOpen: boolean; onClose: () => void; } const Dialog = ({ isOpen, onClose }: Props) => { const dialogRef = useRef<HTMLDialogElement>(null); useEffect(() => { if (isOpen) { dialogRef.current?.show</htmldialogelement>…
:cq で終了する
意外と知られてないというか、なんかあんまやってる人いない気がしたので (ちなみに、本当に async 関数が必要なパターンは実は少なくて、ほとんどの場合はアンチパターンなのでやめたほうがよいです。 別の方法で実装できるならそちらにしましょう) 実際にa…
新卒で入ってからずっと業務の日報を個人的につけてます。日報があると便利なことは多くて、たとえば連休前になにをやっていたのかを思い出したりするときに便利です。 ほぼ毎日日報をつけるには、とにかく書き始めるまでのハードルを下げるのが大事です。僕…
zshのprompt内で%?を指定すると直前の終了ステータスを表示させることができます。 PROMPT='[%n@%m]%?# ' ↑これで[user@host][last_status]#というプロンプトが表示されます。 ただ、これだと正常終了のときにも表示されて煩わしいので、正常終了のときには…
いっつも書き方を調べてるのでここにメモを残しておく。 import { StrictMode } from 'react'; import { createRoot } from 'react-dom/client'; import App from './App.tsx'; import { ApolloClient, InMemoryCache, ApolloProvider, HttpLink, from, } fr…
使い方 使いたい箇所より上のコンポーネントに <ToastProvider> を追加して(↓こんな感じ)、コンポーネント内で const toast = useToast(); で使う感じです。 createRoot(document.getElementById('root')!).render( <ToastProvider> <App /> </ToastProvider> ); const App = () => { const toast = useToast(); re</toastprovider>…
発端: ApolloClient の useQuery の data と error をいい感じに扱うために getOrThrow(data, error, 'path.to.field') みたいなユーティリティ関数が欲しくなった 欲しい関数 const {loading, error, data} = useQuery(query); const fooBar = getOrThrow(d…
zsh で control-o を押すと vim が立ち上がってコマンドラインの内容を編集できる関数を(ChatGPTが)作ったので紹介します。 (要件を伝えたら ChatGPT が目当てのものを一発で生成したので、かなりビックリしました。すごい。) デモ動画 youtu.be デモ動画で…
結構試行錯誤したのでメモ ↑こんな感じで、結構色が違って表示されたので調べて修正しました。 結論 なぜか neovim の background オプションが "light" になってたのが原因でした。 set background=dark を明示的に書いたら解決しました。 調べたこと zelli…
諸事情(実名で検索すると他人の顔写真しか出てこない)のため、自己紹介記事を書くことにしました。目的を達成したら消したい。 プロフィール 名前: 幾野直人(ikuno naoto) 身長: 178cm (2024年4月現在) 体重: 72.4kg (2024年4月現在) BMI: 22.85 得意な言語:…
() や {} は dab や yiB みたいに b/B で操作できますが、 [] は da[ と打たないといけません。煩わしいのでエイリアスを設定したいですよね。 というわけで r で [] を選択するテキストオブジェクトを追加しましょう!やり方がこちら↓ vim-textobj-user を…
ネットでクレジットカード払いをする際、カード番号以外に有効期限も入力が求められます。これはなぜなのか疑問になりませんか?疑問になりますよね。 今回はそれについて考えてみました(完全に推測で書いてます) abst (created by ChatGPT) クレジットカー…
(ただし有用な場面はそんなにないです) infer に同じ名前を指定すると、ユニオン型になる 基本的に、infer に同じ名前を指定すると、それらをうまく満たすようなユニオン型になります。 以下の X1,X2,X3 はすべて number | string です。 type X1 = [number,…
去年までのもの→デスク環境変遷まとめ (2020/5 ~ 2023/1) - Panda Noir あとから見返す用に年1くらいでデスク環境を紹介したいなと思い立ったので書きます。あと、多分ウェブフロントエンドエンジニアとしては珍しく mac と windows の二刀流構成なので、他…
去年の → 2022年を振り返る - Panda Noir 仕事、趣味、プライベートについて書くぞい。 仕事、技術 テックリード交代した 実質チーム移動になった(多分社外秘なのでどのチームかは言えない) 記事をいくつか書いてバズらせた 今年は仕事に関しては特筆するこ…
Next.js で作ったアプリの /foo にアクセスすると app/layout.tsx と app/foo/layout.tsx の両方が適用されます。 さて、このネストされた2つの layout それぞれでデータフェッチをしていた場合、どうなるでしょうか? app/layout.tsx のフェッチ完了後に app…
問題: なにも設定しないと初期描画のときにカラーモードが反映されない demo このように、Chakra UI でなにも設定しないとリロード直後に一瞬ライトモードで表示されます。この記事ではこの問題を解消する方法を紹介します。 tl;dr ColorModeScript を追加す…
全然書いた記憶はなかったんですが、昔の僕は逆FizzBuzz という問題に挑戦してました。 逆FizzBuzzを解いてみた - Panda Noir この解答コードがもうちょいシンプルに書けたので載せておきます おさらい: 逆FizzBuzzとは? [1,2,3,4,5,…] のように並んだ数列が…
「善は急げ」はよく知られています。しかし、実は続きがあるそうです。それが「悪は延べよ」です。 悪は延べよの意味は、「悪いと思う事は、一事延期せよ、そうすれば事情がやがて変化して、行なわないで済むようになることもある。」とのことです。 プログ…
以前pubsub パターンのベタープラクティスを考えたんですが、よく考えたらイベント名を設定する必要なかったです。 これでよさそう↓ class PubSub<Payload extends unknown[]> { private listeners: ((...payload: Payload) => void)[] = []; subscribe(callback: (...payload: Payload)</payload>…
(vim + mini.comment 編と書いたが、別に他パターンを書く予定はない) 割と手間取ったのでメモとして残しておきます。他の人の参考にもなりそうなので 結構無理やりな方法を取ったので、もっとスマートなやり方がありそうですが… ポイント: hooks.pre で fil…
追記: 公式が対応しました! staff.hatenablog.com tsx 対応がついに入りました。そのため以下のコードは不要になりました。 追記終わり。以下元々の記事の内容になります。 実際にシンタックスハイライトされてるところ const Component = () => { const [c…
MGS(マジ業務使いのシェルスクリプト)がまあまああるのでまとめる。いま思いついたものだけ書いてるが、思い出したら追記するかも。 説明 コマンド スペース埋め出力から特定列を抜き出す | awk '{print $1}' 先頭から特定の文字までのみ表示 | cut -f 1 -d …
結論: localeCompare を使う a.localeCompare(b, undefined, {numeric: true, sensitivity: 'base'}) 参考: https://stackoverflow.com/a/65687141 localeCompare は IE11 でも使えるので、使えない心配はほぼありません。 しかし、locale とついているため…