CapsLK → Ctrl

環境

やりたいこと

  • ノートパソコンの CapsLK キーを Ctrl キーとして使いたい

PowerToy 使えば良いのではないか?

  • PowerToy でも一応 CapsLkCtrl に割り当てることができる
  • しかし、CaspLK + Space のショートカットが設定できなかった
    • 余談:CapsLK + Space で入力切替をしたかった
    • Ctrl + Space を入力切替に割り当てることは PowerToy で可能

やったこと

  • 次のファイルcaps-to-ctrl.regを作成する
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,1d,00,3a,00,00,00,00,00
  • ダブルクリックでインストールが可能
  • 再起動で完了

  • 今回の設定はレジストリエディタから編集・削除可能

まとめ

  • CapsLK キーの位置に Ctrl キーがあると便利!

一般情報理工学徒の時間割

卒業論文の単位以外は取り終えたはずなので、1年生から3年生までの履修科目を覚えている範囲で振り返ってみる。

1年春

この時期は某ウイルスが一番警戒されてて、その影響で大学の始業が3週間くらい遅れた気がする。
おかげで、15週分の授業が12週間に詰め込まれてた。

微分積分

1年生の授業の中だったら一番楽しかった (?) かもしれない。「微分積分学の試練」なる教科書を1年間じっくりと進めていく感じだった。本はもちろん、授業も個人的にはわかりやすかった。評価は難しめのレポートで行われて、クラス内の点数順位などが公開されるので、当時はそれがモチベーションになってた記憶がある。実数の連続性とかε-δ論法とかの勉強をしていたらしい。レポートではペンちゃんのイラストを描くと加点された(?)

1年秋

春学期の延長のような授業が多くて、あんまり新鮮さがなかった。
このときはまだフルリモートで、実家に戻って教習所に通ったりしていた。

2年春

学科に配属されてぼちぼち専門っぽい科目が増えてきた。
金曜日のデータ科学科目はオンデマンド科目なので実質全休。

プログラミングA

最初は競プロパート。 その後はJavaをメインに、最後にちょこっとPython

情報数学A

I先生のこと気難しい先生って思っていたけど、実はそうじゃないって最近知った。

2年秋

コンピュータアーキテクチャA

権威!

確率・統計と機械学習

A群科目。先生の体調が心配。

情報数学B

情報数学Aの方もそうだったけど、小テストとかレポートのフィードバックが一切ないのがちょっと...
先生がちょっと面倒くさがりなのかなって思う。

情報系の生命学

最後の制限時間アリのレポートで評価される。 あんまり真面目に受けてなかった...

フーリエ解析

最後のレポートで評価が決まった。 競プロのFFTをレポートに書いたらA+をもらえた。

アルゴリズムとデータ構造B

後半のグループワークで、なかなかチーム開発が上手くいってなかった印象。
実装できるひとが頑張る。
制作物の性能も重要だけど、それ以上にユニークなアイデアのほうが評価されてそう(?)

3年春

必修の英語科目がなくなってほぼほぼ専門科目になる。

システム開発プロジェクト基礎

この科目は3年の夏休み中に行われた夏季集中講義。 頑張ったつもりだったけど、評定がA+じゃなくてAで「あれっ」ってなった。

情報通信ネットワーク

M先生の授業動画がわかりやすい!

オペレーティングシステムA

N先生パートでは、配布されるスライドを見ただけでは何も理解できなかった。 謎の赤い丸がスライドに描かれてたりする。 教場試験だけど、持ち込みOKかつ、採点がやさしい(?)のでそこまで心配する必要がなかった。

IoTシステム設計

キーワード:FPGA
初回の週は教室が人で溢れかえっていたのに、気づいたらめっちゃ人が減っていた科目。 前半でFPGAについてさらっと学んで、後半でシステム開発のペアワークをした。 後半の開発パートでは、いきなり放り出されて「何やればいいの」感が強かった。 ペアに恵まれたおかげで無事生存できた。 発表は苦痛。(去年まではK先生単独だったけど、今年からなんか変わってそう?)

プログラミングB

キーワード:関数型言語Ocaml
関数型言語たのしい!

ソフトウェア工学A

astahとかいうツールを使ってポチポチしながらUMLを作る授業。

言語処理系

キーワード:コンパイラ
実習は面白い!試験は時間が間に合わない!でも評定はやさしい!

3年秋

データベース

