1650940794

# The Fundamental Theorem of Galois Theory | What is the square root of two?

This video is an introduction to Galois Theory, which spells out a beautiful correspondence between fields and their symmetry groups.

This video is a quick-and-dirty introduction to Galois theory. But as with any quick introduction, there are details that I gloss over for the sake of brevity. To learn these details rigorously, I've listed a few resources down below.

(a) Galois Theory

Galois Theory notes by Tom Leinster: These notes are by far the best resource out there for learning the subject. They’re completely rigorous, but they’re also written in a very reader-friendly way with lots of examples and motivation. (See link here: https://www.maths.ed.ac.uk/~tl/gt/gt.pdf )

This playlist on Galois Theory by Professor Richard Borcherds is a gem. It explains Galois Theory from the ground up, rigorously, in almost complete generality. ( https://www.youtube.com/playlist?list=PL8yHsr3EFj53Zxu3iRGMYL_89GDMvdkgt  )

(b) Group Theory

Group Theory lectures: This playlist by Professor Benedict Gross is a beauty. It goes through the entire group theory syllabus from the ground up, and Professor Gross is a masterful lecturer. (see link here: https://www.youtube.com/playlist?list=PLelIK3uylPMGzHBuR3hLMHrYfMqWWsmx5 )

Intro: (0:00)
What is the square root of 2?: (1:08)
Fields and Automorphisms: (6:04)
Examples: (8:55)
Group Theory: (16:34)
The Fundamental Theorem: (18:25)

1650940794

## The Fundamental Theorem of Galois Theory | What is the square root of two?

This video is an introduction to Galois Theory, which spells out a beautiful correspondence between fields and their symmetry groups.

This video is a quick-and-dirty introduction to Galois theory. But as with any quick introduction, there are details that I gloss over for the sake of brevity. To learn these details rigorously, I've listed a few resources down below.

(a) Galois Theory

Galois Theory notes by Tom Leinster: These notes are by far the best resource out there for learning the subject. They’re completely rigorous, but they’re also written in a very reader-friendly way with lots of examples and motivation. (See link here: https://www.maths.ed.ac.uk/~tl/gt/gt.pdf )

This playlist on Galois Theory by Professor Richard Borcherds is a gem. It explains Galois Theory from the ground up, rigorously, in almost complete generality. ( https://www.youtube.com/playlist?list=PL8yHsr3EFj53Zxu3iRGMYL_89GDMvdkgt  )

(b) Group Theory

Group Theory lectures: This playlist by Professor Benedict Gross is a beauty. It goes through the entire group theory syllabus from the ground up, and Professor Gross is a masterful lecturer. (see link here: https://www.youtube.com/playlist?list=PLelIK3uylPMGzHBuR3hLMHrYfMqWWsmx5 )

Intro: (0:00)
What is the square root of 2?: (1:08)
Fields and Automorphisms: (6:04)
Examples: (8:55)
Group Theory: (16:34)
The Fundamental Theorem: (18:25)

1638638400

## ReactフックとTypeScriptを使用してTodoリストアプリを構築する

コードは私のGitHubにあります

## ブリーフィング

このチュートリアルの目標は、独自のToDoリストアプリを作成することです。アプリ全般について。このtodoリストアプリは非常にシンプルなインターフェースを備えており、todoの作成、チェックオフ、削除など、最も重要な機能に焦点を当てています。コードについて。ReactフックとReactフック、主にuseStateフックを使用します。

useRefフックも使用する場合があります。このToDoリストアプリは状態を管理するためにReactフックを利用するため、クラスコンポーネントを使用する必要はありません。したがって、このアプリは機能コンポーネントのみを使用してビルドします。ToDoリストアプリのスタイル設定に関しては、外部のCSSスタイルシートを使用します。

## プロジェクトの設定

まず最初に、ToDoリストアプリの基本的なアプリを作成しましょう。create-react-app使用すると、これを非常に高速に実行できます。あなたは、このパッケージを使用することができnpm init react-app react-hooks-todo-list-app-ts --typescriptnpx create-react-app react-hooks-todo-list-app-ts --typescriptまたはyarn create react-app react-hooks-todo-list-app-ts --typescript。TypeScriptを使用したくない場合--typescriptは、コマンドの最後にあるフラグを省略してください。

これらのコマンドは、ワークフローのセットアップとほとんどすべての必要な依存関係を備えた、ToDoリストアプリの開始テンプレートを作成します。手動でインストールする必要がある依存関係が1つありshortidます。それは、このパッケージのとタイプです。だから、使用npm i shortidしてnpm i -D @types/shortidyarn add shortid及びyarn add -D @types/shortidまたはpnpm i shortidpnpm i -D @types/shortid

アプリテンプレートに付属しているReactロゴなどのアセットがいくつかあります。あなたはそれを必要としないのであなたはそれを取り除くことができます。非常に単純なバージョンは、次のpackage.jsonようになります。

{
"name": "react-todo-list-hooks-ts",
"version": "1.0.0",
"description": "Simple Todo list app built with React hooks and TypeScript.",
"browserslist": [
">0.2%",
"not ie <= 11",
"not op_mini all"
],
"main": "src/index.tsx",
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test --env=jsdom",
"eject": "react-scripts eject"
},
"dependencies": {
"react": "16.11.0",
"react-dom": "16.11.0",
"shortid": "2.2.15"
},
"devDependencies": {
"@types/react": "16.9.11",
"@types/react-dom": "16.9.4",
"@types/shortid": "^0.0.29",
"react-scripts": "3.2.0",
"typescript": "3.7.2"
}
}

TypeScriptを使用する場合は、次のようにtsconfigなります。

{
"include": [
"./src/*"
],
"compilerOptions": {
"lib": [
"dom",
"es2015"
],
"jsx": "react",
"target": "es5",
"allowJs": true,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true
}
}

react-hooks-todo-list-app-ts/
├─node_modules
├─public
│ ├─favicon.ico
│ ├─index.html
│ ├─manifest.json
│ └─robots.txt
├─src
│ ├─components
│ │ ├─todo-form.tsx
│ │ ├─todo-item.tsx
│ │ └─todo-list.tsx
│ ├─styles
│ │ └─styles.css
│ ├─index.tsx
│ ├─interfaces.ts
│ └─react-app-env.d.ts
├─ package.json
└─ tsconfig.json

## インターフェース

1つはtodo（todoオブジェクト）用、1つはtodoフォーム用、1つはtodoリスト用、もう1つはtodoアイテム用です。todoオブジェクトには、3つのプロパティを持つことになりますidtextisCompletedTodoForm小道具のアレイ含むtodoオブジェクト及びhandleTodoCreate方法を。TodoList小道具が含まれていますhandleTodoUpdatehandleTodoRemovehandleTodoCompleteおよびhandleTodoBlurメソッドとの配列todoオブジェクトを。

TodoItem小道具が含まれていますhandleTodoUpdatehandleTodoRemovehandleTodoCompletehandleTodoBlurおよび単一todoのオブジェクト。

// Todo interface
export interface TodoInterface {
id: string;
text: string;
isCompleted: boolean;
}

// Todo form interface
export interface TodoFormInterface {
todos: TodoInterface[];
handleTodoCreate: (todo: TodoInterface) => void;
}

// Todo list interface
export interface TodoListInterface {
handleTodoUpdate: (event: React.ChangeEvent<HTMLInputElement>, id: string) => void;
handleTodoRemove: (id: string) => void;
handleTodoComplete: (id: string) => void;
handleTodoBlur: (event: React.ChangeEvent<HTMLInputElement>) => void;
todos: TodoInterface[]
}

// Todo item interface
export interface TodoItemInterface {
handleTodoUpdate: (event: React.ChangeEvent<HTMLInputElement>, id: string) => void;
handleTodoRemove: (id: string) => void;
handleTodoComplete: (id: string) => void;
handleTodoBlur: (event: React.ChangeEvent<HTMLInputElement>) => void;
todo: TodoInterface;
}

## Todoアイテムコンポーネント

チェックされたToDoアイテムにはspan、緑色の円の中にチェックマークの付いたHTMLエンティティが含まれます。ラッパーにdivonClick、todoをチェック/チェック解除するためのハンドラーがあります。次は。で別のものにdivなりinputます。このinput要素を使用して、todoのタイトルまたはテキストをレンダリングします。これは、input要素を使用してすべてのToDoアイテムを編集可能にする最も簡単な方法です。

を通過したオブジェクトvalueから、属性を介して行われるタイトルをtodo渡しますprops。これinputとは別に、これには2つのハンドラメソッドがあります。1つはforでonBlur、もう1つはforonChangeです。最後の要素も、div「x」エンティティ/アイコンが付いたものになります。この要素を使用して、todoアイテムを削除します。

これdivには1つのonClickハンドラーがあります。以前のすべてのデータ、およびハンドラーメソッドと同様に、これも完全な小道具に渡されます。

TypeScriptを使用する場合は、TodoItemInterfaceインターフェイスをインポートし、interfaces.tsそれを使用してpropsこのコンポーネントのタイプを入力します。この後、onChangeハンドラーをinput要素にReact.ChangeEvent<HTMLInputElement>アタッチしているため、要素にonChangeハンドラーを入力しinputます。

// Import dependencies
import * as React from 'react'

// Import interfaces
import { TodoItemInterface } from './../interfaces'

// TodoItem component
const TodoItem = (props: TodoItemInterface) => {
return (
<div className='todo-item'>
<div onClick={() => props.handleTodoComplete(props.todo.id)}>
{props.todo.isCompleted ? (
<span className="todo-item-checked"></span>
) : (
<span className="todo-item-unchecked" />
)}
</div>

<div className="todo-item-input-wrapper">
<input
value={props.todo.text}
onBlur={props.handleTodoBlur}
onChange={(event: React.ChangeEvent<HTMLInputElement>) => props.handleTodoUpdate(event, props.todo.id)}
/>
</div>

<div className="item-remove" onClick={() => props.handleTodoRemove(props.todo.id)}>
⨯
</div>
</div>
)
}

export default TodoItem

## ToDoリストコンポーネント

ToDoリストは、作成する2番目のコンポーネントになります。このコンポーネントは非常にシンプルになります。このコンポーネントはTodoItem、作成したばかりの、およびtodoを介しpropsたオブジェクトの配列のハンドラーメソッドを受け入れます。コンポーネント自体にはdiv、ラッパー要素として1つ含まれます。

この中divにはリスト、1つのul要素があります。この要素内でmap()は、todoオブジェクトの配列を反復処理し、オブジェクトごとにli1つのTodoItemコンポーネントを持つ1つの要素を作成するために使用しtodoます。次に、ハンドラーメソッドとともに、個々のtodoオブジェクトをTodoItemコンポーネントに渡します。

// Import dependencies
import * as React from 'react'

// Import TodoItem
import TodoItem from './todo-item'

// Import interfaces
import { TodoListInterface } from './../interfaces'

// TodoList component
const TodoList = (props: TodoListInterface) => {
return (
<div className="todo-list">
<ul>
{props.todos.map((todo) => (
<li key={todo.id}>
<TodoItem
todo={todo}
handleTodoUpdate={props.handleTodoUpdate}
handleTodoRemove={props.handleTodoRemove}
handleTodoComplete={props.handleTodoComplete}
handleTodoBlur={props.handleTodoBlur}
/>
</li>
))}
</ul>
</div>
)
}

export default TodoList

## Todoフォームコンポーネント

ToDoの「フォーム」は、useStateReactフックを使用する最初のコンポーネントです。useRefReactフックを使用する場所でもあります。新しいtodoアイテムを作成する前に、useStateフックを使用して、input要素に渡されたテキスト、todoタイトルのテキストを保存します。

useRefフックを使用して、この入力への参照を保存します。新しいToDoを作成する方法は、「Enter」キーを押しながら、その入力内にテキストを入力することです。したがって、「Enter」キーを押すと、値を空の文字列に設定することにより、この参照を使用して入力をリセットします。この入力には、との2つのハンドラメソッドもonChangeありonKeyPressます。

これら二つのハンドラメソッドは次のようになりますhandleInputChangehandleInputEnter。1つ目はonChange、入力に何かを書き込んだときにフォームの状態を更新します。いくつかのToDoタイトル/テキストです。2つ目は、の場合onKeyPress、新しいtodoオブジェクトを作成し、「Enter」キーの押下を検出すると入力フィールドをリセットします。

shortidパッケージを覚えていますか？ここで、この依存関係を使用します。内部handleInputEnter機能、新しい内部のtodoオブジェクト、あなたが使用するshortidユニーク生成するidすべての新しいTODOのために。心配しないでください。これは簡単です。必要なのは、呼び出すことですgenerate()shortidして、新しいはid準備ができています。

その後、2つのイベントもあります。1つ目は、要素にハンドラーをReact.ChangeEvent<HTMLInputElement>アタッチしているため、で入力できます。2つ目は、キーの押下を「リッスン」しているため、で入力できます。onChangeinputReact.KeyboardEvent

// Import dependencies
import * as React from 'react'
import shortid from 'shortid'

// Import interfaces
import {TodoInterface, TodoFormInterface} from './../interfaces'

// Todo form component
const TodoForm = (props: TodoFormInterface) => {
// Create ref for form input
const inputRef = React.useRef<HTMLInputElement>(null)

// Create form state
const [formState, setFormState] = React.useState('')

// Handle todo input change
function handleInputChange(event: React.ChangeEvent<HTMLInputElement>) {
// Update form state with the text from input
setFormState(event.target.value)
}

// Handle 'Enter' in todo input
function handleInputEnter(event: React.KeyboardEvent) {
// Check for 'Enter' key
if (event.key === 'Enter') {
// Prepare new todo object
const newTodo: TodoInterface = {
id: shortid.generate(),
text: formState,
isCompleted: false
}

// Create new todo item
props.handleTodoCreate(newTodo)

// Reset the input field
if (inputRef && inputRef.current) {
inputRef.current.value = ''
}
}
}

return (
<div className="todo-form">
<input
ref={inputRef}
type="text"
placeholder='Enter new todo'
onChange={event => handleInputChange(event)}
onKeyPress={event => handleInputEnter(event)}
/>
</div>
)
}

export default TodoForm

## メイン（インデックス）コンポーネント

ほぼ完了です。構築する必要のあるコンポーネントは1つだけです。これがTodoListApp主成分です。このコンポーネントは、ToDoを作成、更新、削除、および完了するためのメソッドを実装します。これは、を介して行われますhandleTodoCreatehandleTodoUpdatehandleTodoRemoveおよびhandleTodoComplete方法。

useStateReactフックを使用して、既存のすべてのToDoを保存するのもこのコンポーネントです。それでは、このコンポーネントを段階的に構築してみましょう。

### 輸入

まず、通常どおり、の依存関係をインポートする必要がありますreact。ここで、renderからメソッドをインポートする必要もありますreact-dom。これは、TodoListAppコンポーネントであるToDoリストアプリをDOMでレンダリングするためです。

またTodoFormTodoListコンポーネントをインポートして、後でそれらを返し、レンダリングできるようにします。これらのコンポーネントをインポートするときは、メインの外部CSSスタイルシートもインポートする必要があります。これにより、後でToDoリストアプリのスタイルを設定できます。

TypeScriptの場合、TodoInterfaceインターフェイスをインポートする必要があります。このインターフェースを数回使用して、todos状態といくつかのメソッドパラメーターを入力します。

// Import dependencies
import * as React from 'react'
import { render } from 'react-dom'

// Import components
import TodoForm from './components/todo-form'
import TodoList from './components/todo-list'

// Import interfaces
import { TodoInterface } from './interfaces'

// Import styles
import './styles/styles.css'

### ToDoリストアプリの状態を作成する

ToDoリストアプリの状態はシンプルになります。オブジェクトの配列になります。1つのオブジェクトは1つの既存のToDoを表します。最初に、todos状態を空の配列として初期化します。

TypeScriptの場合は、必ずTodoInterfaceインターフェイスを[]。と一緒に使用してください。これにより、1つのtodoオブジェクトだけでなく、todosオブジェクトの配列について「話している」ことがTypeScriptに通知されます。

// TodoListApp component
// ....
const TodoListApp = () => {
const [todos, setTodos] = React.useState<TodoInterface[]>([])
// ...
}

### 新しいtodoの作成

ToDoリストアプリの最初のメソッドは、新しいToDoを作成するhandleTodoCreateメソッドメソッドです。このメソッドは、1つのパラメーターであるtodoオブジェクトを受け入れます。それが機能する方法は簡単です。まず、newTodosState現在のtodoリストアプリの状態をコピーして、新しいtodoリストアプリの状態を作成します。

TypeScriptについて。TodoInterfaceインターフェイスを使用してtodoパラメータを入力します。また、このインターフェースを使用してnewTodosState変数を入力します。この場合、todoオブジェクトの配列が必要であることを再度指定し、の[]後に追加しTodoInterfaceます。

// ....
// Creating new todo item
function handleTodoCreate(todo: TodoInterface) {
// Prepare new todos state
const newTodosState: TodoInterface[] = [...todos]

// Update new todos state
newTodosState.push(todo)

// Update todos state
setTodos(newTodosState)
}
// ....

### 既存のToDoを更新する

TypeScriptの場合、TodoInterfaceインターフェイスを使用して、メソッドにtodo渡されるパラメーターを入力しますfind()。の後newTodosStateと一緒に、変数にも使用します。最後に、パラメータをとして入力します。[]TodoInterfaceidstring

// ....
// Update existing todo item
function handleTodoUpdate(event: React.ChangeEvent<HTMLInputElement>, id: string) {
// Prepare new todos state
const newTodosState: TodoInterface[] = [...todos]

// Find correct todo item to update
newTodosState.find((todo: TodoInterface) => todo.id === id)!.text = event.target.value

// Update todos state
setTodos(newTodosState)
}
// ....

### 既存のToDoを削除する

ToDoの削除は、filter()メソッドを使用して実行されます。まず、newTodosState現在のToDoリストアプリの状態をコピーして、新しいToDoリストアプリの状態を作成します。この間、このfilter()メソッドを使用して、削除するToDoを削除します。これはid、すべてidのtodoを削除するtodoと比較することによって行われます。

これが完了すると、この新しいフィルタリングされたtodos状態を使用して、setTodos()メソッドで状態を更新します。

TypeScriptの場合、TodoInterfaceインターフェイスを使用して、メソッドにtodo渡されるパラメーターを入力しますfilter()。次に、。の後newTodosStateと一緒に、変数にも使用します。最後に、パラメータをとして入力します。[]TodoInterfaceidstring

// ....
// Remove existing todo item
function handleTodoRemove(id: string) {
// Prepare new todos state
const newTodosState: TodoInterface[] = todos.filter((todo: TodoInterface) => todo.id !== id)

// Update todos state
setTodos(newTodosState)
}
// ....

### ToDoの完了

ToDoを完了する方法は、方法と非常によく似ていhandleTodoUpdateます。まず、現在のToDoリストアプリの状態をコピーしてnewTodosState変数に保存します。次に、find()メソッドを使用して、todos状態内の特定のToDoアイテム/オブジェクトを検索します。

さて、TypeScriptについて。まず、TodoInterfaceインターフェースを使用して、メソッドにtodo渡されるパラメーターを入力しますfind()。次に、このインターフェイスをnewTodosState変数にも使用します。これも。の[]後に付けTodoInterfaceます。最後のタイプはid。用になります。これはになりますstring

// ....
// Check existing todo item as completed
function handleTodoComplete(id: string) {
// Copy current todos state
const newTodosState: TodoInterface[] = [...todos]

// Find the correct todo item and update its 'isCompleted' key
newTodosState.find((todo: TodoInterface) => todo.id === id)!.isCompleted = !newTodosState.find((todo: TodoInterface) => todo.id === id)!.isCompleted

// Update todos state
setTodos(newTodosState)
}
// ....

### すべてのtodoにタイトルがあることを確認する

いつものように、TypeScript。これは迅速になります。入力する必要があるのeventは、パラメーターとして渡されることだけです。要素にonChangeイベントハンドラーをアタッチしているのでinput、を使用できますReact.ChangeEvent<HTMLInputElement>

// ....
// Check if todo item has title
function handleTodoBlur(event: React.ChangeEvent<HTMLInputElement>) {
if (event.target.value.length === 0) {
} else {
event.target.classList.remove('todo-input-error')
}
}
// ....

### すべてのコンポーネントを返す

ToDoリストアプリはほぼ完成しています。ここで、これまでに作成し、コンポーネントにインポートしたすべてのコンポーネントを取得して、それらを返す必要があります。すべてのコンポーネントに必要なものを必ず提供してくださいprops。その後、render()メソッドを使用TodoListAppしてDOMでレンダリングできます。

// ...
return (
<div className="todo-list-app">
{/* Todo form component */}
<TodoForm
todos={todos}
handleTodoCreate={handleTodoCreate}
/>

{/* Todo list component */}
<TodoList
todos={todos}
handleTodoUpdate={handleTodoUpdate}
handleTodoRemove={handleTodoRemove}
handleTodoComplete={handleTodoComplete}
handleTodoBlur={handleTodoBlur}
/>
</div>
)
}

// Render the App in the DOM
const rootElement = document.getElementById('root')
render(<TodoListApp />, rootElement)

### すべてを一緒に入れて

あなたはこの主要なコンポーネントでたくさんのコードを書きました。より明確にするために、すべてをまとめましょう。

// Import dependencies
import * as React from 'react'
import { render } from 'react-dom'

// Import components
import TodoForm from './components/todo-form'
import TodoList from './components/todo-list'

// Import interfaces
import { TodoInterface } from './interfaces'

// Import styles
import './styles/styles.css'

// TodoListApp component
const TodoListApp = () => {
const [todos, setTodos] = React.useState<TodoInterface[]>([])

// Creating new todo item
function handleTodoCreate(todo: TodoInterface) {
// Prepare new todos state
const newTodosState: TodoInterface[] = [...todos]

// Update new todos state
newTodosState.push(todo)

// Update todos state
setTodos(newTodosState)
}

// Update existing todo item
function handleTodoUpdate(event: React.ChangeEvent<HTMLInputElement>, id: string) {
// Prepare new todos state
const newTodosState: TodoInterface[] = [...todos]

// Find correct todo item to update
newTodosState.find((todo: TodoInterface) => todo.id === id)!.text = event.target.value

// Update todos state
setTodos(newTodosState)
}

// Remove existing todo item
function handleTodoRemove(id: string) {
// Prepare new todos state
const newTodosState: TodoInterface[] = todos.filter((todo: TodoInterface) => todo.id !== id)

// Update todos state
setTodos(newTodosState)
}

// Check existing todo item as completed
function handleTodoComplete(id: string) {
// Copy current todos state
const newTodosState: TodoInterface[] = [...todos]

// Find the correct todo item and update its 'isCompleted' key
newTodosState.find((todo: TodoInterface) => todo.id === id)!.isCompleted = !newTodosState.find((todo: TodoInterface) => todo.id === id)!.isCompleted

// Update todos state
setTodos(newTodosState)
}

// Check if todo item has title
function handleTodoBlur(event: React.ChangeEvent<HTMLInputElement>) {
if (event.target.value.length === 0) {
} else {
event.target.classList.remove('todo-input-error')
}
}

return (
<div className="todo-list-app">
<TodoForm
todos={todos}
handleTodoCreate={handleTodoCreate}
/>

<TodoList
todos={todos}
handleTodoUpdate={handleTodoUpdate}
handleTodoRemove={handleTodoRemove}
handleTodoComplete={handleTodoComplete}
handleTodoBlur={handleTodoBlur}
/>
</div>
)
}

const rootElement = document.getElementById('root')
render(<TodoListApp />, rootElement)

## スタイル

ToDoリストアプリの準備が整いました。よくほとんど。いくつかのスタイリングのためのスペースがたくさんあります。ToDoリストアプリの見栄えを良くするために使用できるスタイルを次に示します。

/* Default styles*/
html {
box-sizing: border-box;
}

*,
*::before,
*::after {
box-sizing: inherit;
}

#root,
body {
min-height: 100vh;
}

body {
margin: 0;
}

#root,
.todo-list-app {
display: flex;
flex-flow: column nowrap;
}

#root {
align-items: center;
width: 100%;
}

/* Todo list app styles  */
.todo-list-app {
width: 100%;
max-width: 480px;
}

/* Todo form styles */
.todo-form input,
.todo-item {
border: 1px solid #ececec;
}

.todo-form input {
width: 100%;
height: 48px;
transition: .25s border ease-in-out;
}

.todo-form input:focus {
outline: 0;
border: 1px solid #3498db;
}

/* Todo list styles */
.todo-list ul {
margin: 0;
}

.todo-list li {
list-style-type: none;
}

/* Todo item styles */
.todo-item {
display: flex;
flex-flow: row nowrap;
align-items: center;
}

.todo-form + .todo-list ul .todo-item {
border-top: 0;
}

.todo-item-input-wrapper {
flex-grow: 1;
}

.todo-item input {
width: 100%;
border: 0;
border-bottom: 1px solid transparent;
transition: .25s border-bottom ease-in-out;
}

.todo-item input:focus {
outline: 0;
border-bottom: 1px solid #3498db;
}

.todo-item .todo-input-error {
border-bottom: 1px solid #e74c3c;
}

.todo-item span {
display: flex;
align-items: center;
justify-content: center;
width: 32px;
height: 32px;
border: 1px solid #ececec;
transition: .25s all ease-in-out;
}

.todo-item-unchecked:hover {
background: hsla(168, 76%, 42%, .25);
border: 1px solid hsl(168, 76%, 42%, .25);
}

.todo-item-checked {
color: #fff;
background: #1abc9c;
border: 1px solid #1abc9c;
}

.item-remove {
display: flex;
font-size: 28px;
cursor: pointer;
line-height: 1;
color: #ececec;
transition: .25s color ease-in-out;
}

.item-remove:hover {
color: #111;
}

## 結論：ReactフックとTypeScriptを使用してTodoリストアプリを構築する方法

おめでとうございます。ReactフックとTypeScriptを使用して、独自のToDoリストアプリを作成しました。ただし、ここで停止する必要はありません。だから、どうぞ。このtodoリストアプリを取り、それをより良くしてください。どのような機能が必要かを考えてください。その後、何も待たないでください。自分で実装してみてください。楽しむ！

この記事が気に入ったら、今後の投稿を見逃さないように購読してください。

#typescript #react-native

1649314944

## How to Create an Image Clip Animation with Slider Controls using Only HTML & CSS

In this blog you’ll learn how to create an Image Clip Animation with Slider Controls using only HTML & CSS.

To create an Image Clip Animation with Slider Controls using only HTML & CSS. First, you need to create two Files one HTML File and another one is CSS File.

### 1: First, create an HTML file with the name of index.html

<!DOCTYPE html>
<html lang="en" dir="ltr">
<meta charset="utf-8">
<title>Image Clip Animation | Codequs</title>
<body>
<div class="wrapper">
<div class="img img-1">
<!-- <img src="images/img-1.jpg" alt="">
</div>
<div class="img img-2">
<img src="images/img-2.jpg" alt="">
</div>
<div class="img img-3">
<img src="images/img-3.jpg" alt="">
</div>
<div class="img img-4">
<img src="images/img-4.jpg" alt="">
</div>
<div class="img img-5">
<img src="images/img-5.jpg" alt="">
</div>
<div class="sliders">
<label for="one" class="one"></label>
<label for="two" class="two"></label>
<label for="three" class="three"></label>
<label for="four" class="four"></label>
<label for="five" class="five"></label>
</div>
</div>
</body>
</html>

### 2: Second, create a CSS file with the name of style.css

*{
margin: 0;
box-sizing: border-box;
}
body{
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
background: -webkit-linear-gradient(136deg, rgb(224,195,252) 0%, rgb(142,197,252) 100%);
}
.wrapper{
position: relative;
width: 700px;
height: 400px;
}
.wrapper .img{
position: absolute;
width: 100%;
height: 100%;
}
.wrapper .img img{
height: 100%;
width: 100%;
object-fit: cover;
clip-path: circle(0% at 0% 100%);
transition: all 0.7s;
}
#one:checked ~ .img-1 img{
clip-path: circle(150% at 0% 100%);
}
#two:checked ~ .img-1 img,
#two:checked ~ .img-2 img{
clip-path: circle(150% at 0% 100%);
}
#three:checked ~ .img-1 img,
#three:checked ~ .img-2 img,
#three:checked ~ .img-3 img{
clip-path: circle(150% at 0% 100%);
}
#four:checked ~ .img-1 img,
#four:checked ~ .img-2 img,
#four:checked ~ .img-3 img,
#four:checked ~ .img-4 img{
clip-path: circle(150% at 0% 100%);
}
#five:checked ~ .img-1 img,
#five:checked ~ .img-2 img,
#five:checked ~ .img-3 img,
#five:checked ~ .img-4 img,
#five:checked ~ .img-5 img{
clip-path: circle(150% at 0% 100%);
}
.wrapper .sliders{
position: absolute;
bottom: 20px;
left: 50%;
transform: translateX(-50%);
z-index: 99;
display: flex;
}
.wrapper .sliders label{
border: 2px solid rgb(142,197,252);
width: 13px;
height: 13px;
margin: 0 3px;
cursor: pointer;
transition: all 0.3s ease;
}
#one:checked ~ .sliders label.one,
#two:checked ~ .sliders label.two,
#three:checked ~ .sliders label.three,
#four:checked ~ .sliders label.four,
#five:checked ~ .sliders label.five{
width: 35px;
background: rgb(142,197,252);
}
.sliders label:hover{
background: rgb(142,197,252);
}
display: none;
}

