ブックマーク / v2.aintek.xyz (26)

  • より良くプログラムを書くためには

    はじめに プログラマー脳という書籍を社内でおすすめされたので読んでみた。 自分がこれまで言語化していなかった事柄が認知科学に基づきうまく説明されており示唆に富むものだったので自分なりに拡張し、その内容をまとめた。 プログラミングにおける混乱 プログラムを読み書きする行為をプログラミングというが、この行為において初学者やプロジェクト新規参画者を混乱させる要因は以下のものがある。 知識不足: 馴染みのないプログラミング言語で書かれたコードは、そもそも読むことが困難である 情報不足: 関数名などからその処理内容を推論することが困難である 処理能力の不足: コード中の処理が把握しづらいなどの理由で脳内のリソースが奪われ、読むことが困難になる 要因の名称はプログラマー脳から拝借したもの(だが、名称と説明に若干の違和感もある)。 知識不足は、あるプログラミング言語の理解が十分でないため読むことが困難で

    より良くプログラムを書くためには
  • プログラミングの基礎理論 第4回 自由に生成された集合と再帰的関数、暗黙に型付けられたラムダ計算

    はじめに 帰納的閉包のさらなる理解のために、 自由に生成された集合 再帰的関数定義 について理解するのが良いので概要のみ紹介する。 自由に生成された集合 帰納的閉包 X = Ind(C, F)が以下の条件を満たすとき、「自由に生成された集合である」と言う。 任意の異なる関数fr(n),gr(m) ∈ Fに対して、fr(n)(X) ∩ gr(m)(X) = ∅ である。 1.1 つまり異なる関数を適用した結果の共通集合はなく、すなわち異なる関数を適用した結果はそれぞれ異なることを意味する 任意の関数fr(n) ∈ Fについて、fr(n)(X) ∩ C = ∅ である 2.1 つまり関数を適用した場合、定数Cを生成することはないことを意味する 任意の関数fr(n) ∈ Fについて、fr(n)|xn は単射関数である 3.1 fのXへの制限すなわち定義域をXに制限した集合{(a, b) | (a

    プログラミングの基礎理論 第4回 自由に生成された集合と再帰的関数、暗黙に型付けられたラムダ計算
  • 計算機システム概論

    はじめに 計算機システム概論 第1回ビデオ教材〜において、聞いた内容をまとめてみる。 計算の構造 計算機システム概論 第2回ビデオ教材を参考にする。 概要を語る上で必要な登場人物をまとめる。 計算システムにおける計算とは・・・人が解くべき知的な問題解決(と仮定する) 計算機とは・・・人と同様に知的問題の解決能力を持つ機械 計算機システムとは・・・計算機を中核とする汎用的な問題解決システム 計算機システムの問題解決原理とその構造を理解していく。 人間の知的活動とは、言語を用いた思考であると言える。 つまりある情報を有限なシンボル列(文)で表現し、最終的な別なシンボル列(文)を生成する作業と言える。 計算機による情報処理とは、データや処理手順をコード化しプログラムによって処理し、別なコードを生成する作業と言える。 この2つは同形構造であると言える。これが計算機の基構造である。 計算機の基

    計算機システム概論
    mitsuyoshi4
    mitsuyoshi4 2023/01/22
    書いた
  • プログラミングの基礎理論 第2回 言語の帰納的な定義

    はじめに Twitterにてこのようなツイートを見かけたので、内容を確認してみた。 これまでインターネットや書籍で軽く触れられてきた内容に切り込んでいくものだったので、理解を深めることができた。 その内容をまとめていく。 概要 言語は文法で定義される。 例えば、MLの一部の式は以下のように定義される。 <exp> ::= <id> // 変数 | <n> | <S> | true | false // 自然数(n), 文字列(S) その他定数 | fn <id> => <exp> // 関数式 | <exp> <exp> // 関数適用 | ... プログラミング言語の理論ではより抽象的な定義を行うため、変数や定数を「与えられた集合」とし、これを代表するものをメタ変数と呼ぶ。 ラムダ式では以下の集合とメタ変数を導入する。 変数(Var)に対するメタ変数をxとする 定数(Const)に対する

    プログラミングの基礎理論 第2回 言語の帰納的な定義
  • OCamlのメモリモデルについて

    序文 これまでRuss Coxが書いたメモリモデルに関する記事について、 Twitterでまとめてきた。 Updating the Go Memory Modelの要約 Goのメモリモデルは上記記事にあるように「データ競合のあるプログラムは、実装が競合を報告してプログラムを終了する可能性があり」その意味で無効なプログラムとして処理され、それ以外の場合(例えば部分的にデータ競合のあるプログラム等)はその場合の挙動を予め定義している。 さて、OCaml 5.0.0 は2022/12/16にリリースされたが、この時初めてマルチプロセッサに対応した。 つまり並列処理に対応した(以前は並行処理しかできなかった)。 そこで改めてOCamlのメモリモデルについてしっかりと理解してみる。 OCamlのメモリモデル概要 モダンなプロセッサとコンパイラは積極的にプログラムを最適化するが、並列処理を含むプログラ

    OCamlのメモリモデルについて
    mitsuyoshi4
    mitsuyoshi4 2023/01/16
    書いた
  • Linux Mint 21.1 のアップデートが失敗?する

    はじめに 2023/01/03現在、Linux Mint 21.1 vera へアップデートした際、apt updateで一部が無視されるようになった。 % LANG=C sudo apt update Hit:1 https://download.docker.com/linux/ubuntu jammy InRelease Hit:2 http://dl.google.com/linux/chrome/deb stable InRelease Hit:3 http://packages.microsoft.com/repos/code stable InRelease Get:4 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB] Hit:5 http://archive.ubuntu.com/ubun

    Linux Mint 21.1 のアップデートが失敗?する
    mitsuyoshi4
    mitsuyoshi4 2023/01/03
    書いた
  • 「関数型言語で学ぶプログラミングの基本」という同人誌を書いてみて

    はじめに 2022/11/20に開催された第七回 技術書同人誌博覧会に出展する同人誌を執筆した。 目的は色々あるが、一番は自身の知識の整理が大きい。 ここでは、書籍内で重要だと(個人的に思う)概念及び執筆にあたって気をつけた点をピックアップする。 なぜ型が必要なのか Chapter 2 の序文のとおりであるが、「1 + “ほげ”」のような無意味な計算を未然に防ぐためである。 このようにデータの種類を確認することを 型チェック と言う。 また、無意味な計算によって発生するエラーを 型エラー と言う。 基的データとして、整数(int)、実数(float)、文字(char)、文字列(string)、真偽値(bool)が存在する他、 戻り値を返す必要がない場合に用いるユニット値(unit)が存在する。 いくつかのプログラミング言語では、副作用を引き起こす関数の戻り値としてユニット型を返したり、

    「関数型言語で学ぶプログラミングの基本」という同人誌を書いてみて
  • k3s で内部向けArgo CD を簡単にデプロイする

    目的 Argo CDをすぐに構築するためのk8sが欲しい 管理したいKubernetesとArgo CDを分離 Argo CDをGitで管理 などの目的を達成したい k3s とは k3sはIoTやエッジコンピューティング等向けの軽量なKubernetesで、 単一バイナリでKubernetes環境を構築できるほか、Helm, Traefikなど組み込まれているのですごく便利 Argo CD とは Argo CDはKubernetes用のGitOpsのCDツール KubernetesのManifestをGithubで管理することが多いが、簡単なUIでデプロイを管理出来るので便利 ちなみに作成元のArgo にはArgo WorkflowsやArgo Rolloutsなどもありこれらも便利 環境 Ubuntu 20.04.4 k3s v1.23.6+k3s1 Argo CD v2.2.0 k3s

    k3s で内部向けArgo CD を簡単にデプロイする
    mitsuyoshi4
    mitsuyoshi4 2022/06/30
    かいた
  • OCaml で Abstract モジュール型を実現する方法

    概要 オブジェクト指向でいうところの、抽象基底クラスを実現する方法。 なお、OCaml では オブジェクトも扱えるが、ここでは ABC モジュールの実現を考えてみる。 このdiscuss を見て、なるほどとなったのでまとめてみたというのが背景。 抽象基底クラスの理解については、Python の この章 を参考にした。 ABCモジュール型の定義 ABCモジュールを以下のように定義する。 ここでは、ABCの頭文字を取って、Aモジュール型とした。 ※いやー、OCamlにはモジュール型(sig..end)とモジュール(struct...end)があって混乱しますね… というわけで、これらについてはOCamlのモジュール (ストラクチャ) とモジュール型 (シグネチャ) を参考にしてください。 module type A = sig type t type err type 'a do_things

    OCaml で Abstract モジュール型を実現する方法
    mitsuyoshi4
    mitsuyoshi4 2021/10/14
    かいた
  • k3d でoidcを試す

    k3dとは k3dはk3sをコンテナ化し、Dockerを使用してマルチノードのk3sクラスタを作れるツール Dockerにのみ依存しローカル環境でkubernetes(k3s)を簡単に作れるので大変便利 README 構成 Ubuntu (20.04 LTS) (IP:192.168.1.100) Docker(19.03.11) k3d helm sakura docker registry 手順 k3dでクラスタを作る # k3d cluster create --k3s-server-arg --no-deploy --k3s-server-arg traefik --volume /root/work/istio/src/registries.yaml:/etc/rancher/k3s/registries.yaml -p 8087:80@loadbalancer -p 8088:

    k3d でoidcを試す
    mitsuyoshi4
    mitsuyoshi4 2021/06/20
    書いてた
  • Go言語以外でもk8sオペレータが作りたい

    要約 k8sオペレータとかカスタムコントローラ作ると行ったらGo言語という風潮 内部はHTTPなんだし所詮コントローラはただのプログラムなんだから実装は何でも良いでしょ OCamlっていう言語で実装してやんよ はい、できた そもそもk8sって 宣言的な構成管理ができて 自動デプロイや スケーリングや コンテナ運用のための オープンソースなプラットフォームですよって。 んじゃk8sのカスタムコントローラとかオペレータって何よ? k8s標準リソースとかカスタムリソースを管理するプログラムがカスタムコントローラ カスタムコントローラとCRD(カスタムリソース定義)を合わせたものの名称であり、運用自動化を図ったのがオペレータ 待って、待って。そもそも前提知識が過ぎるよ・・・ せやな。 k8sコンポーネントとは何か k8s標準リソースとは何か k8sカスタムリソースとは何か を語るか k8sコンポー

    Go言語以外でもk8sオペレータが作りたい
    mitsuyoshi4
    mitsuyoshi4 2019/12/22
    かいた
  • あえてGo言語でClean Architectureを学ぶ

    はじめに 最近巷で話題のGoらしさって話があると思いますが、 ここはあえてGoらしからぬClean ArchitectureをGoで学んでいこうという記事です。 対象 Go言語をある程度読めて、Clean Architectureに興味がある方 注意 ここでいうClean Architectureとは、依存性のルールに従った円を指しています。 Clean Architectureを採用しましょうって話ではありません。 各言語には思想があるので、その言語らしい書き方に沿うべきだと思っています。 ざっくりとしたアーキテクチャの目的 システムの関心の分離を行い、選択肢を残す(決定を遅らせる)ことが目的です。 またユースケースを中心として開発するため、フレームワークやツールに依存しません。 Clean Architectureとは Robert Martin がブログで提唱したアーキテクチャの解説

    あえてGo言語でClean Architectureを学ぶ
  • クリーンアーキテクチャについて考察してみた

    参考文献 先に記事を書くにあたって参考にした文献を示す。 クリーンアーキテクチャ 翻訳 クリーンアーキテクチャ原文 クリーンアーキテクチャの目的 関心の分離 少なくとも以下のレイヤーが存在する。 ビジネスルールのレイヤー インターフェースのレイヤー _ クリーンアーキテクチャを適用した場合、以下のようなシステムを生み出す(らしい)。 フレームワークやライブラリ、モジュールに依存しない。つまりフレームワーク等の制約の影響を受けない 外部の要因を受けずにテストが可能 UIが独立しており、他の要因を受けずに変更が可能 データベースが独立しており、DBの種類によらず、ビジネスルールはDBの種類による影響を受けない ビジネスルールが外部の影響を受けない つまり外部のフレームワークやライブラリ、モジュールについてそれらがどのような設計になっているかなどを知らない状態 _ クリーンアーキテクチャを表現

    クリーンアーキテクチャについて考察してみた
  • How to do a code review を読んでみた

    はじめに Google’s Engineering Practices documentation にて公開されている レビュー方法 を読んでみました。 こちら:How to do a code review これを読んでどんなことが書いてあるのかをサッとまとめるとともに、自分の考えも交えながら整理してみます。 ※基的に ※印 の箇所が自分の考えとかだったりします。 また、書ではCLという単語が頻繁に出現しますが、Create a change list のことです。 参考:CL 標準的なコードレビュー コードレビューの目的は、コードレビューを通してコードの健全性が向上することです。 コードの健全性については、こちらを参照して下さい。 参考:Code Health ただし、コードレビューの実践にはいくつかのトレードオフが存在します。 開発者がコミットしない限りはコードは良くならないが、

    How to do a code review を読んでみた
  • nuxtjs で markdown-it-katex を適用する方法

    katexとは web上で、数式を表示するためのライブラリです。 高速に表示できることが強みです。 逆に弱みとしては、latexのタイプセットと互換性がない(つまりkatex独自のタイプセット)を利用するケースがあるため、latexの数式をそのまま移行することが困難な点でしょうか。 参考: katex markdown-it-katex なぜkatexを選んだか 単純に nuxtjs で動作させることができたのが、katexだったからです。 当初は、mathjaxを試していましたが上手く動作せず・・・ katexの導入及び設定方法 npm にて、 markdown-it-katex を導入するだけです。 インストールコマンド例は以下のようになります。 npm install @nuxtjs/markdownit npm install markdown-it-katex 設定は、 nuxt

    nuxtjs で markdown-it-katex を適用する方法
    mitsuyoshi4
    mitsuyoshi4 2019/09/07
    かいた
  • Coq/SSReflect/MathComp による定理証明を読んで(1)

    書における命題、定理、補題、言明について 命題とは: 論理的に真か偽かが定まる主張 定理とは: 命題の内、真であるもの 補題とは: 定理の別名 言明とは: 命題の主張を表す文章や記号の列 形式化とは 私たちが普段使うような文章(言明)を、定理証明支援器(支援系)向けに変換すること。 Coqは、これらの言明の正しさをチェックする定理証明支援器の1つ。 どのように支援器は正しさを保証するか 定理証明支援器の根幹をなす、数学基礎論によって保証する。 これは定理証明支援器が数学基礎論を機械化(ソフトウェア化)したものであることから。 Coqは 型理論 と呼ばれる基礎論に基づいて実装されている。 型理論の基礎 型理論は、その名の通り 型 という概念が根幹をなしている。 a : A と書くと 「型Aの要素a」 という意味を表す。 これは集合でいうところの「集合Aのaという要素」と全く同じ意味である。

    Coq/SSReflect/MathComp による定理証明を読んで(1)
  • A Heavily Commented Linux Kernel Source Code の2章まで読んでみた(1)

    書について A Heavily Commented Linux Kernel Source Code という良質な資料があったため、これを読んだコメントと現代風に読み替えた内容を記していく。 2.1 マイクロコンピュータ の構成 CPUアーキテクチャの1つである 80386 を題材にしている。 ちなみに80386は 16bitCPUアーキテクチャである 80286 の後継である。 よく見るi386はこれが由来。 参考: i386 +------------+ +----+ | Interrupt | +---+ |CMOS| | Controller | |DMA| ... +----+ +------------+ +---+ | | | +-+ | | | +---------------+ | |----+----------+----------+----| Address Li

    A Heavily Commented Linux Kernel Source Code の2章まで読んでみた(1)
    mitsuyoshi4
    mitsuyoshi4 2019/09/01
    かいた
  • Emacsでmarkdownをプレビューする方法をまとめてみた

    Emacsでマークダウンを記述する Emacsでマークダウンを記述及びプレビューする方法はいくつかあります。 一人で開発するだけなのでEmacsの画面でプレビューすれば良いものもあれば、 Githubにアップロードするために、 出来栄えをある程度確認しながら編集したい場合があります。 そこで以下では、上記2つのケースに応じて自身が利用しているコマンドを記述します。 Github等のWebサービスで公開・利用する場合 mdで記述可能なWebサービスを利用するケースでは、 実際に適用されるスタイルやWebブラウザでの出来栄えを見ながら編集したいはずです(少なくとも私は)。 この場合は、markdown-preview-mode をインストールしてプレビューすることで、 Github等で実際にユーザが見るのと近い状態で確認することができます。 emacs にて package-install で

    Emacsでmarkdownをプレビューする方法をまとめてみた
    mitsuyoshi4
    mitsuyoshi4 2019/09/01
    かいた
  • 画像とイラストを判定するサイトを作りました

    サイトについて Twitterに投稿されている画像を、イラストか画像に判定するサイトを作成しました。 https://muk.aintek.xyz/ 目的 今後のWebサイトのインフラはKubernetesによって変化すると考え、GKEでサービスをリリースすることで学習できるのでは、ということで作りました。 使用技術 Front Nuxt.js Vuetify Back Go chi Gqlgen python GRPC Infra GKE MongoDB Atlas フロントはVue.jsで、SSRを目的にNuxt.jsを使用しました。Nuxt.jsのDockerfileはexampleが存在するので、簡単にDockerfileを作れます。 Goはchiを使用してルーティングを行い、GqlgenでGraphqlを実装しています。 TwitterAPIgo-twitterを使用すると

    画像とイラストを判定するサイトを作りました
    mitsuyoshi4
    mitsuyoshi4 2019/07/07
    かいた
  • grpcを用いたgreetingサーバ/クライアント をGo言語で作成する

    gRPCとは gRPCの公式サイトの文章を参照すると以下のような説明があります。 gRPC is a modern open source high performance RPC framework that can run in any environment. It can efficiently connect services in and across data centers with pluggable support for load balancing, tracing, health checking and authentication. It is also applicable in last mile of distributed computing to connect devices, mobile applications and browsers to

    grpcを用いたgreetingサーバ/クライアント をGo言語で作成する
    mitsuyoshi4
    mitsuyoshi4 2019/05/03
    かいた