データベースの基礎的な知識(ACID特性とか)やSQL関連の内容を勉強する。他にも、正規化、E-Rモデルなどなど。たしか、多値従属性のあたりが一番難しかった?あまり覚えていないので要復習。

授業は希望者のみが対面で授業を受ける形式だった。10回分のクイズが用意されていて、その評価だけで成績が決まる。秋学期始めから全部の授業とクイズが公開されてるので、人によっては2日3日頑張れば終わる。クイズの難易度は「こんなんで成績決まっちゃうの!?」ってなる程度のものだった。比率で成績を配分するらしいので、ケアレスミスは厳禁。

オペレーティングシステムB

主にソケット通信関連の内容を学んだ。それに加えて、共有メモリ、セマフォ、割込み、暗号化通信の話などなど。この授業では、ソケット通信を用いた何かを作成して、発表を行うことが求められ、自分はC++用のオンライン実行環境もどきを作った。ファイル転送の際に、ファイルサイズをまず送信してから本体を送信するところや、実行時間の長いプログラムをタイムアウトさせる部分でちょっと工夫したと思う。簡易的になhttpサーバーを実装したりするのでも面白かったかもなーと後々思った。

プログラミング言語

集合や関係といった基礎的な概念から、プログラムの正当性がどのように保証されているのかまでを、さらっと教えてくれた。truc先生パートではIMP(手続き型言語を抽象化したもの)を用いて、手続き型言語において、与えられた規則に従ってどのようなステップで計算が行われているのかを学んだ。(こういうのを操作的意味論って言うらしい。)他にも、契約プログラミングなどが登場して、部品(関数やif文など)に対する事前条件や事後条件という概念が出てきた。
ued先生パートでは主にラムダ計算について学んだ。ラムダ式は日常的にも馴染みのあるものなので、ちゃんと学ぶいい機会だったと思う。不動点結合子(Yコンビネータetc)を使って無名関数で再帰を実現できるというのを知ってほぇ~っとなった。あとは型推論の話など。厳密な証明は追ってない。

ソフトウェア工学B

✨ビジネス✨
これは工学?

人工知能B

キーワード:推論、Prolog、制約プログラミング、単一化
論理型言語むずかしい!

コンピュータアーキテクチャB

キーワード:アセンブリ、パイプライン、コード最適化
実習たのしい!

プロジェクト研究B

生命情報系の研究室でこの科目を履修して、一人でもくもくと「高速文字列解析の世界」を読み進めていた。内容としては、SuffixArrayの構築(SA-IS)、完備辞書(簡潔ビットベクトル)、ウェーブレット木、FM-indexあたりの勉強をやっていた。上記の本は行間が広かったり、誤植が多かったりするので、著者の記事や先人のブログも参考になった。大学図書館に「Compact Data Structure」なる本を買ってもらえたので、こっちも読み進めたい。(こっちは新しくて分厚さもあるので、もっとしっかりと勉強できそう)
あとは、先輩主催の勉強会でGCSA(Generalized Compressed Suffix Array) や de Bruijn グラフ(デブりんグラフ)の話をちょっと聞いたりした。あんまり理解してなかったけど、高速文字列解析の世界を読むモチベになってたと思う。

まとめ

雑なところはだいぶ雑に書いてしまった。(記憶にない授業は端折)
やっぱり、3年になってからの授業が面白かった印象がある。

filterのコールバック関数内で非同期処理を行いたい

typescriptのfilterのコールバック関数で非同期処理を行いたいときに、少しハマったのでメモ。

下の例では、src/にあるディレクトリのうち、空でないものを取り出している。
つまり、src/の子の位置にあるディレクトリのうちaaa/ccc/を取り出している。


主なディレクトリ構成(簡単のためpackage.jsonなどは除く)

.
├──main.ts
└── src
    ├── aaa
    │    └── README.md
    ├── bbb
    └── ccc
          └── README.md


ソースコード

import fs from 'node:fs/promises';
import path from 'node:path';

import fg from 'fast-glob';

// run with `yarn ts-node main.ts`

void main();

async function main() {
  const sourceDirents = await fs.readdir(path.join('src'), { encoding: 'utf8', withFileTypes: true });

  console.log('sourceDirents', sourceDirents);

  // NG
  // const filteredSourceDirents = sourceDirents.filter(async (d) => {
  //   if (!d.isDirectory()) return false;
  //   const dir = await fg(path.join('src', d.name, '*'));
  //   return dir.length > 0;
  // });

  // OK
  const filteredSourceDirents = await Promise.all(
    sourceDirents.map(async (d) => {
      if (!d.isDirectory()) return false;
      const dir = await fg(path.join('src', d.name, '*'));
      return dir.length > 0;
    })
  ).then((res) => sourceDirents.filter((_, i) => res[i]));

  console.log('filteredSourceDirents', filteredSourceDirents);
}