Now you’ve successfully created an Image Clip Animation with Sliders using only HTML & CSS.

1628359385

## Matrimonial Development

1. Home
2. Matrimonial Website Development

A Best Leading Matrimonial Website Development Company In India

## Launching New Marriage Bureaus & Matrimonial Website With In 2 Days With Advanced Features For Grand Business Success Is Just A Call Away.

### Matrimonial Website Design & Development Company In India

If you want to start a matrimonial business in India you need the best matrimonial website. It is one of the best and leading matrimonial website design, matrimonial website development companies in Coimbatore, Tamil Nadu, India. We make use of advanced technologies to make it an excellent experience for those seeking matchmaking services online. our matrimonial website provides a completely flexible and automated business solution to gain from this business opportunity in the fast-growing environment in India.

## To Start Marriage Bureaus & Matrimonial Business Is Just A Call Away

We are the top best Matrimonial Portal Development Company, We are the best in the Market.

#### UNLIMITED MEMBERS REGISTRATION

Two types of member types are available in our matrimonial website. free members & premium members. admin has full control over when new members registered on the website.

#### ONLINE PAYMENT OPTIONS

The payment gateway is integrated into the system so free members can pay money through an online transfer with debit cards, credit cards, net banking and became premium members and make use of advanced features in the matrimonial website.

