- JavaScript 関数型プログラミング 複雑性を抑える発想と実践法を学ぶ
- https://book.impress.co.jp/books/1115101137
上記の本を再読。今日では関数型プログラミングのエッセンスが広く浸透しているように思う。たとえ開発者が意識していなくとも、関数型プログラミング由来の考え方を自然なうちに用いている場面が多いはず。読書記録として、本書冒頭の部分を抜粋してまとめる。
...上記の本を再読。今日では関数型プログラミングのエッセンスが広く浸透しているように思う。たとえ開発者が意識していなくとも、関数型プログラミング由来の考え方を自然なうちに用いている場面が多いはず。読書記録として、本書冒頭の部分を抜粋してまとめる。
...以下の本を読んだ。記憶しておきたいところについてメモを残しておく。
以前に購入してから年単位で積読状態にあったもの。本棚の整理にあたり今回ようやく目を通した。本書は、プログラミングにおける用語・格言やセオリーの紹介と、それが我々に伝えようとしていることを説明したものである。初めて目にするようなものはほとんどなかったが、そのなかでも時折り見返したい内容をここに書き留めておくことで読書記録とする。
...ロンドン大学で MSc Computer Science: Applied machine learning モジュールを履修中。
講義内容に関して記録した個人的なスタディノートです。
全 12 週のうち 6〜12 週目の内容を記録します。(6 週目開始:2023 年 5 月 22 日 / 12 週目終了:2023 年 7 月 9 日)
...ロンドン大学で MSc Computer Science: Principles of programming モジュールを履修中。
講義内容に関して記録した個人的なスタディノートです。
全 12 週のうち 6〜12 週目の内容を記録します。(6 週目開始:2023 年 5 月 22 日 / 12 週目終了:2023 年 7 月 9 日)
...ずいぶん昔の記事ではありますが、個人的にずっと記憶に残っている言葉です。
Talk of tech innovation is bullsh*t. Shut up and get the work done – says Linus Torvalds
Linus Torvalds believes the technology industry’s celebration of innovation is smug, self-congratulatory, and self-serving.
The term of art he used was more blunt: “The innovation the industry talks about so much is bullshit,” he said. “Anybody can innovate. Don’t do this big ’think different’… screw that. It’s meaningless. Ninety-nine per cent of it is get the work done.”
...
この記事は、次の動画で解説されている「テストの構造化とリファクタリング」の部分からの引用です。
*言語は Java です。なおこのコードは動画のものから一部改変があります。
...こんな感じで、Entity、Repository(のインターフェース)、UseCase があるとします。
// This file is "entity.ts"
export default class UserEntity {
public readonly id: string;
public name: string;
private constructor(params: { id: string; name: string }) {
this.id = params.id;
this.name = params.name;
}
public updateName(name: string): void {
this.name = name;
}
}
// This file is "repository.ts"
import UserEntity from './entity.ts';
export default interface IUserRepository {
save(data: UserEntity): Promise<void>;
find(id: string): Promise<UserEntity>;
delete(id: string): Promise<void>;
}
// This file is "use-case.ts"
import type IUserRepository from './repository.ts';
export default class UserUpdateUseCase {
public constructor(private readonly userRepository: IUserRepository) {}
public async run(params: { userId: string; name: string }): Promise<void> {
const user = userRepository.find(params.userId);
user.updateName(params.name);
await this.userRepository.save(user);
}
}
そして、このユースケースを Jest でテストしようとすると概ね以下のようになります。
...私はまだ Intel Mac を使っているのですが、別の Apple Silicon Mac で作業したときに遭遇したことです。
ローカルでビルドした Docker イメージを Cloud Run にあげて動かしたところ、次のエラーがでて起動できませんでした。これは Cloud Run のログに出力されたメッセージです。
...以下2つの記事から、日本語訳で抜粋&整理していきます。
BEFORE
import { useTrack } from '~/hooks';
function Save() {
const { track } = useTrack();
const handleClick = () => {
console.log('saving...');
track('saved');
};
return <button onClick={handleClick}>Save</button>;
}
AFTER
...これまで UUID の生成にはこちらのパッケージにお世話になっていたのですが、
いまやブラウザでも Node でも標準でメソッドが用意されているようです。
MDN にも記載の通り、すべてのブラウザ(Internet Explorer って何?)および Node 環境で動作するため、安心して使うことができます。
...Dart 3 になるまでの間、Dart には interface
のキーワードが存在しませんでした。
インターフェースを定義したい場合は abstract
キーワードが使われてきました。
abstract class Animal {
void sound();
}
class Dog implements Animal {
@override
void sound() {
print('bowwow');
}
}
class Cat implements Animal {
@override
void sound() {
print('meow');
}
}
Dart 3 になり abstract interface
という書き方もできるようになりました。より厳密に書きたいのであれば、今後はこちらの利用も検討すると良いでしょう。
オブジェクトをディープコピーしたい場合にこれまで使われてきた有名なテクニックは JSON.stringify()
と JSON.parse()
を使ったものでした。
const original = { name: 'Alice', friends: ['Bob', 'Charlie'] };
// 👇
const deepCopied = JSON.parse(JSON.stringify(original));
original.friends.push('David');
console.log(original); // ['Bob', 'Charlie', 'David']
console.log(deepCopied); // ['Bob', 'Charlie']
…でしたが、いつからか標準で structuredClone()
というメソッドが用意されていました。(知らなかった!)
2023 年 5 月の G 検定を受験し合格しましたので、振り返り記録しておきます。
私はソフトウェアエンジニアとして働いてはいますが、機械学習やディープラーニングについての知識はありませんでした。実際、後述するテキストを最初に読んだときはチンプンカンプンで、途中から読むのが苦痛に感じたほどです笑
...Google I/O 2023 のなかで Flutter の Impeller という新しいレンダリングエンジンの紹介動画を見たときのこと。
その動画では本題に入る前に、そもそも画面描画ってどういう手順を追って実施されているのだっけ、という基本的な内容を説明してくれていて、非常に分かりやすかったのでここに記録しておきます。
...ロンドン大学で MSc Computer Science: Applied machine learning モジュールを履修中。
講義内容に関して記録した個人的なスタディノートです。
全 12 週のうち 1〜5 週目の内容を記録します。(1 週目開始:2023 年 4 月 17 日 / 5 週目終了:2023 年 5 月 21 日)
...ロンドン大学で MSc Computer Science: Principles of programming モジュールを履修中。
講義内容に関して記録した個人的なスタディノートです。
全 12 週のうち 1〜5 週目の内容を記録します。(1 週目開始:2023 年 4 月 17 日 / 5 週目終了:2023 年 5 月 21 日)
...機械学習の勉強のために次の動画を視聴した。振り返りのために内容を補完しつつ整理しておく。
上記の動画をはじめとして、本記事投稿時点で全6本のシリーズが動画があり、すべての動画を視聴済み。
...機械学習の勉強のために次の問題に取り組んだ。振り返りのために内容を補完しつつ整理しておく。
機械学習の勉強のために次の本を読んだ。振り返りのために内容を補完しつつ整理しておく。
ニューロンの模式図
...機械学習の勉強のために次の本を読んだ。振り返りのために内容を補完しつつ整理しておく。
探索木とは、計算機科学において特定のキーを特定するために使用される木構造である。その木構造が探索木として機能するために、あるノードのキーは、そのノードの左の子ノードのキーよりは常に大きく、逆に右の子ノードのキーよりは常に小さい性質が必要である。
...
きっかけは英語の動画を見ていた時のこと、かっこの呼び方がいつも聞いているのと違うなと感じました。調べてみると、アメリカ英語とイギリス英語で違っているようです。
...良い記事を見かけたので自分なりの言葉で補足しながらまとめます。
元の英単語は「跳ね返り(バウンド)を抑える」という意味です。
...ChatGPT をはじめとした AI に与える命令文のことを「プロンプト」と言います。日本では「呪文」と呼ばれていることも見かけます。プロンプトによって AI が生成する回答は異なります。適切な回答を得るためには適切なプロンプトを作成する必要があります。つまりプロンプトにも良し悪しがあり、良いプロンプトを書くというスキルが存在します。プロンプトを研究・開発するプロンプトエンジニアという職業も登場してきています。
...4月から大学院でコンピュータ・サイエンスの勉強をすることになりました。入学するのはロンドン大学のバークベック校(Birkbeck, University of London)というところです。
...生成 AI は産業革命とまで言われています。私は Chat GPT と GitHub Copilot を日常的に(といってもライトユーザーレベルで)使っていますが、それ以外はからっきしです。しばらく自分の仕事にかまけてアンテナを張ることを後回しにしていたら世の中に置いていかれつつあったので、慌ててキャッチアップしておきます。
...以前に、海外大学院での勉強を検討している旨の記事を書きました。出願にあたり Duolingo English Test で要求されている点数をとる必要があります。そのためにフラミンゴオンラインコーチングというサービスを利用して学習した際の記録です。
...Map/Set オブジェクトの Key/Value の型は次のようにして取得できます。
type KeyOfMap<T extends Map<unknown, unknown>> = T extends Map<infer K, unknown> ? K : never;
type ValueOfMap<T extends Map<unknown, unknown>> = T extends Map<unknown, infer K> ? K : never;
type ValueOfSet<T extends Set<unknown>> = T extends Set<infer K> ? K : never;
使用例がこちら。
const alice = { name: 'alice', age: 20 };
const bob = { name: 'bob', age: 30 };
const charlie = { name: 'charlie', age: 40 };
const map = new Map([
['111', alice],
['222', bob],
['333', charlie],
]);
const set = new Set([alice, bob, charlie]);
type MapKey = KeyOfMap<typeof map>; // string
type MapValue = ValueOfMap<typeof map>; // { name: string; age: number; }
type SetValue = ValueOfSet<typeof set>; // { name: string; age: number; }