実行結果

sourceDirents [
  Dirent { name: 'aaa', [Symbol(type)]: 2 },
  Dirent { name: 'bbb', [Symbol(type)]: 2 },
  Dirent { name: 'ccc', [Symbol(type)]: 2 }
]
filteredSourceDirents [
  Dirent { name: 'aaa', [Symbol(type)]: 2 },
  Dirent { name: 'ccc', [Symbol(type)]: 2 }
]

実行結果から、aaacccディレクトリを取り出すことができているのが確認できる。

参考

[Node] 高階関数内での非同期処理(async/await)をどう書くか | Today's Commit

verification-helperに関するメモ

verification-helperとは

これ verification-helper/README.ja.md at master · online-judge-tools/verification-helper · GitHub

設定など

基本的にはこのページに従って進めていけばよい。

アクセストークン作成とシークレット作成のリンクが働いてなかった。 (2023/01/27現在) 下のリンクを参考にした。

個人用アクセス トークンの作成 - GitHub Docs

暗号化されたシークレット - GitHub Docs

アクセストークンはアカウントのSettingから、シークレット作成は各レポジトリから行う。詳しくは公式ドキュメントを参照。

あと、Workflowにwrite権限を与えるのを直すのも忘れずに。

所感

記事にするまでもなかったかもしれないけど、一応備忘録。

このツールを使えばライブラリがかなり管理しやすくなりそう。
自分のライブラリを充実させていきたい。

あと、もうあまり保守がされてなさそうなのがちょっと心配...

LaTeX環境構築 めも

自宅のミニpc鯖にLaTeX環境を構築したときの備忘録。

インストール

Quick install - TeX Live - TeX Users Group 上のページに従ってインストールを行う。

sudo apt install texlive-full

でもインストールできるけれど、最新のtexliveをインストールするならば、上のページからインストールするのが良さそうだった。(2023/01/21現在)

インストール終了時にPATHを通すように言われるので、PATHを通してとりあえず完了。
(/usr/local/texlive以下にインストール時のログが残る。)

フォント関連

LuaLatexがフォントの設定がしやすいらしいので、LuaLatexを使う。 動作確認してみる。

↓test.tex

\documentclass{ltjsarticle}
\usepackage[no-math]{luatexja-fontspec}
\usepackage{amsmath}
\usepackage[top=30truemm,bottom=30truemm,left=25truemm,right=25truemm]{geometry}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{indentfirst}
\usepackage{type1cm}
\usepackage{setspace}
\usepackage{here}
\usepackage{fancyhdr}
\usepackage{lastpage}
\usepackage{ifpdf}
\usepackage{hyperref}
\usepackage{type1cm}
\usepackage{titlesec}

\title{\vspace{-2.5cm}日本語のLaTeX文書}
\author{Temp Lee}
\date{\today}

\begin{document}
\maketitle

これは、日本語を使用したLaTeXの文書です。
LaTeXは、日本語の文章を美しく書くためにも最適なタイプセットシステムです。

\section{はじめに}
LaTeXは、文書作成システムと文書マークアップ言語です。学術や科学の出版物に使用されることが多く、技術的な数学分野にも使用されます。「LaTeX」という名前は、Donald Knuthによって作られたソフトウェア「TeX」に由来し、ギリシャ文字の「lambda」が、タイプセットシステムを表しています。

\section{LaTeXの歴史}
LaTeXは、Microsoft Wordなどの従来のワープロよりも多くの利点を持っています。それらの利点には次のようなものがあります:

\begin{itemize}
\item 数学的な技術的な文書の高品質なタイプセット
\item 文書全体にわたる一貫性のあるフォーマット
\item 交差参照や参考文献の管理の簡素化
\item 複数の言語や文字エンコーディングに対する組み込みサポート
\end{itemize}

\section{数式の例}
LaTeXは、数式をタイプセットするためにも最適です。例えば、次のような数式をタイプセットすることができます:
\begin{equation}
e^{i\pi}+1 = 0
\end{equation}

\begin{align}
\vec{F} &= m\vec{a}
\end{align}