#### HOROSCOPE PROFILE MATCHING

Members can generate horoscope birth charts and match the profile to get the result easily without astrologer help. with birth chart generator systems integrated into our matrimonial web application.

FUNCTIONALITY IS EXTREMELY IMPORTANT FOR MATRIMONY

## Matrimonial Website With Unlimited Features

Software is a Coimbatore, India based matrimonial Web Development Company with a readymade matrimony website with the demo. If you are looking for the best matrimonial website development company in India. This is a very powerful online matrimony management software system that we’ve developed exclusively and user-friendly and should be the main features in the matrimonial portal.

### MEMBERS

• Two types of member options are available. Free Members & Premium Members. For Users

#### Free Members

#Root admin can get the list of all free member's information of each user. Admin can View the free member profiles, packages, followers, membership Information & also can block any Member any time he wishes.

#Root admin can get the list of all premium members' information of registered members. admin can view the premium member profiles, packages, followers, membership duration, remaining premium package items & also can block any premium member any time.

#Root Admin can create member profiles manually with all the basic information from his/her. Admin panel With Unique Profile ID for Every individual member registered by admin will get a unique member ID from the member Registration.

#### Member profile Attributes

• Religion's
• Caste
• Sub-caste
• Language
• Family Status
• Family Value
• On Behalf
• Country's
• State's
• City's

