From a18052f513718150d5e1a7d3197beb80b141cb09 Mon Sep 17 00:00:00 2001 From: Kevin Gurney Date: Wed, 22 Jan 2025 11:47:09 -0500 Subject: [PATCH 1/5] Add simple MATLAB HTTP GET client example. --- http/get_simple/matlab/README.md | 40 +++++++++++++++++++++++ http/get_simple/matlab/client.m | 56 ++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+) create mode 100644 http/get_simple/matlab/README.md create mode 100644 http/get_simple/matlab/client.m diff --git a/http/get_simple/matlab/README.md b/http/get_simple/matlab/README.md new file mode 100644 index 0000000..7735312 --- /dev/null +++ b/http/get_simple/matlab/README.md @@ -0,0 +1,40 @@ + + +# HTTP GET Arrow Data: Simple MATLAB Client Example + +This directory contains a minimal example of an HTTP client implemented in MATLAB. The client: + +1. Sends an HTTP GET request to a server. +2. Receives an HTTP 200 response from the server, with the response body containing an Arrow IPC stream of record batches. +3. Creates an Arrow table from the record batches + +To run this example, first start one of the server examples in the parent directory, then: + +1. Start MATLAB + +```shell +$ matlab +``` + +2. Run the MATLAB script `client.m`: + +```matlab +>> client +``` diff --git a/http/get_simple/matlab/client.m b/http/get_simple/matlab/client.m new file mode 100644 index 0000000..046ea0e --- /dev/null +++ b/http/get_simple/matlab/client.m @@ -0,0 +1,56 @@ +% Licensed to the Apache Software Foundation (ASF) under one +% or more contributor license agreements. See the NOTICE file +% distributed with this work for additional information +% regarding copyright ownership. The ASF licenses this file +% to you under the Apache License, Version 2.0 (the +% "License"); you may not use this file except in compliance +% with the License. You may obtain a copy of the License at +% +% http://www.apache.org/licenses/LICENSE-2.0 +% +% Unless required by applicable law or agreed to in writing, +% software distributed under the License is distributed on an +% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +% KIND, either express or implied. See the License for the +% specific language governing permissions and limitations +% under the License. + +% The address of the local HTTP server +% which returns Arrow IPC Stream responses. +server = "http://localhost:8008"; + +% Diagnostic output. +disp("Reading Arrow IPC Stream from " + server + "..."); + +% Start timing. +tic; + +% Make an HTTP GET request to the local server +% to fetch an Arrow IPC Stream and read all the +% data into memory as a byte (uint8) array. +options = weboptions(ContentType="binary"); +bytes = webread(server, options); + +% Construct an Arrow RecordBatchStreamReader from the in-memory bytes. +reader = arrow.io.ipc.RecordBatchStreamReader.fromBytes(bytes); + +% Read an Arrow table from the in-memory bytes. +arrowTable = reader.readTable(); + +% Stop timing. +time = toc; +% Round elapsed time to two decimal places. +time = round(time, 2); + +% Number of bytes received. +nbytes = length(bytes); + +% Diagnostic output. +disp("DONE ✔"); +disp("---------------"); +disp("Results") +disp("---------------"); +disp("Time (s): " + string(time)); +disp("Num Bytes: " + string(nbytes)); +disp("Num Rows:" + string(arrowTable.NumRows)); +disp("Num Columns:" + string(arrowTable.NumColumns)); \ No newline at end of file From bc357462319f964f31885de3ae79bd6061f444e1 Mon Sep 17 00:00:00 2001 From: Kevin Gurney Date: Wed, 22 Jan 2025 11:54:39 -0500 Subject: [PATCH 2/5] Update README.md to run `client` script in "batch mode". --- http/get_simple/matlab/README.md | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/http/get_simple/matlab/README.md b/http/get_simple/matlab/README.md index 7735312..24f9e0d 100644 --- a/http/get_simple/matlab/README.md +++ b/http/get_simple/matlab/README.md @@ -27,14 +27,8 @@ This directory contains a minimal example of an HTTP client implemented in MATLA To run this example, first start one of the server examples in the parent directory, then: -1. Start MATLAB +Run the MATLAB `client` script in "batch mode": ```shell -$ matlab -``` - -2. Run the MATLAB script `client.m`: - -```matlab ->> client +$ matlab -batch client ``` From f8d0f299c4c2289c657a26587b09f1c120273311 Mon Sep 17 00:00:00 2001 From: Kevin Gurney Date: Wed, 22 Jan 2025 12:07:41 -0500 Subject: [PATCH 3/5] Fix time string formatting to always include two decimal places. --- http/get_simple/matlab/client.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/http/get_simple/matlab/client.m b/http/get_simple/matlab/client.m index 046ea0e..9364da4 100644 --- a/http/get_simple/matlab/client.m +++ b/http/get_simple/matlab/client.m @@ -50,7 +50,7 @@ disp("---------------"); disp("Results") disp("---------------"); -disp("Time (s): " + string(time)); +disp("Time (s): " + sprintf("%.2f", time)); disp("Num Bytes: " + string(nbytes)); disp("Num Rows:" + string(arrowTable.NumRows)); -disp("Num Columns:" + string(arrowTable.NumColumns)); \ No newline at end of file +disp("Num Columns:" + string(arrowTable.NumColumns)); From 5d6c31d84c981e7aa12e2a3f6174716cf7da2600 Mon Sep 17 00:00:00 2001 From: Kevin Gurney Date: Wed, 22 Jan 2025 16:29:14 -0500 Subject: [PATCH 4/5] Update http/get_simple/matlab/README.md Co-authored-by: Ian Cook --- http/get_simple/matlab/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/http/get_simple/matlab/README.md b/http/get_simple/matlab/README.md index 24f9e0d..d6f575a 100644 --- a/http/get_simple/matlab/README.md +++ b/http/get_simple/matlab/README.md @@ -29,6 +29,6 @@ To run this example, first start one of the server examples in the parent direct Run the MATLAB `client` script in "batch mode": -```shell -$ matlab -batch client +```sh +matlab -batch client ``` From 479d34fc9b5225278ce7529c840aebd55e2f07e8 Mon Sep 17 00:00:00 2001 From: Kevin Gurney Date: Wed, 22 Jan 2025 16:29:24 -0500 Subject: [PATCH 5/5] Update http/get_simple/matlab/client.m Co-authored-by: Ian Cook --- http/get_simple/matlab/client.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/http/get_simple/matlab/client.m b/http/get_simple/matlab/client.m index 9364da4..995413b 100644 --- a/http/get_simple/matlab/client.m +++ b/http/get_simple/matlab/client.m @@ -15,8 +15,8 @@ % specific language governing permissions and limitations % under the License. -% The address of the local HTTP server -% which returns Arrow IPC Stream responses. +% The address of the HTTP server that +% returns Arrow IPC Stream responses. server = "http://localhost:8008"; % Diagnostic output.