\begin{gather}
x = a_0 + \frac{1}{a_1 + \frac{1}{a_2 + \frac{1}{a_3 + a_4}}} \
y = b_0 + \frac{1}{b_1 + \frac{1}{b_2 + \frac{1}{b_3 + b_4}}}
\end{gather}
  
LaTeXは、数式を書くためのマクロを提供しており、数式を美しくタイプセットすることができます。
また、LaTeXは数式の自動整形機能を持ち、複雑な数式を簡単に書くことができます。
例えば上記のような等式、不等式、ベクトルなどが書けます。

\section{結論}
結論として、LaTeXは、学術や科学の出版物、そして多くの技術的な数学分野に適した強力かつ多用途なタイプセットシステムです。従来のワープロよりも多くの利点を持ち、これらの分野のプロフェッショナルに広く使用されています。

\end{document}

lualatex test.texを実行すると下のようなpdfが出力された。

参考:

LuaTeX-jaの使い方 - LuaTeX-ja Wiki - LuaTeX-ja - OSDN

2023年の抱負

  • 高度情報に合格(セキスぺ、DBあたり)
  • AtCoder レート 1800 到達(現在1380)
  • アルゴリズムとデータ構造を極める(研究関連)
  • なにかを個人開発する
  • ロードバイクで少なくとも1000km走る
  • 体重を55kgまで減らす
  • 英語力を向上させる(12月のTOEICで800点以上を目標)

応用情報 合格記

令和4年秋の応用情報技術者試験に合格したので備忘録を残します。

春に初めて受験して、2回目の受験での合格です。(前回の秋も申し込みはしたけど未受験)

1回目(令和4年春)

初回申し込み時(未受験)に教科書を読んだり、過去問道場をやっていたため、多少は午前に慣れてはいたと思います。
教科書復習しつつ、過去問道場で午前対策をやっていた気がします。
今思えば、午後の対策は全然できていませんでした。
応用情報技術者 午後問題の重点対策」(緑の本)を持ってはいたけれど、午後の選択予定の大問をそれぞれ3問ずつ解く程度しか午後の対策をしていませんでした。
結果、午前は少しは余裕をもって合格点に達していましたが、午後は1点足らずで落ちてしまいました。
当時「アンラッキーすぎる」とは思ったのですが、午後の準備を怠っていなければちゃんと受かってたなぁと今は思います。
受験後に午後のケアレスミスやしょうもないミス(語彙のうろ覚えによるミス)などに気づいたりしたので、「本番環境での集中力」「語彙・用語の確認」は大切だなぁと思いました。

2回目(令和4年秋)

前回の反省をもとに、午後対策をしっかりと行いました。
教材は「午後問題の重点対策」と過去問道場の過去問を使用しました。 午前対策は、過去問道場での段位が一級になる程度にやってました。

午後の分野選択では「セキュリティ(必須)」「プログラミング」「システムアーキテクチャ」「ネットワーク」「組込みシステム開発」「データベース」の6分野の勉強をしていました。国語が得意な人にとっては、マネジメント系・ストラテジ系も良い気がするのですが、自分には自信がなかったためテクノロジ系で攻めました。

分野別の自分にとっての難易度は、「プログラミング」「組込み」「アーキテクチャ」<<「ネットワーク」「データベース」のような感じです。
「プログラミング」は自分が多少はアルゴリズムに慣れてるという点もあって得意な方でした。
「組込み」は問題文や図から素直に読み取る問題が多い印象を受けました。
「アーキ」は計算問題が多く、過去問で慣れれば安定した得点源になりそうです。
「ネットワーク」は知識も求められるため、しっかりと時間をとって勉強する必要を感じました。
「データベース」は慣れれば得点源になりそうだと思いましたが、私はなかなか安定して解くことができませんでした。

本番の午後でかなりの腹痛に襲われつつも、耐えてなんとか合格できました。 外に食べに行くのが面倒くさいと思って、ゼリー飲料で済ませていたのですが、それが腹痛の原因かもしれません。 リラックスも兼ねて、昼食はちゃんと胃に溜まるものを落ち着いて食べるのがいいと感じました。

感想

初めて申し込んでから、1年後に合格できたということで、とりあえずは安心しています。
(ちゃんと午前・午後それぞれの対策をしっかりしていれば1発で合格できる試験だったなぁと思います。)
情報系の学生としては、テクノロジーの分野は大学の授業内容と関連する内容も多くあり、とっつきやすかったと思います。

来年はセキスペ・デスペあたりに挑戦してみたいと思います。(せっかく2年間の午前I免除があるので)