OUR MATRIMONY BUNDLED WITH ALL FUNCTIONALITY

## To Start Online Matrimonial Website

• Complete high-Security Website
• Fully Customized and square admin panel
• For all Regions and caste / sub-casts
• Fully Custom Membership Plans
• Mobile Responsive matrimonial website
• Free Members Profile
• Payments Invoices
• Horoscope Systems
• Fully customizable for your community
• Customer Support Ticketing System
• Contact Messages
• Online Payments Debit/Credit, Net banking
• Email Setup
• Sms Settings
• Search by Profile ID
• Search-engine friendly Matrimonial Website
• User-friendly Matrimonial Website
• Family Info – Father, Mother name, status, etc.
• Approve / Disapprove Members
• Send private message to members
• De-active OR BAN members any time

## ELITE MATRIMONIAL WEBSITE FEATURES FOR A SUCCESSFUL BUSINESS

TOP & BEST MATRIMONY SOFTWARE COMPANY IN INDIA.

USER FRIENDLY INTERFACE

Easy to navigate throughout the websites help brides and grooms use the websites easily find matches and communicate the profiles easily.

Advanced search options help brides and grooms to search the matching profile easily and find their perfect match profile for their life partner.

SEO-FRIENDLY WEBSITE

Our Matrimonial Websites are built for search engines in mind to bring more search visitors through search engines like google, bing, yahoo.

