タグ

ブックマーク / zenn.dev (32)

  • 【エフェクトシステムとは一体なんなのか?】なぜ私はHaskellでエフェクトシステムのライブラリを作るに至ったか

    はじめに 記事は、今回筆者が作成したHaskellのエフェクトシステムライブラリの背景を説明するものです。Haskellに触れたことがない読者のために、理解に必要な事柄や文法等は記事中で簡単に説明します。Haskellやライブラリ自体に興味がなくとも、エフェクトシステムの紹介だけでも今後の参考にしていただければ幸いです。 エフェクトシステム エフェクトシステムというプログラミングパラダイムが以前より研究されていました。 これは、プログラムのコード内で起こりうる副作用を分類、タグ付けし、実行時より前に分かるようにするというものです。ここでは、副作用を分類して名前を付けて型として表したものをエフェクト型と呼び、あるコード片が発生させうるすべてのエフェクト型の集合をエフェクト集合と呼ぶことにします。 例えば 1+1 このプログラムのエフェクト集合は空集合{}です。なぜなら、一切の副作用(入出力

    【エフェクトシステムとは一体なんなのか?】なぜ私はHaskellでエフェクトシステムのライブラリを作るに至ったか
    pogin
    pogin 2024/09/02
    ちょうど圏論の地平線読んでたらエフェクト出てたので運命感じる
  • C言語のざんねんなしよう事典

    モダンなプログラミング言語が多数登場した現代においても、C言語は重要な言語です。具体的に言うと、多くのプログラミング言語(あるいは言語ランタイム)がC言語で実装されていたり、OSのAPIはC言語のインターフェース(ABI)で提供されている場合が多かったり、異なるプログラミング言語間で関数呼び出しをしようとするとC言語のABIがベースとなったりします。 そんなC言語ですが、登場時から現代まで、少しずつですが進化を遂げています。その過程では、「この機能は良くなかった」ということが判明し、非推奨になったり削除された機能もあります。この記事では、C言語のそのような「良くなかった」機能を紹介します。 gets 関数 C言語には、誤って使うとバッファオーバーフローなどの問題を引き起こす関数が多数用意されています。例えば、

    C言語のざんねんなしよう事典
    pogin
    pogin 2024/09/01
  • Workware Engineering

    ワークウェア・エンジニアリング

    Workware Engineering
    pogin
    pogin 2024/08/29
    新しい概念が生まれてる?
  • マルスと「熟練が必要なUI」についての議論

    JRの職員がマルスを操作する動画が話題になった。 この動画について、職人性を賞賛する立場と、UIとして問題があるという立場が対立していた。 nobkzさんのこの記事は、「熟練が必要なのはUIとして問題がある」という立場での記述だとおもう。 一連の話題に対して違和感を持ったが、違和感の源泉は明確で、「UIとしてよいかどうか」という立論自体に机上の論理以上のものにならないということもあるが、そもそも「マルスとはどういうシステムなのか」が議論されていないことがおおきい。 わたしもマルスについて名前は知ってはいたものの、具体的にはどういうシステムであるかは知らなかったので、少し調べてみることにした。 マルスについて Twitter(X)で話題になっていたもとの動画はこちらである。 ここだけ取り上げてみて、マルスの良し悪しを論じるのは鉛筆を取り上げて絵の良し悪しを論じるようなものだとおもう。 次の動

    マルスと「熟練が必要なUI」についての議論
    pogin
    pogin 2024/06/12
  • 楕円曲線暗号のための数学6(GLV法と自己準同型写像)

    初めに 今回は、楕円曲線の数学的な性質を用いたスカラー倍算の高速化手法の一つ、GLV法(Gallant-Lambert-Vanstone)を紹介します。 GLV法は小さいマルチスカラー倍算を利用するので、まずそちらから解説しましょう。 マルチスカラー倍算 一般に、楕円曲線の点 P_1, \dots, P_n, 整数 a_1, \dots, a_n が与えられたときに Q=a_1 P_1 + \dots + a_n P_n を求める操作をマルチスカラー倍算 (MSM : multi-scalar multiplication)といいます。 zk-SNARKなどでは大きな n(数千~数万)に対するMSMが現れます。そのアルゴリズムはまたの機会に紹介するとして、ここでは n=2, つまり楕円曲線の点 P_1, P_2 と、整数 x_1, x_2 に対して Q=x_1 P_1 + x_2 P_2

    楕円曲線暗号のための数学6(GLV法と自己準同型写像)
  • 暗号で使われる標数2の体の実装

    多項式の加算 2個の多項式 a と b の加算を考えます。多項式の加算は同じ次数の係数同士を足したものでした。 a+b=(a_7 X^7 + \cdots + a_0)+(b_7 X^7 + \cdots + b_0) = (a_7 + b_7)X^7 + \cdots + (a_0+b_0). 各係数は 𝔽_2 の要素なので加算は排他的論理和です。それをビットごとにすればよいので、結局整数として排他的論理和を取ればよいです。引き算もaddと同じですね。 typedef uint8_t K; K add(K a, K b) { return a ^ b; } K sub(K a, K b) { return add(a, b); } 多項式の乗算 まずはナイーブな実装から考えましょう。 多項式 a と b を掛けた結果 c=ab を f=X^8+X^4+X^3+X+1 で割ります。f が

    暗号で使われる標数2の体の実装
  • RustでWasm Runtimeを実装する

    Rustで"Hello World"を出力できる小さなWasm Runtimeをゼロから実装して、WasmとWASIの動作原理を理解するです。

    RustでWasm Runtimeを実装する
  • それでも私が<wbr>でなくinline-blockで改行調整をする、たった1つの理由

    inline-block を使う理由、それは 入れ子構造を作れることにより、改行位置の優先順位をつけられるから! 詳しくは以降で説明します。 (前提)そもそも改行調整ってなんの話? このタイトルを見て記事を開いた方であれば知っていると思いますが、一応説明です。 スペースで単語が区切られる欧文とは違い、日語は単語の区切りがないので、改行すべき位置を機械的に判断できず、不自然な位置で改行されてしまうことがあります。そこで、見た目を整えるため、改行すべき位置を指定するための手法が必要になります。 他に詳しい記事がいくつもありますので、詳細はそちらを参照してください。 代表的な改行調整の手法 <wbr> 要素 <wbr>要素は、改行してよい位置を表す要素です。 親要素に対して word-break: keep-all; を指定して基的には改行されないようにすることで、<wbr>要素がある位置で

    それでも私が<wbr>でなくinline-blockで改行調整をする、たった1つの理由
    pogin
    pogin 2024/03/24
  • 【Vue.js】コンパイラってよく聞くけど一体全体なんなんだ!?!?!?

    🚩 初めに こんにちは。Vue Beginners です! 😄 これまでに、Vue の勉強を始める方法や、環境構築の方法などを紹介してきました。 今回はもう少し範囲を絞って、具体的な疑問について解説していきます!!!!! Vue.js について学んでいると、コンパイラ という言葉を見かけることがあると思います。 皆さんは「Vue.js のコンパイラとは何ですか?」と聞かれたら、どのように答えますか? 🤔 意外と戸惑う方も多いのではないでしょうか。 今回はコンパイラとは何なのか、何のためにあるのか、Vue.js のコンパイラとはどういうものなのかについて説明してみます。 それではスタート!!!!!!!!!!! 🤔 コンパイラとは これからの説明は、Vue.js に限った話ではありません。 プログラミング全般で使われる コンパイラ という意味について説明していきます。 コンパイラ (C

    【Vue.js】コンパイラってよく聞くけど一体全体なんなんだ!?!?!?
  • <button>とかのスタイルを消して書き直すときに考えることの備忘録

    all: unset; などを使ってUAスタイルシートを消してまっさらな場所からスタイルを当てるのは気持ちがいいですが、アクセシビリティ等の観点から重要な分岐が見落とされる可能性があります。 ここではChromeのUAスタイルシートを参考に、検討しておいたほうがいい状態をいくつかリストします。 (もちろん、既存のUIコンポーネントライブラリの使用が可能であれば、それが最も堅牢な選択肢でしょう。) 参考 各ブラウザのスタイルシート HTMLのスタイルシート UAスタイルの中には、CSSのカスケードルールの範疇で実装されているものもあれば、レンダリングエンジンの特別処理として書かれていて作者スタイルシートでの上書きが不可能なものもあります。これはブラウザ実装により異なります。 スコープ UIコンポーネントを作るような場面を想定しています。したがって、要素名自体は固定として、その中で見落としがち

    <button>とかのスタイルを消して書き直すときに考えることの備忘録
    pogin
    pogin 2024/01/01
  • C++でジョブシステムを作ってみる(1)

    ジョブシステム (Job System) ゲームエンジンの勉強をしているとジョブシステムの話がよく出てくるので、実際にC++20で実装してみました。マルチスレッドに慣れていないため、正しいアプローチである確信はありません。重要なミスがあったら教えていただけると助かります。 コードは標準ライブラリにある機能は素直に使い、シンプルな実装を目指します。また、この記事の全てのコードはパブリックドメインとします。 これから、3つのステップでジョブシステムを実装していきます。 ジョブを並列実行する機能 ジョブ同士に依存関係を設定する機能 大きなジョブを分割して並列化する機能 この記事ではステップ1の最も基的なジョブシステムを実装することを目標にします。 実装に入る前に、雰囲気を伝えるために、各ステップにおけるインターフェイスを示します。 // スレッド数4としてジョブシステムを作成 JobSyste

    C++でジョブシステムを作ってみる(1)
  • 自動運転カメラの高負荷、その原因はLinuxカーネルのどこに?

    はじめに Turing株式会社ソフトウェアエンジニアの堀ノ内です! 私が所属する自動運転チームでは2024 ~ 2025年に発売予定の自動車に搭載する自動運転システムの開発を行っています。Turingでは車両前方に取り付けられたカメラの画像を入力とし、機械学習モデルが進むべき経路を推論、その経路に沿って実際に車両を動かすための制御信号(ステアリング、アクセル、ブレーキ)をCANで車両に送信することで以下の画像のような自動運転を実現しています。 今回のブログでは以下について記載し、私達のチームの仕事内容について知って頂くきっかけになればと思います。 Turingの自動運転システムの紹介 GMSLカメラの評価と発生した問題 Linuxカーネル及びドライバのデバッグ Turingの自動運転システム Turingでは「カメラ画像入力 → 機械学習モデルで経路を推論 → 車両制御」の流れを実現するた

    自動運転カメラの高負荷、その原因はLinuxカーネルのどこに?
    pogin
    pogin 2023/10/11
  • 社内向け SQLチューニング勉強会を実施しました

    はじめのご挨拶 はじめまして。BEENOSの鈴木です。 普段はBEENOSグループのtenso株式会社でヘルプデスク業務に従事しておりますが、たまにサービス関連のデータベース、MySQLのチューニングや調査などもしております。 今回、普段から触っているMySQLのチューニング勉強会を実施しましたので、その内容を少し公開したいと思います。 勉強会を開催しようとしたきっかけ tenso株式会社の開発チームには、SREチーム(運用チーム)があり、元々は私も所属しておりました。 SREチームに新規メンバーが参入してきたこともあり、改めてデータベースと向き合う人のために、まずはSQLのチューニングを覚えてもらいたいとの要望があり、開催することにしました。 また、BEENOS全体としても開発エンジニアがコードを書くだけでなく、コードに含まれているSQLがどのように動くかを把握しパフォーマンスの良いSQ

    社内向け SQLチューニング勉強会を実施しました
  • RSA署名を正しく理解する

    初めに 「署名とはメッセージのハッシュ値を秘密鍵で暗号化したものであり、検証は署名を公開鍵で復号してハッシュ値と等しいかを確認することである」という説明(×)をよく見かけます。 正しい署名の定義と実際のRSA署名がどのようなものであり、上記説明(×)がなぜよくないのかを理解しましょう。 署名の定義 署名の解説は署名の概要でも解説しましたが、再掲します。 署名(方式)は鍵生成(KeyGen)、署名(Sign)、検証(Verify)の3個のアルゴリズムからなります。 KeyGenではアリスが署名鍵sと検証鍵Sを生成します。署名鍵sは自分だけの秘密の値なので秘密鍵、検証鍵Sは他人に渡して使ってもらう鍵なので公開鍵ともいいます。 Signは署名したいデータmに対して署名鍵sを使って署名と呼ばれるデータσを作ります。 データmと署名σのペアを他人(ボブ)に渡します。 Verifyはボブが検証鍵Sを使

    RSA署名を正しく理解する
  • JavaScriptでconsole.logを使用してませんか?

    はじめに Webフロントエンド開発の学習において、多くの人がまず最初にconsole.logの使い方を学びます。 console.logはデバッグの際に非常に便利なツールですが、JavaScriptにはこれ以外にも多彩なデバッグ機能が存在します。 通常のconsole.logだけでなく、さまざまなconsoleのメソッドを活用することで、デバッグ作業をより効率的に、かつ迅速に進めることができます。 console.log ブラウザの開発者ツールやNode.jsのコンソール上に、渡された引数を表示します

    JavaScriptでconsole.logを使用してませんか?
  • プログラミング初心者がFlutterとchatGPTを使って3週間でアプリを作った話

    イントロ YouTubeを見てて、ふとしたきっかけでプログラミング初心者の自分でもアプリが作れるんじゃないかと思い、3週間で完成させた話を共有しようと思います! これからプログラミングを頑張ってみたい人や、既にエンジニアだけどchatGPT当に開発に役立つのかどうかを知りたい人のお役に立てれば幸いです。 今の時代なら誰でもアプリが簡単に作れます! 自己紹介 自分は3ヶ月前までプログラミングなんて全く触れたことがない人間でした。 しかし、最近流行りのAIchatGPTに関して色々と話を聞いてみると、「もしかしたら自分もchatGPTを使えばアプリが作れるんじゃないか!?」と思うようになってきました。 LINEの「AIチャットくん」なんかもchatGPTを利用して一日で作られたらしいですね。 でもあれは元々アプリ開発経験のある人たちが作ったものなので、「当にプログラミング初心者でもch

    プログラミング初心者がFlutterとchatGPTを使って3週間でアプリを作った話
  • 運用出来るWebアプリケーションの作り方

    はじめに 先日、下記のようなツイートを見つけて、そういえば趣味個人開発してたときには然程気にしてなかったけど、仕事で運用するようになって先輩たちから学んだり自分で身につけたチップスってちょこちょこあるよねー、とふと思ったので、Webアプリケーション開発に関わるものをいくつかまとめてみました。 特に体系的/網羅的という程でもないですし、最近はFWや色々な仕組みでカバーされてるものも多いですが備忘録として。 Tips 機械が読めるログを作る これは割と重要なのですが、ログは人間が読むものではなく機械が読むものです。それはZabbixだったりDatadogだったりSplunkだったりgrep/awkだったりツールは何でも良いのですが、古の時代はさておき現代ではログは機械が読めることが最重要です。 まず大前提として構造化されている必要があります。言うまでもないですが「フリーフォーマット」のログの

    運用出来るWebアプリケーションの作り方
  • Ajaxから始まった一つの時代の終わり

    最近の流れを見ていての感想文なので、ideaとして投稿します。筆者のバックグラウンドとしては、Remixの商業記事を書いたり、App Routerの商業記事を書いたりしている人です。 さて、筆者は2022年の秋から、社内システムではありますがRemixをプロダクション運用しています。また、Next.jsのApp Routerについても、パラダイムとしてはRemixにインスパイアされた部分が多い[1]おかげで、順調にキャッチアップできています。 RemixとApp Routerは、ルーティングとデータフェッチを高度に統合しており、Progressively Enhanced SPA(PESPA)と呼ばれることもあるそうです。PESPAについては、次の記事が話題になりましたね。 このPESPAであるRemixを実運用する中で、フレームワークの手触りが近年触ってきたものと大きく違っている点があっ

    Ajaxから始まった一つの時代の終わり
  • Error, Defect, Fault, Failureの定義と解釈

    ソフトウェア設計を行う場合、必ずエラーや障害などの用語が飛び交うことがあるが認識がずれていることが多いので、以下に簡単にまとめてみた。 ソフトウェアの非正常を表す概念 ソフトウェアのエラーや障害などの非正常を表す概念の定義をいくつかピックアップしてみた。 JIS X 0014:1999の定義 出典: ソフトウェア品質知識体系ガイド -SQuBOK Guide-(第2版) 誤差・誤り(error) 計算,観測もしくは測定された値または状態と,真の,指定されたもしくは理論的に正しい値または状態との間の相違。 障害(fault) 要求された機能を遂行する機能単位の能力の,縮退または喪失を引き起こす,異常な状態。 故障(failure) 要求された機能を遂行する,機能単位の能力がなくなること。 JIS X 0014では、意図しない結果を引き起こす人間の行為は、「間違い、人的過誤(mistake,

    Error, Defect, Fault, Failureの定義と解釈
  • Rust を ChatGPT だけで勉強する【実験記録】

    C++ 経験者が、ChatGPT との対話だけで Rust を学んでみる実験の記録です。 期待した回答が得られなかった際には、質問文を変えたり、回答を再生成したりしています。 AI の回答には不正確な情報が含まれている可能性もあります。不正確な技術情報が拡散しないよう、AI の回答は画像で掲載しています。

    Rust を ChatGPT だけで勉強する【実験記録】