JavaScript:掃き出し法による逆行列の計算

今回は、掃き出し法(Gaussian elimination method, row reduction algorithm)を使って、正方行列の逆行列を計算するプログラムを紹介します。 但し、線形方程式を解くだけなら、こちらの記事 C++ vs Python vs JavaScript vs Julia のGaussの消去法を使っ…

Bun vs Node.js

今回は、最近注目のBunとNode.jsの処理速度をGaussの消去法を使って比較しました。 より正確に言うと、それらに搭載されているJavaScriptエンジンのJavaScriptCoreとV8の比較です。 結果は表1のようになりました。Bun(JavaScriptCore)は、Node.js(V8)よ…

C++ vs Python vs JavaScript vs Julia

今回は、Gaussの消去法を使って、C++、Python、JavaScript、Juliaの計算時間を計測しました。Pythonに関しては、JITコンパイラであるNumba無しと有りでどうなるかを評価しました。また、Numbaで@numba.jitを付けた関数を2回以上呼び出した場合、1回目と2…

JavaScriptで字句解析

関数の再帰呼び出しを使った簡易の字句解析器です。対応している字句は下記のようになります。 〈対応している字句〉 - 空白文字 - セパレータ(,.:;(){}[]) - 演算子(=<>!&|+\-*/%)※2回連続もOK:+=, +>, %& - 数値(12, 34.56, 78.) - 文字列("abcde…

EmscriptenでC/C++をWebAssemblyにコンパイルする

ここではEmscriptenを使ってC/C++をWebAssembly(.wasm)にコンパイルし、WASMモジュール(動的ライブラリ)やスタンドアロンWASMを作成する方法について紹介します。 ♦ Emscripten SDKのインストール まず最初に下記のツールをインストールします。次に公式…

Node.js:CSVファイルを読み込む方法

今回は、Node.js の標準モジュールだけを使ってCSVファイルを読み込み、指定した行(row)と列(column)を抽出するプログラムを紹介します。 csv.mjs import * as fs from "fs"; console.log(JSON.stringify(csv("sample.csv", 1).data)); console.log(csv(…

NectarJSを使ってJavaScriptを事前コンパイルする

注意!下記のプログラムを再度実行したところ、コンパイルエラーが発生しました。以前は正常に動作したのですが??? (2021年3月13日) 今日は NectarJS の紹介です。私の知る限りでは、NectarJS は JavaScriptコードをマシンコード(バイナリコード)に事…

GraalVMを使ってJavaScriptコードを実行する

今日は GraalVM の紹介です。 GraalVM には JavaScriptエンジン GraalJS が搭載されており、今回はこの GraalJS を利用して JavaScriptコードを実行します。 結論から言うと、Google V8 を搭載した Node.js に比べて処理速度が非常に遅いです。 〈インストー…

JavaScript:Web Speech API 入門

Web Speech API のサンプルプログラムです。ブラウザは Chrome をご利用ください。 webspeech.html <html lang="ja"> <head> <meta charset="utf-8"> <title>Web Speech API</title> </head> <body> <style> #Checkbox[type="checkbox"] { display:none; } #Checkbox + label:before { color:gray; content:"\25c9"; cursor:pointer; f…</body></html>

Go:多次元スライスの作成

ここでは、Go で多次元スライス(multidiminsional slice in Golang)を作成する方法とスライスを関数に渡す方法について紹介します。 slice.go package main import "fmt" func main() { const N1 = 10 const N2 = 20 const N3 = 30 /* 1次元スライス(0で…

WindowsにClangをインストールする手順

MSYS2 のパッケージマネージャー Pacman を使うので、まず MSYS2 をインストールします。次に C:\msys64\msys2_shell.cmd をダブルクリックして MSYS2 を起動し、下記のように入力すれば、Mingw-w64 と Clang をインストールすることができます。これにより…

WebAssembly:JavaScriptの配列をC/C++の関数に渡す

配列の要素の総和を計算する関数を例にとって、JavaScript の配列を C/C++ の関数に渡す方法について紹介します。 今回、WebAssembly にコンパイルするツールとして Emscripten SDK と WebAssembly Studio を使っていますが、ツールによって配列の渡し方が異…

AssemblyScriptを使ってTypeScriptをWebAssemblyにコンパイルする

今回は、AssemblyScript を使って TypeScript(.ts)を WebAssembly(.wasm)にコンパイルし、それを Node.js で実行するやり方について紹介します。 最初に結論を言っておきます。Gaussの消去法で連立一次方程式を解くプログラムを使って、C から生成した W…

WebAssembly Studio でコンパイルする手順

WebAssembly Studio は Web上で WebAssembly の開発(デバッグ、コンパイル、実行)が行える IDE です。 ここでは、WebAssembly Studio を使って、C(.c)と TypeScript(.ts)で作成した関数を WebAssembly(.wasm)にコンパイルし、それらをブラウザ上の J…

Node.js+Express+Socket.IO入門

Socket.IO を使うと双方向の非同期通信が可能になります。今回はその入門編ということで、HTML の input 要素に入力した文字列をサーバに送信し、それをサーバで受信し、そのデータを再びクライアントに送信するプログラムを作成したので紹介します。Express…

AjaxとNode.js+Expressの連携

今回は、HTML の input 要素に二つの数値を入力し、それらを POST でサーバに送信し、Node.js + Express で受け取って、それらの加算を行い、その結果をクライアントに返すプログラムを紹介します。とても簡単です^^ ♦ Express のインストール(Windows) …

JavaScript:ドラッグ&ドロップでファイルを読み込む方法

テキストファイルをテキストエリアにドラッグ&ドロップすると、ファイルの内容がテキストエリアに表示されます。 以下のテキストエリアで試すことができます。(Shift_JIS 以外でエンコードされていると文字化けするので注意してください) 〈テキストエリ…

JavaScript:文字列をファイルに保存する(書き込む)方法

Blob(binary large object)と a 要素を使って文字列(テキストデータ)をファイルに保存する関数 saveAsText を作成したので紹介します。もっと簡単な方法、readAsText があるのだから writeAsText のような関数もあるのではないかと世界中を探したのです…

Swift:正規表現による文字列の抽出と置換

ここでは正規表現を使って、含有(include)、抽出(extractAll)、置換(replaceAll)を行う関数を紹介します。 これらの関数は、このページ末尾の“参考サイト”から集めてきたものです。尚、関数名や引数名は変えています。 また、関数 replaceAllByRule は…

C++:多態性と関数の多重定義

ここではC++による多態性と関数の多重定義の例を紹介します。多態性はオブジェクト指向プログラミングにおける素晴らしい技法の一つです。多態性を利用すると同じ関数名でオブジェクトに応じたオブジェクトの操作が可能になります。一方、多態性が利用できな…

Swift:多次元配列

Swiftによる多次元配列(multidimensional array)の作り方です。 以下のプログラムで、a1, a2, a3 は空配列(empty array)による初期化、b1, b2, b3 は要素数と初期値を指定した初期化です。 multidimensional_array.swift let n1 = 2 let n2 = 3 let n3 =…

Swift:VaporによるSQLiteの操作(Ubuntu)

ここでは、Vapor を使って SQLite を操作する方法(CRUD)を紹介します。モジュールは FluentSQLite を使います。 SQLite3 のインストールとデータベースの作成 まず、SQLite3 をインストールします。Swift や Vapor Toolbox のインストールは、Swift:Ajax…

Swift:AjaxとVaporの連携(Ubuntu)

最近、Swift の Web Framework の一つである Vapor を始めました。今回、Ajax と Vapor を連携させるプログラムを作成したので紹介します。 どんなプログラムかというと、HTML のinput要素に二つの数値を入力し、それらを Ajax の post でサーバに送信し、Va…

JavaScript:ポップアップウィンドウの作成

アニメーションを使ってポップアップウィンドウ(ポップアップボックス)を自作する方法を紹介します。 popup1.html <html> <head> <style> .overlay { display:none; position:fixed; top:0; left:0; width:100%; height:100%; background-color:rgba(0, 0, 0, 0.2); padding-t</head></html>…

JavaScript:カレンダーの作成

JavaScript で作成した簡易カレンダーです。 “<”、“>”をクリックすると、月が変わります。 // "; calendar += ""; calendar += "< " calendar += $year + "/" + ("00" + ($month + 1)).slice(-2) calendar += " >" calendar += ""; var week = ["日", "月", …

JavaScript:オブジェクトのメソッドを onclick で呼び出す方法

オブジェクトのメソッドを onclick で呼び出す方法を紹介します。 “++”をクリックすると、数値が増加します。 // プログラムは以下のようになります。 method_call_by_onclick.htm <html> <body> <div id="index"></div> <script> var index1 = new Index(0); var index2 = new Index(0); var index3 = </body></html>…

Java:フレームワークの自作

ここでは、抽象クラスとリフレクションの二通りの方法で超簡易フレームワークを作成する方法を紹介します。 家で例えるなら、フレームワークは骨組みの部分です。言い換えると、共通部分です。同じ骨組みでも内装や外装の異なる家を複数建てたい場合がありま…

Java:リフレクションの使い方

Javaのリフレクションは、実行時に、文字列(変数名や関数名)を通して、変数の読み書きや関数の呼び出しを行うための機能です。 arithmetics.java class Arithmetics { public String attribute; public double add(double x, double y) { return x + y; } …

Java:JARライブラリの作成と使用

1.JARライブラリの作成 D:\jar\pkg1\pkg2\pkg3\Arithmetics.java package pkg1.pkg2.pkg3; public class Arithmetics { public static double add(double x, double y) { return x + y; } } 〈フォルダpkg1の中にあるファイルを全てアーカイブする場合〉 D…

C++:vectorを使った多次元配列の動的確保

下記の vector.cpp は、std::vector を使って多次元配列を動的に確保するためのプログラムです。 vector.cpp #include <iostream> #include <vector> using namespace std; void showVectorSize(vector<double>& v1) { cout << v1.size() << endl; } void showVectorSize(vector<vector<double>>& v2) </vector<double></double></vector></iostream>…