FULLY RESPONSIVE WEBSITE

Our Matrimony website is fully responsive it can be loaded faster in any device screen like mobile devices, tablets, and HD TV to Monitors. Our website will dynamically change to all devices.

MULTIPURPOSE MATRIMONY

A very powerful online matrimony management application system that we’ve developed exclusively and user-friendly. matchmaking, partner search, community-based wedding.

ON TIME DELIVERY

customized marriage bureaus & matrimonial Website for your business within 2 - 10 days no need to wait for a long time. we will deliver the matrimonial portal on time no delay.

AFFORDABLE PRICE

Matrimonial website designing is not a costly thing. You can build your own matchmaking matrimony website for an affordable price. We never compromise in quality.

When it comes to online speed is very important our Matrimonial website loads faster than any other matrimony website. Our speed score is 90 is based on the lab data analyzed.

Our matrimony is the ecommerce Ready Website. so paid online like debit card, credit card, net banking, etc. free member can upgrade to Premium plan through an online payment.

## We Develop Three Categories For Matrimonial Websites Development

We have three categories for matrimonial because every business owner wants different types of matrimony that's why we have three options for every matrimony business owner.

Basic Matrimonial

Only Basic Features Enabled

• Mobile Responsive Website
• Contact Messages form Website
• Search Options Enabled
• Search by Profile ID Enabled
• Email Setup
• De-active OR BAN members
• 1 year to support & updates

• Mobile Responsive Website
• Search-engine friendly
• User-friendly Matrimonial
• 2 year to support & updates

Enterprise Matrimonial

Elite Features Enabled

• Complete high-Security
• Payments Invoices
• Horoscope Systems
• Fully customizable Search-engine friendly
• 5 year to support & updates

## MATRIMONAL MOBILE APP DEVELOPMENT COMPANIES IN COIMBATORE, INDIA

We provide end-to-end matrimonial mobile application design and development services in India. Incredible ideas require resources to get anything beyond the idea frame. That’s why we’ve built a process that can adapt to the needs of any client. want to work with a team that understands matrimonial service or business to build your app for success. you are in the right place to build your matrimonial app.

REQUEST A FREE CONSULTATION AND GET A NO OBLIGATION QUOTE FOR YOUR PROJECT WITHIN 8 BUSINESS HOURS

## Lets build your next project Together!

WHAT ABOUT CUSTOMER SUPPORT & TECHNICAL SUPPORT?

## We Have Dedicated Customer Service Support To Help

As a market leader in developing matrimonial website development in Coimbatore, India.  After developing matrimony completed. We aware Well Our customers need help from us like customer support and technical support frequently. So we provide an excellent and experienced team that will guide you and help you with your matrimonial website up and running without no issues.

We deliver high-quality premium customer support for matrimony service. We have a separate dedicated support developer team that will support all our clients. Our Support service is the developer team. So your issue and error will be solved within 15 Min we will take care of your website even at the weekend.

A 24/7 Premium Customer Team Will Be Delivered To All Our Clients For The Matrimonial Website.

1626874500

## What is CAP Theorem? Degrees of CAP theorem, use cases - System Design - Lecture 20

Errata: The middleware in the nodes diagram actually is network. Please read it network and not middleware.

Also, quite an important detail between 16:00 to 17:30. I promise it’s not fake engagement, just want to highlight it since I couldn’t break the video skip ahead tabs.

#theorem #cap theorem